2020-05-24 07:22:14 +00:00
|
|
|
import json
|
2020-05-24 05:53:48 +00:00
|
|
|
from tests.base_test import BaseTest
|
|
|
|
|
2020-05-24 07:22:14 +00:00
|
|
|
from crc import app, db, session
|
|
|
|
from crc.models.approval import ApprovalModel
|
|
|
|
|
2020-05-24 05:53:48 +00:00
|
|
|
|
2020-05-25 21:40:24 +00:00
|
|
|
APPROVAL_PAYLOAD = {
|
|
|
|
'id': None,
|
|
|
|
'approver': {
|
|
|
|
'uid': 'bgb22',
|
|
|
|
'display_name': 'Billy Bob (bgb22)',
|
|
|
|
'title': 'E42:He\'s a hoopy frood',
|
|
|
|
'department': 'E0:EN-Eng Study of Parallel Universes'
|
|
|
|
},
|
|
|
|
'title': 'El Study',
|
|
|
|
'status': 'DECLINED',
|
|
|
|
'version': 1,
|
|
|
|
'associated_files': [
|
|
|
|
{
|
|
|
|
'id': 42,
|
|
|
|
'name': 'File 1',
|
|
|
|
'content_type': 'document'
|
|
|
|
},
|
|
|
|
{
|
|
|
|
'id': 43,
|
|
|
|
'name': 'File 2',
|
|
|
|
'content_type': 'document'
|
|
|
|
}
|
|
|
|
],
|
|
|
|
'workflow_id': 1,
|
|
|
|
'study_id': 1
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2020-05-24 05:53:48 +00:00
|
|
|
class TestApprovals(BaseTest):
|
|
|
|
def setUp(self):
|
|
|
|
"""Initial setup shared by all TestApprovals tests"""
|
|
|
|
self.load_example_data()
|
2020-05-24 07:22:14 +00:00
|
|
|
self.study = self.create_study()
|
2020-05-24 05:53:48 +00:00
|
|
|
self.workflow = self.create_workflow('random_fact')
|
2020-05-24 07:22:14 +00:00
|
|
|
# TODO: Move to base_test as a helper
|
|
|
|
self.approval = ApprovalModel(
|
|
|
|
study=self.study,
|
|
|
|
workflow=self.workflow,
|
|
|
|
approver_uid='bgb22',
|
|
|
|
status='WAITING', # TODO: Use enumerate options
|
|
|
|
version=1
|
|
|
|
)
|
|
|
|
session.add(self.approval)
|
|
|
|
session.commit()
|
2020-05-24 05:53:48 +00:00
|
|
|
|
|
|
|
def test_list_approvals_per_approver(self):
|
|
|
|
"""Only approvals associated with approver should be returned"""
|
|
|
|
rv = self.app.get('/v1.0/approval', headers=self.logged_in_headers())
|
|
|
|
self.assert_success(rv)
|
|
|
|
|
|
|
|
def test_list_approvals_per_admin(self):
|
|
|
|
"""All approvals will be returned"""
|
|
|
|
rv = self.app.get('/v1.0/approval', headers=self.logged_in_headers())
|
|
|
|
self.assert_success(rv)
|
|
|
|
|
|
|
|
def test_update_approval(self):
|
|
|
|
"""Approval status will be updated"""
|
2020-05-24 07:22:14 +00:00
|
|
|
approval_id = self.approval.id
|
2020-05-25 21:40:24 +00:00
|
|
|
data = dict(APPROVAL_PAYLOAD)
|
|
|
|
data['id'] = approval_id
|
|
|
|
data = json.dumps(data)
|
2020-05-24 07:22:14 +00:00
|
|
|
rv = self.app.put(f'/v1.0/approval/{approval_id}',
|
|
|
|
content_type="application/json",
|
2020-05-24 05:53:48 +00:00
|
|
|
headers=self.logged_in_headers(),
|
2020-05-25 21:40:24 +00:00
|
|
|
data=data)
|
2020-05-24 05:53:48 +00:00
|
|
|
self.assert_success(rv)
|