add user_data_get/set and alter test so that it ensures that we don't grab study_data stuff from the user_data calls
change the test to mock up the user.
This commit is contained in:
parent
92595e3c42
commit
3ba11f5e6b
|
@ -0,0 +1,28 @@
|
||||||
|
import requests
|
||||||
|
|
||||||
|
from crc.scripts.script import Script, DataStoreBase
|
||||||
|
from crc import session
|
||||||
|
from crc.models.data_store import DataStoreModel
|
||||||
|
from flask import g
|
||||||
|
|
||||||
|
class UserDataGet(Script,DataStoreBase):
|
||||||
|
def get_description(self):
|
||||||
|
return """Gets user data from the data store."""
|
||||||
|
|
||||||
|
|
||||||
|
def do_task_validate_only(self, task, study_id, workflow_id, *args, **kwargs):
|
||||||
|
self.do_task(task, study_id, workflow_id, *args, **kwargs)
|
||||||
|
|
||||||
|
def do_task(self, task, study_id, workflow_id, *args, **kwargs):
|
||||||
|
self.check_args(args,2)
|
||||||
|
study = session.query(DataStoreModel).filter_by(study_id=None,user_id=g.user.uid,key=args[0]).first()
|
||||||
|
if study:
|
||||||
|
return study.value
|
||||||
|
else:
|
||||||
|
return args[1]
|
||||||
|
|
||||||
|
def check_args(self, args, maxlen=1):
|
||||||
|
if len(args) < 1 or len(args) > maxlen :
|
||||||
|
raise ApiError(code="missing_argument",
|
||||||
|
message="The study_data_get script takes either one or two arguments, starting with the key and an " + \
|
||||||
|
"optional default")
|
|
@ -0,0 +1,50 @@
|
||||||
|
import requests
|
||||||
|
|
||||||
|
from crc.scripts.script import Script, DataStoreBase
|
||||||
|
from crc import session
|
||||||
|
from crc.models.workflow import WorkflowModel
|
||||||
|
from crc.models.data_store import DataStoreModel
|
||||||
|
|
||||||
|
from flask import g
|
||||||
|
|
||||||
|
class UserDataSet(Script,DataStoreBase):
|
||||||
|
def get_description(self):
|
||||||
|
return """Sets user data to the data store."""
|
||||||
|
|
||||||
|
|
||||||
|
def do_task_validate_only(self, task, study_id, workflow_id, *args, **kwargs):
|
||||||
|
self.check_args(args)
|
||||||
|
workflow = session.query(WorkflowModel).filter(WorkflowModel.id == workflow_id).first()
|
||||||
|
self.get_prev_value(study_id,args[0])
|
||||||
|
|
||||||
|
|
||||||
|
def do_task(self, task, study_id, workflow_id, *args, **kwargs):
|
||||||
|
self.check_args(args)
|
||||||
|
study = self.get_prev_value(study_id,args[0])
|
||||||
|
workflow = session.query(WorkflowModel).filter(WorkflowModel.id == workflow_id).first()
|
||||||
|
if study is not None:
|
||||||
|
prev_value = study.key
|
||||||
|
else:
|
||||||
|
prev_value = None
|
||||||
|
study = DataStoreModel(key=args[0],value=args[1],
|
||||||
|
study_id=None,
|
||||||
|
task_id=task.id,
|
||||||
|
user_id=g.user.uid, # Make this available to any study, but only one user
|
||||||
|
workflow_id= workflow_id,
|
||||||
|
spec_id=workflow.workflow_spec_id)
|
||||||
|
|
||||||
|
overwritten = self.overwritten(study.value,prev_value)
|
||||||
|
session.add(study)
|
||||||
|
return (study.value, prev_value, overwritten)
|
||||||
|
|
||||||
|
|
||||||
|
def get_prev_value(self,study_id,key):
|
||||||
|
study = session.query(DataStoreModel).filter_by(study_id=None,user_id=g.user.uid,key=key).first()
|
||||||
|
return study
|
||||||
|
|
||||||
|
|
||||||
|
def check_args(self, args):
|
||||||
|
if len(args) != 2:
|
||||||
|
raise ApiError(code="missing_argument",
|
||||||
|
message="The study_data_set script takes two arguments, starting with the key and a " +\
|
||||||
|
"value for the key")
|
|
@ -12,7 +12,7 @@
|
||||||
</bpmn:scriptTask>
|
</bpmn:scriptTask>
|
||||||
<bpmn:sequenceFlow id="SequenceFlow_1bqiin0" sourceRef="Task_Script_Load_Study_Sponsors" targetRef="Activity_0cm6tn2" />
|
<bpmn:sequenceFlow id="SequenceFlow_1bqiin0" sourceRef="Task_Script_Load_Study_Sponsors" targetRef="Activity_0cm6tn2" />
|
||||||
<bpmn:endEvent id="EndEvent_171dj09">
|
<bpmn:endEvent id="EndEvent_171dj09">
|
||||||
<bpmn:incoming>Flow_0g9waf3</bpmn:incoming>
|
<bpmn:incoming>Flow_05136ua</bpmn:incoming>
|
||||||
</bpmn:endEvent>
|
</bpmn:endEvent>
|
||||||
<bpmn:sequenceFlow id="Flow_09cika8" sourceRef="Activity_0cm6tn2" targetRef="Activity_0d8iftx" />
|
<bpmn:sequenceFlow id="Flow_09cika8" sourceRef="Activity_0cm6tn2" targetRef="Activity_0d8iftx" />
|
||||||
<bpmn:scriptTask id="Activity_0cm6tn2" name="setval">
|
<bpmn:scriptTask id="Activity_0cm6tn2" name="setval">
|
||||||
|
@ -26,12 +26,18 @@
|
||||||
<bpmn:outgoing>Flow_1oeqjuy</bpmn:outgoing>
|
<bpmn:outgoing>Flow_1oeqjuy</bpmn:outgoing>
|
||||||
<bpmn:script>out = study_data_get('testme','bogus')</bpmn:script>
|
<bpmn:script>out = study_data_get('testme','bogus')</bpmn:script>
|
||||||
</bpmn:scriptTask>
|
</bpmn:scriptTask>
|
||||||
<bpmn:sequenceFlow id="Flow_0g9waf3" sourceRef="Activity_1yup9u7" targetRef="EndEvent_171dj09" />
|
<bpmn:sequenceFlow id="Flow_0g9waf3" sourceRef="Activity_1yup9u7" targetRef="Activity_0xw717o" />
|
||||||
<bpmn:scriptTask id="Activity_1yup9u7" name="reset value">
|
<bpmn:scriptTask id="Activity_1yup9u7" name="reset value">
|
||||||
<bpmn:incoming>Flow_1oeqjuy</bpmn:incoming>
|
<bpmn:incoming>Flow_1oeqjuy</bpmn:incoming>
|
||||||
<bpmn:outgoing>Flow_0g9waf3</bpmn:outgoing>
|
<bpmn:outgoing>Flow_0g9waf3</bpmn:outgoing>
|
||||||
<bpmn:script>study_data_set('testme','badval')</bpmn:script>
|
<bpmn:script>study_data_set('testme','badval')</bpmn:script>
|
||||||
</bpmn:scriptTask>
|
</bpmn:scriptTask>
|
||||||
|
<bpmn:scriptTask id="Activity_0xw717o" name="Make sure user_data_get doesn't get the study_data_set variable">
|
||||||
|
<bpmn:incoming>Flow_0g9waf3</bpmn:incoming>
|
||||||
|
<bpmn:outgoing>Flow_05136ua</bpmn:outgoing>
|
||||||
|
<bpmn:script>empty = user_data_get('testme','empty')</bpmn:script>
|
||||||
|
</bpmn:scriptTask>
|
||||||
|
<bpmn:sequenceFlow id="Flow_05136ua" sourceRef="Activity_0xw717o" targetRef="EndEvent_171dj09" />
|
||||||
</bpmn:process>
|
</bpmn:process>
|
||||||
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
|
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
|
||||||
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_0exnnpv">
|
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_0exnnpv">
|
||||||
|
@ -50,7 +56,7 @@
|
||||||
<dc:Bounds x="270" y="77" width="100" height="80" />
|
<dc:Bounds x="270" y="77" width="100" height="80" />
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNShape id="EndEvent_171dj09_di" bpmnElement="EndEvent_171dj09">
|
<bpmndi:BPMNShape id="EndEvent_171dj09_di" bpmnElement="EndEvent_171dj09">
|
||||||
<dc:Bounds x="932" y="99" width="36" height="36" />
|
<dc:Bounds x="792" y="672" width="36" height="36" />
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge id="Flow_09cika8_di" bpmnElement="Flow_09cika8">
|
<bpmndi:BPMNEdge id="Flow_09cika8_di" bpmnElement="Flow_09cika8">
|
||||||
<di:waypoint x="540" y="117" />
|
<di:waypoint x="540" y="117" />
|
||||||
|
@ -67,12 +73,19 @@
|
||||||
<dc:Bounds x="600" y="77" width="100" height="80" />
|
<dc:Bounds x="600" y="77" width="100" height="80" />
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
<bpmndi:BPMNEdge id="Flow_0g9waf3_di" bpmnElement="Flow_0g9waf3">
|
<bpmndi:BPMNEdge id="Flow_0g9waf3_di" bpmnElement="Flow_0g9waf3">
|
||||||
<di:waypoint x="860" y="117" />
|
<di:waypoint x="810" y="157" />
|
||||||
<di:waypoint x="932" y="117" />
|
<di:waypoint x="810" y="250" />
|
||||||
</bpmndi:BPMNEdge>
|
</bpmndi:BPMNEdge>
|
||||||
<bpmndi:BPMNShape id="Activity_0cj83fx_di" bpmnElement="Activity_1yup9u7">
|
<bpmndi:BPMNShape id="Activity_0cj83fx_di" bpmnElement="Activity_1yup9u7">
|
||||||
<dc:Bounds x="760" y="77" width="100" height="80" />
|
<dc:Bounds x="760" y="77" width="100" height="80" />
|
||||||
</bpmndi:BPMNShape>
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_0pqth07_di" bpmnElement="Activity_0xw717o">
|
||||||
|
<dc:Bounds x="760" y="250" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_05136ua_di" bpmnElement="Flow_05136ua">
|
||||||
|
<di:waypoint x="810" y="330" />
|
||||||
|
<di:waypoint x="810" y="672" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
</bpmndi:BPMNPlane>
|
</bpmndi:BPMNPlane>
|
||||||
</bpmndi:BPMNDiagram>
|
</bpmndi:BPMNDiagram>
|
||||||
</bpmn:definitions>
|
</bpmn:definitions>
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
import flask
|
||||||
|
|
||||||
|
|
||||||
from tests.base_test import BaseTest
|
from tests.base_test import BaseTest
|
||||||
|
|
||||||
from crc import session, app
|
from crc import session, app
|
||||||
from crc.models.study import StudyModel
|
from crc.models.study import StudyModel
|
||||||
|
from crc.models.user import UserModel
|
||||||
from crc.services.study_service import StudyService
|
from crc.services.study_service import StudyService
|
||||||
from crc.services.workflow_processor import WorkflowProcessor
|
from crc.services.workflow_processor import WorkflowProcessor
|
||||||
from crc.services.workflow_service import WorkflowService
|
from crc.services.workflow_service import WorkflowService
|
||||||
|
@ -27,6 +30,7 @@ class TestSudySponsorsScript(BaseTest):
|
||||||
|
|
||||||
mock_get.return_value.ok = True
|
mock_get.return_value.ok = True
|
||||||
mock_get.return_value.text = self.protocol_builder_response('sponsors.json')
|
mock_get.return_value.text = self.protocol_builder_response('sponsors.json')
|
||||||
|
flask.g.user = UserModel(uid='dhf8r')
|
||||||
app.config['PB_ENABLED'] = True
|
app.config['PB_ENABLED'] = True
|
||||||
|
|
||||||
self.load_example_data()
|
self.load_example_data()
|
||||||
|
@ -41,5 +45,6 @@ class TestSudySponsorsScript(BaseTest):
|
||||||
data = processor.next_task().data
|
data = processor.next_task().data
|
||||||
self.assertIn('sponsors', data)
|
self.assertIn('sponsors', data)
|
||||||
self.assertIn('out', data)
|
self.assertIn('out', data)
|
||||||
|
self.assertEquals('empty', data['empty'])
|
||||||
self.assertEquals('newval', data['out'])
|
self.assertEquals('newval', data['out'])
|
||||||
self.assertEquals(3, len(data['sponsors']))
|
self.assertEquals(3, len(data['sponsors']))
|
||||||
|
|
Loading…
Reference in New Issue