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:
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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}
|
||||
)
|
||||
)
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user