Add workflow event tests

Modernize tests. Move test HTTP requests to the test mixin
module.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2019-05-06 23:39:49 -04:00
parent b6e7a462b0
commit 7a4a4818fe
6 changed files with 379 additions and 279 deletions

View File

@@ -137,18 +137,17 @@ class Workflow(models.Model):
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
_user = kwargs.pop('_user', None) _user = kwargs.pop('_user', None)
created = not self.pk
with transaction.atomic(): with transaction.atomic():
is_new = not self.pk result = super(Workflow, self).save(*args, **kwargs)
super(Workflow, self).save(*args, **kwargs)
if is_new: if created:
event_workflow_created.commit( event_workflow_created.commit(actor=_user, target=self)
actor=_user, target=self
)
else: else:
event_workflow_edited.commit( event_workflow_edited.commit(actor=_user, target=self)
actor=_user, target=self
) return result
@python_2_unicode_compatible @python_2_unicode_compatible

View File

@@ -6,9 +6,10 @@ from ..models import Workflow
from .literals import ( from .literals import (
TEST_WORKFLOW_INITIAL_STATE_LABEL, TEST_WORKFLOW_INITIAL_STATE_COMPLETION, TEST_WORKFLOW_INITIAL_STATE_LABEL, TEST_WORKFLOW_INITIAL_STATE_COMPLETION,
TEST_WORKFLOW_INSTANCE_LOG_ENTRY_COMMENT, TEST_WORKFLOW_INTERNAL_NAME, TEST_WORKFLOW_INSTANCE_LOG_ENTRY_COMMENT, TEST_WORKFLOW_INTERNAL_NAME,
TEST_WORKFLOW_LABEL, TEST_WORKFLOW_STATE_LABEL, TEST_WORKFLOW_LABEL, TEST_WORKFLOW_LABEL_EDITED,
TEST_WORKFLOW_STATE_COMPLETION, TEST_WORKFLOW_TRANSITION_LABEL, TEST_WORKFLOW_STATE_COMPLETION, TEST_WORKFLOW_STATE_LABEL,
TEST_WORKFLOW_TRANSITION_LABEL_2 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): class WorkflowTestMixin(object):
def _create_test_workflow(self, add_document_type=False): def _create_test_workflow(self, add_document_type=False):
self.test_workflow = Workflow.objects.create( self.test_workflow = Workflow.objects.create(
@@ -79,3 +115,84 @@ class WorkflowTestMixin(object):
transition=self.test_workflow_transition, transition=self.test_workflow_transition,
user=self._test_case_user 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,
}
)

File diff suppressed because it is too large Load Diff

View File

@@ -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)

View File

@@ -11,25 +11,21 @@ from ..permissions import (
) )
from .literals import ( from .literals import (
TEST_WORKFLOW_INTERNAL_NAME, TEST_WORKFLOW_LABEL, TEST_WORKFLOW_LABEL, TEST_WORKFLOW_LABEL_EDITED, TEST_WORKFLOW_STATE_LABEL,
TEST_WORKFLOW_LABEL_EDITED, TEST_WORKFLOW_STATE_LABEL, TEST_WORKFLOW_STATE_COMPLETION, TEST_WORKFLOW_TRANSITION_LABEL,
TEST_WORKFLOW_STATE_LABEL_EDITED, TEST_WORKFLOW_STATE_COMPLETION, TEST_WORKFLOW_TRANSITION_LABEL_EDITED
TEST_WORKFLOW_TRANSITION_LABEL, TEST_WORKFLOW_TRANSITION_LABEL_EDITED, )
from .mixins import (
WorkflowStateViewTestMixin, WorkflowTestMixin, WorkflowViewTestMixin,
WorkflowTransitionViewTestMixin
) )
from .mixins import WorkflowTestMixin
class WorkflowViewTestCase(WorkflowTestMixin, GenericViewTestCase): class WorkflowViewTestCase(
def _request_workflow_create_view(self): WorkflowTestMixin, WorkflowViewTestMixin, GenericViewTestCase
return self.post( ):
viewname='document_states:setup_workflow_create', data={
'label': TEST_WORKFLOW_LABEL,
'internal_name': TEST_WORKFLOW_INTERNAL_NAME,
}
)
def test_workflow_create_view_no_permission(self): 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(response.status_code, 403)
self.assertEquals(Workflow.objects.count(), 0) self.assertEquals(Workflow.objects.count(), 0)
@@ -37,23 +33,16 @@ class WorkflowViewTestCase(WorkflowTestMixin, GenericViewTestCase):
def test_workflow_create_view_with_permission(self): def test_workflow_create_view_with_permission(self):
self.grant_permission(permission=permission_workflow_create) 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(response.status_code, 302)
self.assertEquals(Workflow.objects.count(), 1) self.assertEquals(Workflow.objects.count(), 1)
self.assertEquals(Workflow.objects.all()[0].label, TEST_WORKFLOW_LABEL) 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): def test_workflow_delete_view_no_access(self):
self._create_test_workflow() self._create_test_workflow()
response = self._request_workflow_delete_view() response = self._request_test_workflow_delete_view()
self.assertEquals(response.status_code, 404) self.assertEquals(response.status_code, 404)
self.assertTrue(self.test_workflow in Workflow.objects.all()) 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 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.assertEquals(response.status_code, 302)
self.assertFalse(self.test_workflow in Workflow.objects.all()) 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): def test_workflow_edit_view_no_access(self):
self._create_test_workflow() self._create_test_workflow()
response = self._request_workflow_edit_view() response = self._request_test_workflow_edit_view()
self.assertEquals(response.status_code, 404) self.assertEquals(response.status_code, 404)
self.test_workflow.refresh_from_db() self.test_workflow.refresh_from_db()
@@ -96,21 +75,16 @@ class WorkflowViewTestCase(WorkflowTestMixin, GenericViewTestCase):
obj=self.test_workflow, permission=permission_workflow_edit 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.assertEquals(response.status_code, 302)
self.test_workflow.refresh_from_db() self.test_workflow.refresh_from_db()
self.assertEqual(self.test_workflow.label, TEST_WORKFLOW_LABEL_EDITED) 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): def test_workflow_list_view_no_access(self):
self._create_test_workflow() self._create_test_workflow()
response = self._request_workflow_list_view() response = self._request_test_workflow_list_view()
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
self.assertNotContains(response, text=self.test_workflow.label) self.assertNotContains(response, text=self.test_workflow.label)
@@ -122,21 +96,14 @@ class WorkflowViewTestCase(WorkflowTestMixin, GenericViewTestCase):
obj=self.test_workflow, permission=permission_workflow_view 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.assertEquals(response.status_code, 200)
self.assertContains(response, text=self.test_workflow.label) 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): def test_workflow_preview_view_no_access(self):
self._create_test_workflow() self._create_test_workflow()
response = self._request_workflow_preview_view() response = self._request_test_workflow_preview_view()
self.assertEquals(response.status_code, 404) self.assertEquals(response.status_code, 404)
self.assertTrue(self.test_workflow in Workflow.objects.all()) self.assertTrue(self.test_workflow in Workflow.objects.all())
@@ -147,28 +114,17 @@ class WorkflowViewTestCase(WorkflowTestMixin, GenericViewTestCase):
self.grant_access( self.grant_access(
obj=self.test_workflow, permission=permission_workflow_view 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) self.assertEquals(response.status_code, 200)
class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase): class WorkflowStateViewTestCase(
def _request_workflow_state_create_view(self, extra_data=None): WorkflowTestMixin, WorkflowStateViewTestMixin, GenericViewTestCase
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 test_create_workflow_state_no_access(self): def test_create_workflow_state_no_access(self):
self._create_test_workflow() 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(response.status_code, 404)
self.assertEquals(WorkflowState.objects.count(), 0) self.assertEquals(WorkflowState.objects.count(), 0)
@@ -180,7 +136,7 @@ class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
obj=self.test_workflow, permission=permission_workflow_edit 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(response.status_code, 302)
self.assertEquals(WorkflowState.objects.count(), 1) self.assertEquals(WorkflowState.objects.count(), 1)
@@ -199,7 +155,7 @@ class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
obj=self.test_workflow, permission=permission_workflow_edit 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': ''} extra_data={'completion': ''}
) )
self.assertEquals(response.status_code, 302) self.assertEquals(response.status_code, 302)
@@ -212,17 +168,11 @@ class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
WorkflowState.objects.all()[0].completion, 0 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): def test_delete_workflow_state_no_access(self):
self._create_test_workflow() self._create_test_workflow()
self._create_test_workflow_states() 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(response.status_code, 404)
self.assertEquals(WorkflowState.objects.count(), 2) self.assertEquals(WorkflowState.objects.count(), 2)
@@ -235,25 +185,17 @@ class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
obj=self.test_workflow, permission=permission_workflow_edit 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(response.status_code, 302)
self.assertEquals(WorkflowState.objects.count(), 1) 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): def test_edit_workflow_state_no_access(self):
self._create_test_workflow() self._create_test_workflow()
self._create_test_workflow_states() self._create_test_workflow_states()
workflow_state_label = self.test_workflow_state_1.label 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.assertEquals(response.status_code, 404)
self.test_workflow_state_1.refresh_from_db() 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 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.assertEquals(response.status_code, 302)
self.test_workflow_state_1.refresh_from_db() 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 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): def test_workflow_state_list_no_access(self):
self._create_test_workflow() self._create_test_workflow()
self._create_test_workflow_states() 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) self.assertEquals(response.status_code, 404)
def test_workflow_state_list_with_access(self): def test_workflow_state_list_with_access(self):
@@ -300,7 +236,7 @@ class WorkflowStateViewTestCase(WorkflowTestMixin, GenericViewTestCase):
obj=self.test_workflow, permission=permission_workflow_view 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.assertEquals(response.status_code, 200)
self.assertContains(response, text=self.test_workflow_state_1.label) 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 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): def test_create_test_workflow_transition_no_access(self):
self._create_test_workflow() self._create_test_workflow()
self._create_test_workflow_states() 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(response.status_code, 404)
self.assertEquals(WorkflowTransition.objects.count(), 0) self.assertEquals(WorkflowTransition.objects.count(), 0)
@@ -369,7 +298,7 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC
obj=self.test_workflow, permission=permission_workflow_edit 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(response.status_code, 302)
self.assertEquals(WorkflowTransition.objects.count(), 1) self.assertEquals(WorkflowTransition.objects.count(), 1)
@@ -386,18 +315,12 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC
self.test_workflow_state_2 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): def test_delete_workflow_transition_no_permissions(self):
self._create_test_workflow() self._create_test_workflow()
self._create_test_workflow_states() self._create_test_workflow_states()
self._create_test_workflow_transition() 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.assertEquals(response.status_code, 404)
self.assertTrue( self.assertTrue(
@@ -411,29 +334,19 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC
self.grant_access(permission=permission_workflow_edit, obj=self.test_workflow) 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.assertEquals(response.status_code, 302)
self.assertFalse( self.assertFalse(
self.test_workflow_transition in WorkflowTransition.objects.all() 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): def test_edit_workflow_transition_no_access(self):
self._create_test_workflow() self._create_test_workflow()
self._create_test_workflow_states() self._create_test_workflow_states()
self._create_test_workflow_transition() 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.assertEquals(response.status_code, 404)
self.test_workflow_transition.refresh_from_db() self.test_workflow_transition.refresh_from_db()
@@ -450,7 +363,7 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC
obj=self.test_workflow, permission=permission_workflow_edit 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.assertEquals(response.status_code, 302)
self.test_workflow_transition.refresh_from_db() self.test_workflow_transition.refresh_from_db()
@@ -459,18 +372,12 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC
TEST_WORKFLOW_TRANSITION_LABEL_EDITED 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): def test_workflow_transition_list_no_access(self):
self._create_test_workflow() self._create_test_workflow()
self._create_test_workflow_states() self._create_test_workflow_states()
self._create_test_workflow_transition() self._create_test_workflow_transition()
response = self._request_workflow_transition_list_view() response = self._request_test_workflow_transition_list_view()
self.assertNotContains( self.assertNotContains(
response=response, text=self.test_workflow_transition.label, response=response, text=self.test_workflow_transition.label,
status_code=404 status_code=404
@@ -485,20 +392,12 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC
obj=self.test_workflow, permission=permission_workflow_view 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( self.assertContains(
response=response, text=self.test_workflow_transition.label, response=response, text=self.test_workflow_transition.label,
status_code=200 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): def test_transition_workflow_no_access(self):
""" """
Test transitioning a workflow without the transition workflow 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_document_2 = self.upload_document()
self.test_workflow_instance = self.test_document_2.workflows.first() 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) self.assertEqual(response.status_code, 200)
# Workflow should remain in the same initial state # Workflow should remain in the same initial state
@@ -534,7 +433,7 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC
self.grant_permission(permission=permission_workflow_transition) 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(response.status_code, 302)
self.assertEqual( self.assertEqual(
@@ -556,7 +455,7 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC
self.grant_permission(permission=permission_workflow_transition) 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(response.status_code, 302)
self.assertEqual( self.assertEqual(
@@ -565,8 +464,10 @@ class WorkflowTransitionViewTestCase(WorkflowTestMixin, GenericDocumentViewTestC
) )
class WorkflowTransitionEventViewTestCase(WorkflowTestMixin, GenericDocumentViewTestCase): class WorkflowTransitionEventViewTestCase(
def _request_workflow_transition_event_list_view(self): WorkflowTestMixin, GenericDocumentViewTestCase
):
def _request_test_workflow_transition_event_list_view(self):
return self.get( return self.get(
viewname='document_states:setup_workflow_transition_events', viewname='document_states:setup_workflow_transition_events',
kwargs={'pk': self.test_workflow_transition.pk} kwargs={'pk': self.test_workflow_transition.pk}
@@ -577,7 +478,7 @@ class WorkflowTransitionEventViewTestCase(WorkflowTestMixin, GenericDocumentView
self._create_test_workflow_states() self._create_test_workflow_states()
self._create_test_workflow_transition() 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) self.assertEquals(response.status_code, 404)
def test_workflow_transition_event_list_with_access(self): 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 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) self.assertEquals(response.status_code, 200)

View File

@@ -141,6 +141,7 @@ class SetupWorkflowListView(SingleObjectListView):
class SetupWorkflowCreateView(SingleObjectCreateView): class SetupWorkflowCreateView(SingleObjectCreateView):
extra_context = {'title': _('Create workflow')}
form_class = WorkflowForm form_class = WorkflowForm
model = Workflow model = Workflow
post_action_redirect = reverse_lazy( post_action_redirect = reverse_lazy(
@@ -148,10 +149,18 @@ class SetupWorkflowCreateView(SingleObjectCreateView):
) )
view_permission = permission_workflow_create view_permission = permission_workflow_create
def get_actions_extra_kwargs(self): def get_save_extra_data(self):
return {'_user': self.request.user} 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): class SetupWorkflowEditView(SingleObjectEditView):
form_class = WorkflowForm form_class = WorkflowForm
model = Workflow model = Workflow
@@ -160,18 +169,10 @@ class SetupWorkflowEditView(SingleObjectEditView):
viewname='document_states:setup_workflow_list' viewname='document_states:setup_workflow_list'
) )
def get_actions_extra_kwargs(self): def get_save_extra_data(self):
return {'_user': self.request.user} 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): class SetupWorkflowDocumentTypesView(AddRemoveView):
main_object_permission = permission_workflow_edit main_object_permission = permission_workflow_edit
main_object_model = Workflow main_object_model = Workflow