Skip to content

Commit c38fce0

Browse files
committed
fix: full tests
1 parent 5d80b34 commit c38fce0

File tree

1 file changed

+101
-54
lines changed

1 file changed

+101
-54
lines changed

tests/serializers/test_any.py

Lines changed: 101 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from enum import Enum
1010
from math import inf, isinf, isnan, nan
1111
from pathlib import Path
12-
from typing import ClassVar, Literal
12+
from typing import ClassVar
1313

1414
import pytest
1515
from dirty_equals import HasRepr, IsList
@@ -177,85 +177,132 @@ def test_any_with_timedelta_serializer():
177177
]
178178

179179

180-
@pytest.mark.parametrize('mode', ['float', 'seconds_float'])
181-
def test_any_config_timedelta_float(mode: Literal['float', 'seconds_float']):
182-
s = SchemaSerializer(core_schema.any_schema(), config={'ser_json_timedelta': mode})
183-
h2 = timedelta(hours=2)
184-
assert s.to_python(h2) == h2
185-
assert s.to_python(h2, mode='json') == 7200.0
186-
assert s.to_json(h2) == b'7200.0'
187-
188-
assert s.to_python({h2: 'foo'}) == {h2: 'foo'}
189-
assert s.to_python({h2: 'foo'}, mode='json') == {'7200': 'foo'}
190-
assert s.to_json({h2: 'foo'}) == b'{"7200":"foo"}'
191-
192-
193-
@pytest.mark.parametrize('mode', ['float', 'seconds_float'])
194-
def test_any_config_timedelta_float_faction(mode):
195-
s = SchemaSerializer(core_schema.any_schema(), config={'ser_json_timedelta': mode})
196-
one_half_s = timedelta(seconds=1.5)
197-
assert s.to_python(one_half_s) == one_half_s
198-
assert s.to_python(one_half_s, mode='json') == 1.5
199-
assert s.to_json(one_half_s) == b'1.5'
200-
201-
assert s.to_python({one_half_s: 'foo'}) == {one_half_s: 'foo'}
202-
assert s.to_python({one_half_s: 'foo'}, mode='json') == {'1.5': 'foo'}
203-
assert s.to_json({one_half_s: 'foo'}) == b'{"1.5":"foo"}'
204-
205-
206-
@pytest.mark.parametrize('mode', ['float', 'seconds_float'])
207-
def test_any_config_timedelta_float_negative(mode):
208-
s = SchemaSerializer(core_schema.any_schema(), config={'ser_json_timedelta': mode})
209-
one_half_s = timedelta(seconds=-1.5)
210-
assert s.to_python(one_half_s) == one_half_s
211-
assert s.to_python(one_half_s, mode='json') == -1.5
212-
assert s.to_json(one_half_s) == b'-1.5'
213-
214-
assert s.to_python({one_half_s: 'foo'}) == {one_half_s: 'foo'}
215-
assert s.to_python({one_half_s: 'foo'}, mode='json') == {'-1.5': 'foo'}
216-
assert s.to_json({one_half_s: 'foo'}) == b'{"-1.5":"foo"}'
217-
218-
219180
@pytest.mark.parametrize(
220-
'td,expected_to_python,expected_to_json,expected_to_python_dict,expected_to_json_dict',
181+
'td,expected_to_python,expected_to_json,expected_to_python_dict,expected_to_json_dict,mode',
221182
[
222-
(timedelta(hours=2), 7200000.0, b'7200000.0', {'7200000': 'foo'}, b'{"7200000":"foo"}'),
223-
(timedelta(hours=-2), -7200000.0, b'-7200000.0', {'-7200000': 'foo'}, b'{"-7200000":"foo"}'),
224-
(timedelta(seconds=1.5), 1500.0, b'1500.0', {'1500': 'foo'}, b'{"1500":"foo"}'),
225-
(timedelta(seconds=-1.5), -1500.0, b'-1500.0', {'-1500': 'foo'}, b'{"-1500":"foo"}'),
226-
(timedelta(microseconds=1), 0.001, b'0.001', {'0.001': 'foo'}, b'{"0.001":"foo"}'),
183+
(timedelta(hours=2), 7200000.0, b'7200000.0', {'7200000': 'foo'}, b'{"7200000":"foo"}', 'milliseconds_float'),
184+
(
185+
timedelta(hours=-2),
186+
-7200000.0,
187+
b'-7200000.0',
188+
{'-7200000': 'foo'},
189+
b'{"-7200000":"foo"}',
190+
'milliseconds_float',
191+
),
192+
(timedelta(seconds=1.5), 1500.0, b'1500.0', {'1500': 'foo'}, b'{"1500":"foo"}', 'milliseconds_float'),
193+
(timedelta(seconds=-1.5), -1500.0, b'-1500.0', {'-1500': 'foo'}, b'{"-1500":"foo"}', 'milliseconds_float'),
194+
(timedelta(microseconds=1), 0.001, b'0.001', {'0.001': 'foo'}, b'{"0.001":"foo"}', 'milliseconds_float'),
227195
(
228196
timedelta(microseconds=-1),
229197
-0.0010000000000287557,
230198
b'-0.0010000000000287557',
231199
{'-0.0010000000000287557': 'foo'},
232200
b'{"-0.0010000000000287557":"foo"}',
201+
'milliseconds_float',
202+
),
203+
(
204+
timedelta(days=1),
205+
86400000.0,
206+
b'86400000.0',
207+
{'86400000': 'foo'},
208+
b'{"86400000":"foo"}',
209+
'milliseconds_float',
210+
),
211+
(
212+
timedelta(days=-1),
213+
-86400000.0,
214+
b'-86400000.0',
215+
{'-86400000': 'foo'},
216+
b'{"-86400000":"foo"}',
217+
'milliseconds_float',
218+
),
219+
(
220+
timedelta(days=1, seconds=1),
221+
86401000.0,
222+
b'86401000.0',
223+
{'86401000': 'foo'},
224+
b'{"86401000":"foo"}',
225+
'milliseconds_float',
226+
),
227+
(
228+
timedelta(days=-1, seconds=-1),
229+
-86401000.0,
230+
b'-86401000.0',
231+
{'-86401000': 'foo'},
232+
b'{"-86401000":"foo"}',
233+
'milliseconds_float',
234+
),
235+
(
236+
timedelta(days=1, seconds=-1),
237+
86399000.0,
238+
b'86399000.0',
239+
{'86399000': 'foo'},
240+
b'{"86399000":"foo"}',
241+
'milliseconds_float',
233242
),
234-
(timedelta(days=1), 86400000.0, b'86400000.0', {'86400000': 'foo'}, b'{"86400000":"foo"}'),
235-
(timedelta(days=-1), -86400000.0, b'-86400000.0', {'-86400000': 'foo'}, b'{"-86400000":"foo"}'),
236-
(timedelta(days=1, seconds=1), 86401000.0, b'86401000.0', {'86401000': 'foo'}, b'{"86401000":"foo"}'),
237-
(timedelta(days=-1, seconds=-1), -86401000.0, b'-86401000.0', {'-86401000': 'foo'}, b'{"-86401000":"foo"}'),
238-
(timedelta(days=1, seconds=-1), 86399000.0, b'86399000.0', {'86399000': 'foo'}, b'{"86399000":"foo"}'),
239243
(
240244
timedelta(days=1, seconds=1, microseconds=1),
241245
86401000.00099999,
242246
b'86401000.00099999',
243247
{'86401000.00099999': 'foo'},
244248
b'{"86401000.00099999":"foo"}',
249+
'milliseconds_float',
245250
),
246251
(
247252
timedelta(days=-1, seconds=-1, microseconds=-1),
248253
-86401000.00099999,
249254
b'-86401000.00099999',
250255
{'-86401000.00099999': 'foo'},
251256
b'{"-86401000.00099999":"foo"}',
257+
'milliseconds_float',
258+
),
259+
(timedelta(hours=2), 7200.0, b'7200.0', {'7200': 'foo'}, b'{"7200":"foo"}', 'seconds_float'),
260+
(timedelta(hours=-2), -7200.0, b'-7200.0', {'-7200': 'foo'}, b'{"-7200":"foo"}', 'seconds_float'),
261+
(timedelta(seconds=1.5), 1.5, b'1.5', {'1.5': 'foo'}, b'{"1.5":"foo"}', 'seconds_float'),
262+
(timedelta(seconds=-1.5), -1.5, b'-1.5', {'-1.5': 'foo'}, b'{"-1.5":"foo"}', 'seconds_float'),
263+
(timedelta(microseconds=1), 1e-6, b'1e-6', {'0.000001': 'foo'}, b'{"0.000001":"foo"}', 'seconds_float'),
264+
(
265+
timedelta(microseconds=-1),
266+
-1.0000000000287557e-6,
267+
b'-1.0000000000287557e-6',
268+
{'-0.0000010000000000287557': 'foo'},
269+
b'{"-0.0000010000000000287557":"foo"}',
270+
'seconds_float',
271+
),
272+
(timedelta(days=1), 86400.0, b'86400.0', {'86400': 'foo'}, b'{"86400":"foo"}', 'seconds_float'),
273+
(timedelta(days=-1), -86400.0, b'-86400.0', {'-86400': 'foo'}, b'{"-86400":"foo"}', 'seconds_float'),
274+
(timedelta(days=1, seconds=1), 86401.0, b'86401.0', {'86401': 'foo'}, b'{"86401":"foo"}', 'seconds_float'),
275+
(
276+
timedelta(days=-1, seconds=-1),
277+
-86401.0,
278+
b'-86401.0',
279+
{'-86401': 'foo'},
280+
b'{"-86401":"foo"}',
281+
'seconds_float',
282+
),
283+
(timedelta(days=1, seconds=-1), 86399.0, b'86399.0', {'86399': 'foo'}, b'{"86399":"foo"}', 'seconds_float'),
284+
(
285+
timedelta(days=1, seconds=1, microseconds=1),
286+
86401.000001,
287+
b'86401.000001',
288+
{'86401.000001': 'foo'},
289+
b'{"86401.000001":"foo"}',
290+
'seconds_float',
291+
),
292+
(
293+
timedelta(days=-1, seconds=-1, microseconds=-1),
294+
-86401.000001,
295+
b'-86401.000001',
296+
{'-86401.000001': 'foo'},
297+
b'{"-86401.000001":"foo"}',
298+
'seconds_float',
252299
),
253300
],
254301
)
255-
def test_any_config_timedelta_millisecond(
256-
td: timedelta, expected_to_python, expected_to_json, expected_to_python_dict, expected_to_json_dict
302+
def test_any_config_timedelta(
303+
td: timedelta, expected_to_python, expected_to_json, expected_to_python_dict, expected_to_json_dict, mode
257304
):
258-
s = SchemaSerializer(core_schema.any_schema(), config={'ser_json_timedelta': 'milliseconds_float'})
305+
s = SchemaSerializer(core_schema.any_schema(), config={'ser_json_timedelta': mode})
259306
assert s.to_python(td) == td
260307
assert s.to_python(td, mode='json') == expected_to_python
261308
assert s.to_json(td) == expected_to_json

0 commit comments

Comments
 (0)