def _test_to_script_or_to_markdown(self, to_method, template_lines): # These methods are so similar that it makes sense to have a helper # that can test either one instead of duplicating a bunch of code. workflow = Workflow.from_markdown(self.markdown_fp) artifact_fp1 = os.path.join(self.test_dir.name, 'artifact1.qtf') artifact_fp2 = os.path.join(self.test_dir.name, 'artifact2.qtf') Artifact.save([-1, 42, 0, 43, 43], DummyType, None, artifact_fp1) Artifact.save([1, 2, 100], DummyType, None, artifact_fp2) artifact_fp3 = os.path.join(self.test_dir.name, 'artifact3.qtf') job = to_method( workflow, input_artifact_filepaths={ 'input1': artifact_fp1, 'input2': artifact_fp2 }, parameter_references={ 'param1': 99, 'param2': -999, }, output_artifact_filepaths={'concatenated_inputs': artifact_fp3}) provenance_lines = [ "provenance = Provenance(", "parameters={", "'param2': -999" ] setup_lines = [ "input1 = Artifact(%r).data" % artifact_fp1, "input2 = Artifact(%r).data" % artifact_fp2, "param1 = 99", "param2 = -999" ] teardown_lines = [ "Artifact.save(concatenated_inputs, DummyType, provenance, " "%r)" % artifact_fp3 ] for expected_lines in (provenance_lines, setup_lines, template_lines, teardown_lines): for expected_line in expected_lines: self.assertIn(expected_line, job.code) self.assertIsInstance(job.uuid, uuid.UUID) self.assertEqual(job.uuid.version, 4) self.assertEqual(job.input_artifact_filepaths, { 'input1': artifact_fp1, 'input2': artifact_fp2 }) self.assertEqual(job.parameter_references, { 'param1': 99, 'param2': -999 }) self.assertEqual(job.output_artifact_filepaths, {'concatenated_inputs': artifact_fp3})
def test_signature(self): workflow = Workflow.from_markdown(self.markdown_fp) signature = Signature(name='Dummy markdown workflow', inputs={ 'input1': DummyType, 'input2': DummyType, 'param1': Int, 'param2': Int, }, outputs=collections.OrderedDict([ ('concatenated_inputs', DummyType) ])) self.assertEqual(workflow.signature, signature)
def test_from_markdown(self): workflow = Workflow.from_markdown(self.markdown_fp) expected = Workflow(signature=Signature( name='Dummy markdown workflow', inputs={ 'input1': DummyType, 'input2': DummyType, 'param1': Int, 'param2': Int, }, outputs=collections.OrderedDict([('concatenated_inputs', DummyType) ])), template=frontmatter.parse(markdown_template)[1], id_='dummy_markdown_workflow') self.assertEqual(workflow, expected)
def test_signature(self): workflow = Workflow.from_markdown(self.markdown_fp) signature = Signature( name='Dummy markdown workflow', inputs={ 'input1': DummyType, 'input2': DummyType, 'param1': Int, 'param2': Int, }, outputs=collections.OrderedDict([ ('concatenated_inputs', DummyType) ]) ) self.assertEqual(workflow.signature, signature)
def test_signature(self): workflow = Workflow.from_markdown(self.markdown_fp) signature = Signature( name='Dummy markdown workflow', inputs={ 'input1': (qiime.core.testing.TestType, list), 'input2': (qiime.core.testing.TestType, list)}, parameters={ 'param1': (qiime.plugin.Int, int), 'param2': (qiime.plugin.Int, int)}, outputs=collections.OrderedDict([ ('concatenated_inputs', (qiime.core.testing.TestType, list)) ]) ) self.assertEqual(workflow.signature, signature)
def test_from_markdown(self): workflow = Workflow.from_markdown(self.markdown_fp) expected = Workflow( signature=Signature( name='Dummy markdown workflow', inputs={ 'input1': DummyType, 'input2': DummyType, 'param1': Int, 'param2': Int, }, outputs=collections.OrderedDict([ ('concatenated_inputs', DummyType) ]) ), template=frontmatter.parse(markdown_template)[1], id_='dummy_markdown_workflow' ) self.assertEqual(workflow, expected)
def test_from_markdown(self): workflow = Workflow.from_markdown(self.markdown_fp) expected = Workflow( signature=Signature( name='Dummy markdown workflow', inputs={ 'input1': (qiime.core.testing.TestType, list), 'input2': (qiime.core.testing.TestType, list), }, parameters={ 'param1': (qiime.plugin.Int, int), 'param2': (qiime.plugin.Int, int), }, outputs=collections.OrderedDict([ ('concatenated_inputs', (qiime.core.testing.TestType, list)) ]) ), template=frontmatter.parse(markdown_template)[1], id_='dummy_markdown_workflow' ) self.assertEqual(workflow, expected)
def test_reference(self): workflow = Workflow.from_markdown(self.markdown_fp) self.assertTrue(workflow.reference.startswith(workflow.id))
def test_name(self): workflow = Workflow.from_markdown(self.markdown_fp) self.assertEqual(workflow.name, 'Dummy markdown workflow')
def test_id(self): workflow = Workflow.from_markdown(self.markdown_fp) self.assertEqual(workflow.id, 'dummy_markdown_workflow')
def test_template(self): workflow = Workflow.from_markdown(self.markdown_fp) self.assertEqual(workflow.template, frontmatter.parse(markdown_template)[1])
def test_reference(self): workflow = Workflow.from_markdown(self.markdown_fp) self.assertTrue(workflow.reference.startswith(workflow.id))
def test_name(self): workflow = Workflow.from_markdown(self.markdown_fp) self.assertEqual(workflow.name, 'Dummy markdown workflow')
def test_id(self): workflow = Workflow.from_markdown(self.markdown_fp) self.assertEqual(workflow.id, 'dummy_markdown_workflow')
def test_template(self): workflow = Workflow.from_markdown(self.markdown_fp) self.assertEqual(workflow.template, frontmatter.parse(markdown_template)[1])
def _test_to_script_or_to_markdown(self, to_method, template_lines): # These methods are so similar that it makes sense to have a helper # that can test either one instead of duplicating a bunch of code. workflow = Workflow.from_markdown(self.markdown_fp) artifact_fp1 = os.path.join(self.test_dir.name, 'artifact1.qtf') artifact_fp2 = os.path.join(self.test_dir.name, 'artifact2.qtf') Artifact.save([-1, 42, 0, 43, 43], DummyType, None, artifact_fp1) Artifact.save([1, 2, 100], DummyType, None, artifact_fp2) artifact_fp3 = os.path.join(self.test_dir.name, 'artifact3.qtf') job = to_method( workflow, input_artifact_filepaths={ 'input1': artifact_fp1, 'input2': artifact_fp2 }, parameter_references={ 'param1': 99, 'param2': -999, }, output_artifact_filepaths={ 'concatenated_inputs': artifact_fp3 } ) provenance_lines = [ "provenance = Provenance(", "parameters={", "'param2': -999" ] setup_lines = [ "input1 = Artifact(%r).data" % artifact_fp1, "input2 = Artifact(%r).data" % artifact_fp2, "param1 = 99", "param2 = -999" ] teardown_lines = [ "Artifact.save(concatenated_inputs, DummyType, provenance, " "%r)" % artifact_fp3 ] for expected_lines in (provenance_lines, setup_lines, template_lines, teardown_lines): for expected_line in expected_lines: self.assertIn(expected_line, job.code) self.assertIsInstance(job.uuid, uuid.UUID) self.assertEqual(job.uuid.version, 4) self.assertEqual( job.input_artifact_filepaths, {'input1': artifact_fp1, 'input2': artifact_fp2}) self.assertEqual( job.parameter_references, {'param1': 99, 'param2': -999}) self.assertEqual( job.output_artifact_filepaths, {'concatenated_inputs': artifact_fp3})