diff --git a/lib/galaxy/workflow/refactor/execute.py b/lib/galaxy/workflow/refactor/execute.py index d35cbbbc7785..2582380fc623 100644 --- a/lib/galaxy/workflow/refactor/execute.py +++ b/lib/galaxy/workflow/refactor/execute.py @@ -531,6 +531,9 @@ def _patch_step(self, execution, step, step_def): if upgrade_input["name"] == input_name: matching_input = upgrade_input break + elif step.when_expression and f"inputs.{input_name}" in step.when_expression: + # TODO: eventually track step inputs more formally + matching_input = upgrade_input # In the future check parameter type, format, mapping status... if matching_input is None: diff --git a/test/integration/test_workflow_refactoring.py b/test/integration/test_workflow_refactoring.py index 6a03d818ce31..d68b8916145b 100644 --- a/test/integration/test_workflow_refactoring.py +++ b/test/integration/test_workflow_refactoring.py @@ -537,6 +537,35 @@ def test_tool_version_upgrade_no_state_change(self): assert len(action_executions[0].messages) == 0 assert self._latest_workflow.step_by_label("the_step").tool_version == "0.2" + def test_tool_version_upgrade_keeps_when_expression(self): + self.workflow_populator.upload_yaml_workflow( + """ +class: GalaxyWorkflow +inputs: + the_bool: + type: boolean +steps: + the_step: + tool_id: multiple_versions + tool_version: '0.1' + in: + when: the_bool + state: + inttest: 0 + when: $(inputs.when) +""" + ) + assert self._latest_workflow.step_by_label("the_step").tool_version == "0.1" + actions: ActionsJson = [ + {"action_type": "upgrade_tool", "step": {"label": "the_step"}}, + ] + action_executions = self._refactor(actions).action_executions + assert len(action_executions) == 1 + assert len(action_executions[0].messages) == 0 + step = self._latest_workflow.step_by_label("the_step") + assert step.tool_version == "0.2" + assert step.when_expression + def test_tool_version_upgrade_state_added(self): self.workflow_populator.upload_yaml_workflow( """