diff --git a/src/data_factory_testing_framework/_pythonnet/data_factory_testing_framework_expressions_evaluator.py b/src/data_factory_testing_framework/_pythonnet/data_factory_testing_framework_expressions_evaluator.py index f592f77e..3bca7748 100644 --- a/src/data_factory_testing_framework/_pythonnet/data_factory_testing_framework_expressions_evaluator.py +++ b/src/data_factory_testing_framework/_pythonnet/data_factory_testing_framework_expressions_evaluator.py @@ -50,7 +50,7 @@ def evaluate(expression: str, state: PipelineRunState) -> Union[str, int, float, variables = {variable.name: variable.value for variable in state.variables} - state_iter_item_json = json.dumps(state.iteration_item) if state.iteration_item else None + state_iter_item_json = json.dumps(state.iteration_item) if state.iteration_item is not None else None result = evaluator.EvaluateExpression( expression, diff --git a/tests/unit/functions/test_data_factory_testing_framework_expression_evaluator.py b/tests/unit/functions/test_data_factory_testing_framework_expression_evaluator.py index 08f59bd8..c90f854f 100644 --- a/tests/unit/functions/test_data_factory_testing_framework_expression_evaluator.py +++ b/tests/unit/functions/test_data_factory_testing_framework_expression_evaluator.py @@ -132,6 +132,11 @@ ), p("@item()", PipelineRunState(iteration_item="value"), "@item()", "value", id="item_reference"), p("@item() ", PipelineRunState(iteration_item="value"), "@item() ", "value", id="item_reference_with_ws"), + p("@item()", PipelineRunState(iteration_item=0), "@item()", 0, id="item_reference_zero"), + p("@item()", PipelineRunState(iteration_item=""), "@item()", "", id="item_reference_empty_string"), + p("@item()", PipelineRunState(iteration_item=False), "@item()", False, id="item_reference_false"), + p("@item()", PipelineRunState(iteration_item=[]), "@item()", [], id="item_reference_empty_list"), + p("@item()", PipelineRunState(iteration_item={}), "@item()", {}, id="item_reference_empty_dict"), p("@concat('a', 'b' )", PipelineRunState(), "@concat('a', 'b' )", "ab", id="function_call"), p( "@concat('https://example.com/jobs/', '123''', concat('&', 'abc,'))", diff --git a/tests/unit/models/activities/control_activities/test_for_each_activity.py b/tests/unit/models/activities/control_activities/test_for_each_activity.py index 98120832..7037978c 100644 --- a/tests/unit/models/activities/control_activities/test_for_each_activity.py +++ b/tests/unit/models/activities/control_activities/test_for_each_activity.py @@ -79,3 +79,37 @@ def test_evaluated_raises_error_when_evaluated_value_is_not_a_list(evaluated_val ex_info.value.args[0] == "Iteration expression of Activity: 'ForEachActivity' does not evaluate to the expected type: 'list'." ) + + +def test_when_evaluate_child_activities_then_falsy_items_are_passed_as_item() -> None: + # Arrange + test_framework = TestFramework(TestFrameworkType.Fabric) + for_each_activity = ForEachActivity( + name="ForEachActivity", + typeProperties={ + "items": DataFactoryElement("@range(0, 3)"), + }, + activities=[ + SetVariableActivity( + name="setVariable", + typeProperties={ + "variableName": "variable", + "value": DataFactoryElement("@item()"), + }, + depends_on=[], + ), + ], + depends_on=[], + ) + state = PipelineRunState( + variables=[ + PipelineRunVariable(name="variable", default_value=0), + ], + ) + + # Act + activities = test_framework.evaluate_activity(for_each_activity, state) + + # Assert + items = [activity.type_properties["value"].result for activity in activities] + assert items == [0, 1, 2]