Files
galaxy/test/unit/workflows/test_workflow_markdown.py
T
2025-03-21 12:29:58 -04:00

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