diff --git a/mayan/apps/document_states/tests/__init__.py b/mayan/apps/document_states/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/mayan/apps/document_states/tests/literals.py b/mayan/apps/document_states/tests/literals.py new file mode 100644 index 0000000000..c8fa5f52d8 --- /dev/null +++ b/mayan/apps/document_states/tests/literals.py @@ -0,0 +1,8 @@ +from __future__ import unicode_literals + +TEST_WORKFLOW_LABEL = 'test workflow' +TEST_WORKFLOW_INITIAL_STATE_LABEL = 'test initial state' +TEST_WORKFLOW_INITIAL_STATE_COMPLETION = 33 +TEST_WORKFLOW_STATE_LABEL = 'test state' +TEST_WORKFLOW_STATE_COMPLETION = 66 +TEST_WORKFLOW_TRANSITION_LABEL = 'test transtition' diff --git a/mayan/apps/document_states/tests/test_views.py b/mayan/apps/document_states/tests/test_views.py new file mode 100644 index 0000000000..ebacb6dd80 --- /dev/null +++ b/mayan/apps/document_states/tests/test_views.py @@ -0,0 +1,194 @@ +from __future__ import unicode_literals + +from django.contrib.auth.models import User +from django.core.files import File +from django.core.urlresolvers import reverse +from django.test.client import Client +from django.test import TestCase +from django.utils.timezone import now + +from common.literals import TIME_DELTA_UNIT_DAYS +from documents.models import DocumentType +from documents.tests.literals import ( + TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME, TEST_ADMIN_EMAIL, + TEST_DOCUMENT_TYPE, TEST_SMALL_DOCUMENT_PATH +) + +from ..models import Workflow, WorkflowState, WorkflowTransition + +from .literals import ( + TEST_WORKFLOW_LABEL, TEST_WORKFLOW_INITIAL_STATE_LABEL, + TEST_WORKFLOW_INITIAL_STATE_COMPLETION, TEST_WORKFLOW_STATE_LABEL, + TEST_WORKFLOW_STATE_COMPLETION, TEST_WORKFLOW_TRANSITION_LABEL +) + + +class DocumentStateViewTestCase(TestCase): + def setUp(self): + self.admin_user = User.objects.create_superuser( + username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL, + password=TEST_ADMIN_PASSWORD + ) + self.client = Client() + # Login the admin user + logged_in = self.client.login( + username=TEST_ADMIN_USERNAME, password=TEST_ADMIN_PASSWORD + ) + self.assertTrue(logged_in) + self.assertTrue(self.admin_user.is_authenticated()) + + self.document_type = DocumentType.objects.create( + label=TEST_DOCUMENT_TYPE + ) + + with open(TEST_SMALL_DOCUMENT_PATH) as file_object: + self.document = self.document_type.new_document( + file_object=File(file_object) + ) + + def tearDown(self): + self.document_type.delete() + self.admin_user.delete() + Workflow.objects.all().delete() + + def test_creating_workflow(self): + response = self.client.post( + reverse( + 'document_states:setup_workflow_create' + ), data={ + 'label': TEST_WORKFLOW_LABEL, + }, follow=True + ) + + self.assertEquals(response.status_code, 200) + + self.assertEquals(Workflow.objects.count(), 1) + self.assertEquals(Workflow.objects.all()[0].label, TEST_WORKFLOW_LABEL) + + def test_delete_workflow(self): + workflow = Workflow.objects.create(label=TEST_WORKFLOW_LABEL) + + self.assertEquals(Workflow.objects.count(), 1) + self.assertEquals(Workflow.objects.all()[0].label, TEST_WORKFLOW_LABEL) + + response = self.client.post( + reverse( + 'document_states:setup_workflow_delete', args=(workflow.pk,) + ), follow=True + ) + + self.assertEquals(response.status_code, 200) + + self.assertEquals(Workflow.objects.count(), 0) + + def test_create_workflow_state(self): + workflow = Workflow.objects.create(label=TEST_WORKFLOW_LABEL) + + response = self.client.post( + reverse( + 'document_states:setup_workflow_state_create', + args=(workflow.pk,) + ), data={ + 'label': TEST_WORKFLOW_STATE_LABEL, + 'completion': TEST_WORKFLOW_STATE_COMPLETION, + }, follow=True + ) + + self.assertEquals(response.status_code, 200) + + self.assertEquals(WorkflowState.objects.count(), 1) + self.assertEquals( + WorkflowState.objects.all()[0].label, TEST_WORKFLOW_STATE_LABEL + ) + self.assertEquals( + WorkflowState.objects.all()[0].completion, + TEST_WORKFLOW_STATE_COMPLETION + ) + + def test_delete_workflow_state(self): + workflow = Workflow.objects.create(label=TEST_WORKFLOW_LABEL) + workflow_state = WorkflowState.objects.create( + workflow=workflow, label=TEST_WORKFLOW_STATE_LABEL, + completion=TEST_WORKFLOW_STATE_COMPLETION + ) + + response = self.client.post( + reverse( + 'document_states:setup_workflow_state_delete', + args=(workflow_state.pk,) + ), follow=True + ) + + self.assertEquals(response.status_code, 200) + + self.assertEquals(WorkflowState.objects.count(), 0) + self.assertEquals(Workflow.objects.count(), 1) + + def test_create_workflow_transition(self): + workflow = Workflow.objects.create(label=TEST_WORKFLOW_LABEL) + workflow_initial_state = WorkflowState.objects.create( + workflow=workflow, label=TEST_WORKFLOW_INITIAL_STATE_LABEL, + completion=TEST_WORKFLOW_INITIAL_STATE_COMPLETION, initial=True + ) + workflow_state = WorkflowState.objects.create( + workflow=workflow, label=TEST_WORKFLOW_STATE_LABEL, + completion=TEST_WORKFLOW_STATE_COMPLETION + ) + + response = self.client.post( + reverse( + 'document_states:setup_workflow_transition_create', + args=(workflow.pk,) + ), data={ + 'label': TEST_WORKFLOW_TRANSITION_LABEL, + 'origin_state': workflow_initial_state.pk, + 'destination_state': workflow_state.pk, + }, follow=True + ) + + self.assertEquals(response.status_code, 200) + + self.assertEquals(WorkflowTransition.objects.count(), 1) + self.assertEquals( + WorkflowTransition.objects.all()[0].label, + TEST_WORKFLOW_TRANSITION_LABEL + ) + self.assertEquals( + WorkflowTransition.objects.all()[0].origin_state, + workflow_initial_state + ) + self.assertEquals( + WorkflowTransition.objects.all()[0].destination_state, + workflow_state + ) + + def test_delete_workflow_transition(self): + workflow = Workflow.objects.create(label=TEST_WORKFLOW_LABEL) + workflow_initial_state = WorkflowState.objects.create( + workflow=workflow, label=TEST_WORKFLOW_INITIAL_STATE_LABEL, + completion=TEST_WORKFLOW_INITIAL_STATE_COMPLETION, initial=True + ) + workflow_state = WorkflowState.objects.create( + workflow=workflow, label=TEST_WORKFLOW_STATE_LABEL, + completion=TEST_WORKFLOW_STATE_COMPLETION + ) + workflow_transition = WorkflowTransition.objects.create( + workflow=workflow, label=TEST_WORKFLOW_TRANSITION_LABEL, + origin_state=workflow_initial_state, + destination_state=workflow_state + ) + + self.assertEquals(WorkflowTransition.objects.count(), 1) + + response = self.client.post( + reverse( + 'document_states:setup_workflow_transition_delete', + args=(workflow_transition.pk,) + ), follow=True + ) + + self.assertEquals(response.status_code, 200) + + self.assertEquals(WorkflowState.objects.count(), 2) + self.assertEquals(Workflow.objects.count(), 1) + self.assertEquals(WorkflowTransition.objects.count(), 0) diff --git a/mayan/apps/document_states/views.py b/mayan/apps/document_states/views.py index 2fbcac1b84..795a911a3d 100644 --- a/mayan/apps/document_states/views.py +++ b/mayan/apps/document_states/views.py @@ -265,24 +265,18 @@ class SetupWorkflowStateDeleteView(SingleObjectDeleteView): model = WorkflowState view_permission = PERMISSION_WORKFLOW_DELETE - def get_context_data(self, **kwargs): - context = super(SetupWorkflowStateDeleteView, self).get_context_data(**kwargs) - - context.update( - { - 'object': self.get_object().workflow, - 'workflow_instance': self.get_object(), - 'navigation_object_list': [ - {'object': 'object'}, - {'object': 'workflow_instance'} - ], - } - ) - - return context + def get_extra_context(self): + return { + 'navigation_object_list': ('object', 'workflow_instance'), + 'object': self.get_object(), + 'workflow_instance': self.get_object().workflow, + } def get_success_url(self): - return reverse('document_states:setup_workflow_States', args=[self.get_object().workflow.pk]) + return reverse( + 'document_states:setup_workflow_states', + args=(self.get_object().workflow.pk,) + ) class SetupWorkflowStateEditView(SingleObjectEditView): @@ -290,21 +284,12 @@ class SetupWorkflowStateEditView(SingleObjectEditView): model = WorkflowState view_permission = PERMISSION_WORKFLOW_EDIT - def get_context_data(self, **kwargs): - context = super(SetupWorkflowStateEditView, self).get_context_data(**kwargs) - - context.update( - { - 'object': self.get_object().workflow, - 'workflow_instance': self.get_object(), - 'navigation_object_list': [ - {'object': 'object'}, - {'object': 'workflow_instance'} - ], - } - ) - - return context + def get_extra_context(self): + return { + 'navigation_object_list': ('object', 'workflow_instance'), + 'object': self.get_object(), + 'workflow_instance': self.get_object().workflow, + } def get_success_url(self): return reverse('document_states:setup_workflow_states', args=[self.get_object().workflow.pk]) @@ -392,21 +377,12 @@ class SetupWorkflowTransitionDeleteView(SingleObjectDeleteView): model = WorkflowTransition view_permission = PERMISSION_WORKFLOW_DELETE - def get_context_data(self, **kwargs): - context = super(SetupWorkflowTransitionDeleteView, self).get_context_data(**kwargs) - - context.update( - { - 'object': self.get_object().workflow, - 'workflow_instance': self.get_object(), - 'navigation_object_list': [ - {'object': 'object'}, - {'object': 'workflow_instance'} - ], - } - ) - - return context + def get_extra_context(self): + return { + 'object': self.get_object(), + 'navigation_object_list': ('object', 'workflow_instance'), + 'workflow_instance': self.get_object().workflow, + } def get_success_url(self): return reverse('document_states:setup_workflow_transitions', args=[self.get_object().workflow.pk]) @@ -417,21 +393,12 @@ class SetupWorkflowTransitionEditView(SingleObjectEditView): model = WorkflowTransition view_permission = PERMISSION_WORKFLOW_EDIT - def get_context_data(self, **kwargs): - context = super(SetupWorkflowTransitionEditView, self).get_context_data(**kwargs) - - context.update( - { - 'object': self.get_object().workflow, - 'workflow_instance': self.get_object(), - 'navigation_object_list': [ - {'object': 'object'}, - {'object': 'workflow_instance'} - ], - } - ) - - return context + def get_extra_context(self): + return { + 'navigation_object_list': ('object', 'workflow_instance'), + 'object': self.get_object(), + 'workflow_instance': self.get_object().workflow, + } def get_form_kwargs(self): kwargs = super(SetupWorkflowTransitionEditView, self).get_form_kwargs()