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.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2017-07-17 20:41:11 -04:00
parent 3cbe90567f
commit f9eb7d0fb5
21 changed files with 490 additions and 277 deletions

View File

@@ -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)
==================

View File

@@ -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.

View File

@@ -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(

View File

@@ -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
)

View File

@@ -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)

View File

@@ -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
)

View File

@@ -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()

View File

@@ -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')

View File

@@ -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

View File

@@ -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

View File

@@ -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):

File diff suppressed because it is too large Load Diff

View File

@@ -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'])

View File

@@ -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
)

View File

@@ -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()

View File

@@ -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(

View File

@@ -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,)
)

View File

@@ -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)

View File

@@ -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,

View File

@@ -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',

View File

@@ -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={