From 0e35cca704120ecd4457a3e8762ffa24a18d444e Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Fri, 6 Sep 2019 03:25:56 -0400 Subject: [PATCH] Add cabinets and metadata control codes Signed-off-by: Roberto Rosario --- mayan/apps/cabinets/apps.py | 1 + mayan/apps/cabinets/control_codes.py | 31 ++++++++++++++ .../apps/cabinets/tests/test_control_codes.py | 40 ++++++++++++++++++ mayan/apps/cabinets/tests/test_views.py | 12 ++++-- mayan/apps/control_codes/control_codes.py | 6 ++- mayan/apps/metadata/apps.py | 1 + mayan/apps/metadata/control_codes.py | 34 +++++++++++++++ .../apps/metadata/tests/test_control_codes.py | 42 +++++++++++++++++++ 8 files changed, 162 insertions(+), 5 deletions(-) create mode 100644 mayan/apps/cabinets/control_codes.py create mode 100644 mayan/apps/cabinets/tests/test_control_codes.py create mode 100644 mayan/apps/metadata/control_codes.py create mode 100644 mayan/apps/metadata/tests/test_control_codes.py diff --git a/mayan/apps/cabinets/apps.py b/mayan/apps/cabinets/apps.py index 6011bd4874..a6f1a9a1b5 100644 --- a/mayan/apps/cabinets/apps.py +++ b/mayan/apps/cabinets/apps.py @@ -18,6 +18,7 @@ from mayan.apps.events.permissions import permission_events_view from mayan.apps.documents.search import document_page_search, document_search from mayan.apps.navigation.classes import SourceColumn +from .control_codes import * # NOQA from .dependencies import * # NOQA from .events import ( event_cabinet_edited, event_cabinet_add_document, diff --git a/mayan/apps/cabinets/control_codes.py b/mayan/apps/cabinets/control_codes.py new file mode 100644 index 0000000000..67c3d661ce --- /dev/null +++ b/mayan/apps/cabinets/control_codes.py @@ -0,0 +1,31 @@ +from __future__ import unicode_literals + +from django.apps import apps + +from mayan.apps.control_codes.classes import ControlCode + +__all__ = ('ControlCodeCabinetDocumentAdd',) + + +class ControlCodeCabinetDocumentAdd(ControlCode): + arguments = ('label_path',) + label = 'Add document to cabinet' + name = 'cabinet_document_add_v1' + + def execute(self, context): + Cabinet = apps.get_model( + app_label='cabinets', model_name='Cabinet' + ) + + document = context['document_page'].document + user = context.get('user', None) + + queryset = Cabinet.objects.all() + for label in self.kwargs['label_path']: + cabinet = queryset.get(label=label) + queryset = cabinet.get_children() + + cabinet.document_add(document=document, _user=user) + + +ControlCode.register(control_code=ControlCodeCabinetDocumentAdd) diff --git a/mayan/apps/cabinets/tests/test_control_codes.py b/mayan/apps/cabinets/tests/test_control_codes.py new file mode 100644 index 0000000000..3fd1d19c3b --- /dev/null +++ b/mayan/apps/cabinets/tests/test_control_codes.py @@ -0,0 +1,40 @@ +from __future__ import unicode_literals + +from mayan.apps.documents.tests.base import GenericDocumentTestCase +from mayan.apps.storage.utils import fs_cleanup, mkstemp + +from ..control_codes import ControlCodeCabinetDocumentAdd + +from .mixins import CabinetTestMixin, CabinetViewTestMixin + + +class ControlCodeCabinetDocumentAddTestCase( + CabinetTestMixin, CabinetViewTestMixin, + GenericDocumentTestCase +): + auto_upload_document = False + + def setUp(self): + super(ControlCodeCabinetDocumentAddTestCase, self).setUp() + self.test_document_path = mkstemp()[1] + + self._create_test_cabinet() + self._create_test_cabinet_child() + + def tearDown(self): + fs_cleanup(filename=self.test_document_path) + super(ControlCodeCabinetDocumentAddTestCase, self).tearDown() + + def test_control_code(self): + with open(self.test_document_path, mode='wb') as file_object: + control_code = ControlCodeCabinetDocumentAdd( + label_path=( + self.test_cabinet.label, self.test_cabinet_child.label + ), + ) + control_code.get_image().save(file_object) + + self.upload_document() + self.assertEqual( + self.test_document.cabinets.first(), self.test_cabinet_child + ) diff --git a/mayan/apps/cabinets/tests/test_views.py b/mayan/apps/cabinets/tests/test_views.py index 44bf735705..f846711f0c 100644 --- a/mayan/apps/cabinets/tests/test_views.py +++ b/mayan/apps/cabinets/tests/test_views.py @@ -14,7 +14,9 @@ from .literals import TEST_CABINET_LABEL, TEST_CABINET_LABEL_EDITED from .mixins import CabinetTestMixin, CabinetViewTestMixin -class CabinetViewTestCase(CabinetTestMixin, CabinetViewTestMixin, GenericViewTestCase): +class CabinetViewTestCase( + CabinetTestMixin, CabinetViewTestMixin, GenericViewTestCase +): def test_cabinet_create_view_no_permission(self): response = self._request_test_cabinet_create_view() self.assertEqual(response.status_code, 403) @@ -105,7 +107,9 @@ class CabinetViewTestCase(CabinetTestMixin, CabinetViewTestMixin, GenericViewTes ) -class CabinetChildViewTestCase(CabinetTestMixin, CabinetViewTestMixin, GenericViewTestCase): +class CabinetChildViewTestCase( + CabinetTestMixin, CabinetViewTestMixin, GenericViewTestCase +): def setUp(self): super(CabinetChildViewTestCase, self).setUp() self._create_test_cabinet() @@ -157,7 +161,9 @@ class CabinetChildViewTestCase(CabinetTestMixin, CabinetViewTestMixin, GenericVi self.assertEqual(Cabinet.objects.count(), cabinet_count - 1) -class CabinetDocumentViewTestCase(CabinetTestMixin, CabinetViewTestMixin, GenericDocumentViewTestCase): +class CabinetDocumentViewTestCase( + CabinetTestMixin, CabinetViewTestMixin, GenericDocumentViewTestCase +): def _add_document_to_cabinet(self): return self.post( viewname='cabinets:document_cabinet_add', kwargs={ diff --git a/mayan/apps/control_codes/control_codes.py b/mayan/apps/control_codes/control_codes.py index ca2c88931c..a24eaa9b5c 100644 --- a/mayan/apps/control_codes/control_codes.py +++ b/mayan/apps/control_codes/control_codes.py @@ -8,12 +8,14 @@ __all__ = ('ControlCodeAttributeEdit',) class ControlCodeAttributeEdit(ControlCode): arguments = ('name', 'value') label = 'Change document property' - name = 'document_property_edit' + name = 'document_property_edit_v1' def execute(self, context): document = context['document_page'].document + user = context.get('user', None) + setattr(document, self.kwargs['name'], self.kwargs['value']) - document.save() + document.save(_user=user) ControlCode.register(control_code=ControlCodeAttributeEdit) diff --git a/mayan/apps/metadata/apps.py b/mayan/apps/metadata/apps.py index 44fd6bb546..3ee824555b 100644 --- a/mayan/apps/metadata/apps.py +++ b/mayan/apps/metadata/apps.py @@ -26,6 +26,7 @@ from mayan.apps.events.permissions import permission_events_view from mayan.apps.navigation.classes import SourceColumn from .classes import DocumentMetadataHelper +from .control_codes import * # NOQA from .dependencies import * # NOQA from .events import ( event_document_metadata_added, event_document_metadata_edited, diff --git a/mayan/apps/metadata/control_codes.py b/mayan/apps/metadata/control_codes.py new file mode 100644 index 0000000000..99c9651016 --- /dev/null +++ b/mayan/apps/metadata/control_codes.py @@ -0,0 +1,34 @@ +from __future__ import unicode_literals + +from django.apps import apps + +from mayan.apps.control_codes.classes import ControlCode + +__all__ = ('ControlCodeDocumentMetadataAdd',) + + +class ControlCodeDocumentMetadataAdd(ControlCode): + arguments = ('name', 'value') + label = 'Add document metadata' + name = 'document_metadata_add_v1' + + def execute(self, context): + DocumentMetadata = apps.get_model( + app_label='metadata', model_name='DocumentMetadata' + ) + MetadataType = apps.get_model( + app_label='metadata', model_name='MetadataType' + ) + + document = context['document_page'].document + user = context.get('user', None) + + metadata_type = MetadataType.objects.get(name=self.kwargs['name']) + document_metadata = DocumentMetadata( + document=document, metadata_type=metadata_type, + value=self.kwargs['value'] + ) + document_metadata.save(_user=user) + + +ControlCode.register(control_code=ControlCodeDocumentMetadataAdd) diff --git a/mayan/apps/metadata/tests/test_control_codes.py b/mayan/apps/metadata/tests/test_control_codes.py new file mode 100644 index 0000000000..16bc3dfb0e --- /dev/null +++ b/mayan/apps/metadata/tests/test_control_codes.py @@ -0,0 +1,42 @@ +from __future__ import unicode_literals + +from mayan.apps.documents.tests.base import GenericDocumentTestCase +from mayan.apps.storage.utils import fs_cleanup, mkstemp + +from ..control_codes import ControlCodeDocumentMetadataAdd + +from .literals import TEST_DOCUMENT_METADATA_VALUE_2 +from .mixins import DocumentMetadataViewTestMixin, MetadataTypeTestMixin + + +class ControlCodeDocumentMetadataAddTestCase( + DocumentMetadataViewTestMixin, MetadataTypeTestMixin, + GenericDocumentTestCase +): + auto_upload_document = False + + def setUp(self): + super(ControlCodeDocumentMetadataAddTestCase, self).setUp() + self.test_document_path = mkstemp()[1] + + self._create_test_metadata_type() + self.test_document_type.metadata.create( + metadata_type=self.test_metadata_type + ) + + def tearDown(self): + fs_cleanup(filename=self.test_document_path) + super(ControlCodeDocumentMetadataAddTestCase, self).tearDown() + + def test_control_code(self): + with open(self.test_document_path, mode='wb') as file_object: + control_code = ControlCodeDocumentMetadataAdd( + name=self.test_metadata_type.name, + value=TEST_DOCUMENT_METADATA_VALUE_2 + ) + control_code.get_image().save(file_object) + + self.upload_document() + self.assertEqual( + self.test_document.metadata.first().value, TEST_DOCUMENT_METADATA_VALUE_2 + )