Add initial tests
Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
TEST_CONTROL_SHEET_LABEL = 'test control sheet'
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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)
|
||||
|
||||
66
mayan/apps/control_codes/tests/test_views.py
Normal file
66
mayan/apps/control_codes/tests/test_views.py
Normal 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)
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user