Files
mayan-edms/mayan/apps/document_states/tests/mixins.py
Roberto Rosario 572690e2bc Finish workflow context implementation
Improve workflow instance detail view.
Add workflow transition field widget support.
Fix workflow transition field required support.
Update tests.

Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
2019-07-01 09:55:58 -04:00

200 lines
7.2 KiB
Python

from __future__ import unicode_literals
from ..classes import WorkflowAction
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_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
)
class TestWorkflowAction(WorkflowAction):
label = 'test workflow state action'
class WorkflowStateActionTestMixin(object):
TestWorkflowAction = TestWorkflowAction
test_workflow_state_action_path = 'mayan.apps.document_states.tests.mixins.TestWorkflowAction'
def _create_test_workflow_state_action(self):
self.test_workflow_state.actions.create(
label=self.TestWorkflowAction.label,
action_path=self.test_workflow_state_action_path
)
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(
label=TEST_WORKFLOW_LABEL,
internal_name=TEST_WORKFLOW_INTERNAL_NAME
)
if add_document_type:
self.test_workflow.document_types.add(self.test_document_type)
def _create_test_workflow_state(self):
self.test_workflow_state = self.test_workflow.states.create(
completion=TEST_WORKFLOW_STATE_COMPLETION,
label=TEST_WORKFLOW_STATE_LABEL
)
def _create_test_workflow_states(self):
self.test_workflow_state_1 = self.test_workflow.states.create(
completion=TEST_WORKFLOW_INITIAL_STATE_COMPLETION,
initial=True, label=TEST_WORKFLOW_INITIAL_STATE_LABEL
)
self.test_workflow_state_2 = self.test_workflow.states.create(
completion=TEST_WORKFLOW_STATE_COMPLETION,
label=TEST_WORKFLOW_STATE_LABEL
)
def _create_test_workflow_transition(self):
self.test_workflow_transition = self.test_workflow.transitions.create(
label=TEST_WORKFLOW_TRANSITION_LABEL,
origin_state=self.test_workflow_state_1,
destination_state=self.test_workflow_state_2,
)
def _create_test_workflow_transitions(self):
self.test_workflow_transition = self.test_workflow.transitions.create(
workflow=self.test_workflow, label=TEST_WORKFLOW_TRANSITION_LABEL,
origin_state=self.test_workflow_state_1,
destination_state=self.test_workflow_state_2
)
self.test_workflow_transition_2 = self.test_workflow.transitions.create(
workflow=self.test_workflow, label=TEST_WORKFLOW_TRANSITION_LABEL_2,
origin_state=self.test_workflow_state_1,
destination_state=self.test_workflow_state_2
)
def _create_test_workflow_instance_log_entry(self):
self.test_document.workflows.first().log_entries.create(
comment=TEST_WORKFLOW_INSTANCE_LOG_ENTRY_COMMENT,
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_execute',
kwargs={
'workflow_instance_pk': self.test_workflow_instance.pk,
'workflow_transition_pk': 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,
}
)