Update documents app

Rename the DeletedDocument proxy model to a TrashedDocument.

Rename the deleted_document views to trashed_document.

Rename the document and deleted_document URL parameters to
trashed_document.

Update URL parameters to the '_id' form.

Add keyword arguments.

Update use of .filter_by_access().

Enclose trashed document restore method in a transaction.

Sort arguments.

Update app for compliance with MERCs 5 and 6.

Add document page view tests.

Add favorite document view tests.

Movernize tests.

Replace use of urlencode with furl.

Update views to use ExternalObjectMixin.

Refactor the document and version download views.

Rename the DocumentDocumentTypeEditView to DocumentChangeTypeView.

Move the trashed document views to their own module.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-01-28 05:25:48 -04:00
parent 7532429b0b
commit 74dfa53787
40 changed files with 1914 additions and 1615 deletions

View File

@@ -18,27 +18,25 @@ class DocumentTestMixin(object):
auto_create_document_type = True
auto_upload_document = True
test_document_filename = TEST_SMALL_DOCUMENT_FILENAME
test_document_path = None
def _create_document_type(self):
self.document_type = DocumentType.objects.create(
label=TEST_DOCUMENT_TYPE_LABEL
)
def upload_document(self, filename=None):
self._calculate_test_document_path()
with open(self.test_document_path, mode='rb') as file_object:
document = self.document_type.new_document(
file_object=file_object,
label=filename or self.test_document_filename
)
return document
def _create_document(self, *args, **kwargs):
"""
Alias for upload_document()
"""
self.test_document = self.upload_document(*args, **kwargs)
def _calculate_test_document_path(self):
self.test_document_path = os.path.join(
settings.BASE_DIR, 'apps', 'documents', 'tests', 'contrib',
'sample_documents', self.test_document_filename
)
if not self.test_document_path:
self.test_document_path = os.path.join(
settings.BASE_DIR, 'apps', 'documents', 'tests', 'contrib',
'sample_documents', self.test_document_filename
)
def setUp(self):
super(DocumentTestMixin, self).setUp()
@@ -54,6 +52,18 @@ class DocumentTestMixin(object):
document_type.delete()
super(DocumentTestMixin, self).tearDown()
def upload_document(self, document_type=None, filename=None):
self._calculate_test_document_path()
document_type = document_type or self.document_type
with open(self.test_document_path, mode='rb') as file_object:
document = document_type.new_document(
file_object=file_object,
label=filename or self.test_document_filename
)
return document
class DocumentTypeQuickLabelTestMixin(object):
def _create_quick_label(self):

View File

@@ -11,10 +11,10 @@ from mayan.apps.rest_api.tests import BaseAPITestCase
from ..models import Document, DocumentType
from ..permissions import (
permission_document_create, permission_document_delete,
permission_document_download, permission_document_edit,
permission_document_new_version, permission_document_properties_edit,
permission_document_restore, permission_document_trash,
permission_document_create, permission_document_download,
permission_document_edit, permission_document_new_version,
permission_document_properties_edit, permission_document_trash,
permission_trashed_document_delete, permission_trashed_document_restore,
permission_document_type_create, permission_document_type_delete,
permission_document_type_edit, permission_document_version_revert,
permission_document_version_view, permission_document_view
@@ -61,7 +61,7 @@ class DocumentTypeAPITestCase(BaseAPITestCase):
def _request_document_type_patch(self):
return self.patch(
viewname='rest_api:documenttype-detail', kwargs={
'document_type_pk': self.document_type.pk
'document_type_id': self.document_type.pk
}, data={'label': TEST_DOCUMENT_TYPE_LABEL_EDITED}
)
@@ -90,7 +90,7 @@ class DocumentTypeAPITestCase(BaseAPITestCase):
def _request_document_type_put(self):
return self.put(
viewname='rest_api:documenttype-detail', kwargs={
'document_type_pk': self.document_type.pk
'document_type_id': self.document_type.pk
}, data={'label': TEST_DOCUMENT_TYPE_LABEL_EDITED}
)
@@ -119,7 +119,7 @@ class DocumentTypeAPITestCase(BaseAPITestCase):
def _request_document_type_delete(self):
return self.delete(
viewname='rest_api:documenttype-detail', kwargs={
'document_type_pk': self.document_type.pk
'document_type_id': self.document_type.pk
}
)
@@ -207,7 +207,7 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
with open(TEST_DOCUMENT_PATH, mode='rb') as file_descriptor:
return self.post(
viewname='rest_api:document-version-list', kwargs={
'document_pk': self.document.pk
'document_id': self.document.pk
}, data={
'comment': '', 'file': file_descriptor,
}
@@ -247,8 +247,8 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_version_revert(self):
return self.delete(
viewname='rest_api:documentversion-detail', kwargs={
'document_pk': self.document.pk,
'document_version_pk': self.document.latest_version.pk
'document_id': self.document.pk,
'document_version_id': self.document.latest_version.pk
}
)
@@ -275,7 +275,7 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_version_list(self):
return self.get(
viewname='rest_api:document-version-list',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_document_version_list_no_permission(self):
@@ -301,7 +301,7 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_download(self):
return self.get(
viewname='rest_api:document-download',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_document_download_no_permission(self):
@@ -329,8 +329,8 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_version_download(self):
return self.get(
viewname='rest_api:documentversion-download', kwargs={
'document_pk': self.document.pk,
'document_version_pk': self.document.latest_version.pk,
'document_id': self.document.pk,
'document_version_id': self.document.latest_version.pk,
}
)
@@ -362,8 +362,8 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
response = self.get(
viewname='rest_api:documentversion-download', kwargs={
'document_pk': self.document.pk,
'document_version_pk': self.document.latest_version.pk,
'document_id': self.document.pk,
'document_version_id': self.document.latest_version.pk,
}, data={'preserve_extension': True}
)
@@ -380,8 +380,8 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_version_edit_via_patch(self):
return self.patch(
viewname='rest_api:documentversion-detail', kwargs={
'document_pk': self.document.pk,
'document_version_pk': self.document.latest_version.pk,
'document_id': self.document.pk,
'document_version_id': self.document.latest_version.pk,
}, data={'comment': TEST_DOCUMENT_VERSION_COMMENT_EDITED}
)
@@ -407,8 +407,8 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_version_edit_via_put(self):
return self.put(
viewname='rest_api:documentversion-detail', kwargs={
'document_pk': self.document.pk,
'document_version_pk': self.document.latest_version.pk,
'document_id': self.document.pk,
'document_version_id': self.document.latest_version.pk,
}, data={'comment': TEST_DOCUMENT_VERSION_COMMENT_EDITED}
)
@@ -434,7 +434,7 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_description_edit_via_patch(self):
return self.patch(
viewname='rest_api:document-detail',
kwargs={'document_pk': self.document.pk},
kwargs={'document_id': self.document.pk},
data={'description': TEST_DOCUMENT_DESCRIPTION_EDITED}
)
@@ -459,7 +459,7 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_description_edit_via_put(self):
return self.put(
viewname='rest_api:document-detail',
kwargs={'document_pk': self.document.pk},
kwargs={'document_id': self.document.pk},
data={'description': TEST_DOCUMENT_DESCRIPTION_EDITED}
)
@@ -491,8 +491,8 @@ class DocumentPageAPITestCase(DocumentTestMixin, BaseAPITestCase):
page = self.document.pages.first()
return self.get(
viewname='rest_api:documentpage-image', kwargs={
'document_pk': page.document.pk,
'document_version_pk': page.document_version.pk, 'document_page_pk': page.pk
'document_id': page.document.pk,
'document_version_id': page.document_version.pk, 'document_page_id': page.pk
}
)
@@ -518,7 +518,7 @@ class TrashedDocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_move_to_trash(self):
return self.delete(
viewname='rest_api:document-detail',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_document_move_to_trash_no_permission(self):
@@ -540,7 +540,7 @@ class TrashedDocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_trashed_document_delete_view(self):
return self.delete(
viewname='rest_api:trasheddocument-detail',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_trashed_document_delete_from_trash_no_access(self):
@@ -554,7 +554,7 @@ class TrashedDocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def test_trashed_document_delete_from_trash_with_access(self):
self.document = self.upload_document()
self.document.delete()
self.grant_access(permission=permission_document_delete, obj=self.document)
self.grant_access(permission=permission_trashed_document_delete, obj=self.document)
response = self._request_trashed_document_delete_view()
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(Document.objects.count(), 0)
@@ -563,7 +563,7 @@ class TrashedDocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_trashed_document_detail_view(self):
return self.get(
viewname='rest_api:trasheddocument-detail',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_trashed_document_detail_view_no_access(self):
@@ -608,7 +608,7 @@ class TrashedDocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_trashed_document_restore_view(self):
return self.post(
viewname='rest_api:trasheddocument-restore',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_trashed_document_restore_no_access(self):
@@ -622,7 +622,7 @@ class TrashedDocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def test_trashed_document_restore_with_access(self):
self.document = self.upload_document()
self.document.delete()
self.grant_access(permission=permission_document_restore, obj=self.document)
self.grant_access(permission=permission_trashed_document_restore, obj=self.document)
response = self._request_trashed_document_restore_view()
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(Document.trash.count(), 0)

View File

@@ -9,19 +9,15 @@ from .literals import TEST_MULTI_PAGE_TIFF
class DocumentPageViewTestCase(GenericDocumentViewTestCase):
def setUp(self):
super(DocumentPageViewTestCase, self).setUp()
self.login_user()
def _document_page_list_view(self):
return self.get(
viewname='documents:document_pages',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_document_page_list_view_no_permission(self):
response = self._document_page_list_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
def test_document_page_list_view_with_access(self):
self.grant_access(
@@ -32,18 +28,39 @@ class DocumentPageViewTestCase(GenericDocumentViewTestCase):
response=response, text=self.document.label, status_code=200
)
def _request_document_page_view(self, document_page):
return self.get(
viewname='documents:document_page_view', kwargs={
'document_page_id': document_page.pk
}
)
def test_document_page_view_no_permissions(self):
response = self._request_document_page_view(
document_page=self.document.pages.first()
)
self.assertEqual(response.status_code, 404)
def test_document_page_view_with_access(self):
self.grant_access(
obj=self.document, permission=permission_document_view
)
response = self._request_document_page_view(
document_page=self.document.pages.first()
)
self.assertContains(
response=response, text=force_text(self.document.pages.first()),
status_code=200
)
class DocumentPageNavigationViewTestCase(GenericDocumentViewTestCase):
test_document_filename = TEST_MULTI_PAGE_TIFF
def setUp(self):
super(DocumentPageNavigationViewTestCase, self).setUp()
self.login_user()
def _request_document_page_navigation_next_view(self):
return self.get(
viewname='documents:document_page_navigation_next',
kwargs={'document_page_pk': self.document.pages.first().pk},
kwargs={'document_page_id': self.document.pages.first().pk},
follow=True
)
@@ -51,7 +68,6 @@ class DocumentPageNavigationViewTestCase(GenericDocumentViewTestCase):
self.grant_access(
obj=self.document, permission=permission_document_view
)
response = self._request_document_page_navigation_next_view()
self.assertContains(
@@ -62,7 +78,7 @@ class DocumentPageNavigationViewTestCase(GenericDocumentViewTestCase):
def _request_document_page_navigation_last_view(self):
return self.get(
viewname='documents:document_page_navigation_last',
kwargs={'document_page_pk': self.document.pages.first().pk},
kwargs={'document_page_id': self.document.pages.first().pk},
follow=True
)
@@ -70,7 +86,6 @@ class DocumentPageNavigationViewTestCase(GenericDocumentViewTestCase):
self.grant_access(
obj=self.document, permission=permission_document_view
)
response = self._request_document_page_navigation_last_view()
self.assertContains(
@@ -81,7 +96,7 @@ class DocumentPageNavigationViewTestCase(GenericDocumentViewTestCase):
def _request_document_page_navigation_previous_view(self):
return self.get(
viewname='documents:document_page_navigation_previous',
kwargs={'document_page_pk': self.document.pages.last().pk},
kwargs={'document_page_id': self.document.pages.last().pk},
follow=True
)
@@ -89,7 +104,6 @@ class DocumentPageNavigationViewTestCase(GenericDocumentViewTestCase):
self.grant_access(
obj=self.document, permission=permission_document_view
)
response = self._request_document_page_navigation_previous_view()
self.assertContains(
@@ -100,7 +114,7 @@ class DocumentPageNavigationViewTestCase(GenericDocumentViewTestCase):
def _request_document_page_navigation_first_view(self):
return self.get(
viewname='documents:document_page_navigation_first',
kwargs={'document_page_pk': self.document.pages.last().pk},
kwargs={'document_page_id': self.document.pages.last().pk},
follow=True
)
@@ -108,7 +122,6 @@ class DocumentPageNavigationViewTestCase(GenericDocumentViewTestCase):
self.grant_access(
obj=self.document, permission=permission_document_view
)
response = self._request_document_page_navigation_first_view()
self.assertContains(

View File

@@ -16,10 +16,6 @@ from .mixins import DocumentTypeQuickLabelTestMixin
class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
def setUp(self):
super(DocumentTypeViewsTestCase, self).setUp()
self.login_user()
def _request_document_type_create(self):
return self.post(
viewname='documents:document_type_create',
@@ -50,12 +46,12 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
def _request_document_type_delete(self):
return self.post(
viewname='documents:document_type_delete',
kwargs={'document_type_pk': self.document_type.pk}
kwargs={'document_type_id': self.document_type.pk}
)
def test_document_type_delete_view_no_permission(self):
response = self._request_document_type_delete()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
self.assertEqual(DocumentType.objects.count(), 1)
def test_document_type_delete_view_with_access(self):
@@ -69,7 +65,7 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
def _request_document_type_edit(self):
return self.post(
viewname='documents:document_type_edit',
kwargs={'document_type_pk': self.document_type.pk},
kwargs={'document_type_id': self.document_type.pk},
data={
'label': TEST_DOCUMENT_TYPE_LABEL_EDITED,
'delete_time_period': DEFAULT_DELETE_PERIOD,
@@ -79,7 +75,7 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
def test_document_type_edit_view_no_permission(self):
response = self._request_document_type_edit()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
self.document_type.refresh_from_db()
self.assertEqual(
self.document_type.label, TEST_DOCUMENT_TYPE_LABEL
@@ -98,14 +94,10 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
class DocumentTypeQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, GenericDocumentViewTestCase):
def setUp(self):
super(DocumentTypeQuickLabelViewsTestCase, self).setUp()
self.login_user()
def _request_quick_label_create(self):
return self.post(
viewname='documents:document_type_filename_create',
kwargs={'document_type_pk': self.document_type.pk},
kwargs={'document_type_id': self.document_type.pk},
data={
'filename': TEST_DOCUMENT_TYPE_QUICK_LABEL,
}
@@ -117,7 +109,7 @@ class DocumentTypeQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, Gener
)
response = self._request_quick_label_create()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
self.assertEqual(self.document_type.filenames.count(), 0)
def test_document_type_quick_label_create_with_access(self):
@@ -132,7 +124,7 @@ class DocumentTypeQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, Gener
def _request_quick_label_delete(self):
return self.post(
viewname='documents:document_type_filename_delete',
kwargs={'filename_pk': self.document_type_filename.pk},
kwargs={'filename_id': self.document_type_filename.pk},
)
def test_document_type_quick_label_delete_no_access(self):
@@ -158,7 +150,7 @@ class DocumentTypeQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, Gener
def _request_quick_label_edit(self):
return self.post(
viewname='documents:document_type_filename_edit',
kwargs={'filename_pk': self.document_type_filename.pk},
kwargs={'filename_id': self.document_type_filename.pk},
data={
'filename': TEST_DOCUMENT_TYPE_QUICK_LABEL_EDITED,
}
@@ -168,7 +160,7 @@ class DocumentTypeQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, Gener
self._create_quick_label()
response = self._request_quick_label_edit()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
self.document_type_filename.refresh_from_db()
self.assertEqual(
self.document_type_filename.filename,
@@ -193,13 +185,13 @@ class DocumentTypeQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, Gener
def _request_quick_label_list_view(self):
return self.get(
viewname='documents:document_type_filename_list',
kwargs={'document_type_pk': self.document_type.pk},
kwargs={'document_type_id': self.document_type.pk},
)
def test_document_type_quick_label_list_no_access(self):
self._create_quick_label()
response = self._request_quick_label_list_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
def test_document_type_quick_label_list_with_access(self):
self._create_quick_label()

View File

@@ -1,7 +1,10 @@
from __future__ import unicode_literals
from django.utils.encoding import force_text
from ..permissions import (
permission_document_version_revert, permission_document_version_view
permission_document_download, permission_document_version_revert,
permission_document_version_view
)
from .base import GenericDocumentViewTestCase
@@ -9,26 +12,101 @@ from .literals import TEST_SMALL_DOCUMENT_PATH, TEST_VERSION_COMMENT
class DocumentVersionTestCase(GenericDocumentViewTestCase):
def setUp(self):
super(DocumentVersionTestCase, self).setUp()
self.login_user()
def _upload_new_version(self):
with open(TEST_SMALL_DOCUMENT_PATH, mode='rb') as file_object:
self.document.new_version(
self.test_document_version = self.document.new_version(
comment=TEST_VERSION_COMMENT, file_object=file_object
)
def _request_document_version_detail_view(self):
return self.get(
viewname='documents:document_version_view',
kwargs={'document_version_id': self.test_document_version.pk}
)
def test_document_version_detail_no_permission(self):
self._upload_new_version()
response = self._request_document_version_detail_view()
self.assertEqual(response.status_code, 404)
def test_document_version_detail_with_access(self):
self._upload_new_version()
self.grant_access(
obj=self.document, permission=permission_document_version_view
)
response = self._request_document_version_detail_view()
self.assertEqual(response.status_code, 200)
def _request_document_version_download(self, data=None):
data = data or {}
return self.get(
viewname='documents:document_version_download', kwargs={
'document_version_id': self.document.latest_version.pk,
}, data=data
)
def test_document_version_download_view_no_permission(self):
response = self._request_document_version_download()
self.assertEqual(response.status_code, 404)
def test_document_version_download_view_with_permission(self):
# Set the expected_content_type for
# common.tests.mixins.ContentTypeCheckMixin
self.expected_content_type = '{}; charset=utf-8'.format(
self.document.latest_version.mimetype
)
self.grant_access(
obj=self.document, permission=permission_document_download
)
response = self._request_document_version_download()
self.assertEqual(response.status_code, 200)
with self.document.open() as file_object:
self.assert_download_response(
response=response, content=file_object.read(),
basename=force_text(self.document.latest_version),
mime_type='{}; charset=utf-8'.format(
self.document.latest_version.mimetype
)
)
def test_document_version_download_preserve_extension_view_with_permission(self):
# Set the expected_content_type for
# common.tests.mixins.ContentTypeCheckMixin
self.expected_content_type = '{}; charset=utf-8'.format(
self.document.latest_version.mimetype
)
self.grant_access(
obj=self.document, permission=permission_document_download
)
response = self._request_document_version_download(
data={'preserve_extension': True}
)
self.assertEqual(response.status_code, 200)
with self.document.open() as file_object:
self.assert_download_response(
response=response, content=file_object.read(),
basename=self.document.latest_version.get_rendered_string(
preserve_extension=True
), mime_type='{}; charset=utf-8'.format(
self.document.latest_version.mimetype
)
)
def _request_document_version_list_view(self):
return self.get(
viewname='documents:document_version_list',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_document_version_list_no_permission(self):
self._upload_new_version()
response = self._request_document_version_list_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
def test_document_version_list_with_access(self):
self._upload_new_version()
@@ -40,32 +118,28 @@ class DocumentVersionTestCase(GenericDocumentViewTestCase):
response=response, text=TEST_VERSION_COMMENT, status_code=200
)
def _request_document_version_revert_view(self, document_version):
def _request_document_version_revert_view(self):
return self.post(
viewname='documents:document_version_revert',
kwargs={'document_version_pk': document_version.pk}
kwargs={'document_version_id': self.test_document_version_first.pk}
)
def test_document_version_revert_no_permission(self):
first_version = self.document.latest_version
self.test_document_version_first = self.document.latest_version
self._upload_new_version()
response = self._request_document_version_revert_view(
document_version=first_version
)
self.assertEqual(response.status_code, 403)
response = self._request_document_version_revert_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(self.document.versions.count(), 2)
def test_document_version_revert_with_access(self):
first_version = self.document.latest_version
self.test_document_version_first = self.document.latest_version
self._upload_new_version()
self.grant_access(
obj=self.document, permission=permission_document_version_revert
)
response = self._request_document_version_revert_view(
document_version=first_version
)
response = self._request_document_version_revert_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(self.document.versions.count(), 1)

View File

@@ -3,18 +3,16 @@ from __future__ import unicode_literals
import os
from django.contrib.contenttypes.models import ContentType
from django.utils.encoding import force_text
from mayan.apps.converter.models import Transformation
from mayan.apps.converter.permissions import permission_transformation_delete
from ..literals import PAGE_RANGE_ALL
from ..models import DeletedDocument, Document, DocumentType
from ..models import Document, DocumentType, FavoriteDocument
from ..permissions import (
permission_document_create, permission_document_download,
permission_document_print, permission_document_properties_edit,
permission_document_tools, permission_document_view,
permission_empty_trash
permission_document_tools, permission_document_view
)
from .base import GenericDocumentViewTestCase
@@ -26,19 +24,15 @@ from .mixins import DocumentTypeQuickLabelTestMixin
class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def setUp(self):
super(DocumentsViewsTestCase, self).setUp()
self.login_user()
def _request_document_properties_view(self):
return self.get(
viewname='documents:document_properties',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_document_view_no_permissions(self):
response = self._request_document_properties_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
def test_document_view_with_permissions(self):
self.grant_access(
@@ -68,8 +62,8 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def _request_document_type_edit(self, document_type):
return self.post(
viewname='documents:document_document_type_edit',
kwargs={'document_pk': self.document.pk},
viewname='documents:document_change_type',
kwargs={'document_id': self.document.pk},
data={'document_type': document_type.pk}
)
@@ -122,7 +116,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def _request_multiple_document_type_edit(self, document_type):
return self.post(
viewname='documents:document_multiple_document_type_edit',
viewname='documents:document_multiple_change_type',
data={
'id_list': self.document.pk,
'document_type': document_type.pk
@@ -174,40 +168,51 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
Document.objects.first().document_type, document_type_2
)
def _request_document_download_form_view(self):
def _request_document_download_form_get_view(self):
return self.get(
viewname='documents:document_download_form',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_document_download_form_view_no_permission(self):
response = self._request_document_download_form_view()
def test_document_download_form_view_get_no_permission(self):
response = self._request_document_download_form_get_view()
self.assertEqual(response.status_code, 404)
self.assertNotContains(
response=response, text=self.document.label, status_code=200
)
def test_document_download_form_view_with_access(self):
def test_document_download_form_get_view_with_access(self):
self.grant_access(
obj=self.document, permission=permission_document_download
)
response = self._request_document_download_form_view()
response = self._request_document_download_form_get_view()
self.assertEqual(response.status_code, 200)
self.assertContains(
response=response, text=self.document.label, status_code=200
def _request_document_download_form_post_view(self):
return self.post(
viewname='documents:document_download_form',
kwargs={'document_id': self.document.pk}
)
def test_document_download_form_post_view_no_permission(self):
response = self._request_document_download_form_post_view()
self.assertEqual(response.status_code, 404)
def test_document_download_form_post_view_with_access(self):
self.grant_access(
obj=self.document, permission=permission_document_download
)
response = self._request_document_download_form_post_view()
self.assertEqual(response.status_code, 302)
def _request_document_download_view(self):
return self.get(
viewname='documents:document_download',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_document_download_view_no_permission(self):
response = self._request_document_download_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
def test_document_download_view_with_permission(self):
def test_document_download_view_with_access(self):
# Set the expected_content_type for
# common.tests.mixins.ContentTypeCheckMixin
self.expected_content_type = '{}; charset=utf-8'.format(
@@ -235,7 +240,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def test_document_multiple_download_view_no_permission(self):
response = self._request_document_multiple_download_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
def test_document_multiple_download_view_with_permission(self):
# Set the expected_content_type for
@@ -257,70 +262,10 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
mime_type=self.document.file_mimetype
)
def _request_document_version_download(self, data=None):
data = data or {}
return self.get(
viewname='documents:document_version_download', kwargs={
'document_version_pk': self.document.latest_version.pk,
}, data=data
)
def test_document_version_download_view_no_permission(self):
response = self._request_document_version_download()
self.assertEqual(response.status_code, 403)
def test_document_version_download_view_with_permission(self):
# Set the expected_content_type for
# common.tests.mixins.ContentTypeCheckMixin
self.expected_content_type = '{}; charset=utf-8'.format(
self.document.latest_version.mimetype
)
self.grant_access(
obj=self.document, permission=permission_document_download
)
response = self._request_document_version_download()
self.assertEqual(response.status_code, 200)
with self.document.open() as file_object:
self.assert_download_response(
response=response, content=file_object.read(),
basename=force_text(self.document.latest_version),
mime_type='{}; charset=utf-8'.format(
self.document.latest_version.mimetype
)
)
def test_document_version_download_preserve_extension_view_with_permission(self):
# Set the expected_content_type for
# common.tests.mixins.ContentTypeCheckMixin
self.expected_content_type = '{}; charset=utf-8'.format(
self.document.latest_version.mimetype
)
self.grant_access(
obj=self.document, permission=permission_document_download
)
response = self._request_document_version_download(
data={'preserve_extension': True}
)
self.assertEqual(response.status_code, 200)
with self.document.open() as file_object:
self.assert_download_response(
response=response, content=file_object.read(),
basename=self.document.latest_version.get_rendered_string(
preserve_extension=True
), mime_type='{}; charset=utf-8'.format(
self.document.latest_version.mimetype
)
)
def _request_document_update_page_count_view(self):
return self.post(
viewname='documents:document_update_page_count',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_document_update_page_count_view_no_permission(self):
@@ -372,7 +317,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def _request_document_clear_transformations_view(self):
return self.post(
viewname='documents:document_clear_transformations',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_document_clear_transformations_view_no_permission(self):
@@ -482,57 +427,10 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
Transformation.objects.get_for_model(document_page).count(), 0
)
def _request_empty_trash_view(self):
return self.post(viewname='documents:trash_can_empty')
def test_trash_can_empty_view_no_permission(self):
self.document.delete()
self.assertEqual(DeletedDocument.objects.count(), 1)
response = self._request_empty_trash_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(DeletedDocument.objects.count(), 1)
def test_trash_can_empty_view_with_permission(self):
self.document.delete()
self.assertEqual(DeletedDocument.objects.count(), 1)
self.grant_permission(permission=permission_empty_trash)
response = self._request_empty_trash_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(DeletedDocument.objects.count(), 0)
self.assertEqual(Document.objects.count(), 0)
def _request_document_page_view(self, document_page):
return self.get(
viewname='documents:document_page_view', kwargs={
'document_page_pk': document_page.pk
}
)
def test_document_page_view_no_permissions(self):
response = self._request_document_page_view(
document_page=self.document.pages.first()
)
self.assertEqual(response.status_code, 403)
def test_document_page_view_with_access(self):
self.grant_access(
obj=self.document, permission=permission_document_view
)
response = self._request_document_page_view(
document_page=self.document.pages.first()
)
self.assertContains(
response=response, text=force_text(self.document.pages.first()),
status_code=200
)
def _request_document_print_view(self):
return self.get(
viewname='documents:document_print', kwargs={
'document_pk': self.document.pk
'document_id': self.document.pk
}, data={
'page_group': PAGE_RANGE_ALL
}
@@ -540,7 +438,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def test_document_print_view_no_access(self):
response = self._request_document_print_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
def test_document_print_view_with_access(self):
self.grant_access(
@@ -551,10 +449,6 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
class DocumentsQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, GenericDocumentViewTestCase):
def setUp(self):
super(DocumentsQuickLabelViewsTestCase, self).setUp()
self.login_user()
def _request_document_quick_label_edit_view(self, extra_data=None):
data = {
'document_type_available_filenames': self.document_type_filename.pk,
@@ -566,14 +460,14 @@ class DocumentsQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, GenericD
return self.post(
viewname='documents:document_edit',
kwargs={'document_pk': self.document.pk},
kwargs={'document_id': self.document.pk},
data=data
)
def test_document_quick_label_no_permission(self):
self._create_quick_label()
response = self._request_document_quick_label_edit_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
self.document.refresh_from_db()
def test_document_quick_label_with_access(self):
@@ -621,3 +515,72 @@ class DocumentsQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, GenericD
self.assertEqual(
self.document.label, self.document_type_filename.filename
)
class FavoriteDocumentsTestCase(GenericDocumentViewTestCase):
def _request_document_add_to_favorites_view(self):
return self.post(
viewname='documents:document_add_to_favorites',
kwargs={'document_id': self.document.pk}
)
def test_document_add_to_favorites_view_no_permission(self):
response = self._request_document_add_to_favorites_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(FavoriteDocument.objects.count(), 0)
def test_document_add_to_favorites_view_with_access(self):
self.grant_access(
obj=self.document, permission=permission_document_view
)
response = self._request_document_add_to_favorites_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(FavoriteDocument.objects.count(), 1)
def _document_add_to_favorites(self):
FavoriteDocument.objects.add_for_user(
document=self.document, user=self._test_case_user
)
def _request_document_list_favorites(self):
return self.get(
viewname='documents:document_list_favorites',
)
def test_document_list_favorites_view_no_permission(self):
self._document_add_to_favorites()
response = self._request_document_list_favorites()
self.assertNotContains(
response=response, text=self.document.label, status_code=200
)
def test_document_list_favorites_view_with_access(self):
self._document_add_to_favorites()
self.grant_access(
obj=self.document, permission=permission_document_view
)
response = self._request_document_list_favorites()
self.assertContains(
response=response, text=self.document.label, status_code=200
)
def _request_document_remove_from_favorites(self):
return self.post(
viewname='documents:document_remove_from_favorites',
kwargs={'document_id': self.document.pk}
)
def test_document_remove_from_favorites_view_no_permission(self):
self._document_add_to_favorites()
response = self._request_document_remove_from_favorites()
self.assertEqual(response.status_code, 302)
self.assertEqual(FavoriteDocument.objects.count(), 1)
def test_document_remove_from_favorites_view_with_access(self):
self._document_add_to_favorites()
self.grant_access(
obj=self.document, permission=permission_document_view
)
response = self._request_document_remove_from_favorites()
self.assertEqual(response.status_code, 302)
self.assertEqual(FavoriteDocument.objects.count(), 0)

View File

@@ -7,10 +7,6 @@ from .literals import TEST_SMALL_DOCUMENT_FILENAME, TEST_SMALL_DOCUMENT_PATH
class DuplicatedDocumentsViewsTestCase(GenericDocumentViewTestCase):
def setUp(self):
super(DuplicatedDocumentsViewsTestCase, self).setUp()
self.login_user()
def _upload_duplicate_document(self):
with open(TEST_SMALL_DOCUMENT_PATH, mode='rb') as file_object:
self.document_duplicate = self.document_type.new_document(
@@ -23,7 +19,7 @@ class DuplicatedDocumentsViewsTestCase(GenericDocumentViewTestCase):
def _request_document_duplicates_list_view(self):
return self.get(
viewname='documents:document_duplicates_list',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_duplicated_document_list_no_permissions(self):
@@ -53,7 +49,7 @@ class DuplicatedDocumentsViewsTestCase(GenericDocumentViewTestCase):
self._upload_duplicate_document()
response = self._request_document_duplicates_list_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
def test_document_duplicates_list_with_access(self):
self._upload_duplicate_document()

View File

@@ -3,10 +3,6 @@ from __future__ import unicode_literals
from actstream.models import Action
from django_downloadview import assert_download_response
from mayan.apps.user_management.tests.literals import (
TEST_USER_PASSWORD, TEST_USER_USERNAME
)
from ..events import event_document_download, event_document_view
from ..permissions import (
permission_document_download, permission_document_view
@@ -21,38 +17,30 @@ TEST_TRANSFORMATION_ARGUMENT = 'degrees: 180'
class DocumentEventsTestCase(GenericDocumentViewTestCase):
def test_document_download_event_no_permissions(self):
self.login(
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
def _request_document_download_view(self):
return self.get(
viewname='documents:document_download',
kwargs={'document_id': self.document.pk}
)
def test_document_download_event_no_permissions(self):
Action.objects.all().delete()
response = self.get(
viewname='documents:document_download',
kwargs={'document_pk': self.document.pk}
)
response = self._request_document_download_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
self.assertEqual(list(Action.objects.any(obj=self.document)), [])
def test_document_download_event_with_permissions(self):
self.login(
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
)
Action.objects.all().delete()
self.role.permissions.add(
permission_document_download.stored_permission
self.grant_access(
obj=self.document, permission=permission_document_download
)
self.expected_content_type = 'image/png; charset=utf-8'
response = self.get(
viewname='documents:document_download',
kwargs={'document_pk': self.document.pk}
)
response = self._request_document_download_view()
# Download the file to close the file descriptor
with self.document.open() as file_object:
@@ -65,40 +53,31 @@ class DocumentEventsTestCase(GenericDocumentViewTestCase):
self.assertEqual(event.verb, event_document_download.id)
self.assertEqual(event.target, self.document)
self.assertEqual(event.actor, self.user)
self.assertEqual(event.actor, self._test_case_user)
def _request_document_preview_view(self):
return self.get(
viewname='documents:document_preview',
kwargs={'document_id': self.document.pk}
)
def test_document_view_event_no_permissions(self):
self.login(
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
)
Action.objects.all().delete()
response = self.get(
viewname='documents:document_preview',
kwargs={'document_pk': self.document.pk}
)
response = self._request_document_preview_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
self.assertEqual(list(Action.objects.any(obj=self.document)), [])
def test_document_view_event_with_permissions(self):
self.login(
username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD
)
def test_document_view_event_with_access(self):
Action.objects.all().delete()
self.role.permissions.add(
permission_document_view.stored_permission
)
self.get(
viewname='documents:document_preview',
kwargs={'document_pk': self.document.pk}
)
self.grant_access(obj=self.document, permission=permission_document_view)
response = self._request_document_preview_view()
self.assertEqual(response.status_code, 200)
event = Action.objects.any(obj=self.document).first()
self.assertEqual(event.verb, event_document_view.id)
self.assertEqual(event.target, self.document)
self.assertEqual(event.actor, self.user)
self.assertEqual(event.actor, self._test_case_user)

View File

@@ -4,14 +4,13 @@ import time
from django.urls import reverse
from mayan.apps.acls.models import AccessControlList
from ..links import (
link_document_restore, link_document_version_download,
link_trashed_document_restore, link_document_version_download,
link_document_version_revert
)
from ..models import TrashedDocument
from ..permissions import (
permission_document_download, permission_document_restore,
permission_document_download, permission_trashed_document_restore,
permission_document_version_revert
)
@@ -26,15 +25,13 @@ class DocumentsLinksTestCase(GenericDocumentViewTestCase):
self.assertTrue(self.document.versions.count(), 2)
self.login_user()
self.add_test_view(test_object=self.document.versions.first())
context = self.get_test_view()
resolved_link = link_document_version_revert.resolve(context=context)
self.assertEqual(resolved_link, None)
def test_document_version_revert_link_with_permission(self):
def test_document_version_revert_link_with_access(self):
# Needed by MySQL as milliseconds value is not store in timestamp
# field
time.sleep(1.01)
@@ -44,13 +41,8 @@ class DocumentsLinksTestCase(GenericDocumentViewTestCase):
self.assertTrue(self.document.versions.count(), 2)
self.login_user()
acl = AccessControlList.objects.create(
content_object=self.document, role=self.role
)
acl.permissions.add(
permission_document_version_revert.stored_permission
self.grant_access(
obj=self.document, permission=permission_document_version_revert
)
self.add_test_view(test_object=self.document.versions.first())
@@ -61,27 +53,22 @@ class DocumentsLinksTestCase(GenericDocumentViewTestCase):
self.assertEqual(
resolved_link.url,
reverse(
'documents:document_version_revert',
args=(self.document.versions.first().pk,)
viewname='documents:document_version_revert',
kwargs={'document_version_id': self.document.versions.first().pk}
)
)
def test_document_version_download_link_no_permission(self):
self.login_user()
self.add_test_view(test_object=self.document.latest_version)
context = self.get_test_view()
resolved_link = link_document_version_download.resolve(context=context)
self.assertEqual(resolved_link, None)
def test_document_version_download_link_with_permission(self):
self.login_user()
acl = AccessControlList.objects.create(
content_object=self.document, role=self.role
def test_document_version_download_link_with_access(self):
self.grant_access(
obj=self.document, permission=permission_document_download
)
acl.permissions.add(permission_document_download.stored_permission)
self.add_test_view(test_object=self.document.latest_version)
context = self.get_test_view()
@@ -91,45 +78,41 @@ class DocumentsLinksTestCase(GenericDocumentViewTestCase):
self.assertEqual(
resolved_link.url,
reverse(
'documents:document_version_download_form',
args=(self.document.latest_version.pk,)
viewname='documents:document_version_download_form',
kwargs={'document_version_id': self.document.latest_version.pk}
)
)
class DeletedDocumentsLinksTestCase(GenericDocumentViewTestCase):
def _request_trashed_document_restore_link(self):
self.add_test_view(
test_object=TrashedDocument.objects.get(pk=self.document.pk)
)
context = self.get_test_view()
return link_trashed_document_restore.resolve(context=context)
def test_deleted_document_restore_link_no_permission(self):
self.document.delete()
self.login_user()
self.add_test_view(test_object=self.document)
context = self.get_test_view()
resolved_link = link_document_restore.resolve(context=context)
resolved_link = self._request_trashed_document_restore_link()
self.assertEqual(resolved_link, None)
def test_deleted_document_restore_link_with_permission(self):
def test_deleted_document_restore_link_with_access(self):
self.document.delete()
self.login_user()
acl = AccessControlList.objects.create(
content_object=self.document, role=self.role
)
acl.permissions.add(
permission_document_restore.stored_permission
self.grant_access(
obj=self.document, permission=permission_trashed_document_restore
)
self.add_test_view(test_object=self.document)
context = self.get_test_view()
resolved_link = link_document_restore.resolve(context=context)
resolved_link = self._request_trashed_document_restore_link()
self.assertNotEqual(resolved_link, None)
self.assertEqual(
resolved_link.url,
reverse(
'documents:document_restore',
args=(self.document.pk,)
viewname='documents:trashed_document_restore',
kwargs={'trashed_document_id': self.document.pk}
)
)

View File

@@ -7,7 +7,7 @@ from mayan.apps.common.tests import BaseTestCase
from ..literals import STUB_EXPIRATION_INTERVAL
from ..models import (
DeletedDocument, Document, DocumentType, DuplicatedDocument
Document, DocumentType, DuplicatedDocument, TrashedDocument
)
from .base import GenericDocumentTestCase
@@ -58,12 +58,12 @@ class DocumentTestCase(DocumentTestMixin, BaseTestCase):
# Trash the document
self.document.delete()
self.assertEqual(DeletedDocument.objects.count(), 1)
self.assertEqual(TrashedDocument.objects.count(), 1)
self.assertEqual(Document.objects.count(), 0)
# Restore the document
self.document.restore()
self.assertEqual(DeletedDocument.objects.count(), 0)
self.assertEqual(TrashedDocument.objects.count(), 0)
self.assertEqual(Document.objects.count(), 1)
def test_trashing_documents(self):
@@ -71,12 +71,12 @@ class DocumentTestCase(DocumentTestMixin, BaseTestCase):
# Trash the document
self.document.delete()
self.assertEqual(DeletedDocument.objects.count(), 1)
self.assertEqual(TrashedDocument.objects.count(), 1)
self.assertEqual(Document.objects.count(), 0)
# Delete the document
self.document.delete()
self.assertEqual(DeletedDocument.objects.count(), 0)
self.assertEqual(TrashedDocument.objects.count(), 0)
self.assertEqual(Document.objects.count(), 0)
def test_auto_trashing(self):
@@ -94,12 +94,12 @@ class DocumentTestCase(DocumentTestMixin, BaseTestCase):
time.sleep(1.01)
self.assertEqual(Document.objects.count(), 1)
self.assertEqual(DeletedDocument.objects.count(), 0)
self.assertEqual(TrashedDocument.objects.count(), 0)
DocumentType.objects.check_trash_periods()
self.assertEqual(Document.objects.count(), 0)
self.assertEqual(DeletedDocument.objects.count(), 1)
self.assertEqual(TrashedDocument.objects.count(), 1)
def test_auto_delete(self):
"""
@@ -112,12 +112,12 @@ class DocumentTestCase(DocumentTestMixin, BaseTestCase):
self.document_type.save()
self.assertEqual(Document.objects.count(), 1)
self.assertEqual(DeletedDocument.objects.count(), 0)
self.assertEqual(TrashedDocument.objects.count(), 0)
self.document.delete()
self.assertEqual(Document.objects.count(), 0)
self.assertEqual(DeletedDocument.objects.count(), 1)
self.assertEqual(TrashedDocument.objects.count(), 1)
# Needed by MySQL as milliseconds value is not stored in timestamp
# field
@@ -126,7 +126,7 @@ class DocumentTestCase(DocumentTestMixin, BaseTestCase):
DocumentType.objects.check_delete_periods()
self.assertEqual(Document.objects.count(), 0)
self.assertEqual(DeletedDocument.objects.count(), 0)
self.assertEqual(TrashedDocument.objects.count(), 0)
class PDFCompatibilityTestCase(BaseTestCase):

View File

@@ -9,12 +9,12 @@ from mayan.apps.documents.tests import DocumentTestMixin
class DocumentSearchTestCase(DocumentTestMixin, BaseTestCase):
def _perform_document_page_search(self):
return document_page_search.search(
query_string={'q': self.document.label}, user=self.user
query_string={'q': self.document.label}, user=self._test_case_user
)
def _perform_document_search(self):
return document_search.search(
query_string={'q': self.document.label}, user=self.user
query_string={'q': self.document.label}, user=self._test_case_user
)
def test_document_page_search_no_access(self):

View File

@@ -1,56 +1,26 @@
from __future__ import unicode_literals
from ..models import DeletedDocument, Document
from ..models import Document, TrashedDocument
from ..permissions import (
permission_document_delete, permission_document_restore,
permission_document_trash, permission_document_view
permission_document_trash, permission_document_view,
permission_empty_trash, permission_trashed_document_delete,
permission_trashed_document_restore
)
from .base import GenericDocumentViewTestCase
class DeletedDocumentTestCase(GenericDocumentViewTestCase):
def setUp(self):
super(DeletedDocumentTestCase, self).setUp()
self.login_user()
def _request_document_restore_view(self):
return self.post(
viewname='documents:document_restore',
kwargs={'document_pk': self.document.pk}
)
def test_document_restore_view_no_permission(self):
self.document.delete()
self.assertEqual(Document.objects.count(), 0)
response = self._request_document_restore_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(DeletedDocument.objects.count(), 1)
self.assertEqual(Document.objects.count(), 0)
def test_document_restore_view_with_access(self):
self.document.delete()
self.assertEqual(Document.objects.count(), 0)
self.grant_access(
obj=self.document, permission=permission_document_restore
)
response = self._request_document_restore_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(DeletedDocument.objects.count(), 0)
self.assertEqual(Document.objects.count(), 1)
class TrashedDocumentTestCase(GenericDocumentViewTestCase):
def _request_document_trash_view(self):
return self.post(
viewname='documents:document_trash',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_document_trash_no_permissions(self):
response = self._request_document_trash_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(DeletedDocument.objects.count(), 0)
self.assertEqual(response.status_code, 302)
self.assertEqual(TrashedDocument.objects.count(), 0)
self.assertEqual(Document.objects.count(), 1)
def test_document_trash_with_access(self):
@@ -60,58 +30,107 @@ class DeletedDocumentTestCase(GenericDocumentViewTestCase):
response = self._request_document_trash_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(DeletedDocument.objects.count(), 1)
self.assertEqual(TrashedDocument.objects.count(), 1)
self.assertEqual(Document.objects.count(), 0)
def _request_document_delete_view(self):
def _request_trashed_document_restore_view(self):
return self.post(
viewname='documents:document_delete',
kwargs={'document_pk': self.document.pk}
viewname='documents:trashed_document_restore',
kwargs={'trashed_document_id': self.document.pk}
)
def test_document_delete_no_permissions(self):
def test_trashed_document_restore_view_no_permission(self):
self.document.delete()
self.assertEqual(Document.objects.count(), 0)
self.assertEqual(DeletedDocument.objects.count(), 1)
response = self._request_document_delete_view()
self.assertEqual(response.status_code, 403)
response = self._request_trashed_document_restore_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(TrashedDocument.objects.count(), 1)
self.assertEqual(Document.objects.count(), 0)
self.assertEqual(DeletedDocument.objects.count(), 1)
def test_document_delete_with_access(self):
def test_trashed_document_restore_view_with_access(self):
self.document.delete()
self.assertEqual(Document.objects.count(), 0)
self.assertEqual(DeletedDocument.objects.count(), 1)
self.grant_access(
obj=self.document, permission=permission_document_delete
obj=self.document, permission=permission_trashed_document_restore
)
response = self._request_trashed_document_restore_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(TrashedDocument.objects.count(), 0)
self.assertEqual(Document.objects.count(), 1)
def _request_trashed_document_delete_view(self):
return self.post(
viewname='documents:trashed_document_delete',
kwargs={'trashed_document_id': self.document.pk}
)
response = self._request_document_delete_view()
def test_trashed_document_delete_no_permissions(self):
self.document.delete()
self.assertEqual(Document.objects.count(), 0)
self.assertEqual(TrashedDocument.objects.count(), 1)
response = self._request_trashed_document_delete_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(DeletedDocument.objects.count(), 0)
self.assertEqual(Document.objects.count(), 0)
self.assertEqual(TrashedDocument.objects.count(), 1)
def test_trashed_document_delete_with_access(self):
self.document.delete()
self.assertEqual(Document.objects.count(), 0)
self.assertEqual(TrashedDocument.objects.count(), 1)
self.grant_access(
obj=self.document, permission=permission_trashed_document_delete
)
response = self._request_trashed_document_delete_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(TrashedDocument.objects.count(), 0)
self.assertEqual(Document.objects.count(), 0)
def _request_document_list_deleted_view(self):
return self.get(viewname='documents:document_list_deleted')
def _request_trashed_document_list_view(self):
return self.get(viewname='documents:trashed_document_list')
def test_deleted_document_list_view_no_permissions(self):
def test_trashed_document_list_view_no_permissions(self):
self.document.delete()
response = self._request_document_list_deleted_view()
response = self._request_trashed_document_list_view()
self.assertNotContains(
response=response, text=self.document.label, status_code=200
)
def test_deleted_document_list_view_with_access(self):
def test_trashed_document_list_view_with_access(self):
self.document.delete()
self.grant_access(
obj=self.document, permission=permission_document_view
)
response = self._request_document_list_deleted_view()
response = self._request_trashed_document_list_view()
self.assertContains(
response=response, text=self.document.label, status_code=200
)
def _request_empty_trash_view(self):
return self.post(viewname='documents:trash_can_empty')
def test_trash_can_empty_view_no_permission(self):
self.document.delete()
self.assertEqual(TrashedDocument.objects.count(), 1)
response = self._request_empty_trash_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(TrashedDocument.objects.count(), 1)
def test_trash_can_empty_view_with_permission(self):
self.document.delete()
self.assertEqual(TrashedDocument.objects.count(), 1)
self.grant_permission(permission=permission_empty_trash)
response = self._request_empty_trash_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(TrashedDocument.objects.count(), 0)
self.assertEqual(Document.objects.count(), 0)