587 lines
21 KiB
Python
587 lines
21 KiB
Python
from __future__ import unicode_literals
|
|
|
|
import os
|
|
|
|
from django.contrib.contenttypes.models import ContentType
|
|
|
|
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 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
|
|
)
|
|
|
|
from .base import GenericDocumentViewTestCase
|
|
from .literals import (
|
|
TEST_DOCUMENT_TYPE_2_LABEL, TEST_SMALL_DOCUMENT_FILENAME,
|
|
TEST_TRANSFORMATION_ARGUMENT, TEST_TRANSFORMATION_NAME
|
|
)
|
|
from .mixins import DocumentTypeQuickLabelTestMixin
|
|
|
|
|
|
class DocumentsViewsTestCase(GenericDocumentViewTestCase):
|
|
def _request_document_properties_view(self):
|
|
return self.get(
|
|
viewname='documents:document_properties',
|
|
kwargs={'document_id': self.document.pk}
|
|
)
|
|
|
|
def test_document_view_no_permissions(self):
|
|
response = self._request_document_properties_view()
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
def test_document_view_with_permissions(self):
|
|
self.grant_access(
|
|
obj=self.document, permission=permission_document_view
|
|
)
|
|
response = self._request_document_properties_view()
|
|
self.assertContains(
|
|
response=response, text=self.document.label, status_code=200
|
|
)
|
|
|
|
def _request_document_list_view(self):
|
|
return self.get(viewname='documents:document_list')
|
|
|
|
def test_document_list_view_no_permissions(self):
|
|
response = self._request_document_list_view()
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.context['object_list'].count(), 0)
|
|
|
|
def test_document_list_view_with_access(self):
|
|
self.grant_access(
|
|
obj=self.document, permission=permission_document_view
|
|
)
|
|
response = self._request_document_list_view()
|
|
self.assertContains(
|
|
response=response, text=self.document.label, status_code=200
|
|
)
|
|
|
|
def _request_document_type_edit(self, document_type):
|
|
return self.post(
|
|
viewname='documents:document_change_type',
|
|
kwargs={'document_id': self.document.pk},
|
|
data={'document_type': document_type.pk}
|
|
)
|
|
|
|
def test_document_document_type_change_view_no_permissions(self):
|
|
self.assertEqual(
|
|
self.document.document_type, self.document_type
|
|
)
|
|
|
|
document_type_2 = DocumentType.objects.create(
|
|
label=TEST_DOCUMENT_TYPE_2_LABEL
|
|
)
|
|
|
|
response = self._request_document_type_edit(
|
|
document_type=document_type_2
|
|
)
|
|
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
self.assertEqual(
|
|
Document.objects.get(pk=self.document.pk).document_type,
|
|
self.document_type
|
|
)
|
|
|
|
def test_document_document_type_change_view_with_access(self):
|
|
self.assertEqual(
|
|
self.document.document_type, self.document_type
|
|
)
|
|
|
|
document_type_2 = DocumentType.objects.create(
|
|
label=TEST_DOCUMENT_TYPE_2_LABEL
|
|
)
|
|
|
|
self.grant_access(
|
|
obj=self.document, permission=permission_document_properties_edit
|
|
)
|
|
self.grant_access(
|
|
obj=document_type_2, permission=permission_document_create
|
|
)
|
|
|
|
response = self._request_document_type_edit(
|
|
document_type=document_type_2
|
|
)
|
|
|
|
self.assertEqual(response.status_code, 302)
|
|
|
|
self.assertEqual(
|
|
Document.objects.get(pk=self.document.pk).document_type,
|
|
document_type_2
|
|
)
|
|
|
|
def _request_multiple_document_type_edit(self, document_type):
|
|
return self.post(
|
|
viewname='documents:document_multiple_change_type',
|
|
data={
|
|
'id_list': self.document.pk,
|
|
'document_type': document_type.pk
|
|
}
|
|
)
|
|
|
|
def test_document_multiple_document_type_change_view_no_permission(self):
|
|
self.assertEqual(
|
|
Document.objects.first().document_type, self.document_type
|
|
)
|
|
|
|
document_type_2 = DocumentType.objects.create(
|
|
label=TEST_DOCUMENT_TYPE_2_LABEL
|
|
)
|
|
|
|
response = self._request_multiple_document_type_edit(
|
|
document_type=document_type_2
|
|
)
|
|
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
self.assertEqual(
|
|
Document.objects.first().document_type, self.document_type
|
|
)
|
|
|
|
def test_document_multiple_document_type_change_view_with_access(self):
|
|
self.assertEqual(
|
|
Document.objects.first().document_type, self.document_type
|
|
)
|
|
|
|
document_type_2 = DocumentType.objects.create(
|
|
label=TEST_DOCUMENT_TYPE_2_LABEL
|
|
)
|
|
|
|
self.grant_access(
|
|
obj=self.document, permission=permission_document_properties_edit
|
|
)
|
|
self.grant_access(
|
|
obj=document_type_2, permission=permission_document_create
|
|
)
|
|
|
|
response = self._request_multiple_document_type_edit(
|
|
document_type=document_type_2
|
|
)
|
|
|
|
self.assertEqual(response.status_code, 302)
|
|
|
|
self.assertEqual(
|
|
Document.objects.first().document_type, document_type_2
|
|
)
|
|
|
|
def _request_document_download_form_get_view(self):
|
|
return self.get(
|
|
viewname='documents:document_download_form',
|
|
kwargs={'document_id': self.document.pk}
|
|
)
|
|
|
|
def test_document_download_form_view_get_no_permission(self):
|
|
response = self._request_document_download_form_get_view()
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
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_get_view()
|
|
self.assertEqual(response.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_id': self.document.pk}
|
|
)
|
|
|
|
def test_document_download_view_no_permission(self):
|
|
response = self._request_document_download_view()
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
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(
|
|
self.document.file_mimetype
|
|
)
|
|
|
|
self.grant_access(
|
|
obj=self.document, permission=permission_document_download
|
|
)
|
|
response = self._request_document_download_view()
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
with self.document.open() as file_object:
|
|
self.assert_download_response(
|
|
response=response, content=file_object.read(),
|
|
basename=TEST_SMALL_DOCUMENT_FILENAME,
|
|
mime_type=self.document.file_mimetype
|
|
)
|
|
|
|
def _request_document_multiple_download_view(self):
|
|
return self.get(
|
|
viewname='documents:document_multiple_download',
|
|
data={'id_list': self.document.pk}
|
|
)
|
|
|
|
def test_document_multiple_download_view_no_permission(self):
|
|
response = self._request_document_multiple_download_view()
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
def test_document_multiple_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.file_mimetype
|
|
)
|
|
self.grant_access(
|
|
obj=self.document, permission=permission_document_download
|
|
)
|
|
|
|
response = self._request_document_multiple_download_view()
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
with self.document.open() as file_object:
|
|
self.assert_download_response(
|
|
response=response, content=file_object.read(),
|
|
basename=TEST_SMALL_DOCUMENT_FILENAME,
|
|
mime_type=self.document.file_mimetype
|
|
)
|
|
|
|
def _request_document_update_page_count_view(self):
|
|
return self.post(
|
|
viewname='documents:document_update_page_count',
|
|
kwargs={'document_id': self.document.pk}
|
|
)
|
|
|
|
def test_document_update_page_count_view_no_permission(self):
|
|
self.document.pages.all().delete()
|
|
self.assertEqual(self.document.pages.count(), 0)
|
|
|
|
response = self._request_document_update_page_count_view()
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertEqual(self.document.pages.count(), 0)
|
|
|
|
def test_document_update_page_count_view_with_permission(self):
|
|
# TODO: Revise permission association
|
|
|
|
page_count = self.document.pages.count()
|
|
self.document.pages.all().delete()
|
|
self.assertEqual(self.document.pages.count(), 0)
|
|
|
|
self.grant_permission(permission=permission_document_tools)
|
|
|
|
response = self._request_document_update_page_count_view()
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertEqual(self.document.pages.count(), page_count)
|
|
|
|
def _request_document_multiple_update_page_count_view(self):
|
|
return self.post(
|
|
viewname='documents:document_multiple_update_page_count',
|
|
data={'id_list': self.document.pk}
|
|
)
|
|
|
|
def test_document_multiple_update_page_count_view_no_permission(self):
|
|
self.document.pages.all().delete()
|
|
self.assertEqual(self.document.pages.count(), 0)
|
|
|
|
response = self._request_document_multiple_update_page_count_view()
|
|
self.assertEqual(response.status_code, 404)
|
|
self.assertEqual(self.document.pages.count(), 0)
|
|
|
|
def test_document_multiple_update_page_count_view_with_permission(self):
|
|
page_count = self.document.pages.count()
|
|
self.document.pages.all().delete()
|
|
self.assertEqual(self.document.pages.count(), 0)
|
|
|
|
self.grant_permission(permission=permission_document_tools)
|
|
|
|
response = self._request_document_multiple_update_page_count_view()
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertEqual(self.document.pages.count(), page_count)
|
|
|
|
def _request_document_transformations_clear_view(self):
|
|
return self.post(
|
|
viewname='documents:document_transformations_clear',
|
|
kwargs={'document_id': self.document.pk}
|
|
)
|
|
|
|
def test_document_transformations_clear_view_no_permission(self):
|
|
document_page = self.document.pages.first()
|
|
content_type = ContentType.objects.get_for_model(document_page)
|
|
transformation = Transformation.objects.create(
|
|
content_type=content_type, object_id=document_page.pk,
|
|
name=TEST_TRANSFORMATION_NAME,
|
|
arguments=TEST_TRANSFORMATION_ARGUMENT
|
|
)
|
|
|
|
self.assertQuerysetEqual(
|
|
Transformation.objects.get_for_model(document_page),
|
|
(repr(transformation),)
|
|
)
|
|
|
|
self.grant_access(
|
|
obj=self.document, permission=permission_document_view
|
|
)
|
|
|
|
response = self._request_document_transformations_clear_view()
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertQuerysetEqual(
|
|
Transformation.objects.get_for_model(document_page),
|
|
(repr(transformation),)
|
|
)
|
|
|
|
def test_document_transformations_clear_view_with_access(self):
|
|
document_page = self.document.pages.first()
|
|
content_type = ContentType.objects.get_for_model(document_page)
|
|
transformation = Transformation.objects.create(
|
|
content_type=content_type, object_id=document_page.pk,
|
|
name=TEST_TRANSFORMATION_NAME,
|
|
arguments=TEST_TRANSFORMATION_ARGUMENT
|
|
)
|
|
self.assertQuerysetEqual(
|
|
Transformation.objects.get_for_model(document_page),
|
|
(repr(transformation),)
|
|
)
|
|
|
|
self.grant_access(
|
|
obj=self.document, permission=permission_transformation_delete
|
|
)
|
|
self.grant_access(
|
|
obj=self.document, permission=permission_document_view
|
|
)
|
|
|
|
response = self._request_document_transformations_clear_view()
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertEqual(
|
|
Transformation.objects.get_for_model(document_page).count(), 0
|
|
)
|
|
|
|
def _request_document_multiple_transformations_clear(self):
|
|
return self.post(
|
|
viewname='documents:document_multiple_transformations_clear',
|
|
data={'id_list': self.document.pk}
|
|
)
|
|
|
|
def test_document_multiple_transformations_clear_view_no_permission(self):
|
|
document_page = self.document.pages.first()
|
|
content_type = ContentType.objects.get_for_model(document_page)
|
|
transformation = Transformation.objects.create(
|
|
content_type=content_type, object_id=document_page.pk,
|
|
name=TEST_TRANSFORMATION_NAME,
|
|
arguments=TEST_TRANSFORMATION_ARGUMENT
|
|
)
|
|
|
|
self.assertQuerysetEqual(
|
|
Transformation.objects.get_for_model(document_page),
|
|
(repr(transformation),)
|
|
)
|
|
|
|
self.grant_permission(permission=permission_document_view)
|
|
|
|
response = self._request_document_multiple_transformations_clear()
|
|
self.assertEqual(response.status_code, 404)
|
|
self.assertQuerysetEqual(
|
|
Transformation.objects.get_for_model(document_page),
|
|
(repr(transformation),)
|
|
)
|
|
|
|
def test_document_multiple_transformations_clear_view_with_access(self):
|
|
document_page = self.document.pages.first()
|
|
content_type = ContentType.objects.get_for_model(document_page)
|
|
transformation = Transformation.objects.create(
|
|
content_type=content_type, object_id=document_page.pk,
|
|
name=TEST_TRANSFORMATION_NAME,
|
|
arguments=TEST_TRANSFORMATION_ARGUMENT
|
|
)
|
|
|
|
self.assertQuerysetEqual(
|
|
Transformation.objects.get_for_model(document_page),
|
|
(repr(transformation),)
|
|
)
|
|
|
|
self.grant_access(
|
|
obj=self.document, permission=permission_document_view
|
|
)
|
|
self.grant_access(
|
|
obj=self.document, permission=permission_transformation_delete
|
|
)
|
|
|
|
response = self._request_document_multiple_transformations_clear()
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertEqual(
|
|
Transformation.objects.get_for_model(document_page).count(), 0
|
|
)
|
|
|
|
def _request_document_print_view(self):
|
|
return self.get(
|
|
viewname='documents:document_print', kwargs={
|
|
'document_id': self.document.pk
|
|
}, data={
|
|
'page_group': PAGE_RANGE_ALL
|
|
}
|
|
)
|
|
|
|
def test_document_print_view_no_access(self):
|
|
response = self._request_document_print_view()
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
def test_document_print_view_with_access(self):
|
|
self.grant_access(
|
|
obj=self.document, permission=permission_document_print
|
|
)
|
|
response = self._request_document_print_view()
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
class DocumentsQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, GenericDocumentViewTestCase):
|
|
def _request_document_quick_label_edit_view(self, extra_data=None):
|
|
data = {
|
|
'document_type_available_filenames': self.document_type_filename.pk,
|
|
'label': ''
|
|
# View needs at least an empty label for quick
|
|
# label to work. Cause is unknown.
|
|
}
|
|
data.update(extra_data or {})
|
|
|
|
return self.post(
|
|
viewname='documents:document_edit',
|
|
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, 404)
|
|
self.document.refresh_from_db()
|
|
|
|
def test_document_quick_label_with_access(self):
|
|
self._create_quick_label()
|
|
self.grant_access(
|
|
permission=permission_document_properties_edit, obj=self.document
|
|
)
|
|
response = self._request_document_quick_label_edit_view()
|
|
self.assertEqual(response.status_code, 302)
|
|
self.document.refresh_from_db()
|
|
self.assertEqual(
|
|
self.document.label, self.document_type_filename.filename
|
|
)
|
|
|
|
def test_document_quick_label_preserve_extension_with_access(self):
|
|
self._create_quick_label()
|
|
self.grant_access(
|
|
permission=permission_document_properties_edit, obj=self.document
|
|
)
|
|
filename, extension = os.path.splitext(self.document.label)
|
|
response = self._request_document_quick_label_edit_view(
|
|
extra_data={'preserve_extension': True}
|
|
)
|
|
self.assertEqual(response.status_code, 302)
|
|
self.document.refresh_from_db()
|
|
|
|
self.assertEqual(
|
|
self.document.label, '{}{}'.format(
|
|
self.document_type_filename.filename, extension
|
|
)
|
|
)
|
|
|
|
def test_document_quick_label_no_preserve_extension_with_access(self):
|
|
self._create_quick_label()
|
|
self.grant_access(
|
|
permission=permission_document_properties_edit, obj=self.document
|
|
)
|
|
filename, extension = os.path.splitext(self.document.label)
|
|
response = self._request_document_quick_label_edit_view(
|
|
extra_data={'preserve_extension': False}
|
|
)
|
|
self.assertEqual(response.status_code, 302)
|
|
self.document.refresh_from_db()
|
|
|
|
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)
|