diff --git a/crc/scripts/modify_spreadsheet.py b/crc/scripts/modify_spreadsheet.py index d030fca7..8d0d0b97 100644 --- a/crc/scripts/modify_spreadsheet.py +++ b/crc/scripts/modify_spreadsheet.py @@ -47,6 +47,7 @@ class ModifySpreadsheet(Script): spreadsheet = session.query(FileModel). \ filter(FileModel.workflow_id == workflow_id). \ filter(FileModel.irb_doc_code == parameters['irb_doc_code']).\ + filter(FileModel.archived == False).\ first() if spreadsheet: workbook = load_workbook(BytesIO(spreadsheet.data)) diff --git a/tests/data/modify_spreadsheet/test_spreadsheet_2.xlsx b/tests/data/modify_spreadsheet/test_spreadsheet_2.xlsx new file mode 100644 index 00000000..1afdf214 Binary files /dev/null and b/tests/data/modify_spreadsheet/test_spreadsheet_2.xlsx differ diff --git a/tests/scripts/test_modify_spreadsheet.py b/tests/scripts/test_modify_spreadsheet.py index 39029158..842a88d0 100644 --- a/tests/scripts/test_modify_spreadsheet.py +++ b/tests/scripts/test_modify_spreadsheet.py @@ -12,9 +12,13 @@ import os class TestModifySpreadsheet(BaseTest): - def upload_spreadsheet(self, workflow, task, irb_doc_code): + irb_doc_code = 'Finance_BCA' + cell_indicator = 'C4' + input_text = 'This is my input text.' + + def upload_spreadsheet(self, workflow, task, irb_doc_code, spreadsheet_name='test_spreadsheet.xlsx'): filepath = os.path.join(app.root_path, '..', 'tests', 'data', - 'modify_spreadsheet', 'test_spreadsheet.xlsx') + 'modify_spreadsheet', spreadsheet_name) with open(filepath, 'br') as f_open: ss_data = f_open.read() @@ -30,39 +34,73 @@ class TestModifySpreadsheet(BaseTest): spreadsheet = session.query(FileModel). \ filter(FileModel.workflow_id == workflow_id). \ filter(FileModel.irb_doc_code == irb_doc_code). \ + filter(FileModel.archived == False). \ first() workbook = load_workbook(BytesIO(spreadsheet.data)) sheet = workbook.active return sheet def test_modify_spreadsheet(self): - irb_doc_code = 'Finance_BCA' - 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) + workflow_api = self.upload_spreadsheet(workflow, task, self.irb_doc_code) - sheet = self.get_sheet(workflow.id, irb_doc_code) - self.assertEqual(None, sheet[cell_indicator].value) + sheet = self.get_sheet(workflow.id, self.irb_doc_code) + self.assertEqual(None, sheet[self.cell_indicator].value) task = workflow_api.next_task - self.complete_form(workflow, task, {'cell_indicator': cell_indicator, - 'input_text': input_text}) + self.complete_form(workflow, task, {'cell_indicator': self.cell_indicator, + 'input_text': self.input_text}) - sheet = self.get_sheet(workflow.id, irb_doc_code) - self.assertEqual(input_text, sheet[cell_indicator].value) + sheet = self.get_sheet(workflow.id, self.irb_doc_code) + self.assertEqual(self.input_text, sheet[self.cell_indicator].value) + + def test_modify_spreadsheet_multiple_versions_of_spreadsheet(self): + """This test ensures that we get the correct version of the spreadsheet if multiple versions are uploaded. + I.e., we get the current version and not any archived versions + """ + workflow = self.create_workflow('modify_spreadsheet') + workflow_api = self.get_workflow_api(workflow) + task = workflow_api.next_task + + self.upload_spreadsheet(workflow, task, self.irb_doc_code, 'test_spreadsheet.xlsx') + files = FileModel.query\ + .filter(FileModel.workflow_id == workflow.id)\ + .filter(FileModel.irb_doc_code == self.irb_doc_code)\ + .all() + assert len(files) == 1 + assert files[0].archived is False + UserFileService().delete_file(files[0].id) + + workflow_api = self.restart_workflow_api(workflow) + task = workflow_api.next_task + assert task.name == "Activity_FileUpload" + workflow_api = self.upload_spreadsheet(workflow, task, self.irb_doc_code, 'test_spreadsheet_2.xlsx') + files = FileModel.query\ + .filter(FileModel.workflow_id == workflow.id)\ + .filter(FileModel.irb_doc_code == self.irb_doc_code)\ + .all() + assert len(files) == 2 + assert files[0].archived is True + assert files[1].archived is False + + task = workflow_api.next_task + assert task.name == "Activity_GetModifyData" + + data = {"cell_indicator": "B4", "input_text": "Just some text"} + self.complete_form(workflow, task, data) + + sheet = self.get_sheet(workflow.id, self.irb_doc_code) + self.assertEqual("Just some text", sheet["B4"].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) @@ -71,5 +109,5 @@ class TestModifySpreadsheet(BaseTest): 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}) + self.complete_form(workflow, task, {'cell_indicator': self.cell_indicator, + 'input_text': self.input_text})