Files
galaxy/test/unit/workflows/test_run_parameters.py
T
Nicola Soranzo 2cd95c48f6 Fix import order everywhere
- Add flake8-import-order to flake8 Pipfile and remove py27-lint-imports
  and py27-lint-imports-include-list tox envs
- Fix most E201 and E202 errors reported by flake8-import-order v0.15,
  but pin flake8-import-order to v0.14.3 until
  https://github.com/PyCQA/flake8-import-order/issues/123
  is fixed

This let us drop 2 jobs on Travis per each job.
2017-11-14 19:42:39 +00:00

147 lines
4.4 KiB
Python

from galaxy import model
from galaxy.workflow.run_request import (
_normalize_inputs,
_normalize_step_parameters
)
from .workflow_support import MockTrans
STEP_ID_OFFSET = 4 # Offset a little so ids and order index are different.
def test_normalize_parameters_empty():
normalized_params = __normalize_parameters_against_fixture({})
assert normalized_params == {}
def test_normalize_parameters_by_tool():
normalized_params = __normalize_parameters_against_fixture({
'cat1': {'foo': 'bar'}
})
# Tool specified parameters are expanded out.
assert normalized_params[STEP_ID_OFFSET + 3] == {'foo': 'bar'}
assert normalized_params[STEP_ID_OFFSET + 4] == {'foo': 'bar'}
assert len(normalized_params.keys()) == 2
def test_step_parameters():
normalized_params = __normalize_parameters_against_fixture({
str(STEP_ID_OFFSET + 1): {'foo': 'bar'}
})
assert normalized_params[STEP_ID_OFFSET + 1] == {'foo': 'bar'}
assert len(normalized_params.keys()) == 1
def test_step_parameters_legacy():
normalized_params = __normalize_parameters_against_fixture({
str(STEP_ID_OFFSET + 1): {'param': 'foo', 'value': 'bar'}
})
assert normalized_params[STEP_ID_OFFSET + 1] == {'foo': 'bar'}, normalized_params
assert len(normalized_params.keys()) == 1
def test_inputs_by_step_id():
input1 = __new_input()
input2 = __new_input()
normalized_inputs = __normalize_inputs_against_fixture({
str(STEP_ID_OFFSET + 1): input1,
str(STEP_ID_OFFSET + 2): input2
}, inputs_by="step_id")
assert normalized_inputs[STEP_ID_OFFSET + 1]['content'] == input1['content']
assert normalized_inputs[STEP_ID_OFFSET + 2]['content'] == input2['content']
def test_inputs_by_step_index():
input1 = __new_input()
input2 = __new_input()
normalized_inputs = __normalize_inputs_against_fixture({
str(0): input1,
str(1): input2
}, inputs_by="step_index")
assert normalized_inputs[STEP_ID_OFFSET + 1]['content'] == input1['content']
assert normalized_inputs[STEP_ID_OFFSET + 2]['content'] == input2['content']
def test_inputs_by_name():
input1 = __new_input()
input2 = __new_input()
normalized_inputs = __normalize_inputs_against_fixture({
"input1": input1,
"input2": input2
}, inputs_by="name")
assert normalized_inputs[STEP_ID_OFFSET + 1]['content'] == input1['content']
assert normalized_inputs[STEP_ID_OFFSET + 2]['content'] == input2['content']
def __normalize_parameters_against_fixture(params):
trans = MockTrans()
# Create a throw away workflow so step ids and order_index
# are different for actual fixture.
__workflow_fixure(trans)
workflow = __workflow_fixure(trans)
normalized_params = _normalize_step_parameters(workflow.steps, params, legacy=True)
return normalized_params
def __normalize_inputs_against_fixture(inputs, inputs_by):
trans = MockTrans()
# Create a throw away workflow so step ids and order_index
# are different for actual fixture.
__workflow_fixure(trans)
workflow = __workflow_fixure(trans)
normalized_inputs = _normalize_inputs(workflow.steps, inputs, inputs_by)
return normalized_inputs
def __new_input():
return dict(content=model.HistoryDatasetAssociation())
def __workflow_fixure(trans):
user = model.User(
email="testworkflow_params@bx.psu.edu",
password="pass"
)
stored_workflow = model.StoredWorkflow()
stored_workflow.user = user
workflow = model.Workflow()
workflow.stored_workflow = stored_workflow
def add_step(**kwds):
workflow_step = model.WorkflowStep()
for key, value in kwds.items():
setattr(workflow_step, key, value)
workflow.steps.append(workflow_step)
trans.app.model.context.add(
workflow,
)
add_step(
type="data_input",
order_index=0,
tool_inputs={"name": "input1"}
)
add_step(
type="data_input",
order_index=1,
tool_inputs={"name": "input2"}
)
add_step(
type="tool",
tool_id="cat1",
order_index=2,
)
add_step(
type="tool",
tool_id="cat1",
order_index=4,
)
trans.app.model.context.flush()
# Expunge and reload to ensure step state is as expected from database.
workflow_id = workflow.id
trans.app.model.context.expunge_all()
return trans.app.model.context.query(model.Workflow).get(workflow_id)