From 79c14ad23cf56462ef7c41169467520923ad60a0 Mon Sep 17 00:00:00 2001 From: Carlos Lopez Date: Mon, 10 Aug 2020 22:23:20 -0600 Subject: [PATCH] Unlinking file from workflow instead of trying to delete it --- crc/services/study_service.py | 3 +-- tests/study/test_study_api.py | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/crc/services/study_service.py b/crc/services/study_service.py index da480255..e183cd15 100644 --- a/crc/services/study_service.py +++ b/crc/services/study_service.py @@ -91,8 +91,7 @@ class StudyService(object): session.query(TaskEventModel).filter_by(workflow_id=workflow.id).delete() session.query(WorkflowSpecDependencyFile).filter_by(workflow_id=workflow_id).delete(synchronize_session='fetch') - session.query(FileDataModel).filter(FileModel.workflow_id == workflow_id).delete(synchronize_session='fetch') - session.query(FileModel).filter_by(workflow_id=workflow_id).delete(synchronize_session='fetch') + session.query(FileModel).filter_by(workflow_id=workflow_id).update({'archived': True, 'workflow_id': None}) # Todo: Remove approvals completely. session.query(ApprovalFile).filter(ApprovalModel.workflow_id == workflow_id).delete(synchronize_session='fetch') diff --git a/tests/study/test_study_api.py b/tests/study/test_study_api.py index 6bb601ce..1913f5ff 100644 --- a/tests/study/test_study_api.py +++ b/tests/study/test_study_api.py @@ -10,6 +10,7 @@ from crc import session, app from crc.models.protocol_builder import ProtocolBuilderStatus, \ ProtocolBuilderStudySchema from crc.models.approval import ApprovalStatus +from crc.models.file import FileModel from crc.models.task_event import TaskEventModel from crc.models.study import StudyModel, StudySchema, StudyStatus from crc.models.workflow import WorkflowSpecModel, WorkflowModel @@ -235,13 +236,36 @@ class TestStudyApi(BaseTest): self.assertEqual(study.sponsor, json_data['sponsor']) self.assertEqual(study.ind_number, json_data['ind_number']) - def test_delete_study(self): self.load_example_data() study = session.query(StudyModel).first() rv = self.app.delete('/v1.0/study/%i' % study.id, headers=self.logged_in_headers()) self.assert_success(rv) + def test_delete_workflow(self): + self.load_example_data() + workflow = session.query(WorkflowModel).first() + FileService.add_workflow_file(workflow_id=workflow.id, + name="anything.png", content_type="text", + binary_data=b'5678', irb_doc_code="UVACompl_PRCAppr" ) + + workflow_files = session.query(FileModel).filter_by(workflow_id=workflow.id) + self.assertEqual(workflow_files.count(), 1) + workflow_files_ids = [file.id for file in workflow_files] + + rv = self.app.delete(f'/v1.0/workflow/{workflow.id}', headers=self.logged_in_headers()) + self.assert_success(rv) + + # No files should have the deleted workflow id anymore + workflow_files = session.query(FileModel).filter_by(workflow_id=workflow.id) + self.assertEqual(workflow_files.count(), 0) + + # Finally, let's confirm the file was archived + workflow_files = session.query(FileModel).filter(FileModel.id.in_(workflow_files_ids)) + for file in workflow_files: + self.assertTrue(file.archived) + self.assertIsNone(file.workflow_id) + def test_delete_study_with_workflow_and_status(self): self.load_example_data() workflow = session.query(WorkflowModel).first()