48 lines
1.1 KiB
Python
48 lines
1.1 KiB
Python
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)
|