Improve source tests layout

Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-09-29 23:14:33 -04:00
parent 762cdc5b89
commit b0163319eb
4 changed files with 103 additions and 87 deletions

View File

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

View File

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

View File

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

View File

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