1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
import pytest
from fastjsonschema import JsonSchemaValueException
exc = JsonSchemaValueException('data must be one of [1, 2, \'a\', "b\'c"]', value='{data}', name='data', definition='{definition}', rule='enum')
@pytest.mark.parametrize('value, expected', [
(1, 1),
(2, 2),
(12, exc),
('a', 'a'),
('aa', exc),
])
def test_enum(asserter, value, expected):
asserter({'enum': [1, 2, 'a', "b'c"]}, value, expected)
exc = JsonSchemaValueException('data must be string or number', value='{data}', name='data', definition='{definition}', rule='type')
@pytest.mark.parametrize('value, expected', [
(0, 0),
(None, exc),
(True, exc),
('abc', 'abc'),
([], exc),
({}, exc),
])
def test_types(asserter, value, expected):
asserter({'type': ['string', 'number']}, value, expected)
@pytest.mark.parametrize('value, expected', [
('qwert', 'qwert'),
('qwertz', JsonSchemaValueException('data must be shorter than or equal to 5 characters', value='{data}', name='data', definition={'maxLength': 5}, rule='maxLength')),
])
def test_all_of(asserter, value, expected):
asserter({'allOf': [
{'type': 'string'},
{'maxLength': 5},
]}, value, expected)
exc = JsonSchemaValueException('data cannot be validated by any definition', value='{data}', name='data', definition='{definition}', rule='anyOf')
@pytest.mark.parametrize('value, expected', [
(0, 0),
(None, exc),
(True, exc),
('abc', 'abc'),
([], exc),
({}, exc),
])
def test_any_of(asserter, value, expected):
asserter({'anyOf': [
{'type': 'string'},
{'type': 'number'},
]}, value, expected)
def exc(n):
suffix = " ({} matches found)".format(n)
return JsonSchemaValueException('data must be valid exactly by one definition' + suffix, value='{data}', name='data', definition='{definition}', rule='oneOf')
@pytest.mark.parametrize('value, expected', [
(0, exc(2)),
(2, exc(0)),
(9, 9),
(10, 10),
(15, exc(2)),
])
def test_one_of(asserter, value, expected):
asserter({'oneOf': [
{'type': 'number', 'multipleOf': 5},
{'type': 'number', 'multipleOf': 3},
]}, value, expected)
@pytest.mark.parametrize('value, expected', [
(0, exc(2)),
(2, exc(0)),
(9, 9),
(10, 10),
(15, exc(2)),
])
def test_one_of_factorized(asserter, value, expected):
asserter({
'type': 'number',
'oneOf': [
{'multipleOf': 5},
{'multipleOf': 3},
],
}, value, expected)
@pytest.mark.parametrize('value, expected', [
(0, JsonSchemaValueException('data must NOT match a disallowed definition', value='{data}', name='data', definition='{definition}', rule='not')),
(True, True),
('abc', 'abc'),
([], []),
({}, {}),
])
def test_not(asserter, value, expected):
asserter({'not': {'type': 'number'}}, value, expected)
|