We now raise an error if the spreadsheet does not exist.

Added test for case where the spreadsheet does not exist
This commit is contained in:
mike cullerton 2022-02-24 10:25:34 -05:00
parent 1fe1ce2e22
commit 0b3187889d
3 changed files with 54 additions and 43 deletions

View File

@ -35,10 +35,10 @@ class ModifySpreadsheet(Script):
def do_task_validate_only(self, task, study_id, workflow_id, *args, **kwargs): def do_task_validate_only(self, task, study_id, workflow_id, *args, **kwargs):
parameters = self.get_parameters(args, kwargs) parameters = self.get_parameters(args, kwargs)
if len(parameters) == 3: if len(parameters) == 3:
return parameters return True
else: else:
raise ApiError(code='missing_parameters', raise ApiError(code='missing_parameters',
message='The modify_spreadsheet script requires 4 parameters: upload_workflow_id, irb_doc_code, cell, and text') message='The modify_spreadsheet script requires 3 parameters: irb_doc_code, cell, and text')
def do_task(self, task, study_id, workflow_id, *args, **kwargs): def do_task(self, task, study_id, workflow_id, *args, **kwargs):
parameters = self.get_parameters(args, kwargs) parameters = self.get_parameters(args, kwargs)
@ -48,6 +48,7 @@ class ModifySpreadsheet(Script):
filter(FileModel.workflow_id == workflow_id). \ filter(FileModel.workflow_id == workflow_id). \
filter(FileModel.irb_doc_code == parameters['irb_doc_code']).\ filter(FileModel.irb_doc_code == parameters['irb_doc_code']).\
first() first()
if spreadsheet:
spreadsheet_data = session.query(FileDataModel).\ spreadsheet_data = session.query(FileDataModel).\
filter(FileDataModel.file_model_id==spreadsheet.id).\ filter(FileDataModel.file_model_id==spreadsheet.id).\
first() first()
@ -57,7 +58,9 @@ class ModifySpreadsheet(Script):
data_string = save_virtual_workbook(workbook) data_string = save_virtual_workbook(workbook)
spreadsheet_data.data = data_string spreadsheet_data.data = data_string
session.commit() session.commit()
return parameters else:
raise ApiError(code='missing_spreadsheet',
message=f"The spreadshhet you want to modify does not exist. Workflow ID is {workflow_id}, and IRB Doc Code is {parameters['irb_doc_code']}")
else: else:
raise ApiError(code='missing_parameters', raise ApiError(code='missing_parameters',
message='The modify_spreadsheet script requires 4 parameters: upload_workflow_id, irb_doc_code, cell, and text') message='The modify_spreadsheet script requires 3 parameters: irb_doc_code, cell, and text')

View File

@ -7,11 +7,10 @@
<bpmn:sequenceFlow id="Flow_03wyga3" sourceRef="StartEvent_1" targetRef="Activity_FileUpload" /> <bpmn:sequenceFlow id="Flow_03wyga3" sourceRef="StartEvent_1" targetRef="Activity_FileUpload" />
<bpmn:sequenceFlow id="Flow_0msewj5" sourceRef="Activity_FileUpload" targetRef="Activity_GetModifyData" /> <bpmn:sequenceFlow id="Flow_0msewj5" sourceRef="Activity_FileUpload" targetRef="Activity_GetModifyData" />
<bpmn:sequenceFlow id="Flow_0fpc32g" sourceRef="Activity_GetModifyData" targetRef="Activity_ModifySpreadsheet" /> <bpmn:sequenceFlow id="Flow_0fpc32g" sourceRef="Activity_GetModifyData" targetRef="Activity_ModifySpreadsheet" />
<bpmn:sequenceFlow id="Flow_10ulj3l" sourceRef="Activity_ModifySpreadsheet" targetRef="Activity_DisplayResults" /> <bpmn:sequenceFlow id="Flow_10ulj3l" sourceRef="Activity_ModifySpreadsheet" targetRef="Event_1d07dls" />
<bpmn:endEvent id="Event_1d07dls"> <bpmn:endEvent id="Event_1d07dls">
<bpmn:incoming>Flow_1tbcg16</bpmn:incoming> <bpmn:incoming>Flow_10ulj3l</bpmn:incoming>
</bpmn:endEvent> </bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_1tbcg16" sourceRef="Activity_DisplayResults" targetRef="Event_1d07dls" />
<bpmn:userTask id="Activity_FileUpload" name="Upload Spreadsheet" camunda:formKey="FileUpload"> <bpmn:userTask id="Activity_FileUpload" name="Upload Spreadsheet" camunda:formKey="FileUpload">
<bpmn:extensionElements> <bpmn:extensionElements>
<camunda:formData> <camunda:formData>
@ -28,14 +27,8 @@
<bpmn:scriptTask id="Activity_ModifySpreadsheet" name="Modify Spreadsheet"> <bpmn:scriptTask id="Activity_ModifySpreadsheet" name="Modify Spreadsheet">
<bpmn:incoming>Flow_0fpc32g</bpmn:incoming> <bpmn:incoming>Flow_0fpc32g</bpmn:incoming>
<bpmn:outgoing>Flow_10ulj3l</bpmn:outgoing> <bpmn:outgoing>Flow_10ulj3l</bpmn:outgoing>
<bpmn:script>result = modify_spreadsheet('Finance_BCA', cell_indicator, input_text)</bpmn:script> <bpmn:script>modify_spreadsheet('Finance_BCA', cell_indicator, input_text)</bpmn:script>
</bpmn:scriptTask> </bpmn:scriptTask>
<bpmn:manualTask id="Activity_DisplayResults" name="Display Modify Results">
<bpmn:documentation>## Modify Results
{{ results }}</bpmn:documentation>
<bpmn:incoming>Flow_10ulj3l</bpmn:incoming>
<bpmn:outgoing>Flow_1tbcg16</bpmn:outgoing>
</bpmn:manualTask>
<bpmn:userTask id="Activity_GetModifyData" name="Get Modify Data" camunda:formKey="ModifyData"> <bpmn:userTask id="Activity_GetModifyData" name="Get Modify Data" camunda:formKey="ModifyData">
<bpmn:documentation>## File Upload <bpmn:documentation>## File Upload
{{ Finance_BCA }}</bpmn:documentation> {{ Finance_BCA }}</bpmn:documentation>
@ -59,13 +52,9 @@
</bpmn:process> </bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1"> <bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_ModifySpreadsheet"> <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_ModifySpreadsheet">
<bpmndi:BPMNEdge id="Flow_1tbcg16_di" bpmnElement="Flow_1tbcg16">
<di:waypoint x="850" y="117" />
<di:waypoint x="912" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_10ulj3l_di" bpmnElement="Flow_10ulj3l"> <bpmndi:BPMNEdge id="Flow_10ulj3l_di" bpmnElement="Flow_10ulj3l">
<di:waypoint x="691" y="117" /> <di:waypoint x="691" y="117" />
<di:waypoint x="750" y="117" /> <di:waypoint x="912" y="117" />
</bpmndi:BPMNEdge> </bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0fpc32g_di" bpmnElement="Flow_0fpc32g"> <bpmndi:BPMNEdge id="Flow_0fpc32g_di" bpmnElement="Flow_0fpc32g">
<di:waypoint x="530" y="117" /> <di:waypoint x="530" y="117" />
@ -88,15 +77,12 @@
<bpmndi:BPMNShape id="Activity_0jut75d_di" bpmnElement="Activity_FileUpload"> <bpmndi:BPMNShape id="Activity_0jut75d_di" bpmnElement="Activity_FileUpload">
<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="Activity_0nqp85l_di" bpmnElement="Activity_DisplayResults"> <bpmndi:BPMNShape id="Activity_0uk32ds_di" bpmnElement="Activity_ModifySpreadsheet">
<dc:Bounds x="750" y="77" width="100" height="80" /> <dc:Bounds x="591" y="77" width="100" height="80" />
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0hn4ju2_di" bpmnElement="Activity_GetModifyData"> <bpmndi:BPMNShape id="Activity_0hn4ju2_di" bpmnElement="Activity_GetModifyData">
<dc:Bounds x="430" y="77" width="100" height="80" /> <dc:Bounds x="430" y="77" width="100" height="80" />
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0uk32ds_di" bpmnElement="Activity_ModifySpreadsheet">
<dc:Bounds x="591" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane> </bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram> </bpmndi:BPMNDiagram>
</bpmn:definitions> </bpmn:definitions>

View File

@ -12,6 +12,19 @@ import os
class TestModifySpreadsheet(BaseTest): class TestModifySpreadsheet(BaseTest):
def upload_spreadsheet(self, workflow, task, irb_doc_code):
filepath = os.path.join(app.root_path, '..', 'tests', 'data',
'modify_spreadsheet', 'test_spreadsheet.xlsx')
with open(filepath, 'br') as f_open:
ss_data = f_open.read()
file_model = UserFileService.add_workflow_file(workflow_id=workflow.id,
task_spec_name=task.name,
name="test_spreadsheet.xlsx", content_type="text",
binary_data=ss_data, irb_doc_code=irb_doc_code)
workflow_api = self.complete_form(workflow, task, {irb_doc_code: {'id': file_model.id}})
return workflow_api
@staticmethod @staticmethod
def get_sheet(workflow_id, irb_doc_code): def get_sheet(workflow_id, irb_doc_code):
spreadsheet = session.query(FileModel). \ spreadsheet = session.query(FileModel). \
@ -34,16 +47,7 @@ class TestModifySpreadsheet(BaseTest):
workflow_api = self.get_workflow_api(workflow) workflow_api = self.get_workflow_api(workflow)
task = workflow_api.next_task task = workflow_api.next_task
filepath = os.path.join(app.root_path, '..', 'tests', 'data', workflow_api = self.upload_spreadsheet(workflow, task, irb_doc_code)
'modify_spreadsheet', 'test_spreadsheet.xlsx')
with open(filepath, 'br') as f_open:
ss_data = f_open.read()
file_model = UserFileService.add_workflow_file(workflow_id=workflow.id,
task_spec_name=task.name,
name="test_spreadsheet.xlsx", content_type="text",
binary_data=ss_data, irb_doc_code=irb_doc_code)
workflow_api = self.complete_form(workflow, task, {irb_doc_code: {'id': file_model.id}})
sheet = self.get_sheet(workflow.id, irb_doc_code) sheet = self.get_sheet(workflow.id, irb_doc_code)
self.assertEqual(None, sheet[cell_indicator].value) self.assertEqual(None, sheet[cell_indicator].value)
@ -54,3 +58,21 @@ class TestModifySpreadsheet(BaseTest):
sheet = self.get_sheet(workflow.id, irb_doc_code) sheet = self.get_sheet(workflow.id, irb_doc_code)
self.assertEqual(input_text, sheet[cell_indicator].value) self.assertEqual(input_text, sheet[cell_indicator].value)
def test_missing_spreadsheet(self):
"""The modify_spreadsheet has Finance_BCA hard-coded as the spreadsheet to modify.
In this test we upload a spreadsheet with a different doc code,
and assert that we raise an error when the Finance_BCA spreadsheet does not exist"""
irb_doc_code = 'Finance_GPRF'
cell_indicator = 'C4'
input_text = 'This is my input text.'
workflow = self.create_workflow('modify_spreadsheet')
workflow_api = self.get_workflow_api(workflow)
task = workflow_api.next_task
workflow_api = self.upload_spreadsheet(workflow, task, irb_doc_code)
task = workflow_api.next_task
with self.assertRaises(AssertionError):
self.complete_form(workflow, task, {'cell_indicator': cell_indicator,
'input_text': input_text})