diff --git a/src/graphon/utils/condition/processor.py b/src/graphon/utils/condition/processor.py index 62128cf2..ded71d83 100644 --- a/src/graphon/utils/condition/processor.py +++ b/src/graphon/utils/condition/processor.py @@ -499,7 +499,7 @@ def _assert_not_null(*, value: Any) -> bool: def _assert_in(*, value: Any, expected: Any) -> bool: - if not value: + if value is None: return False match expected: @@ -512,7 +512,7 @@ def _assert_in(*, value: Any, expected: Any) -> bool: def _assert_not_in(*, value: Any, expected: Any) -> bool: - if not value: + if value is None: return True match expected: diff --git a/tests/utils/test_condition_processor.py b/tests/utils/test_condition_processor.py index 5e7a513f..34266e6e 100644 --- a/tests/utils/test_condition_processor.py +++ b/tests/utils/test_condition_processor.py @@ -125,6 +125,38 @@ def test_process_conditions_contains_supports_string_and_list_values() -> None: assert list_result.final_result is True +def test_process_conditions_in_matches_falsy_value_present_in_list() -> None: + condition_processor = ConditionProcessor() + variable_pool = VariablePool() + variable_pool.add(["test_node_id", "choice"], "") + + in_result = condition_processor.process_conditions( + variable_pool=variable_pool, + conditions=[ + Condition( + variable_selector=["test_node_id", "choice"], + comparison_operator="in", + value=["", "a", "b"], + ), + ], + operator="and", + ) + not_in_result = condition_processor.process_conditions( + variable_pool=variable_pool, + conditions=[ + Condition( + variable_selector=["test_node_id", "choice"], + comparison_operator="not in", + value=["", "a", "b"], + ), + ], + operator="and", + ) + + assert in_result.final_result is True + assert not_in_result.final_result is False + + def test_process_conditions_resolves_templates_from_read_only_variable_pool() -> None: condition_processor = ConditionProcessor() variable_pool = VariablePool()