Partial work towards roles and lane support
This commit is contained in:
parent
e86314b127
commit
f83995a692
|
@ -0,0 +1,101 @@
|
|||
import json
|
||||
|
||||
from crc.models.api_models import WorkflowApiSchema
|
||||
from crc.models.stats import TaskEventModel
|
||||
from tests.base_test import BaseTest
|
||||
from crc import db
|
||||
from crc.api.common import ApiError
|
||||
from crc.services.workflow_service import WorkflowService
|
||||
|
||||
|
||||
class TestTasksApi(BaseTest):
|
||||
|
||||
def test_raise_error_if_role_does_not_exist_in_data(self):
|
||||
workflow = self.create_workflow('roles', as_user="lje5u")
|
||||
workflow_api = self.get_workflow_api(workflow, user_uid="lje5u")
|
||||
data = workflow_api.next_task.data
|
||||
# User lje5u can complete the first task
|
||||
self.complete_form(workflow, workflow_api.next_task, data, user_uid="lje5u")
|
||||
|
||||
# The next task is a supervisor task, and should raise an error if the role
|
||||
# information is not in the task data.
|
||||
workflow_api = self.get_workflow_api(workflow, user_uid="lje5u")
|
||||
data = workflow_api.next_task.data
|
||||
data["approved"] = True
|
||||
result = self.complete_form(workflow, workflow_api.next_task, data, user_uid="lje5u",
|
||||
error_code="invalid_role")
|
||||
|
||||
def test_validation_of_workflow_fails_if_workflow_does_not_define_user_for_lane(self):
|
||||
error = None
|
||||
try:
|
||||
workflow = self.create_workflow('invalid_roles', as_user="lje5u")
|
||||
WorkflowService.test_spec(workflow.workflow_spec_id)
|
||||
except ApiError as ae:
|
||||
error = ae
|
||||
self.assertIsNotNone(error, "An error should be raised.")
|
||||
self.assertEquals("invalid_role", error.code)
|
||||
|
||||
def test_raise_error_if_user_does_not_have_the_correct_role(self):
|
||||
submitter = self.create_user(uid='lje5u')
|
||||
supervisor = self.create_user(uid='lb3dp')
|
||||
workflow = self.create_workflow('roles', as_user=submitter.uid)
|
||||
workflow_api = self.get_workflow_api(workflow, user_uid=submitter.uid)
|
||||
|
||||
# User lje5u can complete the first task, and set her supervisor
|
||||
data = workflow_api.next_task.data
|
||||
data['supervisor'] = supervisor.uid
|
||||
self.complete_form(workflow, workflow_api.next_task, data, user_uid=submitter.uid)
|
||||
|
||||
# But she can not complete the supervisor role.
|
||||
workflow_api = self.get_workflow_api(workflow, user_uid=submitter.uid)
|
||||
data = workflow_api.next_task.data
|
||||
data["approved"] = True
|
||||
result = self.complete_form(workflow, workflow_api.next_task, data, user_uid=submitter.uid,
|
||||
error_code="role_permission")
|
||||
|
||||
# Only her supervisor can do that.
|
||||
self.complete_form(workflow, workflow_api.next_task, data, user_uid=supervisor.uid)
|
||||
|
||||
def test_nav_includes_lanes(self):
|
||||
self.load_example_data()
|
||||
|
||||
submitter = self.create_user(uid='lje5u')
|
||||
workflow = self.create_workflow('roles', as_user=submitter.uid)
|
||||
workflow_api = self.get_workflow_api(workflow, user_uid=submitter.uid)
|
||||
|
||||
nav = workflow_api.navigation
|
||||
self.assertEquals(5, len(nav))
|
||||
self.assertEquals("supervisor", nav[1]['lane'])
|
||||
|
||||
def test_get_outstanding_tasks_awaiting_user_input(self):
|
||||
submitter = self.create_user(uid='lje5u')
|
||||
supervisor = self.create_user(uid='lb3dp')
|
||||
workflow = self.create_workflow('roles', as_user=submitter.uid)
|
||||
workflow_api = self.get_workflow_api(workflow, user_uid=submitter.uid)
|
||||
|
||||
# User lje5u can complete the first task, and set her supervisor
|
||||
data = workflow_api.next_task.data
|
||||
data['supervisor'] = supervisor.uid
|
||||
self.complete_form(workflow, workflow_api.next_task, data, user_uid=submitter.uid)
|
||||
|
||||
# At this point there should be a task_log with an action of WAITING on it for
|
||||
# the supervisor.
|
||||
task_log = db.session.query(TaskEventModel).filter(TaskEventModel.user_uid == supervisor.uid)
|
||||
self.assertEquals(1, len(task_log))
|
||||
|
||||
# A call to the /workflow endpoint as the supervisor user should return this workflow
|
||||
rv = self.app.get('/v1.0/workflow',
|
||||
headers=self.logged_in_headers(supervisor.uid),
|
||||
content_type="application/json")
|
||||
self.assert_success(rv)
|
||||
json_data = json.loads(rv.get_data(as_text=True))
|
||||
workflow_api = WorkflowApiSchema().load(json_data)
|
||||
|
||||
# The workflow navigation should be locked for all tasks that do not belong to the user.
|
||||
|
||||
|
||||
|
||||
# Completing the next step of the workflow will close the task.
|
||||
self.complete_form(workflow, workflow_api.next_task, data, user_uid=supervisor.uid)
|
||||
|
||||
|
Loading…
Reference in New Issue