| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- #!/usr/bin/env python3
- """
- Test script to verify boolean support in VariableAssigner node
- """
-
- import sys
- import os
-
- # Add the api directory to the Python path
- sys.path.insert(0, os.path.join(os.path.dirname(__file__), "api"))
-
- from core.variables import SegmentType
- from core.workflow.nodes.variable_assigner.v2.helpers import (
- is_operation_supported,
- is_constant_input_supported,
- is_input_value_valid,
- )
- from core.workflow.nodes.variable_assigner.v2.enums import Operation
- from core.workflow.nodes.variable_assigner.v2.constants import EMPTY_VALUE_MAPPING
-
-
- def test_boolean_operation_support():
- """Test that boolean types support the correct operations"""
- print("Testing boolean operation support...")
-
- # Boolean should support SET, OVER_WRITE, and CLEAR
- assert is_operation_supported(
- variable_type=SegmentType.BOOLEAN, operation=Operation.SET
- )
- assert is_operation_supported(
- variable_type=SegmentType.BOOLEAN, operation=Operation.OVER_WRITE
- )
- assert is_operation_supported(
- variable_type=SegmentType.BOOLEAN, operation=Operation.CLEAR
- )
-
- # Boolean should NOT support arithmetic operations
- assert not is_operation_supported(
- variable_type=SegmentType.BOOLEAN, operation=Operation.ADD
- )
- assert not is_operation_supported(
- variable_type=SegmentType.BOOLEAN, operation=Operation.SUBTRACT
- )
- assert not is_operation_supported(
- variable_type=SegmentType.BOOLEAN, operation=Operation.MULTIPLY
- )
- assert not is_operation_supported(
- variable_type=SegmentType.BOOLEAN, operation=Operation.DIVIDE
- )
-
- # Boolean should NOT support array operations
- assert not is_operation_supported(
- variable_type=SegmentType.BOOLEAN, operation=Operation.APPEND
- )
- assert not is_operation_supported(
- variable_type=SegmentType.BOOLEAN, operation=Operation.EXTEND
- )
-
- print("✓ Boolean operation support tests passed")
-
-
- def test_array_boolean_operation_support():
- """Test that array boolean types support the correct operations"""
- print("Testing array boolean operation support...")
-
- # Array boolean should support APPEND, EXTEND, SET, OVER_WRITE, CLEAR
- assert is_operation_supported(
- variable_type=SegmentType.ARRAY_BOOLEAN, operation=Operation.APPEND
- )
- assert is_operation_supported(
- variable_type=SegmentType.ARRAY_BOOLEAN, operation=Operation.EXTEND
- )
- assert is_operation_supported(
- variable_type=SegmentType.ARRAY_BOOLEAN, operation=Operation.OVER_WRITE
- )
- assert is_operation_supported(
- variable_type=SegmentType.ARRAY_BOOLEAN, operation=Operation.CLEAR
- )
- assert is_operation_supported(
- variable_type=SegmentType.ARRAY_BOOLEAN, operation=Operation.REMOVE_FIRST
- )
- assert is_operation_supported(
- variable_type=SegmentType.ARRAY_BOOLEAN, operation=Operation.REMOVE_LAST
- )
-
- # Array boolean should NOT support arithmetic operations
- assert not is_operation_supported(
- variable_type=SegmentType.ARRAY_BOOLEAN, operation=Operation.ADD
- )
- assert not is_operation_supported(
- variable_type=SegmentType.ARRAY_BOOLEAN, operation=Operation.SUBTRACT
- )
- assert not is_operation_supported(
- variable_type=SegmentType.ARRAY_BOOLEAN, operation=Operation.MULTIPLY
- )
- assert not is_operation_supported(
- variable_type=SegmentType.ARRAY_BOOLEAN, operation=Operation.DIVIDE
- )
-
- print("✓ Array boolean operation support tests passed")
-
-
- def test_boolean_constant_input_support():
- """Test that boolean types support constant input for correct operations"""
- print("Testing boolean constant input support...")
-
- # Boolean should support constant input for SET and OVER_WRITE
- assert is_constant_input_supported(
- variable_type=SegmentType.BOOLEAN, operation=Operation.SET
- )
- assert is_constant_input_supported(
- variable_type=SegmentType.BOOLEAN, operation=Operation.OVER_WRITE
- )
-
- # Boolean should NOT support constant input for arithmetic operations
- assert not is_constant_input_supported(
- variable_type=SegmentType.BOOLEAN, operation=Operation.ADD
- )
-
- print("✓ Boolean constant input support tests passed")
-
-
- def test_boolean_input_validation():
- """Test that boolean input validation works correctly"""
- print("Testing boolean input validation...")
-
- # Boolean values should be valid for boolean type
- assert is_input_value_valid(
- variable_type=SegmentType.BOOLEAN, operation=Operation.SET, value=True
- )
- assert is_input_value_valid(
- variable_type=SegmentType.BOOLEAN, operation=Operation.SET, value=False
- )
- assert is_input_value_valid(
- variable_type=SegmentType.BOOLEAN, operation=Operation.OVER_WRITE, value=True
- )
-
- # Non-boolean values should be invalid for boolean type
- assert not is_input_value_valid(
- variable_type=SegmentType.BOOLEAN, operation=Operation.SET, value="true"
- )
- assert not is_input_value_valid(
- variable_type=SegmentType.BOOLEAN, operation=Operation.SET, value=1
- )
- assert not is_input_value_valid(
- variable_type=SegmentType.BOOLEAN, operation=Operation.SET, value=0
- )
-
- print("✓ Boolean input validation tests passed")
-
-
- def test_array_boolean_input_validation():
- """Test that array boolean input validation works correctly"""
- print("Testing array boolean input validation...")
-
- # Boolean values should be valid for array boolean append
- assert is_input_value_valid(
- variable_type=SegmentType.ARRAY_BOOLEAN, operation=Operation.APPEND, value=True
- )
- assert is_input_value_valid(
- variable_type=SegmentType.ARRAY_BOOLEAN, operation=Operation.APPEND, value=False
- )
-
- # Boolean arrays should be valid for extend/overwrite
- assert is_input_value_valid(
- variable_type=SegmentType.ARRAY_BOOLEAN,
- operation=Operation.EXTEND,
- value=[True, False, True],
- )
- assert is_input_value_valid(
- variable_type=SegmentType.ARRAY_BOOLEAN,
- operation=Operation.OVER_WRITE,
- value=[False, False],
- )
-
- # Non-boolean values should be invalid
- assert not is_input_value_valid(
- variable_type=SegmentType.ARRAY_BOOLEAN,
- operation=Operation.APPEND,
- value="true",
- )
- assert not is_input_value_valid(
- variable_type=SegmentType.ARRAY_BOOLEAN,
- operation=Operation.EXTEND,
- value=[True, "false"],
- )
-
- print("✓ Array boolean input validation tests passed")
-
-
- def test_empty_value_mapping():
- """Test that empty value mapping includes boolean types"""
- print("Testing empty value mapping...")
-
- # Check that boolean types have correct empty values
- assert SegmentType.BOOLEAN in EMPTY_VALUE_MAPPING
- assert EMPTY_VALUE_MAPPING[SegmentType.BOOLEAN] is False
-
- assert SegmentType.ARRAY_BOOLEAN in EMPTY_VALUE_MAPPING
- assert EMPTY_VALUE_MAPPING[SegmentType.ARRAY_BOOLEAN] == []
-
- print("✓ Empty value mapping tests passed")
-
-
- def main():
- """Run all tests"""
- print("Running VariableAssigner boolean support tests...\n")
-
- try:
- test_boolean_operation_support()
- test_array_boolean_operation_support()
- test_boolean_constant_input_support()
- test_boolean_input_validation()
- test_array_boolean_input_validation()
- test_empty_value_mapping()
-
- print(
- "\n🎉 All tests passed! Boolean support has been successfully added to VariableAssigner."
- )
-
- except Exception as e:
- print(f"\n❌ Test failed: {e}")
- import traceback
-
- traceback.print_exc()
- sys.exit(1)
-
-
- if __name__ == "__main__":
- main()
|