diff --git a/mayan/apps/document_states/models.py b/mayan/apps/document_states/models.py index 0244063faf..cc6e478b1e 100644 --- a/mayan/apps/document_states/models.py +++ b/mayan/apps/document_states/models.py @@ -137,18 +137,17 @@ class Workflow(models.Model): def save(self, *args, **kwargs): _user = kwargs.pop('_user', None) + created = not self.pk with transaction.atomic(): - is_new = not self.pk - super(Workflow, self).save(*args, **kwargs) - if is_new: - event_workflow_created.commit( - actor=_user, target=self - ) + result = super(Workflow, self).save(*args, **kwargs) + + if created: + event_workflow_created.commit(actor=_user, target=self) else: - event_workflow_edited.commit( - actor=_user, target=self - ) + event_workflow_edited.commit(actor=_user, target=self) + + return result @python_2_unicode_compatible diff --git a/mayan/apps/document_states/tests/mixins.py b/mayan/apps/document_states/tests/mixins.py index eb1d5c9cdb..76a1865ed4 100644 --- a/mayan/apps/document_states/tests/mixins.py +++ b/mayan/apps/document_states/tests/mixins.py @@ -6,9 +6,10 @@ from ..models import Workflow from .literals import ( TEST_WORKFLOW_INITIAL_STATE_LABEL, TEST_WORKFLOW_INITIAL_STATE_COMPLETION, TEST_WORKFLOW_INSTANCE_LOG_ENTRY_COMMENT, TEST_WORKFLOW_INTERNAL_NAME, - TEST_WORKFLOW_LABEL, TEST_WORKFLOW_STATE_LABEL, - TEST_WORKFLOW_STATE_COMPLETION, TEST_WORKFLOW_TRANSITION_LABEL, - TEST_WORKFLOW_TRANSITION_LABEL_2 + TEST_WORKFLOW_LABEL, TEST_WORKFLOW_LABEL_EDITED, + TEST_WORKFLOW_STATE_COMPLETION, TEST_WORKFLOW_STATE_LABEL, + TEST_WORKFLOW_STATE_LABEL_EDITED, TEST_WORKFLOW_TRANSITION_LABEL, + TEST_WORKFLOW_TRANSITION_LABEL_EDITED, TEST_WORKFLOW_TRANSITION_LABEL_2 ) @@ -27,6 +28,41 @@ class WorkflowStateActionTestMixin(object): ) +class WorkflowStateViewTestMixin(object): + def _request_test_workflow_state_create_view(self, extra_data=None): + data = { + 'label': TEST_WORKFLOW_STATE_LABEL, + 'completion': TEST_WORKFLOW_STATE_COMPLETION, + } + if extra_data: + data.update(extra_data) + + return self.post( + viewname='document_states:setup_workflow_state_create', + kwargs={'pk': self.test_workflow.pk}, data=data + ) + + def _request_test_workflow_state_delete_view(self): + return self.post( + viewname='document_states:setup_workflow_state_delete', + kwargs={'pk': self.test_workflow_state_1.pk} + ) + + def _request_test_workflow_state_edit_view(self): + return self.post( + viewname='document_states:setup_workflow_state_edit', + kwargs={'pk': self.test_workflow_state_1.pk}, data={ + 'label': TEST_WORKFLOW_STATE_LABEL_EDITED + } + ) + + def _request_test_workflow_state_list_view(self): + return self.get( + viewname='document_states:setup_workflow_state_list', + kwargs={'pk': self.test_workflow.pk} + ) + + class WorkflowTestMixin(object): def _create_test_workflow(self, add_document_type=False): self.test_workflow = Workflow.objects.create( @@ -79,3 +115,84 @@ class WorkflowTestMixin(object): transition=self.test_workflow_transition, user=self._test_case_user ) + + +class WorkflowTransitionViewTestMixin(object): + def _request_test_workflow_transition_create_view(self): + return self.post( + viewname='document_states:setup_workflow_transition_create', + kwargs={'pk': self.test_workflow.pk}, data={ + 'label': TEST_WORKFLOW_TRANSITION_LABEL, + 'origin_state': self.test_workflow_state_1.pk, + 'destination_state': self.test_workflow_state_2.pk, + } + ) + + def _request_test_workflow_transition_delete_view(self): + return self.post( + viewname='document_states:setup_workflow_transition_delete', + kwargs={'pk': self.test_workflow_transition.pk} + ) + + def _request_test_workflow_transition_edit_view(self): + return self.post( + viewname='document_states:setup_workflow_transition_edit', + kwargs={'pk': self.test_workflow_transition.pk}, data={ + 'label': TEST_WORKFLOW_TRANSITION_LABEL_EDITED, + 'origin_state': self.test_workflow_state_1.pk, + 'destination_state': self.test_workflow_state_2.pk, + } + ) + + def _request_test_workflow_transition_list_view(self): + return self.get( + viewname='document_states:setup_workflow_transition_list', + kwargs={'pk': self.test_workflow.pk} + ) + + def _request_test_workflow_transition(self): + return self.post( + viewname='document_states:workflow_instance_transition', + kwargs={'pk': self.test_workflow_instance.pk}, data={ + 'transition': self.test_workflow_transition.pk, + } + ) + + +class WorkflowViewTestMixin(object): + def _request_test_workflow_create_view(self): + return self.post( + viewname='document_states:setup_workflow_create', data={ + 'label': TEST_WORKFLOW_LABEL, + 'internal_name': TEST_WORKFLOW_INTERNAL_NAME, + } + ) + + def _request_test_workflow_delete_view(self): + return self.post( + viewname='document_states:setup_workflow_delete', kwargs={ + 'pk': self.test_workflow.pk + } + ) + + def _request_test_workflow_edit_view(self): + return self.post( + viewname='document_states:setup_workflow_edit', kwargs={ + 'pk': self.test_workflow.pk, + }, data={ + 'label': TEST_WORKFLOW_LABEL_EDITED, + 'internal_name': self.test_workflow.internal_name + } + ) + + def _request_test_workflow_list_view(self): + return self.get( + viewname='document_states:setup_workflow_list', + ) + + def _request_test_workflow_preview_view(self): + return self.get( + viewname='document_states:workflow_preview', kwargs={ + 'pk': self.test_workflow.pk, + } + ) diff --git a/mayan/apps/document_states/tests/test_api.py b/mayan/apps/document_states/tests/test_api.py index 6f379c185c..4f985bfc52 100644 --- a/mayan/apps/document_states/tests/test_api.py +++ b/mayan/apps/document_states/tests/test_api.py @@ -27,15 +27,20 @@ from .mixins import WorkflowTestMixin class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase): auto_upload_document = False - def _request_workflow_create_view(self): + def _request_test_workflow_create_api_view(self, extra_data=None): + data = { + 'label': TEST_WORKFLOW_LABEL + } + + if extra_data: + data.update(extra_data) + return self.post( - viewname='rest_api:workflow-list', data={ - 'label': TEST_WORKFLOW_LABEL - } + viewname='rest_api:workflow-list', data=data ) def test_workflow_create_view_no_permission(self): - response = self._request_workflow_create_view() + response = self._request_test_workflow_create_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual(Workflow.objects.count(), 0) @@ -43,7 +48,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) def test_workflow_create_view_with_permission(self): self.grant_permission(permission=permission_workflow_create) - response = self._request_workflow_create_view() + response = self._request_test_workflow_create_api_view() self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual( @@ -52,16 +57,14 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) self.assertEqual(Workflow.objects.count(), 1) - def _request_workflow_create_view_with_document_type(self): - return self.post( - viewname='rest_api:workflow-list', data={ - 'label': TEST_WORKFLOW_LABEL, - 'document_types_pk_list': '{}'.format(self.test_document_type.pk) + def test_workflow_create_with_document_type_view_no_permission(self): + response = self._request_test_workflow_create_api_view( + extra_data={ + 'document_types_pk_list': '{}'.format( + self.test_document_type.pk + ) } ) - - def test_workflow_create_with_document_type_view_no_permission(self): - response = self._request_workflow_create_view_with_document_type() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual(Workflow.objects.count(), 0) @@ -69,7 +72,13 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) def test_workflow_create_with_document_type_view_with_permission(self): self.grant_permission(permission=permission_workflow_create) - response = self._request_workflow_create_view_with_document_type() + response = self._request_test_workflow_create_api_view( + extra_data={ + 'document_types_pk_list': '{}'.format( + self.test_document_type.pk + ) + } + ) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(Workflow.objects.count(), 1) @@ -79,7 +88,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) ) self.assertEqual(response.data['id'], workflow.pk) - def _request_workflow_delete_view(self): + def _request_test_workflow_delete_api_view(self): return self.delete( viewname='rest_api:workflow-detail', kwargs={ 'pk': self.test_workflow.pk @@ -88,7 +97,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) def test_workflow_delete_view_no_permission(self): self._create_test_workflow() - response = self._request_workflow_delete_view() + response = self._request_test_workflow_delete_api_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertEqual(Workflow.objects.count(), 1) @@ -97,19 +106,21 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) self.grant_access( obj=self.test_workflow, permission=permission_workflow_delete ) - response = self._request_workflow_delete_view() + response = self._request_test_workflow_delete_api_view() self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) self.assertEqual(Workflow.objects.count(), 0) - def _request_workflow_detail_view(self): + def _request_test_workflow_detail_api_view(self): return self.get( - viewname='rest_api:workflow-detail', args=(self.test_workflow.pk,) + viewname='rest_api:workflow-detail', kwargs={ + 'pk': self.test_workflow.pk + } ) def test_workflow_detail_view_no_access(self): self._create_test_workflow() - response = self._request_workflow_detail_view() + response = self._request_test_workflow_detail_api_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertFalse('label' in response.data) @@ -120,11 +131,11 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_detail_view() + response = self._request_test_workflow_detail_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['label'], self.test_workflow.label) - def _request_workflow_document_type_list_create_view(self): + def _request_test_workflow_document_type_list_create_api_view(self): return self.post( viewname='rest_api:workflow-document-type-list', kwargs={'pk': self.test_workflow.pk}, data={ @@ -135,7 +146,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) def test_workflow_document_type_create_view_no_access(self): self._create_test_workflow(add_document_type=False) - response = self._request_workflow_document_type_list_create_view() + response = self._request_test_workflow_document_type_list_create_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertEqual(self.test_workflow.document_types.count(), 0) @@ -144,7 +155,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) self.grant_access(permission=permission_workflow_edit, obj=self.test_workflow) - response = self._request_workflow_document_type_list_create_view() + response = self._request_test_workflow_document_type_list_create_api_view() self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertQuerysetEqual( @@ -152,7 +163,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) (repr(self.test_document_type),) ) - def _request_workflow_document_type_delete_view(self): + def _request_test_workflow_document_type_delete_api_view(self): return self.delete( viewname='rest_api:workflow-document-type-detail', kwargs={ @@ -164,7 +175,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) def test_workflow_document_type_delete_view_no_access(self): self._create_test_workflow(add_document_type=True) - response = self._request_workflow_document_type_delete_view() + response = self._request_test_workflow_document_type_delete_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.test_workflow.refresh_from_db() @@ -175,13 +186,13 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) self.grant_access(permission=permission_workflow_edit, obj=self.test_workflow) - response = self._request_workflow_document_type_delete_view() + response = self._request_test_workflow_document_type_delete_api_view() self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) self.test_workflow.refresh_from_db() self.assertEqual(self.test_workflow.document_types.count(), 0) - def _request_workflow_document_type_detail_view(self): + def _request_test_workflow_document_type_detail_api_view(self): return self.get( viewname='rest_api:workflow-document-type-detail', kwargs={ @@ -193,7 +204,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) def test_workflow_document_type_detail_view_no_access(self): self._create_test_workflow(add_document_type=True) - response = self._request_workflow_document_type_detail_view() + response = self._request_test_workflow_document_type_detail_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertFalse('label' in response.data) @@ -204,7 +215,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_document_type_detail_view() + response = self._request_test_workflow_document_type_detail_api_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertFalse('label' in response.data) @@ -216,7 +227,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) permission=permission_document_type_view ) - response = self._request_workflow_document_type_detail_view() + response = self._request_test_workflow_document_type_detail_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertFalse('label' in response.data) @@ -231,11 +242,11 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_document_type_detail_view() + response = self._request_test_workflow_document_type_detail_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['label'], self.test_document_type.label) - def _request_workflow_document_type_list_view(self): + def _request_test_workflow_document_type_list_api_view(self): return self.get( viewname='rest_api:workflow-document-type-list', kwargs={ 'pk': self.test_workflow.pk @@ -245,7 +256,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) def test_workflow_document_type_list_view_no_access(self): self._create_test_workflow(add_document_type=True) - response = self._request_workflow_document_type_list_view() + response = self._request_test_workflow_document_type_list_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_workflow_document_type_list_view_with_workflow_access(self): @@ -255,7 +266,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_document_type_list_view() + response = self._request_test_workflow_document_type_list_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['count'], 0) @@ -267,7 +278,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) permission=permission_document_type_view ) - response = self._request_workflow_document_type_list_view() + response = self._request_test_workflow_document_type_list_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_workflow_document_type_list_view_with_access(self): @@ -281,19 +292,19 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_document_type_list_view() + response = self._request_test_workflow_document_type_list_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data['results'][0]['label'], self.test_document_type.label ) - def _request_workflow_list_view(self): + def _request_test_workflow_list_api_view(self): return self.get(viewname='rest_api:workflow-list') def test_workflow_list_view_no_access(self): self._create_test_workflow() - response = self._request_workflow_list_view() + response = self._request_test_workflow_list_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['count'], 0) @@ -304,13 +315,13 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_list_view() + response = self._request_test_workflow_list_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data['results'][0]['label'], self.test_workflow.label ) - def _request_workflow_edit_view_via_patch(self): + def _request_test_workflow_edit_patch_view(self): return self.patch( viewname='rest_api:workflow-detail', kwargs={ 'pk': self.test_workflow.pk @@ -320,7 +331,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) def test_workflow_patch_view_no_access(self): self._create_test_workflow() - response = self._request_workflow_edit_view_via_patch() + response = self._request_test_workflow_edit_patch_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.test_workflow.refresh_from_db() @@ -331,13 +342,13 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) self.grant_access(permission=permission_workflow_edit, obj=self.test_workflow) - response = self._request_workflow_edit_view_via_patch() + response = self._request_test_workflow_edit_patch_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.test_workflow.refresh_from_db() self.assertEqual(self.test_workflow.label, TEST_WORKFLOW_LABEL_EDITED) - def _request_workflow_edit_view_via_put(self): + def _request_test_workflow_edit_put_view(self): return self.put( viewname='rest_api:workflow-detail', kwargs={ 'pk': self.test_workflow.pk @@ -347,7 +358,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) def test_workflow_put_view_no_access(self): self._create_test_workflow() - response = self._request_workflow_edit_view_via_put() + response = self._request_test_workflow_edit_put_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.test_workflow.refresh_from_db() @@ -360,13 +371,13 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) obj=self.test_workflow, permission=permission_workflow_edit ) - response = self._request_workflow_edit_view_via_put() + response = self._request_test_workflow_edit_put_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.test_workflow.refresh_from_db() self.assertEqual(self.test_workflow.label, TEST_WORKFLOW_LABEL_EDITED) - def _request_document_type_workflow_list_view(self): + def _request_test_document_type_workflow_list_api_view(self): return self.get( viewname='rest_api:documenttype-workflow-list', kwargs={'pk': self.test_document_type.pk} @@ -375,7 +386,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) def test_document_type_workflow_list_no_access(self): self._create_test_workflow(add_document_type=True) - response = self._request_document_type_workflow_list_view() + response = self._request_test_document_type_workflow_list_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertFalse('results' in response.data) @@ -386,7 +397,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_document_type_workflow_list_view() + response = self._request_test_document_type_workflow_list_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertFalse('results' in response.data) @@ -398,7 +409,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) permission=permission_document_type_view ) - response = self._request_document_type_workflow_list_view() + response = self._request_test_document_type_workflow_list_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['count'], 0) @@ -412,7 +423,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) obj=self.test_document_type, permission=permission_document_type_view ) - response = self._request_document_type_workflow_list_view() + response = self._request_test_document_type_workflow_list_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( @@ -423,7 +434,7 @@ class WorkflowAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase) class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase): auto_upload_document = False - def _request_workflow_state_create_view(self): + def _request_test_workflow_state_create_api_view(self): return self.post( viewname='rest_api:workflowstate-list', kwargs={'pk': self.test_workflow.pk}, data={ @@ -435,7 +446,7 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes def test_workflow_state_create_view_no_access(self): self._create_test_workflow() - response = self._request_workflow_state_create_view() + response = self._request_test_workflow_state_create_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.test_workflow.refresh_from_db() @@ -446,7 +457,7 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes self.grant_access(permission=permission_workflow_edit, obj=self.test_workflow) - response = self._request_workflow_state_create_view() + response = self._request_test_workflow_state_create_api_view() self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.test_workflow.refresh_from_db() @@ -454,7 +465,7 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes self.test_workflow.states.first().label, TEST_WORKFLOW_STATE_LABEL ) - def _request_workflow_state_delete_view(self): + def _request_test_workflow_state_delete_api_view(self): return self.delete( viewname='rest_api:workflowstate-detail', kwargs={ @@ -467,7 +478,7 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes self._create_test_workflow() self._create_test_workflow_state() - response = self._request_workflow_state_delete_view() + response = self._request_test_workflow_state_delete_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.test_workflow.refresh_from_db() @@ -481,13 +492,13 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes obj=self.test_workflow, permission=permission_workflow_edit ) - response = self._request_workflow_state_delete_view() + response = self._request_test_workflow_state_delete_api_view() self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) self.test_workflow.refresh_from_db() self.assertEqual(self.test_workflow.states.count(), 0) - def _request_workflow_state_detail_view(self): + def _request_test_workflow_state_detail_api_view(self): return self.get( viewname='rest_api:workflowstate-detail', kwargs={ @@ -500,7 +511,7 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes self._create_test_workflow() self._create_test_workflow_state() - response = self._request_workflow_state_detail_view() + response = self._request_test_workflow_state_detail_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertFalse('label' in response.data) @@ -513,13 +524,13 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_state_detail_view() + response = self._request_test_workflow_state_detail_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data['label'], TEST_WORKFLOW_STATE_LABEL ) - def _request_workflow_state_list_view(self): + def _request_test_workflow_state_list_api_view(self): return self.get( viewname='rest_api:workflowstate-list', kwargs={ 'pk': self.test_workflow.pk @@ -530,7 +541,7 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes self._create_test_workflow() self._create_test_workflow_state() - response = self._request_workflow_state_list_view() + response = self._request_test_workflow_state_list_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertFalse('label' in response.data) @@ -540,13 +551,13 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes self.grant_access(permission=permission_workflow_view, obj=self.test_workflow) - response = self._request_workflow_state_list_view() + response = self._request_test_workflow_state_list_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data['results'][0]['label'], TEST_WORKFLOW_STATE_LABEL ) - def _request_workflow_state_edit_view_via_patch(self): + def _request_test_workflow_state_edit_patch_api_view(self): return self.patch( viewname='rest_api:workflowstate-detail', kwargs={ @@ -561,7 +572,7 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes self._create_test_workflow() self._create_test_workflow_state() - response = self._request_workflow_state_edit_view_via_patch() + response = self._request_test_workflow_state_edit_patch_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.test_workflow_state.refresh_from_db() @@ -575,7 +586,7 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes self.grant_access(permission=permission_workflow_edit, obj=self.test_workflow) - response = self._request_workflow_state_edit_view_via_patch() + response = self._request_test_workflow_state_edit_patch_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.test_workflow_state.refresh_from_db() @@ -583,7 +594,7 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes self.test_workflow_state.label, TEST_WORKFLOW_STATE_LABEL_EDITED ) - def _request_workflow_state_edit_view_via_put(self): + def _request_test_workflow_state_edit_put_api_view(self): return self.put( viewname='rest_api:workflowstate-detail', kwargs={ @@ -598,7 +609,7 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes self._create_test_workflow() self._create_test_workflow_state() - response = self._request_workflow_state_edit_view_via_put() + response = self._request_test_workflow_state_edit_put_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.test_workflow_state.refresh_from_db() @@ -612,7 +623,7 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes self.grant_access(permission=permission_workflow_edit, obj=self.test_workflow) - response = self._request_workflow_state_edit_view_via_put() + response = self._request_test_workflow_state_edit_put_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.test_workflow_state.refresh_from_db() @@ -624,7 +635,7 @@ class WorkflowStatesAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITes class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase): auto_upload_document = False - def _request_workflow_transition_create_view(self): + def _request_test_workflow_transition_create_api_view(self): return self.post( viewname='rest_api:workflowtransition-list', kwargs={'pk': self.test_workflow.pk}, data={ @@ -638,7 +649,7 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA self._create_test_workflow() self._create_test_workflow_states() - response = self._request_workflow_transition_create_view() + response = self._request_test_workflow_transition_create_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.test_workflow.refresh_from_db() @@ -652,7 +663,7 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA obj=self.test_workflow, permission=permission_workflow_edit ) - response = self._request_workflow_transition_create_view() + response = self._request_test_workflow_transition_create_api_view() self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.test_workflow.refresh_from_db() @@ -661,7 +672,7 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA TEST_WORKFLOW_TRANSITION_LABEL ) - def _request_workflow_transition_delete_view(self): + def _request_test_workflow_transition_delete_api_view(self): return self.delete( viewname='rest_api:workflowtransition-detail', kwargs={ @@ -675,7 +686,7 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA self._create_test_workflow_states() self._create_test_workflow_transition() - response = self._request_workflow_transition_delete_view() + response = self._request_test_workflow_transition_delete_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.test_workflow.refresh_from_db() @@ -690,13 +701,13 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA obj=self.test_workflow, permission=permission_workflow_edit ) - response = self._request_workflow_transition_delete_view() + response = self._request_test_workflow_transition_delete_api_view() self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) self.test_workflow.refresh_from_db() self.assertEqual(self.test_workflow.transitions.count(), 0) - def _request_workflow_transition_detail_view(self): + def _request_test_workflow_transition_detail_api_view(self): return self.get( viewname='rest_api:workflowtransition-detail', args=(self.test_workflow.pk, self.test_workflow_transition.pk) @@ -707,7 +718,7 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA self._create_test_workflow_states() self._create_test_workflow_transition() - response = self._request_workflow_transition_detail_view() + response = self._request_test_workflow_transition_detail_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertFalse('label' in response.data) @@ -720,13 +731,13 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_transition_detail_view() + response = self._request_test_workflow_transition_detail_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data['label'], TEST_WORKFLOW_TRANSITION_LABEL ) - def _request_workflow_transition_list_view(self): + def _request_test_workflow_transition_list_api_view(self): return self.get( viewname='rest_api:workflowtransition-list', kwargs={'pk': self.test_workflow.pk} @@ -737,7 +748,7 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA self._create_test_workflow_states() self._create_test_workflow_transition() - response = self._request_workflow_transition_list_view() + response = self._request_test_workflow_transition_list_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertFalse('results' in response.data) @@ -750,14 +761,14 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_transition_list_view() + response = self._request_test_workflow_transition_list_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data['results'][0]['label'], TEST_WORKFLOW_TRANSITION_LABEL ) - def _request_workflow_transition_edit_view_via_patch(self): + def _request_test_workflow_transition_edit_patch_api_view(self): return self.patch( viewname='rest_api:workflowtransition-detail', kwargs={ @@ -775,7 +786,7 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA self._create_test_workflow_states() self._create_test_workflow_transition() - response = self._request_workflow_transition_edit_view_via_patch() + response = self._request_test_workflow_transition_edit_patch_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.test_workflow_transition.refresh_from_db() @@ -801,7 +812,7 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA obj=self.test_workflow, permission=permission_workflow_edit ) - response = self._request_workflow_transition_edit_view_via_patch() + response = self._request_test_workflow_transition_edit_patch_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.test_workflow_transition.refresh_from_db() @@ -818,7 +829,7 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA self.test_workflow_state_1 ) - def _request_workflow_transition_edit_view_via_put(self): + def _request_test_workflow_transition_edit_put_api_view_via(self): return self.put( viewname='rest_api:workflowtransition-detail', kwargs={ @@ -836,7 +847,7 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA self._create_test_workflow_states() self._create_test_workflow_transition() - response = self._request_workflow_transition_edit_view_via_put() + response = self._request_test_workflow_transition_edit_put_api_view_via() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.test_workflow_transition.refresh_from_db() @@ -862,7 +873,7 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA obj=self.test_workflow, permission=permission_workflow_edit ) - response = self._request_workflow_transition_edit_view_via_put() + response = self._request_test_workflow_transition_edit_put_api_view_via() self.assertEqual(response.status_code, status.HTTP_200_OK) self.test_workflow_transition.refresh_from_db() self.assertEqual( @@ -879,10 +890,12 @@ class WorkflowTransitionsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseA ) -class DocumentWorkflowsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase): +class DocumentWorkflowsAPITestCase( + DocumentTestMixin, WorkflowTestMixin, BaseAPITestCase +): auto_upload_document = False - def _request_workflow_instance_detail_view(self): + def _request_test_workflow_instance_detail_api_view(self): return self.get( viewname='rest_api:workflowinstance-detail', kwargs={ 'pk': self.test_document.pk, @@ -896,7 +909,7 @@ class DocumentWorkflowsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPI self._create_test_workflow_transition() self.upload_document() - response = self._request_workflow_instance_detail_view() + response = self._request_test_workflow_instance_detail_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertFalse('workflow' in response.data) @@ -910,7 +923,7 @@ class DocumentWorkflowsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPI obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_instance_detail_view() + response = self._request_test_workflow_instance_detail_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertFalse('workflow' in response.data) @@ -924,7 +937,7 @@ class DocumentWorkflowsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPI obj=self.test_document, permission=permission_workflow_view ) - response = self._request_workflow_instance_detail_view() + response = self._request_test_workflow_instance_detail_api_view() self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) self.assertFalse('workflow' in response.data) @@ -941,14 +954,14 @@ class DocumentWorkflowsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPI obj=self.test_document, permission=permission_workflow_view ) - response = self._request_workflow_instance_detail_view() + response = self._request_test_workflow_instance_detail_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data['workflow']['label'], TEST_WORKFLOW_LABEL ) - def _request_workflow_instance_list_view(self): + def _request_test_workflow_instance_list_api_view(self): return self.get( viewname='rest_api:workflowinstance-list', kwargs={'pk': self.test_document.pk} @@ -960,7 +973,7 @@ class DocumentWorkflowsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPI self._create_test_workflow_transition() self.upload_document() - response = self._request_workflow_instance_list_view() + response = self._request_test_workflow_instance_list_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertFalse('result' in response.data) @@ -974,7 +987,7 @@ class DocumentWorkflowsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPI obj=self.test_document, permission=permission_workflow_view ) - response = self._request_workflow_instance_list_view() + response = self._request_test_workflow_instance_list_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['count'], 0) @@ -988,7 +1001,7 @@ class DocumentWorkflowsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPI obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_instance_list_view() + response = self._request_test_workflow_instance_list_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertFalse('result' in response.data) @@ -1005,14 +1018,14 @@ class DocumentWorkflowsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPI obj=self.test_document, permission=permission_workflow_view ) - response = self._request_workflow_instance_list_view() + response = self._request_test_workflow_instance_list_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data['results'][0]['workflow']['label'], TEST_WORKFLOW_LABEL ) - def _request_workflow_instance_log_entry_create_view(self, workflow_instance): + def _request_test_workflow_instance_log_entry_create_api_view(self, workflow_instance): return self.post( viewname='rest_api:workflowinstancelogentry-list', kwargs={ 'pk': self.test_document.pk, @@ -1027,7 +1040,7 @@ class DocumentWorkflowsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPI self.upload_document() workflow_instance = self.test_document.workflows.first() - response = self._request_workflow_instance_log_entry_create_view( + response = self._request_test_workflow_instance_log_entry_create_api_view( workflow_instance=workflow_instance ) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) @@ -1047,7 +1060,7 @@ class DocumentWorkflowsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPI ) workflow_instance = self.test_document.workflows.first() - response = self._request_workflow_instance_log_entry_create_view( + response = self._request_test_workflow_instance_log_entry_create_api_view( workflow_instance=workflow_instance ) self.assertEqual(response.status_code, status.HTTP_201_CREATED) @@ -1058,7 +1071,7 @@ class DocumentWorkflowsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPI TEST_WORKFLOW_TRANSITION_LABEL ) - def _request_workflow_instance_log_entry_list_view(self): + def _request_test_workflow_instance_log_entry_list_api_view(self): return self.get( viewname='rest_api:workflowinstancelogentry-list', kwargs={ 'pk': self.test_document.pk, @@ -1073,7 +1086,7 @@ class DocumentWorkflowsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPI self.upload_document() self._create_test_workflow_instance_log_entry() - response = self._request_workflow_instance_log_entry_list_view() + response = self._request_test_workflow_instance_log_entry_list_api_view() self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) self.assertFalse('results' in response.data) @@ -1088,7 +1101,7 @@ class DocumentWorkflowsAPITestCase(DocumentTestMixin, WorkflowTestMixin, BaseAPI obj=self.test_document, permission=permission_workflow_view ) - response = self._request_workflow_instance_log_entry_list_view() + response = self._request_test_workflow_instance_log_entry_list_api_view() self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual( response.data['results'][0]['transition']['label'], diff --git a/mayan/apps/document_states/tests/test_events.py b/mayan/apps/document_states/tests/test_events.py new file mode 100644 index 0000000000..9998331665 --- /dev/null +++ b/mayan/apps/document_states/tests/test_events.py @@ -0,0 +1,69 @@ +from __future__ import unicode_literals + +from actstream.models import Action + +from mayan.apps.common.tests import GenericViewTestCase + +from ..events import event_workflow_created, event_workflow_edited +from ..models import Workflow +from ..permissions import permission_workflow_create, permission_workflow_edit + +from .mixins import WorkflowTestMixin, WorkflowViewTestMixin + + +class WorkflowEventsTestCase(WorkflowTestMixin, WorkflowViewTestMixin, GenericViewTestCase): + def test_workflow_create_event_no_permissions(self): + action_count = Action.objects.count() + + response = self._request_test_workflow_create_view() + self.assertEqual(response.status_code, 403) + + self.assertEqual(Action.objects.count(), action_count) + + def test_workflow_create_event_with_permissions(self): + self.grant_permission(permission=permission_workflow_create) + + action_count = Action.objects.count() + + response = self._request_test_workflow_create_view() + self.assertEqual(response.status_code, 302) + + self.assertEqual(Action.objects.count(), action_count + 1) + + event = Action.objects.first() + + workflow = Workflow.objects.first() + + self.assertEqual(event.verb, event_workflow_created.id) + self.assertEqual(event.target, workflow) + self.assertEqual(event.actor, self._test_case_user) + + def test_workflow_edit_event_no_permissions(self): + self._create_test_workflow() + + action_count = Action.objects.count() + + response = self._request_test_workflow_edit_view() + self.assertEqual(response.status_code, 404) + + self.assertEqual(Action.objects.count(), action_count) + + def test_workflow_edit_event_with_access(self): + self._create_test_workflow() + + self.grant_access( + obj=self.test_workflow, permission=permission_workflow_edit + ) + + action_count = Action.objects.count() + + response = self._request_test_workflow_edit_view() + self.assertEqual(response.status_code, 302) + + self.assertEqual(Action.objects.count(), action_count + 1) + + event = Action.objects.first() + + self.assertEqual(event.verb, event_workflow_edited.id) + self.assertEqual(event.target, self.test_workflow) + self.assertEqual(event.actor, self._test_case_user) diff --git a/mayan/apps/document_states/tests/test_views.py b/mayan/apps/document_states/tests/test_views.py index 011ad583b4..49c5ad2018 100644 --- a/mayan/apps/document_states/tests/test_views.py +++ b/mayan/apps/document_states/tests/test_views.py @@ -11,25 +11,21 @@ from ..permissions import ( ) from .literals import ( - TEST_WORKFLOW_INTERNAL_NAME, TEST_WORKFLOW_LABEL, - TEST_WORKFLOW_LABEL_EDITED, TEST_WORKFLOW_STATE_LABEL, - TEST_WORKFLOW_STATE_LABEL_EDITED, TEST_WORKFLOW_STATE_COMPLETION, - TEST_WORKFLOW_TRANSITION_LABEL, TEST_WORKFLOW_TRANSITION_LABEL_EDITED, + TEST_WORKFLOW_LABEL, TEST_WORKFLOW_LABEL_EDITED, TEST_WORKFLOW_STATE_LABEL, + TEST_WORKFLOW_STATE_COMPLETION, TEST_WORKFLOW_TRANSITION_LABEL, + TEST_WORKFLOW_TRANSITION_LABEL_EDITED +) +from .mixins import ( + WorkflowStateViewTestMixin, WorkflowTestMixin, WorkflowViewTestMixin, + WorkflowTransitionViewTestMixin ) -from .mixins import WorkflowTestMixin -class WorkflowViewTestCase(WorkflowTestMixin, GenericViewTestCase): - def _request_workflow_create_view(self): - return self.post( - viewname='document_states:setup_workflow_create', data={ - 'label': TEST_WORKFLOW_LABEL, - 'internal_name': TEST_WORKFLOW_INTERNAL_NAME, - } - ) - +class WorkflowViewTestCase( + WorkflowTestMixin, WorkflowViewTestMixin, GenericViewTestCase +): def test_workflow_create_view_no_permission(self): - response = self._request_workflow_create_view() + response = self._request_test_workflow_create_view() self.assertEquals(response.status_code, 403) self.assertEquals(Workflow.objects.count(), 0) @@ -37,23 +33,16 @@ class WorkflowViewTestCase(WorkflowTestMixin, GenericViewTestCase): def test_workflow_create_view_with_permission(self): self.grant_permission(permission=permission_workflow_create) - response = self._request_workflow_create_view() + response = self._request_test_workflow_create_view() self.assertEquals(response.status_code, 302) self.assertEquals(Workflow.objects.count(), 1) self.assertEquals(Workflow.objects.all()[0].label, TEST_WORKFLOW_LABEL) - def _request_workflow_delete_view(self): - return self.post( - viewname='document_states:setup_workflow_delete', kwargs={ - 'pk': self.test_workflow.pk - } - ) - def test_workflow_delete_view_no_access(self): self._create_test_workflow() - response = self._request_workflow_delete_view() + response = self._request_test_workflow_delete_view() self.assertEquals(response.status_code, 404) self.assertTrue(self.test_workflow in Workflow.objects.all()) @@ -65,25 +54,15 @@ class WorkflowViewTestCase(WorkflowTestMixin, GenericViewTestCase): obj=self.test_workflow, permission=permission_workflow_delete ) - response = self._request_workflow_delete_view() + response = self._request_test_workflow_delete_view() self.assertEquals(response.status_code, 302) self.assertFalse(self.test_workflow in Workflow.objects.all()) - def _request_workflow_edit_view(self): - return self.post( - viewname='document_states:setup_workflow_edit', kwargs={ - 'pk': self.test_workflow.pk, - }, data={ - 'label': TEST_WORKFLOW_LABEL_EDITED, - 'internal_name': self.test_workflow.internal_name - } - ) - def test_workflow_edit_view_no_access(self): self._create_test_workflow() - response = self._request_workflow_edit_view() + response = self._request_test_workflow_edit_view() self.assertEquals(response.status_code, 404) self.test_workflow.refresh_from_db() @@ -96,21 +75,16 @@ class WorkflowViewTestCase(WorkflowTestMixin, GenericViewTestCase): obj=self.test_workflow, permission=permission_workflow_edit ) - response = self._request_workflow_edit_view() + response = self._request_test_workflow_edit_view() self.assertEquals(response.status_code, 302) self.test_workflow.refresh_from_db() self.assertEqual(self.test_workflow.label, TEST_WORKFLOW_LABEL_EDITED) - def _request_workflow_list_view(self): - return self.get( - viewname='document_states:setup_workflow_list', - ) - def test_workflow_list_view_no_access(self): self._create_test_workflow() - response = self._request_workflow_list_view() + response = self._request_test_workflow_list_view() self.assertEquals(response.status_code, 200) self.assertNotContains(response, text=self.test_workflow.label) @@ -122,21 +96,14 @@ class WorkflowViewTestCase(WorkflowTestMixin, GenericViewTestCase): obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_list_view() + response = self._request_test_workflow_list_view() self.assertEquals(response.status_code, 200) self.assertContains(response, text=self.test_workflow.label) - def _request_workflow_preview_view(self): - return self.get( - viewname='document_states:workflow_preview', kwargs={ - 'pk': self.test_workflow.pk, - } - ) - def test_workflow_preview_view_no_access(self): self._create_test_workflow() - response = self._request_workflow_preview_view() + response = self._request_test_workflow_preview_view() self.assertEquals(response.status_code, 404) self.assertTrue(self.test_workflow in Workflow.objects.all()) @@ -147,28 +114,17 @@ class WorkflowViewTestCase(WorkflowTestMixin, GenericViewTestCase): self.grant_access( obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_preview_view() + response = self._request_test_workflow_preview_view() self.assertEquals(response.status_code, 200) -class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): - def _request_workflow_state_create_view(self, extra_data=None): - data = { - 'label': TEST_WORKFLOW_STATE_LABEL, - 'completion': TEST_WORKFLOW_STATE_COMPLETION, - } - if extra_data: - data.update(extra_data) - - return self.post( - viewname='document_states:setup_workflow_state_create', - kwargs={'pk': self.test_workflow.pk}, data=data - ) - +class WorkflowStateViewTestCase( + WorkflowTestMixin, WorkflowStateViewTestMixin, GenericViewTestCase +): def test_create_workflow_state_no_access(self): self._create_test_workflow() - response = self._request_workflow_state_create_view() + response = self._request_test_workflow_state_create_view() self.assertEquals(response.status_code, 404) self.assertEquals(WorkflowState.objects.count(), 0) @@ -180,7 +136,7 @@ class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): obj=self.test_workflow, permission=permission_workflow_edit ) - response = self._request_workflow_state_create_view() + response = self._request_test_workflow_state_create_view() self.assertEquals(response.status_code, 302) self.assertEquals(WorkflowState.objects.count(), 1) @@ -199,7 +155,7 @@ class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): obj=self.test_workflow, permission=permission_workflow_edit ) - response = self._request_workflow_state_create_view( + response = self._request_test_workflow_state_create_view( extra_data={'completion': ''} ) self.assertEquals(response.status_code, 302) @@ -212,17 +168,11 @@ class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): WorkflowState.objects.all()[0].completion, 0 ) - def _request_workflow_state_delete_view(self): - return self.post( - viewname='document_states:setup_workflow_state_delete', - kwargs={'pk': self.test_workflow_state_1.pk} - ) - def test_delete_workflow_state_no_access(self): self._create_test_workflow() self._create_test_workflow_states() - response = self._request_workflow_state_delete_view() + response = self._request_test_workflow_state_delete_view() self.assertEquals(response.status_code, 404) self.assertEquals(WorkflowState.objects.count(), 2) @@ -235,25 +185,17 @@ class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): obj=self.test_workflow, permission=permission_workflow_edit ) - response = self._request_workflow_state_delete_view() + response = self._request_test_workflow_state_delete_view() self.assertEquals(response.status_code, 302) self.assertEquals(WorkflowState.objects.count(), 1) - def _request_workflow_state_edit_view(self): - return self.post( - viewname='document_states:setup_workflow_state_edit', - kwargs={'pk': self.test_workflow_state_1.pk}, data={ - 'label': TEST_WORKFLOW_STATE_LABEL_EDITED - } - ) - def test_edit_workflow_state_no_access(self): self._create_test_workflow() self._create_test_workflow_states() workflow_state_label = self.test_workflow_state_1.label - response = self._request_workflow_state_edit_view() + response = self._request_test_workflow_state_edit_view() self.assertEquals(response.status_code, 404) self.test_workflow_state_1.refresh_from_db() @@ -271,7 +213,7 @@ class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): workflow_state_label = self.test_workflow_state_1.label - response = self._request_workflow_state_edit_view() + response = self._request_test_workflow_state_edit_view() self.assertEquals(response.status_code, 302) self.test_workflow_state_1.refresh_from_db() @@ -279,17 +221,11 @@ class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): self.test_workflow_state_1.label, workflow_state_label ) - def _request_workflow_state_list_view(self): - return self.get( - viewname='document_states:setup_workflow_state_list', - kwargs={'pk': self.test_workflow.pk} - ) - def test_workflow_state_list_no_access(self): self._create_test_workflow() self._create_test_workflow_states() - response = self._request_workflow_state_list_view() + response = self._request_test_workflow_state_list_view() self.assertEquals(response.status_code, 404) def test_workflow_state_list_with_access(self): @@ -300,7 +236,7 @@ class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_state_list_view() + response = self._request_test_workflow_state_list_view() self.assertEquals(response.status_code, 200) self.assertContains(response, text=self.test_workflow_state_1.label) @@ -339,24 +275,17 @@ class WorkflowToolViewTestCase(WorkflowTestMixin, GenericDocumentViewTestCase): ) -class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestCase): +class WorkflowTransitionViewTestCase( + WorkflowTestMixin, WorkflowViewTestMixin, WorkflowTransitionViewTestMixin, + GenericDocumentViewTestCase +): auto_upload_document = False - def _request_workflow_transition_create_view(self): - return self.post( - viewname='document_states:setup_workflow_transition_create', - kwargs={'pk': self.test_workflow.pk}, data={ - 'label': TEST_WORKFLOW_TRANSITION_LABEL, - 'origin_state': self.test_workflow_state_1.pk, - 'destination_state': self.test_workflow_state_2.pk, - } - ) - def test_create_test_workflow_transition_no_access(self): self._create_test_workflow() self._create_test_workflow_states() - response = self._request_workflow_transition_create_view() + response = self._request_test_workflow_transition_create_view() self.assertEquals(response.status_code, 404) self.assertEquals(WorkflowTransition.objects.count(), 0) @@ -369,7 +298,7 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC obj=self.test_workflow, permission=permission_workflow_edit ) - response = self._request_workflow_transition_create_view() + response = self._request_test_workflow_transition_create_view() self.assertEquals(response.status_code, 302) self.assertEquals(WorkflowTransition.objects.count(), 1) @@ -386,18 +315,12 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC self.test_workflow_state_2 ) - def _request_workflow_transition_delete_view(self): - return self.post( - viewname='document_states:setup_workflow_transition_delete', - kwargs={'pk': self.test_workflow_transition.pk} - ) - def test_delete_workflow_transition_no_permissions(self): self._create_test_workflow() self._create_test_workflow_states() self._create_test_workflow_transition() - response = self._request_workflow_transition_delete_view() + response = self._request_test_workflow_transition_delete_view() self.assertEquals(response.status_code, 404) self.assertTrue( @@ -411,29 +334,19 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC self.grant_access(permission=permission_workflow_edit, obj=self.test_workflow) - response = self._request_workflow_transition_delete_view() + response = self._request_test_workflow_transition_delete_view() self.assertEquals(response.status_code, 302) self.assertFalse( self.test_workflow_transition in WorkflowTransition.objects.all() ) - def _request_workflow_transition_edit_view(self): - return self.post( - viewname='document_states:setup_workflow_transition_edit', - kwargs={'pk': self.test_workflow_transition.pk}, data={ - 'label': TEST_WORKFLOW_TRANSITION_LABEL_EDITED, - 'origin_state': self.test_workflow_state_1.pk, - 'destination_state': self.test_workflow_state_2.pk, - } - ) - def test_edit_workflow_transition_no_access(self): self._create_test_workflow() self._create_test_workflow_states() self._create_test_workflow_transition() - response = self._request_workflow_transition_edit_view() + response = self._request_test_workflow_transition_edit_view() self.assertEquals(response.status_code, 404) self.test_workflow_transition.refresh_from_db() @@ -450,7 +363,7 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC obj=self.test_workflow, permission=permission_workflow_edit ) - response = self._request_workflow_transition_edit_view() + response = self._request_test_workflow_transition_edit_view() self.assertEquals(response.status_code, 302) self.test_workflow_transition.refresh_from_db() @@ -459,18 +372,12 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC TEST_WORKFLOW_TRANSITION_LABEL_EDITED ) - def _request_workflow_transition_list_view(self): - return self.get( - viewname='document_states:setup_workflow_transition_list', - kwargs={'pk': self.test_workflow.pk} - ) - def test_workflow_transition_list_no_access(self): self._create_test_workflow() self._create_test_workflow_states() self._create_test_workflow_transition() - response = self._request_workflow_transition_list_view() + response = self._request_test_workflow_transition_list_view() self.assertNotContains( response=response, text=self.test_workflow_transition.label, status_code=404 @@ -485,20 +392,12 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC obj=self.test_workflow, permission=permission_workflow_view ) - response = self._request_workflow_transition_list_view() + response = self._request_test_workflow_transition_list_view() self.assertContains( response=response, text=self.test_workflow_transition.label, status_code=200 ) - def _request_workflow_transition(self): - return self.post( - viewname='document_states:workflow_instance_transition', - kwargs={'pk': self.test_workflow_instance.pk}, data={ - 'transition': self.test_workflow_transition.pk, - } - ) - def test_transition_workflow_no_access(self): """ Test transitioning a workflow without the transition workflow @@ -511,7 +410,7 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC self.test_document_2 = self.upload_document() self.test_workflow_instance = self.test_document_2.workflows.first() - response = self._request_workflow_transition() + response = self._request_test_workflow_transition() self.assertEqual(response.status_code, 200) # Workflow should remain in the same initial state @@ -534,7 +433,7 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC self.grant_permission(permission=permission_workflow_transition) - response = self._request_workflow_transition() + response = self._request_test_workflow_transition() self.assertEqual(response.status_code, 302) self.assertEqual( @@ -556,7 +455,7 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC self.grant_permission(permission=permission_workflow_transition) - response = self._request_workflow_transition() + response = self._request_test_workflow_transition() self.assertEqual(response.status_code, 302) self.assertEqual( @@ -565,8 +464,10 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC ) -class WorkflowTransitionEventViewTestCase(WorkflowTestMixin, GenericDocumentViewTestCase): - def _request_workflow_transition_event_list_view(self): +class WorkflowTransitionEventViewTestCase( + WorkflowTestMixin, GenericDocumentViewTestCase +): + def _request_test_workflow_transition_event_list_view(self): return self.get( viewname='document_states:setup_workflow_transition_events', kwargs={'pk': self.test_workflow_transition.pk} @@ -577,7 +478,7 @@ class WorkflowTransitionEventViewTestCase(WorkflowTestMixin, GenericDocumentView self._create_test_workflow_states() self._create_test_workflow_transition() - response = self._request_workflow_transition_event_list_view() + response = self._request_test_workflow_transition_event_list_view() self.assertEquals(response.status_code, 404) def test_workflow_transition_event_list_with_access(self): @@ -589,5 +490,5 @@ class WorkflowTransitionEventViewTestCase(WorkflowTestMixin, GenericDocumentView obj=self.test_workflow, permission=permission_workflow_edit ) - response = self._request_workflow_transition_event_list_view() + response = self._request_test_workflow_transition_event_list_view() self.assertEquals(response.status_code, 200) diff --git a/mayan/apps/document_states/views/workflow_views.py b/mayan/apps/document_states/views/workflow_views.py index b5985d7efc..867fbf405c 100644 --- a/mayan/apps/document_states/views/workflow_views.py +++ b/mayan/apps/document_states/views/workflow_views.py @@ -141,6 +141,7 @@ class SetupWorkflowListView(SingleObjectListView): class SetupWorkflowCreateView(SingleObjectCreateView): + extra_context = {'title': _('Create workflow')} form_class = WorkflowForm model = Workflow post_action_redirect = reverse_lazy( @@ -148,10 +149,18 @@ class SetupWorkflowCreateView(SingleObjectCreateView): ) view_permission = permission_workflow_create - def get_actions_extra_kwargs(self): + def get_save_extra_data(self): return {'_user': self.request.user} +class SetupWorkflowDeleteView(SingleObjectDeleteView): + model = Workflow + object_permission = permission_workflow_delete + post_action_redirect = reverse_lazy( + viewname='document_states:setup_workflow_list' + ) + + class SetupWorkflowEditView(SingleObjectEditView): form_class = WorkflowForm model = Workflow @@ -160,18 +169,10 @@ class SetupWorkflowEditView(SingleObjectEditView): viewname='document_states:setup_workflow_list' ) - def get_actions_extra_kwargs(self): + def get_save_extra_data(self): return {'_user': self.request.user} -class SetupWorkflowDeleteView(SingleObjectDeleteView): - model = Workflow - object_permission = permission_workflow_delete - post_action_redirect = reverse_lazy( - viewname='document_states:setup_workflow_list' - ) - - class SetupWorkflowDocumentTypesView(AddRemoveView): main_object_permission = permission_workflow_edit main_object_model = Workflow