From 75881bf1d3b716048d8f8c79ea1b27b48c231735 Mon Sep 17 00:00:00 2001 From: Aaron Louie Date: Mon, 13 Jan 2020 21:43:09 -0500 Subject: [PATCH] Adds endpoint for adding a workflow specification --- crc/api.yml | 23 +++++++++++++++++++++++ crc/api/workflow.py | 7 +++++++ tests/test_api.py | 12 ++++++++++++ 3 files changed, 42 insertions(+) diff --git a/crc/api.yml b/crc/api.yml index 43b75840..0c8240e8 100644 --- a/crc/api.yml +++ b/crc/api.yml @@ -217,6 +217,29 @@ paths: application/json: schema: $ref: "#/components/schemas/Error" + post: + operationId: crc.api.workflow.add_workflow_specification + summary: Creates a new workflow specification with the given parameters. + tags: + - Workflows and Tasks + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/WorkflowSpec' + responses: + '200': + description: Workflow specification created successfully. + content: + application/json: + schema: + $ref: "#/components/schemas/WorkflowSpec" + default: + description: unexpected error + content: + application/json: + schema: + $ref: "#/components/schemas/Error" /file: parameters: - name: spec_id diff --git a/crc/api/workflow.py b/crc/api/workflow.py index 9515e71c..4edd2356 100644 --- a/crc/api/workflow.py +++ b/crc/api/workflow.py @@ -9,6 +9,13 @@ def all_specifications(): return schema.dump(db.session.query(WorkflowSpecModel).all()) +def add_workflow_specification(body): + workflow_spec = WorkflowSpecModelSchema().load(body, session=db.session) + db.session.add(workflow_spec) + db.session.commit() + return WorkflowSpecModelSchema().dump(workflow_spec) + + def get_workflow(workflow_id): schema = WorkflowModelSchema() workflow = db.session.query(WorkflowModel).filter_by(id=workflow_id).first() diff --git a/tests/test_api.py b/tests/test_api.py index 1bb181d0..ced01654 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -87,6 +87,18 @@ class TestStudy(BaseTest, unittest.TestCase): self.assertEqual(spec.display_name, spec2.display_name) self.assertEqual(spec.description, spec2.description) + def test_add_new_workflow_specification(self): + self.load_example_data(); + num_before = db.session.query(WorkflowSpecModel).count() + spec = WorkflowSpecModel(id='make_cookies', display_name='Cooooookies', description='Om nom nom delicious cookies') + rv = self.app.post('/v1.0/workflow-specification', content_type="application/json", + data=json.dumps(WorkflowSpecModelSchema().dump(spec))) + self.assert_success(rv) + db_spec = db.session.query(WorkflowSpecModel).filter_by(id='make_cookies').first() + self.assertEqual(spec.display_name, db_spec.display_name) + num_after = db.session.query(WorkflowSpecModel).count() + self.assertEqual(num_after, num_before + 1) + def test_add_workflow_to_study(self): self.load_example_data() study = db.session.query(StudyModel).first()