diff --git a/CHANGELOG.md b/CHANGELOG.md index 48847c3d..5e28fcbe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ and this project adheres to ### Added - ✨(backend) include ancestors accesses on document accesses list view # 846 -- ✨(backend) add ancestors links definitions to document abilities #846 +- ✨(backend) add ancestors links reach and role to document API #846 - ✨(frontend) add customization for translations #857 - ✨(frontend) Duplicate a doc #1078 - 📝(project) add troubleshoot doc #1066 diff --git a/src/backend/core/api/serializers.py b/src/backend/core/api/serializers.py index cbbfb3b4..701733e6 100644 --- a/src/backend/core/api/serializers.py +++ b/src/backend/core/api/serializers.py @@ -179,6 +179,8 @@ class ListDocumentSerializer(serializers.ModelSerializer): fields = [ "id", "abilities", + "ancestors_link_reach", + "ancestors_link_role", "created_at", "creator", "depth", @@ -197,6 +199,8 @@ class ListDocumentSerializer(serializers.ModelSerializer): read_only_fields = [ "id", "abilities", + "ancestors_link_reach", + "ancestors_link_role", "created_at", "creator", "depth", @@ -252,6 +256,8 @@ class DocumentSerializer(ListDocumentSerializer): fields = [ "id", "abilities", + "ancestors_link_reach", + "ancestors_link_role", "content", "created_at", "creator", @@ -272,6 +278,8 @@ class DocumentSerializer(ListDocumentSerializer): read_only_fields = [ "id", "abilities", + "ancestors_link_reach", + "ancestors_link_role", "created_at", "creator", "depth", diff --git a/src/backend/core/tests/documents/test_api_documents_children_list.py b/src/backend/core/tests/documents/test_api_documents_children_list.py index 0267345b..26c41204 100644 --- a/src/backend/core/tests/documents/test_api_documents_children_list.py +++ b/src/backend/core/tests/documents/test_api_documents_children_list.py @@ -35,6 +35,8 @@ def test_api_documents_children_list_anonymous_public_standalone( "results": [ { "abilities": child1.get_abilities(AnonymousUser()), + "ancestors_link_reach": "public", + "ancestors_link_role": document.link_role, "created_at": child1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child1.creator.id), "depth": 2, @@ -53,6 +55,8 @@ def test_api_documents_children_list_anonymous_public_standalone( }, { "abilities": child2.get_abilities(AnonymousUser()), + "ancestors_link_reach": "public", + "ancestors_link_role": document.link_role, "created_at": child2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child2.creator.id), "depth": 2, @@ -101,6 +105,8 @@ def test_api_documents_children_list_anonymous_public_parent(django_assert_num_q "results": [ { "abilities": child1.get_abilities(AnonymousUser()), + "ancestors_link_reach": child1.ancestors_link_reach, + "ancestors_link_role": child1.ancestors_link_role, "created_at": child1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child1.creator.id), "depth": 4, @@ -119,6 +125,8 @@ def test_api_documents_children_list_anonymous_public_parent(django_assert_num_q }, { "abilities": child2.get_abilities(AnonymousUser()), + "ancestors_link_reach": child2.ancestors_link_reach, + "ancestors_link_role": child2.ancestors_link_role, "created_at": child2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child2.creator.id), "depth": 4, @@ -186,6 +194,8 @@ def test_api_documents_children_list_authenticated_unrelated_public_or_authentic "results": [ { "abilities": child1.get_abilities(user), + "ancestors_link_reach": reach, + "ancestors_link_role": document.link_role, "created_at": child1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child1.creator.id), "depth": 2, @@ -204,6 +214,8 @@ def test_api_documents_children_list_authenticated_unrelated_public_or_authentic }, { "abilities": child2.get_abilities(user), + "ancestors_link_reach": reach, + "ancestors_link_role": document.link_role, "created_at": child2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child2.creator.id), "depth": 2, @@ -257,6 +269,8 @@ def test_api_documents_children_list_authenticated_public_or_authenticated_paren "results": [ { "abilities": child1.get_abilities(user), + "ancestors_link_reach": child1.ancestors_link_reach, + "ancestors_link_role": child1.ancestors_link_role, "created_at": child1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child1.creator.id), "depth": 4, @@ -275,6 +289,8 @@ def test_api_documents_children_list_authenticated_public_or_authenticated_paren }, { "abilities": child2.get_abilities(user), + "ancestors_link_reach": child2.ancestors_link_reach, + "ancestors_link_role": child2.ancestors_link_role, "created_at": child2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child2.creator.id), "depth": 4, @@ -347,6 +363,7 @@ def test_api_documents_children_list_authenticated_related_direct( ) assert response.status_code == 200 + link_role = None if document.link_reach == "restricted" else document.link_role assert response.json() == { "count": 2, "next": None, @@ -354,6 +371,8 @@ def test_api_documents_children_list_authenticated_related_direct( "results": [ { "abilities": child1.get_abilities(user), + "ancestors_link_reach": document.link_reach, + "ancestors_link_role": link_role, "created_at": child1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child1.creator.id), "depth": 2, @@ -372,6 +391,8 @@ def test_api_documents_children_list_authenticated_related_direct( }, { "abilities": child2.get_abilities(user), + "ancestors_link_reach": document.link_reach, + "ancestors_link_role": link_role, "created_at": child2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child2.creator.id), "depth": 2, @@ -428,6 +449,8 @@ def test_api_documents_children_list_authenticated_related_parent( "results": [ { "abilities": child1.get_abilities(user), + "ancestors_link_reach": "restricted", + "ancestors_link_role": None, "created_at": child1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child1.creator.id), "depth": 4, @@ -446,6 +469,8 @@ def test_api_documents_children_list_authenticated_related_parent( }, { "abilities": child2.get_abilities(user), + "ancestors_link_reach": "restricted", + "ancestors_link_role": None, "created_at": child2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child2.creator.id), "depth": 4, @@ -554,6 +579,8 @@ def test_api_documents_children_list_authenticated_related_team_members( "results": [ { "abilities": child1.get_abilities(user), + "ancestors_link_reach": "restricted", + "ancestors_link_role": None, "created_at": child1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child1.creator.id), "depth": 2, @@ -572,6 +599,8 @@ def test_api_documents_children_list_authenticated_related_team_members( }, { "abilities": child2.get_abilities(user), + "ancestors_link_reach": "restricted", + "ancestors_link_role": None, "created_at": child2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child2.creator.id), "depth": 2, diff --git a/src/backend/core/tests/documents/test_api_documents_descendants.py b/src/backend/core/tests/documents/test_api_documents_descendants.py index c3e7000b..fdfd7258 100644 --- a/src/backend/core/tests/documents/test_api_documents_descendants.py +++ b/src/backend/core/tests/documents/test_api_documents_descendants.py @@ -32,6 +32,8 @@ def test_api_documents_descendants_list_anonymous_public_standalone(): "results": [ { "abilities": child1.get_abilities(AnonymousUser()), + "ancestors_link_reach": "public", + "ancestors_link_role": document.link_role, "created_at": child1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child1.creator.id), "depth": 2, @@ -50,6 +52,10 @@ def test_api_documents_descendants_list_anonymous_public_standalone(): }, { "abilities": grand_child.get_abilities(AnonymousUser()), + "ancestors_link_reach": "public", + "ancestors_link_role": "editor" + if (child1.link_reach == "public" and child1.link_role == "editor") + else document.link_role, "created_at": grand_child.created_at.isoformat().replace("+00:00", "Z"), "creator": str(grand_child.creator.id), "depth": 3, @@ -68,6 +74,8 @@ def test_api_documents_descendants_list_anonymous_public_standalone(): }, { "abilities": child2.get_abilities(AnonymousUser()), + "ancestors_link_reach": "public", + "ancestors_link_role": document.link_role, "created_at": child2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child2.creator.id), "depth": 2, @@ -115,6 +123,8 @@ def test_api_documents_descendants_list_anonymous_public_parent(): "results": [ { "abilities": child1.get_abilities(AnonymousUser()), + "ancestors_link_reach": "public", + "ancestors_link_role": grand_parent.link_role, "created_at": child1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child1.creator.id), "depth": 4, @@ -133,6 +143,8 @@ def test_api_documents_descendants_list_anonymous_public_parent(): }, { "abilities": grand_child.get_abilities(AnonymousUser()), + "ancestors_link_reach": "public", + "ancestors_link_role": grand_child.ancestors_link_role, "created_at": grand_child.created_at.isoformat().replace("+00:00", "Z"), "creator": str(grand_child.creator.id), "depth": 5, @@ -151,6 +163,8 @@ def test_api_documents_descendants_list_anonymous_public_parent(): }, { "abilities": child2.get_abilities(AnonymousUser()), + "ancestors_link_reach": "public", + "ancestors_link_role": grand_parent.link_role, "created_at": child2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child2.creator.id), "depth": 4, @@ -201,7 +215,9 @@ def test_api_documents_descendants_list_authenticated_unrelated_public_or_authen client.force_login(user) document = factories.DocumentFactory(link_reach=reach) - child1, child2 = factories.DocumentFactory.create_batch(2, parent=document) + child1, child2 = factories.DocumentFactory.create_batch( + 2, parent=document, link_reach="restricted" + ) grand_child = factories.DocumentFactory(parent=child1) factories.UserDocumentAccessFactory(document=child1) @@ -217,6 +233,8 @@ def test_api_documents_descendants_list_authenticated_unrelated_public_or_authen "results": [ { "abilities": child1.get_abilities(user), + "ancestors_link_reach": reach, + "ancestors_link_role": document.link_role, "created_at": child1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child1.creator.id), "depth": 2, @@ -235,6 +253,8 @@ def test_api_documents_descendants_list_authenticated_unrelated_public_or_authen }, { "abilities": grand_child.get_abilities(user), + "ancestors_link_reach": reach, + "ancestors_link_role": document.link_role, "created_at": grand_child.created_at.isoformat().replace("+00:00", "Z"), "creator": str(grand_child.creator.id), "depth": 3, @@ -253,6 +273,8 @@ def test_api_documents_descendants_list_authenticated_unrelated_public_or_authen }, { "abilities": child2.get_abilities(user), + "ancestors_link_reach": reach, + "ancestors_link_role": document.link_role, "created_at": child2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child2.creator.id), "depth": 2, @@ -289,7 +311,9 @@ def test_api_documents_descendants_list_authenticated_public_or_authenticated_pa grand_parent = factories.DocumentFactory(link_reach=reach) parent = factories.DocumentFactory(parent=grand_parent, link_reach="restricted") document = factories.DocumentFactory(link_reach="restricted", parent=parent) - child1, child2 = factories.DocumentFactory.create_batch(2, parent=document) + child1, child2 = factories.DocumentFactory.create_batch( + 2, parent=document, link_reach="restricted" + ) grand_child = factories.DocumentFactory(parent=child1) factories.UserDocumentAccessFactory(document=child1) @@ -304,6 +328,8 @@ def test_api_documents_descendants_list_authenticated_public_or_authenticated_pa "results": [ { "abilities": child1.get_abilities(user), + "ancestors_link_reach": reach, + "ancestors_link_role": grand_parent.link_role, "created_at": child1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child1.creator.id), "depth": 4, @@ -322,6 +348,8 @@ def test_api_documents_descendants_list_authenticated_public_or_authenticated_pa }, { "abilities": grand_child.get_abilities(user), + "ancestors_link_reach": reach, + "ancestors_link_role": grand_parent.link_role, "created_at": grand_child.created_at.isoformat().replace("+00:00", "Z"), "creator": str(grand_child.creator.id), "depth": 5, @@ -340,6 +368,8 @@ def test_api_documents_descendants_list_authenticated_public_or_authenticated_pa }, { "abilities": child2.get_abilities(user), + "ancestors_link_reach": reach, + "ancestors_link_role": grand_parent.link_role, "created_at": child2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child2.creator.id), "depth": 4, @@ -414,6 +444,8 @@ def test_api_documents_descendants_list_authenticated_related_direct(): "results": [ { "abilities": child1.get_abilities(user), + "ancestors_link_reach": child1.ancestors_link_reach, + "ancestors_link_role": child1.ancestors_link_role, "created_at": child1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child1.creator.id), "depth": 2, @@ -432,6 +464,8 @@ def test_api_documents_descendants_list_authenticated_related_direct(): }, { "abilities": grand_child.get_abilities(user), + "ancestors_link_reach": grand_child.ancestors_link_reach, + "ancestors_link_role": grand_child.ancestors_link_role, "created_at": grand_child.created_at.isoformat().replace("+00:00", "Z"), "creator": str(grand_child.creator.id), "depth": 3, @@ -450,6 +484,8 @@ def test_api_documents_descendants_list_authenticated_related_direct(): }, { "abilities": child2.get_abilities(user), + "ancestors_link_reach": child2.ancestors_link_reach, + "ancestors_link_role": child2.ancestors_link_role, "created_at": child2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child2.creator.id), "depth": 2, @@ -504,6 +540,8 @@ def test_api_documents_descendants_list_authenticated_related_parent(): "results": [ { "abilities": child1.get_abilities(user), + "ancestors_link_reach": child1.ancestors_link_reach, + "ancestors_link_role": child1.ancestors_link_role, "created_at": child1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child1.creator.id), "depth": 4, @@ -522,6 +560,8 @@ def test_api_documents_descendants_list_authenticated_related_parent(): }, { "abilities": grand_child.get_abilities(user), + "ancestors_link_reach": grand_child.ancestors_link_reach, + "ancestors_link_role": grand_child.ancestors_link_role, "created_at": grand_child.created_at.isoformat().replace("+00:00", "Z"), "creator": str(grand_child.creator.id), "depth": 5, @@ -540,6 +580,8 @@ def test_api_documents_descendants_list_authenticated_related_parent(): }, { "abilities": child2.get_abilities(user), + "ancestors_link_reach": child2.ancestors_link_reach, + "ancestors_link_role": child2.ancestors_link_role, "created_at": child2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child2.creator.id), "depth": 4, @@ -640,6 +682,8 @@ def test_api_documents_descendants_list_authenticated_related_team_members( "results": [ { "abilities": child1.get_abilities(user), + "ancestors_link_reach": child1.ancestors_link_reach, + "ancestors_link_role": child1.ancestors_link_role, "created_at": child1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child1.creator.id), "depth": 2, @@ -658,6 +702,8 @@ def test_api_documents_descendants_list_authenticated_related_team_members( }, { "abilities": grand_child.get_abilities(user), + "ancestors_link_reach": grand_child.ancestors_link_reach, + "ancestors_link_role": grand_child.ancestors_link_role, "created_at": grand_child.created_at.isoformat().replace("+00:00", "Z"), "creator": str(grand_child.creator.id), "depth": 3, @@ -676,6 +722,8 @@ def test_api_documents_descendants_list_authenticated_related_team_members( }, { "abilities": child2.get_abilities(user), + "ancestors_link_reach": child2.ancestors_link_reach, + "ancestors_link_role": child2.ancestors_link_role, "created_at": child2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(child2.creator.id), "depth": 2, diff --git a/src/backend/core/tests/documents/test_api_documents_favorite_list.py b/src/backend/core/tests/documents/test_api_documents_favorite_list.py index 28ed3164..8b732753 100644 --- a/src/backend/core/tests/documents/test_api_documents_favorite_list.py +++ b/src/backend/core/tests/documents/test_api_documents_favorite_list.py @@ -59,6 +59,8 @@ def test_api_document_favorite_list_authenticated_with_favorite(): "results": [ { "abilities": document.get_abilities(user), + "ancestors_link_reach": None, + "ancestors_link_role": None, "created_at": document.created_at.isoformat().replace("+00:00", "Z"), "creator": str(document.creator.id), "content": document.content, diff --git a/src/backend/core/tests/documents/test_api_documents_list.py b/src/backend/core/tests/documents/test_api_documents_list.py index 0fc14e6d..6a173f3c 100644 --- a/src/backend/core/tests/documents/test_api_documents_list.py +++ b/src/backend/core/tests/documents/test_api_documents_list.py @@ -63,6 +63,8 @@ def test_api_documents_list_format(): assert results[0] == { "id": str(document.id), "abilities": document.get_abilities(user), + "ancestors_link_reach": None, + "ancestors_link_role": None, "created_at": document.created_at.isoformat().replace("+00:00", "Z"), "creator": str(document.creator.id), "depth": 1, diff --git a/src/backend/core/tests/documents/test_api_documents_retrieve.py b/src/backend/core/tests/documents/test_api_documents_retrieve.py index de7ccaac..11501332 100644 --- a/src/backend/core/tests/documents/test_api_documents_retrieve.py +++ b/src/backend/core/tests/documents/test_api_documents_retrieve.py @@ -61,6 +61,8 @@ def test_api_documents_retrieve_anonymous_public_standalone(): "versions_list": False, "versions_retrieve": False, }, + "ancestors_link_reach": None, + "ancestors_link_role": None, "content": document.content, "created_at": document.created_at.isoformat().replace("+00:00", "Z"), "creator": str(document.creator.id), @@ -129,6 +131,8 @@ def test_api_documents_retrieve_anonymous_public_parent(): "versions_list": False, "versions_retrieve": False, }, + "ancestors_link_reach": "public", + "ancestors_link_role": grand_parent.link_role, "content": document.content, "created_at": document.created_at.isoformat().replace("+00:00", "Z"), "creator": str(document.creator.id), @@ -230,6 +234,8 @@ def test_api_documents_retrieve_authenticated_unrelated_public_or_authenticated( "versions_list": False, "versions_retrieve": False, }, + "ancestors_link_reach": None, + "ancestors_link_role": None, "content": document.content, "created_at": document.created_at.isoformat().replace("+00:00", "Z"), "creator": str(document.creator.id), @@ -305,6 +311,8 @@ def test_api_documents_retrieve_authenticated_public_or_authenticated_parent(rea "versions_list": False, "versions_retrieve": False, }, + "ancestors_link_reach": reach, + "ancestors_link_role": grand_parent.link_role, "content": document.content, "created_at": document.created_at.isoformat().replace("+00:00", "Z"), "creator": str(document.creator.id), @@ -415,6 +423,8 @@ def test_api_documents_retrieve_authenticated_related_direct(): assert response.json() == { "id": str(document.id), "abilities": document.get_abilities(user), + "ancestors_link_reach": None, + "ancestors_link_role": None, "content": document.content, "creator": str(document.creator.id), "created_at": document.created_at.isoformat().replace("+00:00", "Z"), @@ -490,6 +500,8 @@ def test_api_documents_retrieve_authenticated_related_parent(): "versions_list": True, "versions_retrieve": True, }, + "ancestors_link_reach": "restricted", + "ancestors_link_role": None, "content": document.content, "creator": str(document.creator.id), "created_at": document.created_at.isoformat().replace("+00:00", "Z"), @@ -642,6 +654,8 @@ def test_api_documents_retrieve_authenticated_related_team_members( assert response.json() == { "id": str(document.id), "abilities": document.get_abilities(user), + "ancestors_link_reach": None, + "ancestors_link_role": None, "content": document.content, "created_at": document.created_at.isoformat().replace("+00:00", "Z"), "creator": str(document.creator.id), @@ -704,6 +718,8 @@ def test_api_documents_retrieve_authenticated_related_team_administrators( assert response.json() == { "id": str(document.id), "abilities": document.get_abilities(user), + "ancestors_link_reach": None, + "ancestors_link_role": None, "content": document.content, "created_at": document.created_at.isoformat().replace("+00:00", "Z"), "creator": str(document.creator.id), @@ -766,6 +782,8 @@ def test_api_documents_retrieve_authenticated_related_team_owners( assert response.json() == { "id": str(document.id), "abilities": document.get_abilities(user), + "ancestors_link_reach": None, + "ancestors_link_role": None, "content": document.content, "created_at": document.created_at.isoformat().replace("+00:00", "Z"), "creator": str(document.creator.id), diff --git a/src/backend/core/tests/documents/test_api_documents_trashbin.py b/src/backend/core/tests/documents/test_api_documents_trashbin.py index cafbbd6b..2e4c9c13 100644 --- a/src/backend/core/tests/documents/test_api_documents_trashbin.py +++ b/src/backend/core/tests/documents/test_api_documents_trashbin.py @@ -103,6 +103,8 @@ def test_api_documents_trashbin_format(): "versions_list": True, "versions_retrieve": True, }, + "ancestors_link_reach": None, + "ancestors_link_role": None, "created_at": document.created_at.isoformat().replace("+00:00", "Z"), "creator": str(document.creator.id), "depth": 1, diff --git a/src/backend/core/tests/documents/test_api_documents_tree.py b/src/backend/core/tests/documents/test_api_documents_tree.py index 32de7c4b..ad79d8b9 100644 --- a/src/backend/core/tests/documents/test_api_documents_tree.py +++ b/src/backend/core/tests/documents/test_api_documents_tree.py @@ -32,12 +32,16 @@ def test_api_documents_tree_list_anonymous_public_standalone(django_assert_num_q assert response.status_code == 200 assert response.json() == { "abilities": parent.get_abilities(AnonymousUser()), + "ancestors_link_reach": parent.ancestors_link_reach, + "ancestors_link_role": parent.ancestors_link_role, "children": [ { "abilities": document.get_abilities(AnonymousUser()), "children": [ { "abilities": child.get_abilities(AnonymousUser()), + "ancestors_link_reach": child.ancestors_link_reach, + "ancestors_link_role": child.ancestors_link_role, "children": [], "created_at": child.created_at.isoformat().replace( "+00:00", "Z" @@ -60,6 +64,8 @@ def test_api_documents_tree_list_anonymous_public_standalone(django_assert_num_q "user_role": None, }, ], + "ancestors_link_reach": document.ancestors_link_reach, + "ancestors_link_role": document.ancestors_link_role, "created_at": document.created_at.isoformat().replace("+00:00", "Z"), "creator": str(document.creator.id), "depth": 2, @@ -78,6 +84,8 @@ def test_api_documents_tree_list_anonymous_public_standalone(django_assert_num_q }, { "abilities": sibling1.get_abilities(AnonymousUser()), + "ancestors_link_reach": sibling1.ancestors_link_reach, + "ancestors_link_role": sibling1.ancestors_link_role, "children": [], "created_at": sibling1.created_at.isoformat().replace("+00:00", "Z"), "creator": str(sibling1.creator.id), @@ -97,6 +105,8 @@ def test_api_documents_tree_list_anonymous_public_standalone(django_assert_num_q }, { "abilities": sibling2.get_abilities(AnonymousUser()), + "ancestors_link_reach": sibling2.ancestors_link_reach, + "ancestors_link_role": sibling2.ancestors_link_role, "children": [], "created_at": sibling2.created_at.isoformat().replace("+00:00", "Z"), "creator": str(sibling2.creator.id), @@ -165,15 +175,23 @@ def test_api_documents_tree_list_anonymous_public_parent(): assert response.status_code == 200 expected_tree = { "abilities": grand_parent.get_abilities(AnonymousUser()), + "ancestors_link_reach": grand_parent.ancestors_link_reach, + "ancestors_link_role": grand_parent.ancestors_link_role, "children": [ { "abilities": parent.get_abilities(AnonymousUser()), + "ancestors_link_reach": parent.ancestors_link_reach, + "ancestors_link_role": parent.ancestors_link_role, "children": [ { "abilities": document.get_abilities(AnonymousUser()), + "ancestors_link_reach": document.ancestors_link_reach, + "ancestors_link_role": document.ancestors_link_role, "children": [ { "abilities": child.get_abilities(AnonymousUser()), + "ancestors_link_reach": child.ancestors_link_reach, + "ancestors_link_role": child.ancestors_link_role, "children": [], "created_at": child.created_at.isoformat().replace( "+00:00", "Z" @@ -218,6 +236,8 @@ def test_api_documents_tree_list_anonymous_public_parent(): }, { "abilities": document_sibling.get_abilities(AnonymousUser()), + "ancestors_link_reach": document.ancestors_link_reach, + "ancestors_link_role": document.ancestors_link_role, "children": [], "created_at": document_sibling.created_at.isoformat().replace( "+00:00", "Z" @@ -258,6 +278,8 @@ def test_api_documents_tree_list_anonymous_public_parent(): }, { "abilities": parent_sibling.get_abilities(AnonymousUser()), + "ancestors_link_reach": parent_sibling.ancestors_link_reach, + "ancestors_link_role": parent_sibling.ancestors_link_role, "children": [], "created_at": parent_sibling.created_at.isoformat().replace( "+00:00", "Z" @@ -342,12 +364,18 @@ def test_api_documents_tree_list_authenticated_unrelated_public_or_authenticated assert response.status_code == 200 assert response.json() == { "abilities": parent.get_abilities(user), + "ancestors_link_reach": None, + "ancestors_link_role": None, "children": [ { "abilities": document.get_abilities(user), + "ancestors_link_reach": document.ancestors_link_reach, + "ancestors_link_role": document.ancestors_link_role, "children": [ { "abilities": child.get_abilities(user), + "ancestors_link_reach": child.ancestors_link_reach, + "ancestors_link_role": child.ancestors_link_role, "children": [], "created_at": child.created_at.isoformat().replace( "+00:00", "Z" @@ -388,6 +416,8 @@ def test_api_documents_tree_list_authenticated_unrelated_public_or_authenticated }, { "abilities": sibling.get_abilities(user), + "ancestors_link_reach": sibling.ancestors_link_reach, + "ancestors_link_role": sibling.ancestors_link_role, "children": [], "created_at": sibling.created_at.isoformat().replace("+00:00", "Z"), "creator": str(sibling.creator.id), @@ -461,15 +491,23 @@ def test_api_documents_tree_list_authenticated_public_or_authenticated_parent( assert response.status_code == 200 assert response.json() == { "abilities": grand_parent.get_abilities(user), + "ancestors_link_reach": grand_parent.ancestors_link_reach, + "ancestors_link_role": grand_parent.ancestors_link_role, "children": [ { "abilities": parent.get_abilities(user), + "ancestors_link_reach": parent.ancestors_link_reach, + "ancestors_link_role": parent.ancestors_link_role, "children": [ { "abilities": document.get_abilities(user), + "ancestors_link_reach": document.ancestors_link_reach, + "ancestors_link_role": document.ancestors_link_role, "children": [ { "abilities": child.get_abilities(user), + "ancestors_link_reach": child.ancestors_link_reach, + "ancestors_link_role": child.ancestors_link_role, "children": [], "created_at": child.created_at.isoformat().replace( "+00:00", "Z" @@ -514,6 +552,8 @@ def test_api_documents_tree_list_authenticated_public_or_authenticated_parent( }, { "abilities": document_sibling.get_abilities(user), + "ancestors_link_reach": document_sibling.ancestors_link_reach, + "ancestors_link_role": document_sibling.ancestors_link_role, "children": [], "created_at": document_sibling.created_at.isoformat().replace( "+00:00", "Z" @@ -554,6 +594,8 @@ def test_api_documents_tree_list_authenticated_public_or_authenticated_parent( }, { "abilities": parent_sibling.get_abilities(user), + "ancestors_link_reach": parent.ancestors_link_reach, + "ancestors_link_role": parent.ancestors_link_role, "children": [], "created_at": parent_sibling.created_at.isoformat().replace( "+00:00", "Z" @@ -640,12 +682,18 @@ def test_api_documents_tree_list_authenticated_related_direct(): assert response.status_code == 200 assert response.json() == { "abilities": parent.get_abilities(user), + "ancestors_link_reach": parent.ancestors_link_reach, + "ancestors_link_role": parent.ancestors_link_role, "children": [ { "abilities": document.get_abilities(user), + "ancestors_link_reach": document.ancestors_link_reach, + "ancestors_link_role": document.ancestors_link_role, "children": [ { "abilities": child.get_abilities(user), + "ancestors_link_reach": child.ancestors_link_reach, + "ancestors_link_role": child.ancestors_link_role, "children": [], "created_at": child.created_at.isoformat().replace( "+00:00", "Z" @@ -686,6 +734,8 @@ def test_api_documents_tree_list_authenticated_related_direct(): }, { "abilities": sibling.get_abilities(user), + "ancestors_link_reach": sibling.ancestors_link_reach, + "ancestors_link_role": sibling.ancestors_link_role, "children": [], "created_at": sibling.created_at.isoformat().replace("+00:00", "Z"), "creator": str(sibling.creator.id), @@ -763,15 +813,23 @@ def test_api_documents_tree_list_authenticated_related_parent(): assert response.status_code == 200 assert response.json() == { "abilities": grand_parent.get_abilities(user), + "ancestors_link_reach": grand_parent.ancestors_link_reach, + "ancestors_link_role": grand_parent.ancestors_link_role, "children": [ { "abilities": parent.get_abilities(user), + "ancestors_link_reach": parent.ancestors_link_reach, + "ancestors_link_role": parent.ancestors_link_role, "children": [ { "abilities": document.get_abilities(user), + "ancestors_link_reach": document.ancestors_link_reach, + "ancestors_link_role": document.ancestors_link_role, "children": [ { "abilities": child.get_abilities(user), + "ancestors_link_reach": child.ancestors_link_reach, + "ancestors_link_role": child.ancestors_link_role, "children": [], "created_at": child.created_at.isoformat().replace( "+00:00", "Z" @@ -816,6 +874,8 @@ def test_api_documents_tree_list_authenticated_related_parent(): }, { "abilities": document_sibling.get_abilities(user), + "ancestors_link_reach": document_sibling.ancestors_link_reach, + "ancestors_link_role": document_sibling.ancestors_link_role, "children": [], "created_at": document_sibling.created_at.isoformat().replace( "+00:00", "Z" @@ -856,6 +916,8 @@ def test_api_documents_tree_list_authenticated_related_parent(): }, { "abilities": parent_sibling.get_abilities(user), + "ancestors_link_reach": parent_sibling.ancestors_link_reach, + "ancestors_link_role": parent_sibling.ancestors_link_role, "children": [], "created_at": parent_sibling.created_at.isoformat().replace( "+00:00", "Z" @@ -950,12 +1012,18 @@ def test_api_documents_tree_list_authenticated_related_team_members( assert response.status_code == 200 assert response.json() == { "abilities": parent.get_abilities(user), + "ancestors_link_reach": None, + "ancestors_link_role": None, "children": [ { "abilities": document.get_abilities(user), + "ancestors_link_reach": "restricted", + "ancestors_link_role": None, "children": [ { "abilities": child.get_abilities(user), + "ancestors_link_reach": "restricted", + "ancestors_link_role": None, "children": [], "created_at": child.created_at.isoformat().replace( "+00:00", "Z" @@ -996,6 +1064,8 @@ def test_api_documents_tree_list_authenticated_related_team_members( }, { "abilities": sibling.get_abilities(user), + "ancestors_link_reach": "restricted", + "ancestors_link_role": None, "children": [], "created_at": sibling.created_at.isoformat().replace("+00:00", "Z"), "creator": str(sibling.creator.id), diff --git a/src/backend/core/tests/documents/test_api_documents_update.py b/src/backend/core/tests/documents/test_api_documents_update.py index 03b1891b..b4c6e2dc 100644 --- a/src/backend/core/tests/documents/test_api_documents_update.py +++ b/src/backend/core/tests/documents/test_api_documents_update.py @@ -160,6 +160,8 @@ def test_api_documents_update_anonymous_or_authenticated_unrelated( for key, value in document_values.items(): if key in [ "id", + "ancestors_link_reach", + "ancestors_link_role", "accesses", "created_at", "creator", @@ -277,6 +279,8 @@ def test_api_documents_update_authenticated_editor_administrator_or_owner( for key, value in document_values.items(): if key in [ "id", + "ancestors_link_reach", + "ancestors_link_role", "created_at", "creator", "depth",