Add initial tests

Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-09-04 16:23:12 -04:00
parent 3872db8c9f
commit cca08d8103
7 changed files with 167 additions and 9 deletions

View File

@@ -75,7 +75,6 @@ class ControlCodesApp(MayanAppConfig):
permission_control_sheet_view
)
)
ModelPermission.register_inheritance(
model=ControlSheetCode, related='control_sheet',
)
@@ -95,7 +94,8 @@ class ControlCodesApp(MayanAppConfig):
attribute='arguments', source=ControlSheetCode
)
SourceColumn(
attribute='enabled', source=ControlSheetCode
attribute='enabled', is_sortable=True, source=ControlSheetCode,
widget=TwoStateWidget
)
menu_list_facet.bind_links(

View File

@@ -40,7 +40,9 @@ class ControlCode(object):
def get_choices(cls):
return sorted(
[
(name, klass.get_label()) for name, klass in cls._registry.items()
(
name, klass.get_label()
) for name, klass in cls._registry.items()
]
)
@@ -61,6 +63,9 @@ class ControlCode(object):
timeout=DOCUMENT_IMAGE_TASK_TIMEOUT, disable_sync_subtasks=False
)
results = []
# Collect control codes per page
with document_page.cache_partition.get_file(filename=cache_filename).open() as file_object:
image = Image.open(file_object)
for code in decode(image):
@@ -69,7 +74,7 @@ class ControlCode(object):
if parts[0] == CONTROL_CODE_MAGIC_NUMBER:
try:
control_code_class = ControlCode.get(name=parts[2])
ControlCode.get(name=parts[2])
except KeyError:
# Unknown control code name
pass
@@ -78,10 +83,23 @@ class ControlCode(object):
document_page.save()
arguments = CONTROL_CODE_SEPARATOR.join(parts[3:])
control_code = control_code_class(
**yaml_load(arguments)
results.append(
{
'order': parts[1], 'name': parts[2],
'arguments': arguments
}
)
control_code.execute()
# Sort control codes so that they are executed in the
# specified order after the collection finishes.
results = results.sort(key=lambda x: x['order'])
for result in results:
control_code_class = ControlCode.get(name=result['name'])
control_code = control_code_class(
**yaml_load(result['arguments'])
)
control_code.execute()
@classmethod
def register(cls, control_code):

View File

@@ -1 +1,3 @@
from __future__ import unicode_literals
TEST_CONTROL_SHEET_LABEL = 'test control sheet'

View File

@@ -1 +1,73 @@
from __future__ import unicode_literals
from ..models import ControlSheet
from .literals import TEST_CONTROL_SHEET_LABEL
class ControlSheetAPIViewTestMixin(object):
def _request_test_tag_create_api_view(self):
return self.post(
viewname='rest_api:tag-list', data={
'label': TEST_CONTROL_SHEET_LABEL, 'color': TEST_CONTROL_SHEET_COLOR
}
)
def _request_test_control_sheet_delete_api_view(self):
return self.delete(
viewname='rest_api:control_sheet-detail', kwargs={'pk': self.test_control_sheet.pk}
)
def _request_control_sheet_edit_view(self, extra_data=None, verb='patch'):
data = {
'label': TEST_CONTROL_SHEET_LABEL_EDITED,
}
if extra_data:
data.update(extra_data)
return getattr(self, verb)(
viewname='rest_api:control_sheet-detail', kwargs={
'control_sheet_id': self.test_control_sheet.pk
}, data=data
)
class ControlSheetTestMixin(object):
def _create_test_control_sheet(self):
self.test_control_sheet = ControlSheet.objects.create(
label=TEST_CONTROL_SHEET_LABEL
)
class ControlSheetViewTestMixin(object):
def _request_test_control_sheet_create_view(self):
return self.post(
viewname='control_codes:control_sheet_create', data={
'label': TEST_CONTROL_SHEET_LABEL
}
)
def _request_test_control_sheet_delete_view(self):
return self.post(
viewname='control_codes:control_sheet_delete',
kwargs={'control_sheet_id': self.test_control_sheet.pk}
)
def _request_test_control_sheet_delete_multiple_view(self):
return self.post(
viewname='control_codes:control_sheet_multiple_delete',
data={'id_list': self.test_control_sheet.pk},
)
def _request_test_control_sheet_edit_view(self):
return self.post(
viewname='control_codes:control_sheet_edit',
kwargs={'control_sheet_id': self.test_control_sheet.pk}, data={
'label': TEST_CONTROL_SHEET_LABEL_EDITED,
}
)
def _request_test_control_sheet_list_view(self):
return self.get(viewname='control_sheets:control_sheet_list')

View File

@@ -7,6 +7,7 @@ from mayan.apps.documents.tests.base import GenericDocumentTestCase
from mayan.apps.documents.tests.mixins import DocumentTestMixin
from ..classes import ControlCode
from ..models import ControlSheet
TEST_CONTROL_CODE_DOCUMENT_PATH = '/tmp/test_control_code.png'
@@ -28,7 +29,6 @@ class ControlCodeTestCase(GenericDocumentTestCase):
test_document_path = TEST_CONTROL_CODE_DOCUMENT_PATH
def test_control_code_detection(self):
with open(TEST_CONTROL_CODE_DOCUMENT_PATH, mode='wb') as file_object:
control_code = ControlCodeTest(argument_1='test argument value')
control_code.image.save(file_object)

View File

@@ -0,0 +1,66 @@
from __future__ import unicode_literals
from django.test import override_settings
from mayan.apps.common.tests.base import BaseTestCase, GenericViewTestCase
from mayan.apps.documents.tests.base import GenericDocumentTestCase
from mayan.apps.documents.tests.mixins import DocumentTestMixin
from ..classes import ControlCode
from ..models import ControlSheet
from ..permissions import (
permission_control_sheet_create, permission_control_sheet_delete,
permission_control_sheet_edit, permission_control_sheet_view
)
from .mixins import ControlSheetTestMixin, ControlSheetViewTestMixin
class ControlSheetViewTestCase(
ControlSheetTestMixin, ControlSheetViewTestMixin, GenericViewTestCase
):
test_model = ControlSheet
test_permission_create = permission_control_sheet_create
test_permission_delete = permission_control_sheet_delete
def test_control_sheet_create_view_no_permissions(self):
object_count = self.test_model.objects.count()
response = self._request_test_control_sheet_create_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(self.test_model.objects.count(), object_count)
def test_control_sheet_create_view_with_permissions(self):
self.grant_permission(permission=self.test_permission_create)
object_count = self.test_model.objects.count()
response = self._request_test_control_sheet_create_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(self.test_model.objects.count(), object_count + 1)
def test_control_sheet_delete_view_no_permissions(self):
self._create_test_control_sheet()
object_count = self.test_model.objects.count()
response = self._request_test_control_sheet_delete_view()
self.assertEqual(response.status_code, 404)
self.assertEqual(self.test_model.objects.count(), object_count)
def test_control_sheet_delete_view_with_access(self):
self._create_test_control_sheet()
self.grant_access(
obj=self.test_control_sheet, permission=self.test_permission_delete
)
object_count = self.test_model.objects.count()
response = self._request_test_control_sheet_delete_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(self.test_model.objects.count(), object_count - 1)

View File

@@ -29,7 +29,7 @@ logger = logging.getLogger(__name__)
class ControlSheetCreateView(SingleObjectCreateView):
fields = ('label',)
model = ControlSheet
object_permission = permission_control_sheet_create
view_permission = permission_control_sheet_create
def get_extra_context(self):
return {