♻️(backend) include sub documents in the favorite_list route
The favorite_list route was returning all the favorite with depth=0. We also want to see favorited document with a depth > 0
This commit is contained in:
@@ -15,6 +15,7 @@ and this project adheres to
|
|||||||
- ✅(e2e) fix e2e test for other browsers #1799
|
- ✅(e2e) fix e2e test for other browsers #1799
|
||||||
- 🐛(frontend) add fallback for unsupported Blocknote languages #1810
|
- 🐛(frontend) add fallback for unsupported Blocknote languages #1810
|
||||||
- 🐛(frontend) fix emojipicker closing in tree #1808
|
- 🐛(frontend) fix emojipicker closing in tree #1808
|
||||||
|
- 🐛(frontend) display children in favorite #1782
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
|||||||
@@ -628,12 +628,29 @@ class DocumentViewSet(
|
|||||||
"""Get list of favorite documents for the current user."""
|
"""Get list of favorite documents for the current user."""
|
||||||
user = request.user
|
user = request.user
|
||||||
|
|
||||||
|
queryset = self.get_queryset()
|
||||||
|
|
||||||
|
# Among the results, we may have documents that are ancestors/descendants
|
||||||
|
# of each other. In this case we want to keep only the highest ancestors.
|
||||||
|
root_paths = utils.filter_root_paths(
|
||||||
|
queryset.order_by("path").values_list("path", flat=True),
|
||||||
|
skip_sorting=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
path_list = db.Q()
|
||||||
|
for path in root_paths:
|
||||||
|
path_list |= db.Q(path__startswith=path)
|
||||||
|
|
||||||
favorite_documents_ids = models.DocumentFavorite.objects.filter(
|
favorite_documents_ids = models.DocumentFavorite.objects.filter(
|
||||||
user=user
|
user=user
|
||||||
).values_list("document_id", flat=True)
|
).values_list("document_id", flat=True)
|
||||||
|
|
||||||
queryset = self.filter_queryset(self.get_queryset())
|
queryset = self.queryset.filter(path_list)
|
||||||
queryset = queryset.filter(id__in=favorite_documents_ids)
|
queryset = queryset.filter(id__in=favorite_documents_ids)
|
||||||
|
queryset = queryset.annotate_user_roles(user)
|
||||||
|
queryset = queryset.annotate(
|
||||||
|
is_favorite=db.Value(True, output_field=db.BooleanField())
|
||||||
|
)
|
||||||
return self.get_response_for_queryset(queryset)
|
return self.get_response_for_queryset(queryset)
|
||||||
|
|
||||||
@drf.decorators.action(
|
@drf.decorators.action(
|
||||||
|
|||||||
@@ -83,3 +83,34 @@ def test_api_document_favorite_list_authenticated_with_favorite():
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_api_document_favorite_list_with_favorite_children():
|
||||||
|
"""Authenticated users should receive their favorite documents, including children."""
|
||||||
|
|
||||||
|
user = factories.UserFactory()
|
||||||
|
client = APIClient()
|
||||||
|
client.force_login(user)
|
||||||
|
|
||||||
|
root = factories.DocumentFactory(creator=user, users=[user])
|
||||||
|
children = factories.DocumentFactory.create_batch(
|
||||||
|
2, parent=root, favorited_by=[user]
|
||||||
|
)
|
||||||
|
|
||||||
|
access = factories.UserDocumentAccessFactory(
|
||||||
|
user=user, role=models.RoleChoices.READER, document__favorited_by=[user]
|
||||||
|
)
|
||||||
|
|
||||||
|
other_root = factories.DocumentFactory(creator=user, users=[user])
|
||||||
|
factories.DocumentFactory.create_batch(2, parent=other_root)
|
||||||
|
|
||||||
|
response = client.get("/api/v1.0/documents/favorite_list/")
|
||||||
|
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert response.json()["count"] == 3
|
||||||
|
|
||||||
|
content = response.json()["results"]
|
||||||
|
|
||||||
|
assert content[0]["id"] == str(children[0].id)
|
||||||
|
assert content[1]["id"] == str(children[1].id)
|
||||||
|
assert content[2]["id"] == str(access.document.id)
|
||||||
|
|||||||
Reference in New Issue
Block a user