from typing import (
Any,
cast,
)
from galaxy.tools.parameters import (
populate_state,
ToolInputsT,
)
from galaxy.tools.parameters.basic import (
BooleanToolParameter,
TextToolParameter,
)
from galaxy.tools.parameters.grouping import (
Conditional,
ConditionalWhen,
Repeat,
)
from galaxy.util import XML
from galaxy.util.bunch import Bunch
trans = Bunch(workflow_building_mode=False)
def mock_when(**kwd):
return cast(ConditionalWhen, Bunch(**kwd))
def test_populate_state():
a = TextToolParameter(None, XML(''))
b = Repeat("b")
b.min = 0
b.max = 1
c = TextToolParameter(None, XML(''))
d = Repeat("d")
d.min = 0
d.max = 1
e = TextToolParameter(None, XML(''))
f = Conditional("f")
g = BooleanToolParameter(None, XML(''))
h = TextToolParameter(None, XML(''))
i = TextToolParameter(None, XML(''))
b.inputs = {"c": c, "d": d}
d.inputs = {"e": e, "f": f}
f.test_param = g
f.cases = [mock_when(value="true", inputs={"h": h}), mock_when(value="false", inputs={"i": i})]
inputs = {"a": a, "b": b}
flat = {"a": 1, "b_0|c": 2, "b_0|d_0|e": 3, "b_0|d_0|f|h": 4, "b_0|d_0|f|g": True}
state: dict[str, Any] = {}
populate_state(trans, cast(ToolInputsT, inputs), flat, state, check=False)
assert state["a"] == 1
assert state["b"][0]["c"] == 2
assert state["b"][0]["d"][0]["e"] == 3
assert state["b"][0]["d"][0]["f"]["h"] == 4
# now test with input_format='21.01'
nested = {"a": 1, "b": [{"c": 2, "d": [{"e": 3, "f": {"h": 4, "g": True}}]}]}
state_new: dict[str, Any] = {}
populate_state(trans, cast(ToolInputsT, inputs), nested, state_new, check=False, input_format="21.01")
assert state_new["a"] == 1
assert state_new["b"][0]["c"] == 2
assert state_new["b"][0]["d"][0]["e"] == 3
assert state_new["b"][0]["d"][0]["f"]["h"] == 4