mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-11-01 02:59:47 +08:00
197 lines
6.0 KiB
Python
197 lines
6.0 KiB
Python
from unittest import mock
|
|
|
|
from galaxy import model
|
|
from galaxy.managers.markdown_parse import validate_galaxy_markdown
|
|
from galaxy.managers.markdown_util import (
|
|
populate_invocation_markdown,
|
|
resolve_invocation_markdown,
|
|
)
|
|
from .test_workflow_progress import TEST_WORKFLOW_YAML
|
|
from .workflow_support import (
|
|
MockTrans,
|
|
yaml_to_model,
|
|
)
|
|
|
|
|
|
def test_workflow_section_expansion():
|
|
workflow_markdown = """
|
|
## Workflow
|
|
```galaxy
|
|
workflow_display()
|
|
```
|
|
"""
|
|
galaxy_markdown = populate_markdown(workflow_markdown)
|
|
assert "## Workflow\n" in galaxy_markdown
|
|
assert "```galaxy\nworkflow_display(invocation_id=44)\n```\n" in galaxy_markdown
|
|
galaxy_markdown = resolve_markdown(galaxy_markdown)
|
|
assert "```galaxy\nworkflow_display(workflow_id=342, workflow_checkpoint=0)\n```" in galaxy_markdown
|
|
|
|
|
|
def test_inputs_section_expansion():
|
|
workflow_markdown = """
|
|
## Workflow Inputs
|
|
```galaxy
|
|
invocation_inputs()
|
|
```
|
|
"""
|
|
galaxy_markdown = populate_markdown(workflow_markdown)
|
|
assert "## Workflow Inputs" in galaxy_markdown
|
|
assert "```galaxy\ninvocation_inputs(invocation_id=44)\n```" in galaxy_markdown
|
|
galaxy_markdown = resolve_markdown(galaxy_markdown)
|
|
assert "Input Dataset: input1" in galaxy_markdown
|
|
assert '```galaxy\nhistory_dataset_display(input="input1")\n```' in galaxy_markdown
|
|
assert len(galaxy_markdown.split("```")) == 3
|
|
|
|
|
|
def test_outputs_section_expansion():
|
|
workflow_markdown = """
|
|
## Workflow Outputs
|
|
```galaxy
|
|
invocation_outputs()
|
|
```
|
|
"""
|
|
galaxy_markdown = populate_markdown(workflow_markdown)
|
|
assert "## Workflow Outputs" in galaxy_markdown
|
|
assert "```galaxy\ninvocation_outputs(invocation_id=44)" in galaxy_markdown
|
|
galaxy_markdown = resolve_markdown(galaxy_markdown)
|
|
assert "Output Dataset: output_label" in galaxy_markdown
|
|
assert '```galaxy\nhistory_dataset_display(output="output_label")\n```' in galaxy_markdown
|
|
assert len(galaxy_markdown.split("```")) == 5
|
|
|
|
|
|
def test_input_reference_mapping():
|
|
workflow_markdown = """
|
|
And outputs...
|
|
|
|
```galaxy
|
|
history_dataset_peek(input=input1)
|
|
```
|
|
"""
|
|
galaxy_markdown = populate_markdown(workflow_markdown)
|
|
assert "```galaxy\nhistory_dataset_peek(invocation_id=44, input=input1)\n```" in galaxy_markdown
|
|
galaxy_markdown = resolve_markdown(galaxy_markdown)
|
|
assert "```galaxy\nhistory_dataset_peek(history_dataset_id=567)\n```" in galaxy_markdown
|
|
|
|
|
|
def test_invocation_time():
|
|
workflow_markdown = """
|
|
And outputs...
|
|
|
|
```galaxy
|
|
invocation_time()
|
|
```
|
|
"""
|
|
galaxy_markdown = populate_markdown(workflow_markdown)
|
|
assert "```galaxy\ninvocation_time(invocation_id=44)\n```" in galaxy_markdown
|
|
galaxy_markdown = resolve_markdown(galaxy_markdown)
|
|
assert "```galaxy\ninvocation_time(invocation_id=44)\n```" in galaxy_markdown
|
|
|
|
|
|
def test_output_reference_mapping():
|
|
workflow_markdown = """
|
|
And outputs...
|
|
|
|
```galaxy
|
|
history_dataset_as_image(output=output_label)
|
|
```
|
|
"""
|
|
galaxy_markdown = populate_markdown(workflow_markdown)
|
|
assert "```galaxy\nhistory_dataset_as_image(invocation_id=44, output=output_label)\n```" in galaxy_markdown
|
|
galaxy_markdown = resolve_markdown(galaxy_markdown)
|
|
assert "```galaxy\nhistory_dataset_as_image(history_dataset_id=563)\n```" in galaxy_markdown
|
|
|
|
|
|
def test_populating_invocation_json():
|
|
workflow_markdown_0 = """
|
|
```visualization
|
|
{
|
|
"invocation_id": "",
|
|
"other_key": "other_value"
|
|
}
|
|
```
|
|
"""
|
|
|
|
workflow_markdown_1 = """
|
|
```visualization
|
|
{
|
|
"nested_structure": {
|
|
"invocation_id": ""
|
|
}
|
|
}
|
|
```
|
|
"""
|
|
|
|
workflow_markdown_2 = """
|
|
```visualization
|
|
{
|
|
"nested_structure": {
|
|
"invocation_id": "REPLACE"
|
|
}
|
|
}
|
|
```
|
|
"""
|
|
|
|
workflow_markdown_3 = """
|
|
{
|
|
"invocation_id": ""
|
|
}
|
|
"""
|
|
galaxy_markdown = populate_markdown(workflow_markdown_0)
|
|
assert (
|
|
'\n```visualization\n{\n "invocation_id": "44",\n "other_key": "other_value"\n}\n```\n' in galaxy_markdown
|
|
)
|
|
galaxy_markdown = populate_markdown(workflow_markdown_1)
|
|
assert (
|
|
'\n```visualization\n{\n "nested_structure": {\n "invocation_id": "44"\n }\n}\n```\n'
|
|
in galaxy_markdown
|
|
)
|
|
galaxy_markdown = populate_markdown(workflow_markdown_2)
|
|
assert (
|
|
'\n```visualization\n{\n "nested_structure": {\n "invocation_id": "44"\n }\n}\n```\n'
|
|
in galaxy_markdown
|
|
)
|
|
galaxy_markdown = populate_markdown(workflow_markdown_3)
|
|
assert '\n{\n "invocation_id": ""\n}\n' in galaxy_markdown
|
|
|
|
|
|
def populate_markdown(workflow_markdown):
|
|
# Add invocation ids to internal Galaxy markdown
|
|
trans = MockTrans()
|
|
validate_galaxy_markdown(workflow_markdown)
|
|
galaxy_markdown = populate_invocation_markdown(trans, example_invocation(trans), workflow_markdown)
|
|
return galaxy_markdown
|
|
|
|
|
|
def resolve_markdown(workflow_markdown):
|
|
# Convert internal Galaxy markdown with invocation ids and labels
|
|
# to object id references and expanded sections.
|
|
trans = MockTrans()
|
|
validate_galaxy_markdown(workflow_markdown)
|
|
trans.app.workflow_manager = mock.MagicMock()
|
|
invocation = example_invocation(trans)
|
|
trans.app.workflow_manager.get_invocation.side_effect = [invocation, invocation]
|
|
galaxy_markdown = resolve_invocation_markdown(trans, workflow_markdown)
|
|
return galaxy_markdown
|
|
|
|
|
|
def example_invocation(trans):
|
|
invocation = model.WorkflowInvocation()
|
|
workflow = yaml_to_model(TEST_WORKFLOW_YAML)
|
|
workflow.id = 342
|
|
invocation.id = 44
|
|
invocation.workflow = workflow
|
|
|
|
# TODO: fix this to use workflow id and eliminate hack.
|
|
stored_workflow = model.StoredWorkflow()
|
|
stored_workflow.id = 342
|
|
invocation.workflow.stored_workflow = stored_workflow
|
|
|
|
hda = model.HistoryDatasetAssociation(create_dataset=True, sa_session=trans.sa_session)
|
|
hda.id = 567
|
|
invocation.add_input(hda, step=workflow.steps[0])
|
|
out_hda = model.HistoryDatasetAssociation(create_dataset=True, sa_session=trans.sa_session)
|
|
out_hda.id = 563
|
|
wf_output = model.WorkflowOutput(workflow.steps[2], label="output_label")
|
|
invocation.add_output(wf_output, workflow.steps[2], out_hda)
|
|
return invocation
|