diff --git a/mayan/apps/cabinets/tests/literals.py b/mayan/apps/cabinets/tests/literals.py index 49a0661919..5edd82eb0c 100644 --- a/mayan/apps/cabinets/tests/literals.py +++ b/mayan/apps/cabinets/tests/literals.py @@ -1,5 +1,5 @@ from __future__ import absolute_import, unicode_literals TEST_CABINET_LABEL = 'test cabinet label' -TEST_CABINET_EDITED_LABEL = 'test cabinet edited label' +TEST_CABINET_LABEL_EDITED = 'test cabinet edited label' TEST_CABINET_CHILD_LABEL = 'test cabinet child label' diff --git a/mayan/apps/cabinets/tests/mixins.py b/mayan/apps/cabinets/tests/mixins.py index 6ac9d9d1a8..329d01ff9b 100644 --- a/mayan/apps/cabinets/tests/mixins.py +++ b/mayan/apps/cabinets/tests/mixins.py @@ -2,7 +2,57 @@ from __future__ import unicode_literals from ..models import Cabinet -from .literals import TEST_CABINET_LABEL, TEST_CABINET_CHILD_LABEL +from .literals import ( + TEST_CABINET_CHILD_LABEL, TEST_CABINET_LABEL, TEST_CABINET_LABEL_EDITED +) + + +class CabinetAPIViewTestMixin(object): + def _request_test_cabinet_create_api_view(self, extra_data=None): + data = {'label': TEST_CABINET_LABEL} + + if extra_data: + data.update(extra_data) + + # Typecast to list to force queryset evaluation + values = list(Cabinet.objects.values_list('pk', flat=True)) + + response = self.post(viewname='rest_api:cabinet-list', data=data) + + self.test_cabinet = Cabinet.objects.exclude(pk__in=values).first() + + return response + + def _request_test_cabinet_delete_api_view(self): + return self.delete( + viewname='rest_api:cabinet-detail', kwargs={ + 'pk': self.test_cabinet.pk + } + ) + + def _request_test_cabinet_document_remove_api_view(self): + return self.delete( + viewname='rest_api:cabinet-document', kwargs={ + 'pk': self.test_cabinet.pk, 'document_pk': self.test_document.pk + } + ) + + def _request_test_cabinet_edit_api_patch_view(self): + return self.patch( + data={'label': TEST_CABINET_LABEL_EDITED}, kwargs={ + 'pk': self.test_cabinet.pk + }, viewname='rest_api:cabinet-detail' + ) + + def _request_test_cabinet_edit_api_put_view(self): + return self.put( + data={'label': TEST_CABINET_LABEL_EDITED}, kwargs={ + 'pk': self.test_cabinet.pk + }, viewname='rest_api:cabinet-detail' + ) + + def _request_test_cabinet_list_api_view(self): + return self.get(viewname='rest_api:cabinet-list') class CabinetTestMixin(object): @@ -16,6 +66,36 @@ class CabinetTestMixin(object): class CabinetViewTestMixin(object): + def _request_test_cabinet_create_view(self): + # Typecast to list to force queryset evaluation + values = list(Cabinet.objects.values_list('pk', flat=True)) + + response = self.post( + 'cabinets:cabinet_create', data={ + 'label': TEST_CABINET_LABEL + } + ) + + self.test_cabinet = Cabinet.objects.exclude(pk__in=values).first() + + return response + + def _request_test_cabinet_delete_view(self): + return self.post( + viewname='cabinets:cabinet_delete', kwargs={ + 'pk': self.test_cabinet.pk + } + ) + + def _request_test_cabinet_edit_view(self): + return self.post( + viewname='cabinets:cabinet_edit', kwargs={ + 'pk': self.test_cabinet.pk + }, data={ + 'label': TEST_CABINET_LABEL_EDITED + } + ) + def _request_test_cabinet_child_create_view(self): return self.post( viewname='cabinets:cabinet_child_add', kwargs={ @@ -29,3 +109,23 @@ class CabinetViewTestMixin(object): 'pk': self.test_cabinet_child.pk } ) + + def _request_test_cabinet_list_view(self): + return self.get(viewname='cabinets:cabinet_list') + + def _request_test_document_cabinet_multiple_remove_view(self): + return self.post( + viewname='cabinets:document_cabinet_remove', kwargs={ + 'pk': self.test_document.pk + }, data={ + 'cabinets': (self.test_cabinet.pk,), + } + ) + + def _request_test_document_multiple_cabinet_multiple_add_view_cabinet(self): + return self.post( + viewname='cabinets:document_multiple_cabinet_add', data={ + 'id_list': (self.test_document.pk,), + 'cabinets': self.test_cabinet.pk + } + ) diff --git a/mayan/apps/cabinets/tests/test_api.py b/mayan/apps/cabinets/tests/test_api.py index 643fa31d98..c1e918d9e5 100644 --- a/mayan/apps/cabinets/tests/test_api.py +++ b/mayan/apps/cabinets/tests/test_api.py @@ -15,22 +15,14 @@ from ..permissions import ( permission_cabinet_remove_document, permission_cabinet_view ) -from .literals import TEST_CABINET_EDITED_LABEL, TEST_CABINET_LABEL -from .mixins import CabinetTestMixin +from .mixins import CabinetAPIViewTestMixin, CabinetTestMixin -class CabinetAPITestCase(CabinetTestMixin, BaseAPITestCase): - def _request_cabinet_create_api_view(self): - return self.post( - viewname='rest_api:cabinet-list', data={ - 'label': TEST_CABINET_LABEL - } - ) - +class CabinetAPITestCase(CabinetAPIViewTestMixin, CabinetTestMixin, BaseAPITestCase): def test_cabinet_create_api_view_no_permission(self): cabinet_count = Cabinet.objects.count() - response = self._request_cabinet_create_api_view() + response = self._request_test_cabinet_create_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual(cabinet_count, Cabinet.objects.count()) @@ -38,29 +30,20 @@ class CabinetAPITestCase(CabinetTestMixin, BaseAPITestCase): def test_cabinet_create_api_view_with_permission(self): self.grant_permission(permission=permission_cabinet_create) - response = self._request_cabinet_create_api_view() + response = self._request_test_cabinet_create_api_view() self.assertEqual(response.status_code, status.HTTP_201_CREATED) - cabinet = Cabinet.objects.first() - self.assertEqual(response.data['id'], cabinet.pk) - self.assertEqual(response.data['label'], TEST_CABINET_LABEL) + self.assertEqual(response.data['id'], self.test_cabinet.pk) + self.assertEqual(response.data['label'], self.test_cabinet.label) self.assertEqual(Cabinet.objects.count(), 1) - self.assertEqual(cabinet.label, TEST_CABINET_LABEL) - - def _request_cabinet_delete_api_view(self): - return self.delete( - viewname='rest_api:cabinet-detail', kwargs={ - 'pk': self.test_cabinet.pk - } - ) def test_cabinet_delete_api_view_no_permssions(self): self._create_test_cabinet() cabinet_count = Cabinet.objects.count() - response = self._request_cabinet_delete_api_view() + response = self._request_test_cabinet_delete_api_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual(Cabinet.objects.count(), cabinet_count) @@ -74,24 +57,17 @@ class CabinetAPITestCase(CabinetTestMixin, BaseAPITestCase): cabinet_count = Cabinet.objects.count() - response = self._request_cabinet_delete_api_view() + response = self._request_test_cabinet_delete_api_view() self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) self.assertEqual(Cabinet.objects.count(), cabinet_count - 1) - def _request_cabinet_edit_api_patch_view(self): - return self.patch( - data={'label': TEST_CABINET_EDITED_LABEL}, kwargs={ - 'pk': self.test_cabinet.pk - }, viewname='rest_api:cabinet-detail' - ) - def test_cabinet_edit_api_patch_view_no_pemission(self): self._create_test_cabinet() cabinet_label = self.test_cabinet.label - response = self._request_cabinet_edit_api_patch_view() + response = self._request_test_cabinet_edit_api_patch_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.test_cabinet.refresh_from_db() @@ -106,25 +82,18 @@ class CabinetAPITestCase(CabinetTestMixin, BaseAPITestCase): cabinet_label = self.test_cabinet.label - response = self._request_cabinet_edit_api_patch_view() + response = self._request_test_cabinet_edit_api_patch_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.test_cabinet.refresh_from_db() self.assertNotEqual(cabinet_label, self.test_cabinet.label) - def _request_cabinet_edit_api_put_view(self): - return self.put( - data={'label': TEST_CABINET_EDITED_LABEL}, kwargs={ - 'pk': self.test_cabinet.pk - }, viewname='rest_api:cabinet-detail' - ) - def test_cabinet_edit_api_put_view_no_pemission(self): self._create_test_cabinet() cabinet_label = self.test_cabinet.label - response = self._request_cabinet_edit_api_put_view() + response = self._request_test_cabinet_edit_api_put_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.test_cabinet.refresh_from_db() @@ -139,19 +108,16 @@ class CabinetAPITestCase(CabinetTestMixin, BaseAPITestCase): cabinet_label = self.test_cabinet.label - response = self._request_cabinet_edit_api_put_view() + response = self._request_test_cabinet_edit_api_put_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.test_cabinet.refresh_from_db() self.assertNotEqual(cabinet_label, self.test_cabinet.label) - def _request_cabinet_list_api_view(self): - return self.get(viewname='rest_api:cabinet-list') - def test_cabinet_list_api_view_no_permission(self): self._create_test_cabinet() - response = self._request_cabinet_list_api_view() + response = self._request_test_cabinet_list_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['count'], 0) @@ -162,24 +128,16 @@ class CabinetAPITestCase(CabinetTestMixin, BaseAPITestCase): obj=self.test_cabinet, permission=permission_cabinet_view ) - response = self._request_cabinet_list_api_view() + response = self._request_test_cabinet_list_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data['results'][0]['label'], self.test_cabinet.label ) -class CabinetDocumentAPITestCase(CabinetTestMixin, DocumentTestMixin, BaseAPITestCase): +class CabinetDocumentAPITestCase(CabinetAPIViewTestMixin, CabinetTestMixin, DocumentTestMixin, BaseAPITestCase): auto_upload_document = False - def _request_test_cabinet_create_api_view(self, extra_data=None): - data = {'label': TEST_CABINET_LABEL} - - if extra_data: - data.update(extra_data) - - return self.post(viewname='rest_api:cabinet-list', data=data) - def test_cabinet_create_with_single_document(self): self.upload_document() @@ -194,51 +152,37 @@ class CabinetDocumentAPITestCase(CabinetTestMixin, DocumentTestMixin, BaseAPITes ) self.assertEqual(response.status_code, status.HTTP_201_CREATED) - cabinet = Cabinet.objects.first() - - self.assertEqual(response.data['id'], cabinet.pk) - self.assertEqual(response.data['label'], TEST_CABINET_LABEL) + self.assertEqual(response.data['id'], self.test_cabinet.pk) + self.assertEqual(response.data['label'], self.test_cabinet.label) self.assertQuerysetEqual( - cabinet.documents.all(), (repr(self.test_document),) + self.test_cabinet.documents.all(), (repr(self.test_document),) ) - self.assertEqual(cabinet.label, TEST_CABINET_LABEL) def test_cabinet_create_with_multiple_documents(self): self.upload_document() - self.test_document_2 = self.upload_document() + self.upload_document() + + documents_pk_list = ','.join( + [force_text(document.pk) for document in self.test_documents] + ) self.grant_permission(permission=permission_cabinet_create) response = self._request_test_cabinet_create_api_view( extra_data={ - 'documents_pk_list': '{},{}'.format( - self.test_document.pk, self.test_document_2.pk - ) + 'documents_pk_list': documents_pk_list } ) self.assertEqual(response.status_code, status.HTTP_201_CREATED) - - cabinet = Cabinet.objects.first() - - self.assertEqual(response.data['id'], cabinet.pk) - self.assertEqual(response.data['label'], TEST_CABINET_LABEL) + self.assertEqual(response.data['id'], self.test_cabinet.pk) + self.assertEqual(response.data['label'], self.test_cabinet.label) self.assertEqual(Cabinet.objects.count(), 1) - self.assertEqual(cabinet.label, TEST_CABINET_LABEL) - self.assertQuerysetEqual( - cabinet.documents.all(), map( - repr, (self.test_document, self.test_document_2) - ) - ) - - def _request_test_cabinet_document_remove_api_view(self): - return self.delete( - viewname='rest_api:cabinet-document', kwargs={ - 'pk': self.test_cabinet.pk, 'document_pk': self.test_document.pk - } + qs=self.test_cabinet.documents.all(), + values=map(repr, self.test_documents) ) def test_cabinet_document_remove_api_view(self): @@ -322,16 +266,18 @@ class CabinetDocumentAPITestCase(CabinetTestMixin, DocumentTestMixin, BaseAPITes def test_cabinet_add_multiple_documents_api_view(self): self.upload_document() - self.test_document_2 = self.upload_document() + self.upload_document() + + documents_pk_list = ','.join( + [force_text(document.pk) for document in self.test_documents] + ) self._create_test_cabinet() self.grant_permission(permission=permission_cabinet_add_document) response = self.post( data={ - 'documents_pk_list': '{},{}'.format( - self.test_document.pk, self.test_document_2.pk - ), + 'documents_pk_list': documents_pk_list }, kwargs={ 'pk': self.test_cabinet.pk }, viewname='rest_api:cabinet-document-list' @@ -339,7 +285,6 @@ class CabinetDocumentAPITestCase(CabinetTestMixin, DocumentTestMixin, BaseAPITes self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertQuerysetEqual( - self.test_cabinet.documents.all(), map( - repr, (self.test_document, self.test_document_2) - ) + qs=self.test_cabinet.documents.all(), + values=map(repr, self.test_documents) ) diff --git a/mayan/apps/cabinets/tests/test_models.py b/mayan/apps/cabinets/tests/test_models.py index 1dc8300aad..51305515ab 100644 --- a/mayan/apps/cabinets/tests/test_models.py +++ b/mayan/apps/cabinets/tests/test_models.py @@ -11,7 +11,7 @@ from .literals import TEST_CABINET_LABEL from .mixins import CabinetTestMixin -class CabinetTestCase(CabinetTestMixin, DocumentTestMixin, BaseTestCase): +class CabinetTestCase(CabinetTestMixin, BaseTestCase): def test_cabinet_creation(self): self._create_test_cabinet() @@ -41,8 +41,13 @@ class CabinetTestCase(CabinetTestMixin, DocumentTestMixin, BaseTestCase): Cabinet.objects.all(), map(repr, (self.test_cabinet, inner_cabinet)) ) - def test_addition_of_documents(self): + +class CabinetDocumentTestCase(CabinetTestMixin, DocumentTestMixin, BaseTestCase): + def setUp(self): + super(CabinetDocumentTestCase, self).setUp() self._create_test_cabinet() + + def test_addition_of_documents(self): self.test_cabinet.documents.add(self.test_document) self.assertEqual(self.test_cabinet.documents.count(), 1) @@ -51,7 +56,6 @@ class CabinetTestCase(CabinetTestMixin, DocumentTestMixin, BaseTestCase): ) def test_addition_and_deletion_of_documents(self): - self._create_test_cabinet() self.test_cabinet.documents.add(self.test_document) self.assertEqual(self.test_cabinet.documents.count(), 1) diff --git a/mayan/apps/cabinets/tests/test_views.py b/mayan/apps/cabinets/tests/test_views.py index 8010e30b33..77834f3312 100644 --- a/mayan/apps/cabinets/tests/test_views.py +++ b/mayan/apps/cabinets/tests/test_views.py @@ -9,20 +9,13 @@ from ..permissions import ( permission_cabinet_delete, permission_cabinet_edit, permission_cabinet_remove_document, permission_cabinet_view ) -from .literals import TEST_CABINET_LABEL, TEST_CABINET_EDITED_LABEL +from .literals import TEST_CABINET_LABEL, TEST_CABINET_LABEL_EDITED from .mixins import CabinetTestMixin, CabinetViewTestMixin -class CabinetViewTestCase(CabinetTestMixin, GenericViewTestCase): - def _request_create_cabinet(self, label): - return self.post( - 'cabinets:cabinet_create', data={ - 'label': TEST_CABINET_LABEL - } - ) - +class CabinetViewTestCase(CabinetTestMixin, CabinetViewTestMixin, GenericViewTestCase): def test_cabinet_create_view_no_permission(self): - response = self._request_create_cabinet(label=TEST_CABINET_LABEL) + response = self._request_test_cabinet_create_view() self.assertEquals(response.status_code, 403) self.assertEqual(Cabinet.objects.count(), 0) @@ -30,7 +23,7 @@ class CabinetViewTestCase(CabinetTestMixin, GenericViewTestCase): def test_cabinet_create_view_with_permission(self): self.grant_permission(permission=permission_cabinet_create) - response = self._request_create_cabinet(label=TEST_CABINET_LABEL) + response = self._request_test_cabinet_create_view() self.assertEqual(response.status_code, 302) self.assertEqual(Cabinet.objects.count(), 1) @@ -40,24 +33,20 @@ class CabinetViewTestCase(CabinetTestMixin, GenericViewTestCase): self._create_test_cabinet() self.grant_permission(permission=permission_cabinet_create) - response = self._request_create_cabinet(label=TEST_CABINET_LABEL) + cabinet_count = Cabinet.objects.count() + cabinet_original = self.test_cabinet + + response = self._request_test_cabinet_create_view() # HTTP 200 with error message self.assertEqual(response.status_code, 200) - self.assertEqual(Cabinet.objects.count(), 1) - self.assertEqual(Cabinet.objects.first().pk, self.test_cabinet.pk) - - def _request_delete_cabinet(self): - return self.post( - viewname='cabinets:cabinet_delete', kwargs={ - 'pk': self.test_cabinet.pk - } - ) + self.assertEqual(Cabinet.objects.count(), cabinet_count) + self.assertEqual(Cabinet.objects.first(), cabinet_original) def test_cabinet_delete_view_no_permission(self): self._create_test_cabinet() - response = self._request_delete_cabinet() + response = self._request_test_cabinet_delete_view() self.assertEqual(response.status_code, 403) self.assertEqual(Cabinet.objects.count(), 1) @@ -68,24 +57,15 @@ class CabinetViewTestCase(CabinetTestMixin, GenericViewTestCase): obj=self.test_cabinet, permission=permission_cabinet_delete ) - response = self._request_delete_cabinet() + response = self._request_test_cabinet_delete_view() self.assertEqual(response.status_code, 302) self.assertEqual(Cabinet.objects.count(), 0) - def _request_edit_cabinet(self): - return self.post( - viewname='cabinets:cabinet_edit', kwargs={ - 'pk': self.test_cabinet.pk - }, data={ - 'label': TEST_CABINET_EDITED_LABEL - } - ) - def test_cabinet_edit_view_no_permission(self): self._create_test_cabinet() - response = self._request_edit_cabinet() + response = self._request_test_cabinet_edit_view() self.assertEqual(response.status_code, 403) self.test_cabinet.refresh_from_db() @@ -98,11 +78,11 @@ class CabinetViewTestCase(CabinetTestMixin, GenericViewTestCase): obj=self.test_cabinet, permission=permission_cabinet_edit ) - response = self._request_edit_cabinet() + response = self._request_test_cabinet_edit_view() self.assertEqual(response.status_code, 302) self.test_cabinet.refresh_from_db() - self.assertEqual(self.test_cabinet.label, TEST_CABINET_EDITED_LABEL) + self.assertEqual(self.test_cabinet.label, TEST_CABINET_LABEL_EDITED) class CabinetChildViewTestCase(CabinetTestMixin, CabinetViewTestMixin, GenericViewTestCase): @@ -153,7 +133,7 @@ class CabinetChildViewTestCase(CabinetTestMixin, CabinetViewTestMixin, GenericVi self.assertEqual(Cabinet.objects.count(), cabinet_count - 1) -class CabinetDocumentViewTestCase(CabinetTestMixin, GenericDocumentViewTestCase): +class CabinetDocumentViewTestCase(CabinetTestMixin, CabinetViewTestMixin, GenericDocumentViewTestCase): def _add_document_to_cabinet(self): return self.post( viewname='cabinets:document_cabinet_add', kwargs={ @@ -198,20 +178,12 @@ class CabinetDocumentViewTestCase(CabinetTestMixin, GenericDocumentViewTestCase) self.test_cabinet.documents.all(), (repr(self.test_document),) ) - def _request_add_multiple_documents_to_cabinet(self): - return self.post( - viewname='cabinets:document_multiple_cabinet_add', data={ - 'id_list': (self.test_document.pk,), - 'cabinets': self.test_cabinet.pk - } - ) - def test_cabinet_add_multiple_documents_view_no_permission(self): self._create_test_cabinet() self.grant_permission(permission=permission_cabinet_view) - response = self._request_add_multiple_documents_to_cabinet() + response = self._request_test_document_multiple_cabinet_multiple_add_view_cabinet() self.assertContains( response=response, text='Select a valid choice', status_code=200 ) @@ -229,7 +201,7 @@ class CabinetDocumentViewTestCase(CabinetTestMixin, GenericDocumentViewTestCase) obj=self.test_document, permission=permission_cabinet_add_document ) - response = self._request_add_multiple_documents_to_cabinet() + response = self._request_test_document_multiple_cabinet_multiple_add_view_cabinet() self.assertEqual(response.status_code, 302) self.test_cabinet.refresh_from_db() @@ -238,21 +210,12 @@ class CabinetDocumentViewTestCase(CabinetTestMixin, GenericDocumentViewTestCase) self.test_cabinet.documents.all(), (repr(self.test_document),) ) - def _request_remove_document_from_cabinet(self): - return self.post( - viewname='cabinets:document_cabinet_remove', kwargs={ - 'pk': self.test_document.pk - }, data={ - 'cabinets': (self.test_cabinet.pk,), - } - ) - def test_cabinet_remove_document_view_no_permission(self): self._create_test_cabinet() self.test_cabinet.documents.add(self.test_document) - response = self._request_remove_document_from_cabinet() + response = self._request_test_document_cabinet_multiple_remove_view() self.assertContains( response=response, text='Select a valid choice', status_code=200 ) @@ -274,19 +237,16 @@ class CabinetDocumentViewTestCase(CabinetTestMixin, GenericDocumentViewTestCase) permission=permission_cabinet_remove_document ) - response = self._request_remove_document_from_cabinet() + response = self._request_test_document_cabinet_multiple_remove_view() self.assertEqual(response.status_code, 302) self.test_cabinet.refresh_from_db() self.assertEqual(self.test_cabinet.documents.count(), 0) - def _request_cabinet_list(self): - return self.get(viewname='cabinets:cabinet_list') - def test_cabinet_list_view_no_permission(self): self._create_test_cabinet() - response = self._request_cabinet_list() + response = self._request_test_cabinet_list_view() self.assertNotContains( response, text=self.test_cabinet.label, status_code=200 ) @@ -297,7 +257,7 @@ class CabinetDocumentViewTestCase(CabinetTestMixin, GenericDocumentViewTestCase) obj=self.test_cabinet, permission=permission_cabinet_view ) - response = self._request_cabinet_list() + response = self._request_test_cabinet_list_view() self.assertContains( response, text=self.test_cabinet.label, status_code=200 )