diff --git a/mayan/apps/sources/tests/mixins.py b/mayan/apps/sources/tests/mixins.py new file mode 100644 index 0000000000..d849788514 --- /dev/null +++ b/mayan/apps/sources/tests/mixins.py @@ -0,0 +1,34 @@ +from __future__ import unicode_literals + +from ..literals import SOURCE_CHOICE_WEB_FORM +from ..models import WebFormSource + +from .literals import TEST_SOURCE_LABEL, TEST_SOURCE_UNCOMPRESS_N + + +class SourceTestMixin(object): + def _create_test_source(self): + self.test_source = WebFormSource.objects.create( + enabled=True, label=TEST_SOURCE_LABEL, + uncompress=TEST_SOURCE_UNCOMPRESS_N + ) + + +class SourceViewTestMixin(object): + def _request_setup_source_list_view(self): + return self.get(viewname='sources:setup_source_list') + + def _request_setup_source_create_view(self): + return self.post( + kwargs={'source_type': SOURCE_CHOICE_WEB_FORM}, + viewname='sources:setup_source_create', data={ + 'enabled': True, 'label': TEST_SOURCE_LABEL, + 'uncompress': TEST_SOURCE_UNCOMPRESS_N + } + ) + + def _request_setup_source_delete_view(self): + return self.post( + viewname='sources:setup_source_delete', + kwargs={'pk': self.test_source.pk} + ) diff --git a/mayan/apps/sources/tests/test_models.py b/mayan/apps/sources/tests/test_models.py index 9288ff57be..54ccda5fc2 100644 --- a/mayan/apps/sources/tests/test_models.py +++ b/mayan/apps/sources/tests/test_models.py @@ -28,7 +28,6 @@ from mayan.apps.storage.utils import mkdtemp from ..literals import SOURCE_UNCOMPRESS_CHOICE_Y from ..models.email_sources import EmailBaseModel, IMAPEmail, POP3Email from ..models.watch_folder_sources import WatchFolderSource -from ..models.webform_sources import WebFormSource from .literals import ( TEST_EMAIL_ATTACHMENT_AND_INLINE, TEST_EMAIL_BASE64_FILENAME, @@ -37,21 +36,24 @@ from .literals import ( TEST_EMAIL_NO_CONTENT_TYPE_STRING, TEST_EMAIL_ZERO_LENGTH_ATTACHMENT, TEST_WATCHFOLDER_SUBFOLDER ) +from .mixins import SourceTestMixin -class CompressedUploadsTestCase(GenericDocumentTestCase): +class CompressedUploadsTestCase(SourceTestMixin, GenericDocumentTestCase): auto_upload_document = False def test_upload_compressed_file(self): - source = WebFormSource( - label='test source', uncompress=SOURCE_UNCOMPRESS_CHOICE_Y - ) + self._create_test_source() + self.test_source.uncompress = SOURCE_UNCOMPRESS_CHOICE_Y + self.test_source.save() with open(TEST_COMPRESSED_DOCUMENT_PATH, mode='rb') as file_object: - source.handle_upload( + self.test_source.handle_upload( document_type=self.test_document_type, file_object=file_object, - expand=(source.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y) + expand=( + self.test_source.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y + ) ) self.assertEqual(Document.objects.count(), 2) diff --git a/mayan/apps/sources/tests/test_views.py b/mayan/apps/sources/tests/test_views.py index 03ecbbc72d..2fd4172a8d 100644 --- a/mayan/apps/sources/tests/test_views.py +++ b/mayan/apps/sources/tests/test_views.py @@ -25,32 +25,42 @@ from ..permissions import ( from .literals import ( TEST_SOURCE_LABEL, TEST_SOURCE_UNCOMPRESS_N, TEST_STAGING_PREVIEW_WIDTH ) +from .mixins import SourceTestMixin, SourceViewTestMixin -class DocumentUploadTestCase(GenericDocumentViewTestCase): - auto_upload_document = False - - def setUp(self): - super(DocumentUploadTestCase, self).setUp() - self.source = WebFormSource.objects.create( - enabled=True, label=TEST_SOURCE_LABEL, - uncompress=TEST_SOURCE_UNCOMPRESS_N - ) - +class DocumentUploadWizardViewTestMixin(object): def _request_upload_wizard_view(self, document_path=TEST_SMALL_DOCUMENT_PATH): with open(document_path, mode='rb') as file_object: return self.post( viewname='sources:upload_interactive', kwargs={ - 'source_id': self.source.pk + 'source_id': self.test_source.pk }, data={ 'source-file': file_object, 'document_type_id': self.test_document_type.pk, } ) + def _request_upload_interactive_view(self): + return self.get( + viewname='sources:upload_interactive', data={ + 'document_type_id': self.test_document_type.pk, + } + ) + + +class DocumentUploadWizardViewTestCase( + SourceTestMixin, DocumentUploadWizardViewTestMixin, + GenericDocumentViewTestCase +): + auto_upload_document = False + + def setUp(self): + super(DocumentUploadWizardViewTestCase, self).setUp() + self._create_test_source() + def test_upload_compressed_file(self): - self.source.uncompress = SOURCE_UNCOMPRESS_CHOICE_Y - self.source.save() + self.test_source.uncompress = SOURCE_UNCOMPRESS_CHOICE_Y + self.test_source.save() self.grant_access( obj=self.test_document_type, permission=permission_document_create @@ -104,7 +114,7 @@ class DocumentUploadTestCase(GenericDocumentViewTestCase): with open(TEST_SMALL_DOCUMENT_PATH, mode='rb') as file_object: response = self.post( viewname='sources:upload_interactive', kwargs={ - 'source_id': self.source.pk + 'source_id': self.test_source.pk }, data={ 'source-file': file_object, 'document_type_id': self.test_document_type.pk, @@ -114,13 +124,6 @@ class DocumentUploadTestCase(GenericDocumentViewTestCase): self.assertEqual(Document.objects.count(), 1) - def _request_upload_interactive_view(self): - return self.get( - viewname='sources:upload_interactive', data={ - 'document_type_id': self.test_document_type.pk, - } - ) - def test_upload_interactive_view_no_permission(self): response = self._request_upload_interactive_view() self.assertEqual(response.status_code, 403) @@ -131,7 +134,7 @@ class DocumentUploadTestCase(GenericDocumentViewTestCase): ) response = self._request_upload_interactive_view() self.assertContains( - response=response, text=self.source.label, status_code=200 + response=response, text=self.test_source.label, status_code=200 ) @@ -229,7 +232,19 @@ class NewDocumentVersionViewTestCase(GenericDocumentViewTestCase): self.assertEqual(resolved_link, None) -class StagingFolderViewTestCase(GenericViewTestCase): +class StagingFolderViewTestMixin(object): + def _request_staging_file_delete_view(self, staging_folder, staging_file): + return self.post( + viewname='sources:staging_file_delete', kwargs={ + 'pk': staging_folder.pk, + 'encoded_filename': staging_file.encoded_filename + } + ) + + +class StagingFolderViewTestCase( + StagingFolderViewTestMixin, GenericViewTestCase +): def setUp(self): super(StagingFolderViewTestCase, self).setUp() self.temporary_directory = mkdtemp() @@ -241,14 +256,6 @@ class StagingFolderViewTestCase(GenericViewTestCase): fs_cleanup(self.temporary_directory) super(StagingFolderViewTestCase, self).tearDown() - def _request_staging_file_delete_view(self, staging_folder, staging_file): - return self.post( - viewname='sources:staging_file_delete', kwargs={ - 'pk': staging_folder.pk, - 'encoded_filename': staging_file.encoded_filename - } - ) - def test_staging_file_delete_no_permission(self): staging_folder = StagingFolderSource.objects.create( label=TEST_SOURCE_LABEL, @@ -290,44 +297,10 @@ class StagingFolderViewTestCase(GenericViewTestCase): self.assertEqual(len(list(staging_folder.get_files())), 0) -class SourcesTestCase(GenericDocumentViewTestCase): - def _create_web_source(self): - self.source = WebFormSource.objects.create( - enabled=True, label=TEST_SOURCE_LABEL, - uncompress=TEST_SOURCE_UNCOMPRESS_N - ) - - def _request_setup_source_list_view(self): - return self.get(viewname='sources:setup_source_list') - - def test_source_list_view_no_permission(self): - self._create_web_source() - - response = self._request_setup_source_list_view() - self.assertEqual(response.status_code, 403) - - def test_source_list_view_with_permission(self): - self._create_web_source() - - self.grant_permission(permission=permission_sources_setup_view) - - response = self._request_setup_source_list_view() - self.assertContains( - response=response, text=self.source.label, status_code=200 - ) - - def _request_setup_source_create_view(self): - return self.post( - kwargs={'source_type': SOURCE_CHOICE_WEB_FORM}, - viewname='sources:setup_source_create', data={ - 'enabled': True, 'label': TEST_SOURCE_LABEL, - 'uncompress': TEST_SOURCE_UNCOMPRESS_N - } - ) - +class SourcesViewTestCase( + SourceTestMixin, SourceViewTestMixin, GenericViewTestCase +): def test_source_create_view_no_permission(self): - self.grant_permission(permission=permission_sources_setup_view) - response = self._request_setup_source_create_view() self.assertEqual(response.status_code, 403) @@ -335,7 +308,6 @@ class SourcesTestCase(GenericDocumentViewTestCase): def test_source_create_view_with_permission(self): self.grant_permission(permission=permission_sources_setup_create) - self.grant_permission(permission=permission_sources_setup_view) response = self._request_setup_source_create_view() self.assertEqual(response.status_code, 302) @@ -344,17 +316,10 @@ class SourcesTestCase(GenericDocumentViewTestCase): self.assertEqual(webform_source.label, TEST_SOURCE_LABEL) self.assertEqual(webform_source.uncompress, TEST_SOURCE_UNCOMPRESS_N) - def _request_setup_source_delete_view(self): - return self.post( - viewname='sources:setup_source_delete', - kwargs={'pk': self.source.pk} - ) - def test_source_delete_view_with_permission(self): - self._create_web_source() + self._create_test_source() self.grant_permission(permission=permission_sources_setup_delete) - self.grant_permission(permission=permission_sources_setup_view) response = self._request_setup_source_delete_view() self.assertEqual(response.status_code, 302) @@ -362,11 +327,25 @@ class SourcesTestCase(GenericDocumentViewTestCase): self.assertEqual(WebFormSource.objects.count(), 0) def test_source_delete_view_no_permission(self): - self._create_web_source() - - self.grant_permission(permission=permission_sources_setup_view) + self._create_test_source() response = self._request_setup_source_delete_view() self.assertEqual(response.status_code, 403) self.assertEqual(WebFormSource.objects.count(), 1) + + def test_source_list_view_no_permission(self): + self._create_test_source() + + response = self._request_setup_source_list_view() + self.assertEqual(response.status_code, 403) + + def test_source_list_view_with_permission(self): + self._create_test_source() + + self.grant_permission(permission=permission_sources_setup_view) + + response = self._request_setup_source_list_view() + self.assertContains( + response=response, text=self.test_source.label, status_code=200 + ) diff --git a/mayan/apps/sources/views.py b/mayan/apps/sources/views.py index 167877354f..be55047b7d 100644 --- a/mayan/apps/sources/views.py +++ b/mayan/apps/sources/views.py @@ -215,6 +215,7 @@ class UploadInteractiveView(UploadBaseView): UploadInteractiveView, self ).dispatch(request, *args, **kwargs) except Exception as exception: + raise if request.is_ajax(): return JsonResponse( data={'error': force_text(exception)}, status=500