Browse Source

Allow CommentList API to filter comments by example id

pull/1649/head
Hironsan 3 years ago
parent
commit
c9206e614d
3 changed files with 18 additions and 9 deletions
  1. 11
      backend/api/tests/api/test_comment.py
  2. 2
      backend/api/urls.py
  3. 14
      backend/api/views/comment.py

11
backend/api/tests/api/test_comment.py

@ -11,15 +11,18 @@ class TestCommentListDocAPI(CRUDMixin):
def setUpTestData(cls):
cls.project = prepare_project()
cls.non_member = make_user()
doc = make_doc(cls.project.item)
make_comment(doc, cls.project.users[0])
doc1 = make_doc(cls.project.item)
doc2 = make_doc(cls.project.item)
make_comment(doc1, cls.project.users[0])
make_comment(doc2, cls.project.users[0])
cls.data = {'text': 'example'}
cls.url = reverse(viewname='comment_list_doc', args=[cls.project.item.id, doc.id])
cls.url = reverse(viewname='comment_list', args=[cls.project.item.id])
cls.url += f'?example={doc1.id}'
def test_allows_project_member_to_list_comments(self):
for member in self.project.users:
response = self.assert_fetch(member, status.HTTP_200_OK)
self.assertEqual(len(response.data), 1)
self.assertEqual(response.data['count'], 1)
def test_denies_non_project_member_to_list_comments(self):
self.assert_fetch(self.non_member, status.HTTP_403_FORBIDDEN)

2
backend/api/urls.py

@ -122,7 +122,7 @@ urlpatterns_project = [
),
path(
route='comments',
view=comment.CommentListProject.as_view(),
view=comment.CommentList.as_view(),
name='comment_list'
),
path(

14
backend/api/views/comment.py

@ -27,22 +27,28 @@ class CommentListDoc(generics.ListCreateAPIView):
serializer.save(example_id=self.kwargs['example_id'], user=self.request.user)
class CommentListProject(generics.ListAPIView):
class CommentList(generics.ListCreateAPIView):
permission_classes = [IsAuthenticated & IsInProjectOrAdmin]
serializer_class = CommentSerializer
filter_backends = (DjangoFilterBackend, filters.SearchFilter)
filterset_fields = ['example']
search_fields = ('text',)
model = Comment
def get_queryset(self):
queryset = self.model.objects.filter(
queryset = Comment.objects.filter(
example__project_id=self.kwargs['project_id']
)
return queryset
def perform_create(self, serializer):
serializer.save(
example_id=self.request.query_params.get('example'),
user=self.request.user
)
def delete(self, request, *args, **kwargs):
delete_ids = request.data['ids']
self.model.objects.filter(user=request.user, pk__in=delete_ids).delete()
Comment.objects.filter(user=request.user, pk__in=delete_ids).delete()
return Response(status=status.HTTP_204_NO_CONTENT)

Loading…
Cancel
Save