diff --git a/HISTORY.rst b/HISTORY.rst index 1a809e1b1f..ab7dcf2908 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -17,6 +17,10 @@ - Switch the order of the DEFAULT_AUTHENTICATION_CLASSES of DRF. GitLab #400. - Backport document's version list view permission. - Improve code to unbind menu entries. +- Renamed the document type permission namespace from "Document setup" to "Document types". +- Add support for granting the document type edit, document type delete, and document type view + permissions to individual document type instances. +- Improved tests by testing for accesses. 2.5.2 (2017-07-08) ================== diff --git a/docs/releases/2.6.rst b/docs/releases/2.6.rst index e614e46da4..cc9ace2ddd 100644 --- a/docs/releases/2.6.rst +++ b/docs/releases/2.6.rst @@ -59,6 +59,20 @@ access control now works on two levels. Now to attach a tag to a document, the permission to attach tags must be granted to the tag to attach and to the document that will receive the tag. +ACL changes +----------- +The document type permissions namespace was renamed from "Document setup" to +"Document types" for clarity. Along with that change, support was added +for granting the document type edit, document type delete, and document type view +permissions to individual document type instances instead of just globally. + +Testing +------- +The documents app view tests now test for view access and not just permission. +Testing against access is more robust and also tests for permissions +implicitly. + + Other Changes ------------- - Fix HTML mark up in window title. GitLab #397. diff --git a/mayan/apps/cabinets/tests/test_views.py b/mayan/apps/cabinets/tests/test_views.py index 8fde2589a3..577afb8db5 100644 --- a/mayan/apps/cabinets/tests/test_views.py +++ b/mayan/apps/cabinets/tests/test_views.py @@ -31,7 +31,7 @@ class CabinetViewTestCase(GenericDocumentViewTestCase): self.assertEqual(Cabinet.objects.count(), 0) def test_cabinet_create_view_with_permission(self): - self.grant(permission=permission_cabinet_create) + self.grant_permission(permission=permission_cabinet_create) response = self._request_create_cabinet(label=TEST_CABINET_LABEL) @@ -41,7 +41,7 @@ class CabinetViewTestCase(GenericDocumentViewTestCase): def test_cabinet_create_duplicate_view_with_permission(self): cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL) - self.grant(permission=permission_cabinet_create) + self.grant_permission(permission=permission_cabinet_create) response = self._request_create_cabinet(label=TEST_CABINET_LABEL) # HTTP 200 with error message @@ -60,7 +60,7 @@ class CabinetViewTestCase(GenericDocumentViewTestCase): self.assertEqual(Cabinet.objects.count(), 1) def test_cabinet_delete_view_with_permission(self): - self.grant(permission=permission_cabinet_delete) + self.grant_permission(permission=permission_cabinet_delete) cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL) @@ -89,7 +89,7 @@ class CabinetViewTestCase(GenericDocumentViewTestCase): def test_cabinet_edit_view_with_permission(self): cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL) - self.grant(permission=permission_cabinet_edit) + self.grant_permission(permission=permission_cabinet_edit) response = self._edit_cabinet( cabinet=cabinet, label=TEST_CABINET_EDITED_LABEL @@ -109,7 +109,7 @@ class CabinetViewTestCase(GenericDocumentViewTestCase): def test_cabinet_add_document_view_no_permission(self): cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL) - self.grant(permission=permission_cabinet_view) + self.grant_permission(permission=permission_cabinet_view) response = self._add_document_to_cabinet(cabinet=cabinet) @@ -122,9 +122,9 @@ class CabinetViewTestCase(GenericDocumentViewTestCase): def test_cabinet_add_document_view_with_permission(self): cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL) - self.grant(permission=permission_cabinet_view) - self.grant(permission=permission_cabinet_add_document) - self.grant(permission=permission_document_view) + self.grant_permission(permission=permission_cabinet_view) + self.grant_permission(permission=permission_cabinet_add_document) + self.grant_permission(permission=permission_document_view) response = self._add_document_to_cabinet(cabinet=cabinet) @@ -146,7 +146,7 @@ class CabinetViewTestCase(GenericDocumentViewTestCase): def test_cabinet_add_multiple_documents_view_no_permission(self): cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL) - self.grant(permission=permission_cabinet_view) + self.grant_permission(permission=permission_cabinet_view) response = self._add_multiple_documents_to_cabinet(cabinet=cabinet) @@ -159,8 +159,8 @@ class CabinetViewTestCase(GenericDocumentViewTestCase): def test_cabinet_add_multiple_documents_view_with_permission(self): cabinet = Cabinet.objects.create(label=TEST_CABINET_LABEL) - self.grant(permission=permission_cabinet_view) - self.grant(permission=permission_cabinet_add_document) + self.grant_permission(permission=permission_cabinet_view) + self.grant_permission(permission=permission_cabinet_add_document) response = self._add_multiple_documents_to_cabinet(cabinet=cabinet) @@ -198,7 +198,7 @@ class CabinetViewTestCase(GenericDocumentViewTestCase): cabinet.documents.add(self.document) - self.grant(permission=permission_cabinet_remove_document) + self.grant_permission(permission=permission_cabinet_remove_document) response = self._remove_document_from_cabinet(cabinet=cabinet) @@ -221,7 +221,7 @@ class CabinetViewTestCase(GenericDocumentViewTestCase): def test_cabinet_list_view_with_permission(self): self._create_cabinet() - self.grant(permission=permission_cabinet_view) + self.grant_permission(permission=permission_cabinet_view) response = self._request_cabinet_list() self.assertContains( diff --git a/mayan/apps/common/tests/test_views.py b/mayan/apps/common/tests/test_views.py index a5716a1c65..988567145d 100644 --- a/mayan/apps/common/tests/test_views.py +++ b/mayan/apps/common/tests/test_views.py @@ -7,6 +7,7 @@ from django.core.urlresolvers import clear_url_caches, reverse from django.http import HttpResponse from django.template import Context, Template +from acls.models import AccessControlList from permissions.models import Role from permissions.tests.literals import TEST_ROLE_LABEL from user_management.tests import ( @@ -74,7 +75,12 @@ class GenericViewTestCase(BaseTestCase): data=data, follow=follow ) - def grant(self, permission): + def grant_access(self, permission, obj): + AccessControlList.objects.grant( + permission=permission, role=self.role, obj=obj + ) + + def grant_permission(self, permission): self.role.permissions.add( permission.stored_permission ) diff --git a/mayan/apps/converter/tests/test_views.py b/mayan/apps/converter/tests/test_views.py index 1ede5e71a6..9deb586989 100644 --- a/mayan/apps/converter/tests/test_views.py +++ b/mayan/apps/converter/tests/test_views.py @@ -32,7 +32,7 @@ class TransformationViewsTestCase(GenericDocumentViewTestCase): self.assertEqual(response.status_code, 403) def test_transformation_list_view_with_permissions(self): - self.grant(permission=permission_transformation_view) + self.grant_permission(permission=permission_transformation_view) response = self._transformation_list_view() self.assertContains( @@ -57,7 +57,7 @@ class TransformationViewsTestCase(GenericDocumentViewTestCase): self.assertEqual(Transformation.objects.count(), 0) def test_transformation_create_view_with_permissions(self): - self.grant(permission=permission_transformation_create) + self.grant_permission(permission=permission_transformation_create) response = self._transformation_create_view() self.assertEqual(response.status_code, 302) @@ -85,7 +85,7 @@ class TransformationViewsTestCase(GenericDocumentViewTestCase): self.assertEqual(Transformation.objects.count(), 1) def test_transformation_delete_view_with_permissions(self): - self.grant(permission=permission_transformation_delete) + self.grant_permission(permission=permission_transformation_delete) response = self._transformation_delete_view() self.assertEqual(response.status_code, 302) diff --git a/mayan/apps/document_states/tests/test_views.py b/mayan/apps/document_states/tests/test_views.py index 04fdac14bc..4b45acc09f 100644 --- a/mayan/apps/document_states/tests/test_views.py +++ b/mayan/apps/document_states/tests/test_views.py @@ -197,7 +197,7 @@ class DocumentStateToolViewTestCase(GenericDocumentViewTestCase): self._create_workflow_transition() self.login_user() - self.grant(permission_workflow_tools) + self.grant_permission(permission=permission_workflow_tools) self.assertEqual(self.document.workflows.count(), 0) @@ -287,7 +287,7 @@ class DocumentStateTransitionViewTestCase(GenericDocumentViewTestCase): workflow_instance = self.document_2.workflows.first() - self.grant(permission_workflow_transition) + self.grant_permission(permission=permission_workflow_transition) response = self._request_workflow_transition( workflow_instance=workflow_instance ) diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index 179eea52e8..ddc620863f 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -70,7 +70,9 @@ from .permissions import ( permission_document_download, permission_document_edit, permission_document_new_version, permission_document_print, permission_document_properties_edit, permission_document_restore, - permission_document_trash, permission_document_version_revert, + permission_document_trash, permission_document_type_delete, + permission_document_type_edit, permission_document_type_view, + permission_document_version_revert, permission_document_version_view, permission_document_view ) from .queues import * # NOQA @@ -173,7 +175,8 @@ class DocumentsApp(MayanAppConfig): permission_document_edit, permission_document_new_version, permission_document_print, permission_document_properties_edit, permission_document_restore, permission_document_trash, - permission_document_version_revert, permission_document_view, + permission_document_version_revert, + permission_document_version_view, permission_document_view, permission_events_view, permission_transformation_create, permission_transformation_delete, permission_transformation_edit, permission_transformation_view, @@ -181,7 +184,10 @@ class DocumentsApp(MayanAppConfig): ) ModelPermission.register( - model=DocumentType, permissions=(permission_document_create,) + model=DocumentType, permissions=( + permission_document_create, permission_document_type_delete, + permission_document_type_edit, permission_document_type_view + ) ) ModelPermission.register_proxy( @@ -191,14 +197,15 @@ class DocumentsApp(MayanAppConfig): ModelPermission.register_inheritance( model=Document, related='document_type', ) - - ModelPermission.register_inheritance( - model=DocumentVersion, related='document', - ) - ModelPermission.register_inheritance( model=DocumentPage, related='document', ) + ModelPermission.register_inheritance( + model=DocumentTypeFilename, related='document_type', + ) + ModelPermission.register_inheritance( + model=DocumentVersion, related='document', + ) # Document and document page thumbnail widget document_thumbnail_widget = DocumentThumbnailWidget() diff --git a/mayan/apps/documents/permissions.py b/mayan/apps/documents/permissions.py index c928a1a909..fd40d9303b 100644 --- a/mayan/apps/documents/permissions.py +++ b/mayan/apps/documents/permissions.py @@ -51,8 +51,9 @@ permission_empty_trash = namespace.add_permission( name='document_empty_trash', label=_('Empty trash') ) +# TODO: rename 'document_setup' to 'document_types' on the next major version setup_namespace = PermissionNamespace( - 'documents_setup', label=_('Documents setup') + 'documents_setup', label=_('Document types') ) permission_document_type_create = setup_namespace.add_permission( name='document_type_create', label=_('Create document types') diff --git a/mayan/apps/documents/tests/literals.py b/mayan/apps/documents/tests/literals.py index c282c5783d..c90794b81c 100644 --- a/mayan/apps/documents/tests/literals.py +++ b/mayan/apps/documents/tests/literals.py @@ -9,10 +9,10 @@ __all__ = ( 'TEST_COMPRESSED_DOCUMENTS_FILENAME', 'TEST_COMPRESSED_DOCUMENT_PATH', 'TEST_DEU_DOCUMENT_FILENAME', 'TEST_DEU_DOCUMENT_PATH', 'TEST_DOCUMENT_PATH', 'TEST_HYBRID_DOCUMENT_PATH', - 'TEST_DOCUMENT_FILENAME', 'TEST_DOCUMENT_TYPE', - 'TEST_DOCUMENT_DESCRIPTION', 'TEST_HYBRID_DOCUMENT', - 'TEST_MULTI_PAGE_TIFF', 'TEST_MULTI_PAGE_TIFF_PATH', - 'TEST_NON_ASCII_COMPRESSED_DOCUMENT_FILENAME', + 'TEST_DOCUMENT_FILENAME', 'TEST_DOCUMENT_TYPE_LABEL', + 'TEST_DOCUMENT_TYPE_LABEL_EDITED', 'TEST_DOCUMENT_DESCRIPTION', + 'TEST_HYBRID_DOCUMENT', 'TEST_MULTI_PAGE_TIFF', + 'TEST_MULTI_PAGE_TIFF_PATH', 'TEST_NON_ASCII_COMPRESSED_DOCUMENT_FILENAME', 'TEST_NON_ASCII_COMPRESSED_DOCUMENT_PATH', 'TEST_NON_ASCII_DOCUMENT_FILENAME', 'TEST_NON_ASCII_DOCUMENT_PATH', 'TEST_SMALL_DOCUMENT_CHECKSUM', 'TEST_SMALL_DOCUMENT_FILENAME', @@ -25,8 +25,11 @@ TEST_DEU_DOCUMENT_FILENAME = 'deu_website.png' TEST_DOCUMENT_DESCRIPTION = 'test description' TEST_DOCUMENT_DESCRIPTION_EDITED = 'test document description edited' TEST_DOCUMENT_FILENAME = 'mayan_11_1.pdf' -TEST_DOCUMENT_TYPE = 'test_document_type' -TEST_DOCUMENT_TYPE_2 = 'test document type 2' +TEST_DOCUMENT_TYPE_LABEL = 'test_document_type' +TEST_DOCUMENT_TYPE_2_LABEL = 'test document type 2' +TEST_DOCUMENT_TYPE_LABEL_EDITED = 'test document type edited label' +TEST_DOCUMENT_TYPE_QUICK_LABEL = 'test quick label' +TEST_DOCUMENT_TYPE_QUICK_LABEL_EDITED = 'test quick label edited' TEST_DOCUMENT_VERSION_COMMENT_EDITED = 'test document version comment edited' TEST_HYBRID_DOCUMENT = 'hybrid_text_and_image.pdf' TEST_MULTI_PAGE_TIFF = 'multi_page.tiff' @@ -36,6 +39,8 @@ TEST_OFFICE_DOCUMENT = 'simple_2_page_document.doc' TEST_SMALL_DOCUMENT_FILENAME = 'title_page.png' TEST_SMALL_DOCUMENT_CHECKSUM = 'efa10e6cc21f83078aaa94d5cbe51de67b51af706143b\ afc7fd6d4c02124879a' +TEST_TRANSFORMATION_NAME = 'rotate' +TEST_TRANSFORMATION_ARGUMENT = 'degrees: 180' # File paths TEST_COMPRESSED_DOCUMENT_PATH = os.path.join( @@ -50,7 +55,6 @@ TEST_DOCUMENT_PATH = os.path.join( settings.BASE_DIR, 'apps', 'documents', 'tests', 'contrib', 'sample_documents', TEST_DOCUMENT_FILENAME ) -TEST_DOCUMENT_TYPE_QUICK_LABEL = 'test quick label' TEST_HYBRID_DOCUMENT_PATH = os.path.join( settings.BASE_DIR, 'apps', 'documents', 'tests', 'contrib', 'sample_documents', TEST_HYBRID_DOCUMENT diff --git a/mayan/apps/documents/tests/test_api.py b/mayan/apps/documents/tests/test_api.py index 95fd104978..4b53236c17 100644 --- a/mayan/apps/documents/tests/test_api.py +++ b/mayan/apps/documents/tests/test_api.py @@ -21,9 +21,9 @@ from user_management.tests.literals import ( from .literals import ( TEST_DOCUMENT_DESCRIPTION_EDITED, TEST_DOCUMENT_FILENAME, - TEST_DOCUMENT_PATH, TEST_DOCUMENT_TYPE, - TEST_DOCUMENT_VERSION_COMMENT_EDITED, TEST_SMALL_DOCUMENT_FILENAME, - TEST_SMALL_DOCUMENT_PATH + TEST_DOCUMENT_PATH, TEST_DOCUMENT_TYPE_LABEL, + TEST_DOCUMENT_TYPE_LABEL_EDITED, TEST_DOCUMENT_VERSION_COMMENT_EDITED, + TEST_SMALL_DOCUMENT_FILENAME, TEST_SMALL_DOCUMENT_PATH ) from ..models import Document, DocumentType @@ -49,40 +49,46 @@ class DocumentTypeAPITestCase(BaseAPITestCase): response = self.client.post( reverse('rest_api:documenttype-list'), data={ - 'label': TEST_DOCUMENT_TYPE + 'label': TEST_DOCUMENT_TYPE_LABEL } ) self.assertEqual(response.status_code, 201) self.assertEqual(DocumentType.objects.all().count(), 1) self.assertEqual( - DocumentType.objects.all().first().label, TEST_DOCUMENT_TYPE + DocumentType.objects.all().first().label, TEST_DOCUMENT_TYPE_LABEL ) def test_document_type_edit_via_put(self): - document_type = DocumentType.objects.create(label=TEST_DOCUMENT_TYPE) + document_type = DocumentType.objects.create( + label=TEST_DOCUMENT_TYPE_LABEL + ) self.client.put( reverse('rest_api:documenttype-detail', args=(document_type.pk,)), - {'label': TEST_DOCUMENT_TYPE + 'edited'} + {'label': TEST_DOCUMENT_TYPE_LABEL_EDITED} ) document_type = DocumentType.objects.get(pk=document_type.pk) - self.assertEqual(document_type.label, TEST_DOCUMENT_TYPE + 'edited') + self.assertEqual(document_type.label, TEST_DOCUMENT_TYPE_LABEL_EDITED) def test_document_type_edit_via_patch(self): - document_type = DocumentType.objects.create(label=TEST_DOCUMENT_TYPE) + document_type = DocumentType.objects.create( + label=TEST_DOCUMENT_TYPE_LABEL + ) self.client.patch( reverse('rest_api:documenttype-detail', args=(document_type.pk,)), - {'label': TEST_DOCUMENT_TYPE + 'edited'} + {'label': TEST_DOCUMENT_TYPE_LABEL_EDITED} ) document_type = DocumentType.objects.get(pk=document_type.pk) - self.assertEqual(document_type.label, TEST_DOCUMENT_TYPE + 'edited') + self.assertEqual(document_type.label, TEST_DOCUMENT_TYPE_LABEL_EDITED) def test_document_type_delete(self): - document_type = DocumentType.objects.create(label=TEST_DOCUMENT_TYPE) + document_type = DocumentType.objects.create( + label=TEST_DOCUMENT_TYPE_LABEL + ) self.client.delete( reverse('rest_api:documenttype-detail', args=(document_type.pk,)) @@ -105,7 +111,7 @@ class DocumentAPITestCase(BaseAPITestCase): ) self.document_type = DocumentType.objects.create( - label=TEST_DOCUMENT_TYPE + label=TEST_DOCUMENT_TYPE_LABEL ) def tearDown(self): @@ -361,7 +367,7 @@ class TrashedDocumentAPITestCase(BaseAPITestCase): ) self.document_type = DocumentType.objects.create( - label=TEST_DOCUMENT_TYPE + label=TEST_DOCUMENT_TYPE_LABEL ) def tearDown(self): @@ -430,6 +436,3 @@ class TrashedDocumentAPITestCase(BaseAPITestCase): self.assertEqual(Document.trash.count(), 0) self.assertEqual(Document.objects.count(), 1) - - # TODO: def test_document_set_document_type(self): - # pass diff --git a/mayan/apps/documents/tests/test_models.py b/mayan/apps/documents/tests/test_models.py index cbcf1345c9..4977cefa99 100644 --- a/mayan/apps/documents/tests/test_models.py +++ b/mayan/apps/documents/tests/test_models.py @@ -10,7 +10,7 @@ from ..literals import STUB_EXPIRATION_INTERVAL from ..models import DeletedDocument, Document, DocumentType from .literals import ( - TEST_DOCUMENT_TYPE, TEST_DOCUMENT_PATH, TEST_MULTI_PAGE_TIFF_PATH, + TEST_DOCUMENT_TYPE_LABEL, TEST_DOCUMENT_PATH, TEST_MULTI_PAGE_TIFF_PATH, TEST_OFFICE_DOCUMENT_PATH, TEST_SMALL_DOCUMENT_PATH ) @@ -21,7 +21,7 @@ class GenericDocumentTestCase(BaseTestCase): super(GenericDocumentTestCase, self).setUp() self.document_type = DocumentType.objects.create( - label=TEST_DOCUMENT_TYPE + label=TEST_DOCUMENT_TYPE_LABEL ) with open(TEST_SMALL_DOCUMENT_PATH) as file_object: @@ -40,7 +40,7 @@ class DocumentTestCase(BaseTestCase): super(DocumentTestCase, self).setUp() self.document_type = DocumentType.objects.create( - label=TEST_DOCUMENT_TYPE + label=TEST_DOCUMENT_TYPE_LABEL ) with open(TEST_DOCUMENT_PATH) as file_object: @@ -53,7 +53,7 @@ class DocumentTestCase(BaseTestCase): super(DocumentTestCase, self).tearDown() def test_document_creation(self): - self.assertEqual(self.document_type.label, TEST_DOCUMENT_TYPE) + self.assertEqual(self.document_type.label, TEST_DOCUMENT_TYPE_LABEL) self.assertEqual(self.document.exists(), True) self.assertEqual(self.document.size, 272213) @@ -162,7 +162,7 @@ class OfficeDocumentTestCase(BaseTestCase): super(OfficeDocumentTestCase, self).setUp() self.document_type = DocumentType.objects.create( - label=TEST_DOCUMENT_TYPE + label=TEST_DOCUMENT_TYPE_LABEL ) with open(TEST_OFFICE_DOCUMENT_PATH) as file_object: @@ -191,7 +191,7 @@ class MultiPageTiffTestCase(BaseTestCase): def setUp(self): super(MultiPageTiffTestCase, self).setUp() self.document_type = DocumentType.objects.create( - label=TEST_DOCUMENT_TYPE + label=TEST_DOCUMENT_TYPE_LABEL ) with open(TEST_MULTI_PAGE_TIFF_PATH) as file_object: @@ -253,7 +253,7 @@ class DocumentManagerTestCase(BaseTestCase): def setUp(self): super(DocumentManagerTestCase, self).setUp() self.document_type = DocumentType.objects.create( - label=TEST_DOCUMENT_TYPE + label=TEST_DOCUMENT_TYPE_LABEL ) def tearDown(self): diff --git a/mayan/apps/documents/tests/test_views.py b/mayan/apps/documents/tests/test_views.py index bdeb16fabd..5210c6a88c 100644 --- a/mayan/apps/documents/tests/test_views.py +++ b/mayan/apps/documents/tests/test_views.py @@ -26,24 +26,19 @@ from ..permissions import ( ) from .literals import ( - TEST_DOCUMENT_TYPE, TEST_DOCUMENT_TYPE_QUICK_LABEL, - TEST_SMALL_DOCUMENT_FILENAME, TEST_SMALL_DOCUMENT_PATH, - TEST_VERSION_COMMENT + TEST_DOCUMENT_TYPE_LABEL, TEST_DOCUMENT_TYPE_2_LABEL, + TEST_DOCUMENT_TYPE_LABEL_EDITED, TEST_DOCUMENT_TYPE_QUICK_LABEL, + TEST_DOCUMENT_TYPE_QUICK_LABEL_EDITED, TEST_SMALL_DOCUMENT_FILENAME, + TEST_SMALL_DOCUMENT_PATH, TEST_TRANSFORMATION_ARGUMENT, + TEST_TRANSFORMATION_NAME, TEST_VERSION_COMMENT ) - -TEST_DOCUMENT_TYPE_EDITED_LABEL = 'test document type edited label' -TEST_DOCUMENT_TYPE_2_LABEL = 'test document type 2 label' -TEST_TRANSFORMATION_NAME = 'rotate' -TEST_TRANSFORMATION_ARGUMENT = 'degrees: 180' - - @override_settings(OCR_AUTO_OCR=False) class GenericDocumentViewTestCase(GenericViewTestCase): def setUp(self): super(GenericDocumentViewTestCase, self).setUp() self.document_type = DocumentType.objects.create( - label=TEST_DOCUMENT_TYPE + label=TEST_DOCUMENT_TYPE_LABEL ) with open(TEST_SMALL_DOCUMENT_PATH) as file_object: @@ -70,7 +65,9 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): self.assertEqual(response.status_code, 403) def test_document_view_with_permissions(self): - self.grant(permission=permission_document_view) + self.grant_access( + obj=self.document, permission=permission_document_view + ) response = self.get( 'documents:document_properties', args=(self.document.pk,), follow=True @@ -85,11 +82,13 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): self.assertContains(response, 'Total: 0', status_code=200) def test_document_list_view_with_permissions(self): - self.grant(permission=permission_document_view) + self.grant_access( + obj=self.document, permission=permission_document_view + ) response = self.get('documents:document_list') self.assertContains(response, self.document.label, status_code=200) - def _edit_document_type(self, document_type): + def _request_document_type_edit(self, document_type): return self.post( 'documents:document_document_type_edit', args=(self.document.pk,), @@ -101,11 +100,13 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): self.document.document_type, self.document_type ) - document_type = DocumentType.objects.create( + document_type_2 = DocumentType.objects.create( label=TEST_DOCUMENT_TYPE_2_LABEL ) - response = self._edit_document_type(document_type=document_type) + response = self._request_document_type_edit( + document_type=document_type_2 + ) self.assertContains( response, text='Select a valid choice', status_code=200 @@ -121,23 +122,29 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): self.document.document_type, self.document_type ) - document_type = DocumentType.objects.create( + document_type_2 = DocumentType.objects.create( label=TEST_DOCUMENT_TYPE_2_LABEL ) - self.grant(permission=permission_document_properties_edit) - self.grant(permission=permission_document_create) + self.grant_access( + obj=self.document, permission=permission_document_properties_edit + ) + self.grant_access( + obj=document_type_2, permission=permission_document_create + ) - response = self._edit_document_type(document_type=document_type) + response = self._request_document_type_edit( + document_type=document_type_2 + ) self.assertEqual(response.status_code, 302) self.assertEqual( Document.objects.get(pk=self.document.pk).document_type, - document_type + document_type_2 ) - def _multiple_document_type_edit(self, document_type): + def _request_multiple_document_type_edit(self, document_type): return self.post( 'documents:document_multiple_document_type_edit', data={ @@ -151,12 +158,12 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): Document.objects.first().document_type, self.document_type ) - document_type = DocumentType.objects.create( + document_type_2 = DocumentType.objects.create( label=TEST_DOCUMENT_TYPE_2_LABEL ) - response = self._multiple_document_type_edit( - document_type=document_type + response = self._request_multiple_document_type_edit( + document_type=document_type_2 ) self.assertContains( @@ -172,21 +179,25 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): Document.objects.first().document_type, self.document_type ) - document_type = DocumentType.objects.create( + document_type_2 = DocumentType.objects.create( label=TEST_DOCUMENT_TYPE_2_LABEL ) - self.grant(permission=permission_document_properties_edit) - self.grant(permission=permission_document_create) + self.grant_access( + obj=self.document, permission=permission_document_properties_edit + ) + self.grant_access( + obj=document_type_2, permission=permission_document_create + ) - response = self._multiple_document_type_edit( - document_type=document_type + response = self._request_multiple_document_type_edit( + document_type=document_type_2 ) self.assertEqual(response.status_code, 302) self.assertEqual( - Document.objects.first().document_type, document_type + Document.objects.first().document_type, document_type_2 ) def test_document_download_view_no_permission(self): @@ -203,7 +214,9 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): self.document.file_mimetype ) - self.grant(permission=permission_document_download) + self.grant_access( + obj=self.document, permission=permission_document_download + ) response = self.get( 'documents:document_download', args=(self.document.pk,) ) @@ -231,7 +244,9 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): self.expected_content_type = '{}; charset=utf-8'.format( self.document.file_mimetype ) - self.grant(permission=permission_document_download) + self.grant_access( + obj=self.document, permission=permission_document_download + ) response = self.get( 'documents:document_multiple_download', @@ -261,7 +276,9 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): # common.tests.mixins.ContentTypeCheckMixin self.expected_content_type = 'application/octet-stream; charset=utf-8' - self.grant(permission=permission_document_download) + self.grant_access( + obj=self.document, permission=permission_document_download + ) response = self.get( 'documents:document_version_download', args=( self.document.latest_version.pk, @@ -290,12 +307,14 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): self.assertEqual(response.status_code, 302) self.assertEqual(self.document.pages.count(), 0) - def test_document_update_page_count_view_with_permissions(self): + def test_document_update_page_count_view_with_permission(self): + # TODO: Revise permission association + page_count = self.document.pages.count() self.document.pages.all().delete() self.assertEqual(self.document.pages.count(), 0) - self.grant(permission=permission_document_tools) + self.grant_permission(permission=permission_document_tools) response = self.post( 'documents:document_update_page_count', @@ -316,12 +335,12 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): self.assertEqual(response.status_code, 302) self.assertEqual(self.document.pages.count(), 0) - def test_document_multiple_update_page_count_view_with_permissions(self): + def test_document_multiple_update_page_count_view_with_permission(self): page_count = self.document.pages.count() self.document.pages.all().delete() self.assertEqual(self.document.pages.count(), 0) - self.grant(permission=permission_document_tools) + self.grant_permission(permission=permission_document_tools) response = self.post( 'documents:document_multiple_update_page_count', @@ -344,7 +363,9 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): (repr(transformation),) ) - self.grant(permission=permission_document_view) + self.grant_access( + obj=self.document, permission=permission_document_view + ) response = self.post( 'documents:document_clear_transformations', @@ -357,7 +378,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): (repr(transformation),) ) - def test_document_clear_transformations_view_with_permissions(self): + def test_document_clear_transformations_view_with_access(self): document_page = self.document.pages.first() content_type = ContentType.objects.get_for_model(document_page) transformation = Transformation.objects.create( @@ -370,8 +391,12 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): (repr(transformation),) ) - self.grant(permission=permission_transformation_delete) - self.grant(permission=permission_document_view) + self.grant_access( + obj=self.document, permission=permission_transformation_delete + ) + self.grant_access( + obj=self.document, permission=permission_document_view + ) response = self.post( 'documents:document_clear_transformations', @@ -397,7 +422,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): (repr(transformation),) ) - self.grant(permission=permission_document_view) + self.grant_permission(permission=permission_document_view) response = self.post( 'documents:document_multiple_clear_transformations', @@ -410,10 +435,41 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): (repr(transformation),) ) + def test_document_multiple_clear_transformations_view_with_access(self): + document_page = self.document.pages.first() + content_type = ContentType.objects.get_for_model(document_page) + transformation = Transformation.objects.create( + content_type=content_type, object_id=document_page.pk, + name=TEST_TRANSFORMATION_NAME, + arguments=TEST_TRANSFORMATION_ARGUMENT + ) + + self.assertQuerysetEqual( + Transformation.objects.get_for_model(document_page), + (repr(transformation),) + ) + + self.grant_access( + obj=self.document, permission=permission_document_view + ) + self.grant_access( + obj=self.document, permission=permission_transformation_delete + ) + + response = self.post( + 'documents:document_multiple_clear_transformations', + data={'id_list': self.document.pk}, follow=True + ) + + self.assertEqual(response.status_code, 200) + self.assertEqual( + Transformation.objects.get_for_model(document_page).count(), 0 + ) + def _empty_trash(self): return self.post('documents:trash_can_empty') - def test_trash_can_empty_view_no_permissions(self): + def test_trash_can_empty_view_no_permission(self): self.document.delete() self.assertEqual(DeletedDocument.objects.count(), 1) @@ -427,7 +483,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): self.document.delete() self.assertEqual(DeletedDocument.objects.count(), 1) - self.grant(permission=permission_empty_trash) + self.grant_permission(permission=permission_empty_trash) response = self._empty_trash() @@ -444,8 +500,10 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): self.assertEqual(response.status_code, 403) - def test_document_page_view_with_permissions(self): - self.grant(permission=permission_document_view) + def test_document_page_view_with_access(self): + self.grant_access( + obj=self.document, permission=permission_document_view + ) response = self.get( 'documents:document_page_view', args=( self.document.pages.first().pk, @@ -470,8 +528,10 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase): response = self._request_print_view() self.assertEqual(response.status_code, 403) - def test_document_print_view_with_permissions(self): - self.grant(permission=permission_document_print) + def test_document_print_view_with_access(self): + self.grant_access( + obj=self.document, permission=permission_document_print + ) response = self._request_print_view() self.assertEqual(response.status_code, 200) @@ -490,8 +550,10 @@ class DocumentPageViewTestCase(GenericDocumentViewTestCase): response = self._document_page_list_view() self.assertEqual(response.status_code, 403) - def test_document_page_list_view_with_permission(self): - self.grant(permission_document_view) + def test_document_page_list_view_with_access(self): + self.grant_access( + obj=self.document, permission=permission_document_view + ) response = self._document_page_list_view() self.assertContains( response, text=self.document.label, status_code=200 @@ -503,21 +565,25 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase): super(DocumentTypeViewsTestCase, self).setUp() self.login_user() + def _request_document_type_create(self): + return self.post( + 'documents:document_type_create', + data={ + 'label': TEST_DOCUMENT_TYPE_LABEL, + 'delete_time_period': DEFAULT_DELETE_PERIOD, + 'delete_time_unit': DEFAULT_DELETE_TIME_UNIT + }, follow=True + ) + def test_document_type_create_view_no_permission(self): self.document_type.delete() self.assertEqual(Document.objects.count(), 0) - response = self.post( - 'documents:document_type_create', - data={ - 'label': TEST_DOCUMENT_TYPE, - 'delete_time_period': DEFAULT_DELETE_PERIOD, - 'delete_time_unit': DEFAULT_DELETE_TIME_UNIT - } - ) - - self.assertEqual(response.status_code, 403) + # Grant the document type view permission so that the post create + # redirect works + self.grant_permission(permission=permission_document_type_view) + response = self._request_document_type_create() self.assertEqual(DocumentType.objects.count(), 0) @@ -526,111 +592,197 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase): self.assertEqual(Document.objects.count(), 0) - self.grant(permission=permission_document_type_create) - self.grant(permission=permission_document_type_view) + self.grant_permission(permission=permission_document_type_create) + # Grant the document type view permission so that the post create + # redirect works + self.grant_permission(permission=permission_document_type_view) - response = self.post( - 'documents:document_type_create', - data={ - 'label': TEST_DOCUMENT_TYPE, - 'delete_time_period': DEFAULT_DELETE_PERIOD, - 'delete_time_unit': DEFAULT_DELETE_TIME_UNIT - }, follow=True - ) + response = self._request_document_type_create() self.assertContains(response, text='successfully', status_code=200) self.assertEqual(DocumentType.objects.count(), 1) self.assertEqual( - DocumentType.objects.first().label, TEST_DOCUMENT_TYPE + DocumentType.objects.first().label, TEST_DOCUMENT_TYPE_LABEL ) - def test_document_type_delete_view_no_permission(self): - response = self.post( - 'documents:document_type_delete', - args=(self.document_type.pk,) - ) - - self.assertEqual(response.status_code, 403) - self.assertEqual(DocumentType.objects.count(), 1) - - def test_document_type_delete_view_with_permission(self): - self.grant(permission=permission_document_type_delete) - self.grant(permission=permission_document_type_view) - - response = self.post( + def _request_document_type_delete(self): + return self.post( 'documents:document_type_delete', args=(self.document_type.pk,), follow=True ) + def test_document_type_delete_view_no_permission(self): + # Grant the document type view permission so that the post delete + # redirect works + self.grant_permission(permission=permission_document_type_view) + + self._request_document_type_delete() + + self.assertEqual(DocumentType.objects.count(), 1) + + def test_document_type_delete_view_with_access(self): + self.grant_access( + obj=self.document_type, permission=permission_document_type_delete + ) + # Grant the document type view permission so that the post delete + # redirect works + self.grant_permission(permission=permission_document_type_view) + + response = self._request_document_type_delete() + self.assertContains(response, 'successfully', status_code=200) self.assertEqual(DocumentType.objects.count(), 0) - def test_document_type_edit_view_no_permission(self): - response = self.post( + def _request_document_type_edit(self): + return self.post( 'documents:document_type_edit', args=(self.document_type.pk,), data={ - 'label': TEST_DOCUMENT_TYPE_EDITED_LABEL, - 'delete_time_period': DEFAULT_DELETE_PERIOD, - 'delete_time_unit': DEFAULT_DELETE_TIME_UNIT - } - ) - - self.assertEqual(response.status_code, 403) - - self.assertEqual( - DocumentType.objects.get(pk=self.document_type.pk).label, - TEST_DOCUMENT_TYPE - ) - - def test_document_type_edit_view_with_permission(self): - self.grant(permission=permission_document_type_edit) - self.grant(permission=permission_document_type_view) - - response = self.post( - 'documents:document_type_edit', - args=(self.document_type.pk,), - data={ - 'label': TEST_DOCUMENT_TYPE_EDITED_LABEL, + 'label': TEST_DOCUMENT_TYPE_LABEL_EDITED, 'delete_time_period': DEFAULT_DELETE_PERIOD, 'delete_time_unit': DEFAULT_DELETE_TIME_UNIT }, follow=True ) + def test_document_type_edit_view_no_permission(self): + response = self._request_document_type_edit() + + self.assertEqual( + DocumentType.objects.get(pk=self.document_type.pk).label, + TEST_DOCUMENT_TYPE_LABEL + ) + + def test_document_type_edit_view_with_access(self): + self.grant_access( + obj=self.document_type, permission=permission_document_type_edit + ) + + # Grant the document type view permission so that the post delete + # redirect works + self.grant_permission(permission=permission_document_type_view) + + response = self._request_document_type_edit() + self.assertContains(response, 'successfully', status_code=200) self.assertEqual( DocumentType.objects.get(pk=self.document_type.pk).label, - TEST_DOCUMENT_TYPE_EDITED_LABEL + TEST_DOCUMENT_TYPE_LABEL_EDITED + ) + + def _request_quick_label_create(self): + return self.post( + 'documents:document_type_filename_create', + args=(self.document_type.pk,), + data={ + 'filename': TEST_DOCUMENT_TYPE_QUICK_LABEL, + }, follow=True ) def test_document_type_quick_label_create_no_permission(self): - response = self.post( - 'documents:document_type_filename_create', - args=(self.document_type.pk,), - data={ - 'filename': TEST_DOCUMENT_TYPE_QUICK_LABEL, - }, follow=True + self.grant_access( + obj=self.document_type, permission=permission_document_type_view ) + self._request_quick_label_create() - self.assertEqual(response.status_code, 403) self.assertEqual(self.document_type.filenames.count(), 0) - def test_document_type_quick_label_create_with_permission(self): - self.grant(permission=permission_document_type_edit) - - response = self.post( - 'documents:document_type_filename_create', - args=(self.document_type.pk,), - data={ - 'filename': TEST_DOCUMENT_TYPE_QUICK_LABEL, - }, follow=True + def test_document_type_quick_label_create_with_access(self): + self.grant_access( + obj=self.document_type, permission=permission_document_type_view ) + self.grant_access( + obj=self.document_type, permission=permission_document_type_edit + ) + + response = self._request_quick_label_create() self.assertContains(response, 'reated', status_code=200) self.assertEqual(self.document_type.filenames.count(), 1) + def _create_quick_label(self): + self.document_type_filename = self.document_type.filenames.create( + filename=TEST_DOCUMENT_TYPE_QUICK_LABEL + ) + + def _request_quick_label_edit(self): + return self.post( + 'documents:document_type_filename_edit', + args=(self.document_type_filename.pk,), + data={ + 'filename': TEST_DOCUMENT_TYPE_QUICK_LABEL_EDITED, + }, follow=True + ) + + def test_document_type_quick_label_edit_no_permission(self): + self._create_quick_label() + self.grant_access( + obj=self.document_type, permission=permission_document_type_view + ) + response = self._request_quick_label_edit() + + self.assertEqual(response.status_code, 403) + self.assertEqual( + self.document_type_filename.filename, + TEST_DOCUMENT_TYPE_QUICK_LABEL + ) + + def test_document_type_quick_label_edit_with_access(self): + self.grant_access( + obj=self.document_type, permission=permission_document_type_edit + ) + self.grant_access( + obj=self.document_type, permission=permission_document_type_view + ) + + self._create_quick_label() + response = self._request_quick_label_edit() + self.assertEqual(response.status_code, 200) + + self.document_type_filename.refresh_from_db() + self.assertEqual( + self.document_type_filename.filename, + TEST_DOCUMENT_TYPE_QUICK_LABEL_EDITED + ) + + def _request_quick_label_delete(self): + return self.post( + 'documents:document_type_filename_delete', + args=(self.document_type_filename.pk,), + follow=True + ) + + def test_document_type_quick_label_delete_no_permission(self): + self._create_quick_label() + self.grant_access( + obj=self.document_type, permission=permission_document_type_view + ) + response = self._request_quick_label_delete() + + self.assertEqual( + self.document_type.filenames.count(), 1 + ) + self.assertEqual( + self.document_type.filenames.first().filename, + TEST_DOCUMENT_TYPE_QUICK_LABEL + ) + + def test_document_type_quick_label_delete_with_access(self): + self.grant_access( + obj=self.document_type, permission=permission_document_type_edit + ) + self.grant_access( + obj=self.document_type, permission=permission_document_type_view + ) + + self._create_quick_label() + response = self._request_quick_label_delete() + + self.assertEqual(response.status_code, 200) + self.assertEqual( + self.document_type.filenames.count(), 0 + ) class DocumentVersionTestCase(GenericDocumentViewTestCase): def setUp(self): @@ -649,8 +801,10 @@ class DocumentVersionTestCase(GenericDocumentViewTestCase): self.assertEqual(response.status_code, 403) - def test_document_version_list_with_permission(self): - self.grant(permission=permission_document_version_view) + def test_document_version_list_with_access(self): + self.grant_access( + obj=self.document, permission=permission_document_version_view + ) with open(TEST_SMALL_DOCUMENT_PATH) as file_object: self.document.new_version( @@ -678,7 +832,7 @@ class DocumentVersionTestCase(GenericDocumentViewTestCase): self.assertEqual(response.status_code, 403) self.assertEqual(self.document.versions.count(), 2) - def test_document_version_revert_with_permission(self): + def test_document_version_revert_with_access(self): first_version = self.document.latest_version with open(TEST_SMALL_DOCUMENT_PATH) as file_object: @@ -686,7 +840,9 @@ class DocumentVersionTestCase(GenericDocumentViewTestCase): file_object=file_object ) - self.grant(permission=permission_document_version_revert) + self.grant_access( + obj=self.document, permission=permission_document_version_revert + ) response = self.post( 'documents:document_version_revert', args=(first_version.pk,), @@ -697,8 +853,6 @@ class DocumentVersionTestCase(GenericDocumentViewTestCase): self.assertEqual(self.document.versions.count(), 1) - - class DeletedDocumentTestCase(GenericDocumentViewTestCase): def setUp(self): super(DeletedDocumentTestCase, self).setUp() @@ -715,11 +869,13 @@ class DeletedDocumentTestCase(GenericDocumentViewTestCase): self.assertEqual(DeletedDocument.objects.count(), 1) self.assertEqual(Document.objects.count(), 0) - def test_document_restore_view_with_permission(self): + def test_document_restore_view_with_access(self): self.document.delete() self.assertEqual(Document.objects.count(), 0) - self.grant(permission=permission_document_restore) + self.grant_access( + obj=self.document, permission=permission_document_restore + ) response = self.post( 'documents:document_restore', args=(self.document.pk,), follow=True @@ -737,8 +893,10 @@ class DeletedDocumentTestCase(GenericDocumentViewTestCase): self.assertEqual(DeletedDocument.objects.count(), 0) self.assertEqual(Document.objects.count(), 1) - def test_document_trash_with_permissions(self): - self.grant(permission=permission_document_trash) + def test_document_trash_with_access(self): + self.grant_access( + obj=self.document, permission=permission_document_trash + ) response = self.post( 'documents:document_trash', args=(self.document.pk,), @@ -761,12 +919,14 @@ class DeletedDocumentTestCase(GenericDocumentViewTestCase): self.assertEqual(Document.objects.count(), 0) self.assertEqual(DeletedDocument.objects.count(), 1) - def test_document_delete_with_permissions(self): + def test_document_delete_with_access(self): self.document.delete() self.assertEqual(Document.objects.count(), 0) self.assertEqual(DeletedDocument.objects.count(), 1) - self.grant(permission=permission_document_delete) + self.grant_access( + obj=self.document, permission=permission_document_delete + ) response = self.post( 'documents:document_delete', args=(self.document.pk,), @@ -784,10 +944,12 @@ class DeletedDocumentTestCase(GenericDocumentViewTestCase): self.assertNotContains(response, self.document.label, status_code=200) - def test_deleted_document_list_view_with_permissions(self): + def test_deleted_document_list_view_with_access(self): self.document.delete() - self.grant(permission=permission_document_view) + self.grant_access( + obj=self.document, permission=permission_document_view + ) response = self.get('documents:document_list_deleted') self.assertContains(response, self.document.label, status_code=200) @@ -820,9 +982,15 @@ class DuplicatedDocumentsViewsTestCase(GenericDocumentViewTestCase): response, text=self.document.label, status_code=200 ) - def test_duplicated_document_list_with_permissions(self): + def test_duplicated_document_list_with_access(self): self._upload_duplicate_document() - self.grant(permission=permission_document_view) + self.grant_access( + obj=self.document, permission=permission_document_view + ) + self.grant_access( + obj=self.document_duplicate, + permission=permission_document_view + ) response = self._request_duplicated_document_list() self.assertContains( @@ -835,9 +1003,15 @@ class DuplicatedDocumentsViewsTestCase(GenericDocumentViewTestCase): self.assertEqual(response.status_code, 403) - def test_document_duplicates_list_with_permissions(self): + def test_document_duplicates_list_with_access(self): self._upload_duplicate_document() - self.grant(permission=permission_document_view) + self.grant_access( + obj=self.document, permission=permission_document_view + ) + self.grant_access( + obj=self.document_duplicate, + permission=permission_document_view + ) response = self._request_document_duplicates_list() self.assertContains( diff --git a/mayan/apps/documents/views/document_type_views.py b/mayan/apps/documents/views/document_type_views.py index de853710df..b5f13ee0b5 100644 --- a/mayan/apps/documents/views/document_type_views.py +++ b/mayan/apps/documents/views/document_type_views.py @@ -44,7 +44,7 @@ class DocumentTypeDocumentListView(DocumentListView): class DocumentTypeListView(SingleObjectListView): model = DocumentType - view_permission = permission_document_type_view + object_permission = permission_document_type_view def get_extra_context(self): return { @@ -70,8 +70,8 @@ class DocumentTypeCreateView(SingleObjectCreateView): class DocumentTypeDeleteView(SingleObjectDeleteView): model = DocumentType + object_permission = permission_document_type_delete post_action_redirect = reverse_lazy('documents:document_type_list') - view_permission = permission_document_type_delete def get_extra_context(self): return { @@ -87,8 +87,8 @@ class DocumentTypeEditView(SingleObjectEditView): 'delete_time_unit' ) model = DocumentType + object_permission = permission_document_type_edit post_action_redirect = reverse_lazy('documents:document_type_list') - view_permission = permission_document_type_edit def get_extra_context(self): return { @@ -129,7 +129,7 @@ class DocumentTypeFilenameCreateView(SingleObjectCreateView): class DocumentTypeFilenameEditView(SingleObjectEditView): fields = ('enabled', 'filename',) model = DocumentTypeFilename - view_permission = permission_document_type_edit + object_permission = permission_document_type_edit def get_extra_context(self): document_type_filename = self.get_object() @@ -156,7 +156,7 @@ class DocumentTypeFilenameEditView(SingleObjectEditView): class DocumentTypeFilenameDeleteView(SingleObjectDeleteView): model = DocumentTypeFilename - view_permission = permission_document_type_edit + object_permission = permission_document_type_edit def get_extra_context(self): return { @@ -181,7 +181,7 @@ class DocumentTypeFilenameDeleteView(SingleObjectDeleteView): class DocumentTypeFilenameListView(SingleObjectListView): model = DocumentType - view_permission = permission_document_type_view + object_permission = permission_document_type_view def get_document_type(self): return get_object_or_404(DocumentType, pk=self.kwargs['pk']) diff --git a/mayan/apps/linking/tests/test_models.py b/mayan/apps/linking/tests/test_models.py index 306c03ec4e..d1982696f0 100644 --- a/mayan/apps/linking/tests/test_models.py +++ b/mayan/apps/linking/tests/test_models.py @@ -7,7 +7,7 @@ from django.test import override_settings from common.tests import BaseTestCase from documents.models import DocumentType -from documents.tests import TEST_DOCUMENT_PATH, TEST_DOCUMENT_TYPE +from documents.tests import TEST_SMALL_DOCUMENT_PATH, TEST_DOCUMENT_TYPE from user_management.tests.literals import ( TEST_ADMIN_EMAIL, TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME ) @@ -25,7 +25,7 @@ class SmartLinkTestCase(BaseTestCase): label=TEST_DOCUMENT_TYPE ) - with open(TEST_DOCUMENT_PATH) as file_object: + with open(TEST_SMALL_DOCUMENT_PATH) as file_object: self.document = self.document_type.new_document( file_object=file_object ) diff --git a/mayan/apps/mailer/tests/test_views.py b/mayan/apps/mailer/tests/test_views.py index ef52f39785..9f05fdd97d 100644 --- a/mayan/apps/mailer/tests/test_views.py +++ b/mayan/apps/mailer/tests/test_views.py @@ -62,8 +62,8 @@ class MailerViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase): self._create_user_mailer() self.login_user() - self.grant(permission_mailing_link) - self.grant(permission_user_mailer_use) + self.grant_permission(permission=permission_mailing_link) + self.grant_permission(permission=permission_user_mailer_use) self._request_document_link_send() @@ -83,8 +83,8 @@ class MailerViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase): self._create_user_mailer() self.login_user() - self.grant(permission_mailing_send_document) - self.grant(permission_user_mailer_use) + self.grant_permission(permission=permission_mailing_send_document) + self.grant_permission(permission=permission_user_mailer_use) self._request_document_send() @@ -113,7 +113,7 @@ class UserMailerViewTestCase(MailerTestMixin, GenericViewTestCase): self._create_user_mailer() self.login_user() - self.grant(permission_user_mailer_view) + self.grant_permission(permission=permission_user_mailer_view) response = self.get( 'mailer:user_mailer_list', @@ -137,7 +137,7 @@ class UserMailerViewTestCase(MailerTestMixin, GenericViewTestCase): self._create_user_mailer() self.login_user() - self.grant(permission_user_mailer_view) + self.grant_permission(permission=permission_user_mailer_view) self._request_user_mailer_delete() diff --git a/mayan/apps/metadata/tests/test_views.py b/mayan/apps/metadata/tests/test_views.py index 4b1b1ab03d..f08d6792e1 100644 --- a/mayan/apps/metadata/tests/test_views.py +++ b/mayan/apps/metadata/tests/test_views.py @@ -36,7 +36,7 @@ class DocumentMetadataTestCase(GenericDocumentViewTestCase): def test_metadata_add_view_no_permission(self): self.login_user() - self.grant(permission_document_view) + self.grant_permission(permission=permission_document_view) response = self.post( 'metadata:metadata_add', args=(self.document.pk,), @@ -51,9 +51,9 @@ class DocumentMetadataTestCase(GenericDocumentViewTestCase): def test_metadata_add_view_with_permission(self): self.login_user() - self.grant(permission_document_view) - self.grant(permission_metadata_document_add) - self.grant(permission_metadata_document_edit) + self.grant_permission(permission=permission_document_view) + self.grant_permission(permission=permission_metadata_document_add) + self.grant_permission(permission=permission_metadata_document_edit) response = self.post( 'metadata:metadata_add', args=(self.document.pk,), @@ -69,8 +69,8 @@ class DocumentMetadataTestCase(GenericDocumentViewTestCase): self.login_user() - self.grant(permission_document_properties_edit) - self.grant(permission_metadata_document_edit) + self.grant_permission(permission=permission_document_properties_edit) + self.grant_permission(permission=permission_metadata_document_edit) document_type_2 = DocumentType.objects.create( label=TEST_DOCUMENT_TYPE_2 @@ -119,7 +119,7 @@ class DocumentMetadataTestCase(GenericDocumentViewTestCase): self.assertEqual(len(self.document.metadata.all()), 1) - self.grant(permission_document_view) + self.grant_permission(permission=permission_document_view) # Test display of metadata removal form response = self.get( @@ -154,8 +154,8 @@ class DocumentMetadataTestCase(GenericDocumentViewTestCase): self.assertEqual(len(self.document.metadata.all()), 1) - self.grant(permission_document_view) - self.grant(permission_metadata_document_remove) + self.grant_permission(permission=permission_document_view) + self.grant_permission(permission=permission_metadata_document_remove) # Test display of metadata removal form response = self.get( @@ -186,9 +186,9 @@ class DocumentMetadataTestCase(GenericDocumentViewTestCase): def test_multiple_document_metadata_edit(self): self.login_user() - self.grant(permission_document_view) - self.grant(permission_metadata_document_add) - self.grant(permission_metadata_document_edit) + self.grant_permission(permission=permission_document_view) + self.grant_permission(permission=permission_metadata_document_add) + self.grant_permission(permission=permission_metadata_document_edit) with open(TEST_SMALL_DOCUMENT_PATH) as file_object: document_2 = self.document_type.new_document( @@ -209,9 +209,9 @@ class DocumentMetadataTestCase(GenericDocumentViewTestCase): def test_multiple_document_metadata_add(self): self.login_user() - self.grant(permission_document_view) - self.grant(permission_metadata_document_add) - self.grant(permission_metadata_document_edit) + self.grant_permission(permission=permission_document_view) + self.grant_permission(permission=permission_metadata_document_add) + self.grant_permission(permission=permission_metadata_document_edit) with open(TEST_SMALL_DOCUMENT_PATH) as file_object: document_2 = self.document_type.new_document( diff --git a/mayan/apps/ocr/tests/test_views.py b/mayan/apps/ocr/tests/test_views.py index f8b258584c..0c67c5041d 100644 --- a/mayan/apps/ocr/tests/test_views.py +++ b/mayan/apps/ocr/tests/test_views.py @@ -30,7 +30,7 @@ class OCRViewsTestCase(GenericDocumentViewTestCase): self.assertEqual(response.status_code, 403) def test_document_content_view_with_permission(self): - self.grant(permission_ocr_content_view) + self.grant_permission(permission=permission_ocr_content_view) response = self._document_content_view() @@ -48,7 +48,7 @@ class OCRViewsTestCase(GenericDocumentViewTestCase): def test_document_download_view_with_permission(self): self.expected_content_type = 'application/octet-stream; charset=utf-8' - self.grant(permission=permission_ocr_content_view) + self.grant_permission(permission=permission_ocr_content_view) response = self.get( 'ocr:document_ocr_download', args=(self.document.pk,) ) diff --git a/mayan/apps/smart_settings/tests/test_view_permissions.py b/mayan/apps/smart_settings/tests/test_view_permissions.py index 010f32097c..7afca43d83 100644 --- a/mayan/apps/smart_settings/tests/test_view_permissions.py +++ b/mayan/apps/smart_settings/tests/test_view_permissions.py @@ -21,7 +21,7 @@ class SmartSettingViewPermissionsTestCase(GenericViewTestCase): self.assertEqual(response.status_code, 403) def test_view_access_permitted(self): - self.grant(permission_settings_view) + self.grant_permission(permission=permission_settings_view) response = self.get('settings:namespace_list') self.assertEqual(response.status_code, 200) diff --git a/mayan/apps/sources/tests/test_views.py b/mayan/apps/sources/tests/test_views.py index 41d5131a16..081d79511a 100644 --- a/mayan/apps/sources/tests/test_views.py +++ b/mayan/apps/sources/tests/test_views.py @@ -12,7 +12,7 @@ from common.utils import fs_cleanup, mkdtemp from documents.models import Document, DocumentType from documents.permissions import permission_document_create from documents.tests import ( - TEST_DOCUMENT_DESCRIPTION, TEST_DOCUMENT_PATH, TEST_DOCUMENT_TYPE, + TEST_DOCUMENT_DESCRIPTION, TEST_SMALL_DOCUMENT_PATH, TEST_DOCUMENT_TYPE, TEST_SMALL_DOCUMENT_CHECKSUM, TEST_SMALL_DOCUMENT_PATH ) from documents.tests.test_views import GenericDocumentViewTestCase @@ -60,7 +60,7 @@ class DocumentUploadTestCase(GenericDocumentViewTestCase): def test_upload_wizard_with_permission(self): self.login_user() - self.grant(permission_document_create) + self.grant_permission(permission=permission_document_create) response = self._request_upload_wizard() @@ -85,7 +85,7 @@ class DocumentUploadTestCase(GenericDocumentViewTestCase): ) acl.permissions.add(permission_document_create.stored_permission) - with open(TEST_DOCUMENT_PATH) as file_object: + with open(TEST_SMALL_DOCUMENT_PATH) as file_object: response = self.post( 'sources:upload_interactive', args=(self.source.pk,), data={ 'source-file': file_object, @@ -227,7 +227,7 @@ class StagingFolderTestCase(GenericViewTestCase): def test_staging_folder_delete_with_permission(self): self.login_user() - self.grant(permission_staging_file_delete) + self.grant_permission(permission=permission_staging_file_delete) staging_folder = StagingFolderSource.objects.create( label=TEST_SOURCE_LABEL, @@ -262,7 +262,7 @@ class SourcesTestCase(GenericDocumentViewTestCase): self.login_user() - self.grant(permission_sources_setup_view) + self.grant_permission(permission=permission_sources_setup_view) response = self.get(viewname='sources:setup_source_list') @@ -280,8 +280,8 @@ class SourcesTestCase(GenericDocumentViewTestCase): def test_source_create_view_with_permission(self): self.login_user() - self.grant(permission_sources_setup_create) - self.grant(permission_sources_setup_view) + self.grant_permission(permission=permission_sources_setup_create) + self.grant_permission(permission=permission_sources_setup_view) response = self.post( args=(SOURCE_CHOICE_WEB_FORM,), follow=True, @@ -301,7 +301,7 @@ class SourcesTestCase(GenericDocumentViewTestCase): def test_source_create_view_no_permission(self): self.login_user() - self.grant(permission_sources_setup_view) + self.grant_permission(permission=permission_sources_setup_view) response = self.post( args=(SOURCE_CHOICE_WEB_FORM,), follow=True, @@ -319,8 +319,8 @@ class SourcesTestCase(GenericDocumentViewTestCase): self.login_user() - self.grant(permission_sources_setup_delete) - self.grant(permission_sources_setup_view) + self.grant_permission(permission=permission_sources_setup_delete) + self.grant_permission(permission=permission_sources_setup_view) response = self.post( args=(self.source.pk,), follow=True, @@ -335,7 +335,7 @@ class SourcesTestCase(GenericDocumentViewTestCase): self.login_user() - self.grant(permission_sources_setup_view) + self.grant_permission(permission=permission_sources_setup_view) response = self.post( args=(self.source.pk,), follow=True, diff --git a/mayan/apps/tags/tests/test_views.py b/mayan/apps/tags/tests/test_views.py index 03175b5704..6b4301694a 100644 --- a/mayan/apps/tags/tests/test_views.py +++ b/mayan/apps/tags/tests/test_views.py @@ -50,7 +50,7 @@ class TagViewTestCase(GenericDocumentViewTestCase): self.tag.delete() self.assertEqual(Tag.objects.count(), 0) - self.grant(permission_tag_create) + self.grant_permission(permission=permission_tag_create) response = self.post( 'tags:tag_create', data={ @@ -83,7 +83,7 @@ class TagViewTestCase(GenericDocumentViewTestCase): self.assertEqual(Tag.objects.count(), 1) - self.grant(permission_tag_delete) + self.grant_permission(permission=permission_tag_delete) response = self.post( 'tags:tag_delete', args=(self.tag.pk,), follow=True @@ -110,7 +110,7 @@ class TagViewTestCase(GenericDocumentViewTestCase): self.assertEqual(Tag.objects.count(), 1) - self.grant(permission_tag_delete) + self.grant_permission(permission=permission_tag_delete) response = self.post( 'tags:tag_multiple_delete', data={'id_list': self.tag.pk}, @@ -138,7 +138,7 @@ class TagViewTestCase(GenericDocumentViewTestCase): def test_tag_edit_view_with_permissions(self): self.login_user() - self.grant(permission_tag_edit) + self.grant_permission(permission=permission_tag_edit) response = self.post( 'tags:tag_edit', args=(self.tag.pk,), data={ @@ -163,8 +163,8 @@ class TagViewTestCase(GenericDocumentViewTestCase): self.tag.documents.add(self.document) - self.grant(permission_tag_view) - self.grant(permission_document_view) + self.grant_permission(permission=permission_tag_view) + self.grant_permission(permission=permission_document_view) response = self.get('documents:document_list') @@ -175,7 +175,7 @@ class TagViewTestCase(GenericDocumentViewTestCase): self.assertEqual(self.document.tags.count(), 0) - self.grant(permission_tag_view) + self.grant_permission(permission=permission_tag_view) response = self.post( 'tags:tag_attach', args=(self.document.pk,), data={ @@ -194,10 +194,10 @@ class TagViewTestCase(GenericDocumentViewTestCase): self.assertEqual(self.document.tags.count(), 0) - self.grant(permission_tag_attach) + self.grant_permission(permission=permission_tag_attach) # permission_tag_view is needed because the form filters the # choices - self.grant(permission_tag_view) + self.grant_permission(permission=permission_tag_view) response = self.post( 'tags:tag_attach', args=(self.document.pk,), data={ @@ -216,7 +216,7 @@ class TagViewTestCase(GenericDocumentViewTestCase): self.login_user() self.assertEqual(self.document.tags.count(), 0) - self.grant(permission_tag_view) + self.grant_permission(permission=permission_tag_view) response = self.post( 'tags:multiple_documents_tag_attach', data={ @@ -233,11 +233,11 @@ class TagViewTestCase(GenericDocumentViewTestCase): self.assertEqual(self.document.tags.count(), 0) - self.grant(permission_tag_attach) + self.grant_permission(permission=permission_tag_attach) # permission_tag_view is needed because the form filters the # choices - self.grant(permission_tag_view) + self.grant_permission(permission=permission_tag_view) response = self.post( 'tags:multiple_documents_tag_attach', data={ @@ -258,7 +258,7 @@ class TagViewTestCase(GenericDocumentViewTestCase): self.document.tags.add(self.tag) self.assertQuerysetEqual(self.document.tags.all(), (repr(self.tag),)) - self.grant(permission_tag_view) + self.grant_permission(permission=permission_tag_view) response = self.post( 'tags:single_document_multiple_tag_remove', @@ -277,8 +277,8 @@ class TagViewTestCase(GenericDocumentViewTestCase): self.document.tags.add(self.tag) self.assertQuerysetEqual(self.document.tags.all(), (repr(self.tag),)) - self.grant(permission_tag_remove) - self.grant(permission_tag_view) + self.grant_permission(permission=permission_tag_remove) + self.grant_permission(permission=permission_tag_view) response = self.post( 'tags:single_document_multiple_tag_remove', @@ -297,7 +297,7 @@ class TagViewTestCase(GenericDocumentViewTestCase): self.document.tags.add(self.tag) self.assertQuerysetEqual(self.document.tags.all(), (repr(self.tag),)) - self.grant(permission_tag_view) + self.grant_permission(permission=permission_tag_view) response = self.post( 'tags:multiple_documents_selection_tag_remove', @@ -316,8 +316,8 @@ class TagViewTestCase(GenericDocumentViewTestCase): self.document.tags.add(self.tag) self.assertQuerysetEqual(self.document.tags.all(), (repr(self.tag),)) - self.grant(permission_tag_remove) - self.grant(permission_tag_view) + self.grant_permission(permission=permission_tag_remove) + self.grant_permission(permission=permission_tag_view) response = self.post( 'tags:multiple_documents_selection_tag_remove', diff --git a/mayan/apps/user_management/tests/test_views.py b/mayan/apps/user_management/tests/test_views.py index d32f751fb2..3ff80d9008 100644 --- a/mayan/apps/user_management/tests/test_views.py +++ b/mayan/apps/user_management/tests/test_views.py @@ -35,7 +35,7 @@ class UserManagementViewTestCase(GenericViewTestCase): ) def test_user_set_password_view_no_permissions(self): - self.grant(permission=permission_user_view) + self.grant_permission(permission=permission_user_view) response = self._set_password(password=TEST_USER_PASSWORD_EDITED) @@ -53,8 +53,8 @@ class UserManagementViewTestCase(GenericViewTestCase): self.assertEqual(response.status_code, 302) def test_user_set_password_view_with_permissions(self): - self.grant(permission=permission_user_edit) - self.grant(permission=permission_user_view) + self.grant_permission(permission=permission_user_edit) + self.grant_permission(permission=permission_user_view) response = self._set_password(password=TEST_USER_PASSWORD_EDITED) @@ -78,7 +78,7 @@ class UserManagementViewTestCase(GenericViewTestCase): ) def test_user_multiple_set_password_view_no_permissions(self): - self.grant(permission=permission_user_view) + self.grant_permission(permission=permission_user_view) response = self._multiple_user_set_password( password=TEST_USER_PASSWORD_EDITED @@ -98,8 +98,8 @@ class UserManagementViewTestCase(GenericViewTestCase): self.assertEqual(response.status_code, 302) def test_user_multiple_set_password_view_with_permissions(self): - self.grant(permission=permission_user_edit) - self.grant(permission=permission_user_view) + self.grant_permission(permission=permission_user_edit) + self.grant_permission(permission=permission_user_view) response = self._multiple_user_set_password( password=TEST_USER_PASSWORD_EDITED @@ -120,7 +120,7 @@ class UserManagementViewTestCase(GenericViewTestCase): username=TEST_USER_TO_DELETE_USERNAME ) - self.grant(permission=permission_user_view) + self.grant_permission(permission=permission_user_view) response = self.post( 'user_management:user_delete', args=(user.pk,) @@ -134,8 +134,8 @@ class UserManagementViewTestCase(GenericViewTestCase): username=TEST_USER_TO_DELETE_USERNAME ) - self.grant(permission=permission_user_delete) - self.grant(permission=permission_user_view) + self.grant_permission(permission=permission_user_delete) + self.grant_permission(permission=permission_user_view) response = self.post( 'user_management:user_delete', args=(user.pk,), follow=True @@ -149,7 +149,7 @@ class UserManagementViewTestCase(GenericViewTestCase): username=TEST_USER_TO_DELETE_USERNAME ) - self.grant(permission=permission_user_view) + self.grant_permission(permission=permission_user_view) response = self.post( 'user_management:user_multiple_delete', data={ @@ -165,8 +165,8 @@ class UserManagementViewTestCase(GenericViewTestCase): username=TEST_USER_TO_DELETE_USERNAME ) - self.grant(permission=permission_user_delete) - self.grant(permission=permission_user_view) + self.grant_permission(permission=permission_user_delete) + self.grant_permission(permission=permission_user_view) response = self.post( 'user_management:user_multiple_delete', data={