import pytest from ingestor.converters import ConversionError, to_typed_value @pytest.mark.parametrize('raw,expected', [ ('false', False), ('False', False), ('0', False), ('no', False), ('off', False), ('', False), ('true', True), ('1', True), (True, True), ]) def test_bool_from_json_string(raw, expected): assert to_typed_value(raw, 'boolean') is expected def test_float_and_int(): assert to_typed_value('42.5', 'float') == 42.5 assert to_typed_value('7', 'int') == 7 @pytest.mark.parametrize('raw,dtype', [ (None, 'int'), ('abc', 'float'), ('123.123', 'int'), (None, 'float'), ]) def test_invalid_raises_conversion_error(raw, dtype): with pytest.raises(ConversionError): to_typed_value(raw, dtype) @pytest.mark.parametrize('dtype', [None, 123]) def test_non_string_data_type_raises_conversion_error(dtype): # contract: never a bare AttributeError/TypeError, always ConversionError with pytest.raises(ConversionError): to_typed_value('5', dtype)