1
0
Fork 0
mirror of https://gitlab.com/bramw/baserow.git synced 2025-04-07 14:25:37 +00:00

Resolve "Duplicate view filtered on a collaborator"

This commit is contained in:
Davide Silvestri 2025-03-11 14:51:04 +01:00
parent 8f9a30d84f
commit 7c69671923
4 changed files with 62 additions and 9 deletions
backend
src/baserow/contrib/database/views
tests/baserow/contrib/database
changelog/entries/unreleased/bug

View file

@ -874,7 +874,9 @@ class ViewHandler(metaclass=baserow_trace_methods(tracer)):
view_type = view_type_registry.get_by_model(original_view)
cache = {}
cache = {
"workspace_id": workspace.id,
}
# Use export/import to duplicate the view easily
serialized = view_type.export_serialized(original_view, cache)
@ -896,6 +898,7 @@ class ViewHandler(metaclass=baserow_trace_methods(tracer)):
# the mapping remain the same. They haven't change because we're only
# reimporting the view and not the table, fields, etc.
id_mapping = {
"workspace_id": workspace.id,
"database_fields": MirrorDict(),
"database_field_select_options": MirrorDict(),
}

View file

@ -1,6 +1,7 @@
import json
import pytest
from pytest_unordered import unordered
from rest_framework import serializers
from baserow.contrib.database.api.rows.serializers import (
@ -432,10 +433,12 @@ def test_get_row_serializer_with_user_field_names(data_fixture):
"value": "E",
},
],
"formula_multiple_collaborators": [
{"id": u2.id, "name": u2.first_name},
{"id": u3.id, "name": u3.first_name},
],
"formula_multiple_collaborators": unordered(
[
{"id": u2.id, "name": u2.first_name},
{"id": u3.id, "name": u3.first_name},
]
),
"formula_text": "test FORMULA",
"count": "3",
"rollup": "-122.222",
@ -449,10 +452,12 @@ def test_get_row_serializer_with_user_field_names(data_fixture):
"multiple_collaborators_lookup": [
{
"id": 1,
"value": [
{"id": u2.id, "name": u2.first_name},
{"id": u3.id, "name": u3.first_name},
],
"value": unordered(
[
{"id": u2.id, "name": u2.first_name},
{"id": u3.id, "name": u3.first_name},
]
),
},
{
"id": 2,

View file

@ -4383,3 +4383,40 @@ def test_get_queryset_apply_sorts(data_fixture):
row_ids = [row.id for row in rows]
assert row_ids == [row_3.id, row_2.id, row_1.id]
@pytest.mark.django_db
def test_can_duplicate_views_with_multiple_collaborator_has_filter(data_fixture):
user_1 = data_fixture.create_user()
user_2 = data_fixture.create_user()
workspace = data_fixture.create_workspace(users=[user_1, user_2])
database = data_fixture.create_database_application(workspace=workspace)
table = data_fixture.create_database_table(database=database)
field = data_fixture.create_multiple_collaborators_field(table=table)
grid = data_fixture.create_public_password_protected_grid_view(table=table, order=1)
view_filter = data_fixture.create_view_filter(
view=grid, field=field, type="multiple_collaborators_has", value=user_1.id
)
rows = RowHandler().force_create_rows(
user_1,
table,
[
{field.db_column: []},
{field.db_column: [{"id": user_1.id, "name": user_1.first_name}]},
{field.db_column: [{"id": user_2.id, "name": user_2.first_name}]},
],
)
results = ViewHandler().get_queryset(grid)
assert len(results) == 1
assert list(getattr(results[0], field.db_column).values_list("id", flat=True)) == [
user_1.id
]
new_grid = ViewHandler().duplicate_view(user_1, grid)
new_results = ViewHandler().get_queryset(new_grid)
assert len(new_results) == 1
assert list(
getattr(new_results[0], field.db_column).values_list("id", flat=True)
) == [user_1.id]

View file

@ -0,0 +1,8 @@
{
"type": "bug",
"message": "Fixed a bug that prevented duplicating views filtered by a collaborator correctly.",
"domain": "database",
"issue_number": 3017,
"bullet_points": [],
"created_at": "2025-03-10"
}