From e45443fdea63f05593e2b4bbf3166929949213da Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Thu, 22 Aug 2019 00:04:11 -0400 Subject: [PATCH] Fix document cabinet list API view Thanks for forum user "jere" for the report. Forum topic 1039. Signed-off-by: Roberto Rosario --- HISTORY.rst | 2 + docs/releases/3.2.7.rst | 2 + mayan/apps/cabinets/api_views.py | 2 +- mayan/apps/cabinets/tests/mixins.py | 9 ++++ mayan/apps/cabinets/tests/test_api.py | 65 +++++++++++++++++++++++++-- 5 files changed, 76 insertions(+), 4 deletions(-) diff --git a/HISTORY.rst b/HISTORY.rst index 7e4f020dc8..37d2425638 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -9,6 +9,8 @@ file_metadata app. * Add internal_name field to workflow serializer. Fixes workflow API creation view. +* Fix document cabinet list view. Thanks for forum user + "jere" for the report. Forum topic 1039. 3.2.6 (2019-07-10) ================== diff --git a/docs/releases/3.2.7.rst b/docs/releases/3.2.7.rst index 512ec1fee3..61175e2687 100644 --- a/docs/releases/3.2.7.rst +++ b/docs/releases/3.2.7.rst @@ -16,6 +16,8 @@ Changes file_metadata app. - Add internal_name field to workflow serializer. Fixes workflow API creation view. +- Fix document cabinet list view. Thanks for forum user + "jere" for the report. Forum topic 1039. Removals -------- diff --git a/mayan/apps/cabinets/api_views.py b/mayan/apps/cabinets/api_views.py index 04c002d550..63adbac3ce 100644 --- a/mayan/apps/cabinets/api_views.py +++ b/mayan/apps/cabinets/api_views.py @@ -39,7 +39,7 @@ class APIDocumentCabinetListView(generics.ListAPIView): user=self.request.user ) - queryset = document.get_cabinets() + queryset = document.document_cabinets() return queryset diff --git a/mayan/apps/cabinets/tests/mixins.py b/mayan/apps/cabinets/tests/mixins.py index c1b15c6d8d..ce8d359d1d 100644 --- a/mayan/apps/cabinets/tests/mixins.py +++ b/mayan/apps/cabinets/tests/mixins.py @@ -149,3 +149,12 @@ class CabinetViewTestMixin(object): 'cabinets': self.test_cabinet.pk } ) + + +class DocumentCabinetAPIViewTestMixin(object): + def _request_test_document_cabinet_list_view(self): + return self.get( + viewname='rest_api:document-cabinet-list', kwargs={ + 'pk': self.test_document.pk + } + ) diff --git a/mayan/apps/cabinets/tests/test_api.py b/mayan/apps/cabinets/tests/test_api.py index c1e918d9e5..4fe870c221 100644 --- a/mayan/apps/cabinets/tests/test_api.py +++ b/mayan/apps/cabinets/tests/test_api.py @@ -15,10 +15,14 @@ from ..permissions import ( permission_cabinet_remove_document, permission_cabinet_view ) -from .mixins import CabinetAPIViewTestMixin, CabinetTestMixin +from .mixins import ( + CabinetAPIViewTestMixin, CabinetTestMixin, DocumentCabinetAPIViewTestMixin +) -class CabinetAPITestCase(CabinetAPIViewTestMixin, CabinetTestMixin, BaseAPITestCase): +class CabinetAPITestCase( + CabinetAPIViewTestMixin, CabinetTestMixin, BaseAPITestCase +): def test_cabinet_create_api_view_no_permission(self): cabinet_count = Cabinet.objects.count() @@ -135,7 +139,9 @@ class CabinetAPITestCase(CabinetAPIViewTestMixin, CabinetTestMixin, BaseAPITestC ) -class CabinetDocumentAPITestCase(CabinetAPIViewTestMixin, CabinetTestMixin, DocumentTestMixin, BaseAPITestCase): +class CabinetDocumentAPITestCase( + CabinetAPIViewTestMixin, CabinetTestMixin, DocumentTestMixin, BaseAPITestCase +): auto_upload_document = False def test_cabinet_create_with_single_document(self): @@ -288,3 +294,56 @@ class CabinetDocumentAPITestCase(CabinetAPIViewTestMixin, CabinetTestMixin, Docu qs=self.test_cabinet.documents.all(), values=map(repr, self.test_documents) ) + + +class DocumentCabinetAPITestCase( + CabinetAPIViewTestMixin, CabinetTestMixin, + DocumentCabinetAPIViewTestMixin, DocumentTestMixin, BaseAPITestCase +): + auto_upload_document = False + + def setUp(self): + super(DocumentCabinetAPITestCase, self).setUp() + self.upload_document() + self._create_test_cabinet() + self.test_cabinet.documents.add(self.test_document) + + def test_document_cabinet_list_view_no_permission(self): + response = self._request_test_document_cabinet_list_view() + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertTrue('count' not in response.data) + + def test_document_cabinet_list_view_with_document_access(self): + self.grant_access( + obj=self.test_document, permission=permission_document_view, + ) + + response = self._request_test_document_cabinet_list_view() + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data['count'], 0) + + def test_document_cabinet_list_view_with_cabinet_access(self): + self.grant_access( + obj=self.test_cabinet, permission=permission_cabinet_view, + ) + + response = self._request_test_document_cabinet_list_view() + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + self.assertTrue('count' not in response.data) + + def test_document_cabinet_list_view_with_full_access(self): + self.grant_access( + obj=self.test_document, permission=permission_document_view, + ) + self.grant_access( + obj=self.test_cabinet, permission=permission_cabinet_view, + ) + + response = self._request_test_document_cabinet_list_view() + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual( + response.data['count'], Cabinet.objects.all().count() + ) + self.assertEqual( + response.data['results'][0]['id'], self.test_cabinet.pk + )