"""Tests for core.json module.""" import pytest import unittest from datetime import date, datetime, timezone from src.utils.json import serialize_value @pytest.mark.parametrize( "test_input,expected_output", ( (None, None), (1, 1), (3.14, 3.14), (True, True), ("Hello world", "Hello world"), (date(2019, 7, 1), "2019-07-01"), (datetime(2018, 12, 31, 1, 25, 30, 123456), "2018-12-31T01:25:30.123456"), (datetime(1950, 3, 10, 16, 10, 30, tzinfo=timezone.utc), "1950-03-10T16:10:30+00:00"), (unittest, str(unittest)), ((1, "a", None), "(1, 'a', None)"), ([], []), ({}, {}), ( [None, 0, 0.5, False, "Hello", datetime(2019, 1, 3), serialize_value], [None, 0, 0.5, False, "Hello", "2019-01-03T00:00:00", str(serialize_value)], ), ( {2: -3, -0.01: 2.71828, True: False, "a": "b", None: None}, {"2": -3, "-0.01": 2.71828, "True": False, "a": "b", "None": None}, ), ( {unittest: serialize_value, datetime(1997, 11, 4, 5, 0): datetime(2019, 2, 28, 22, 5, 1)}, {str(unittest): str(serialize_value), "1997-11-04T05:00:00": "2019-02-28T22:05:01"}, ), ), ) def test_simple(test_input, expected_output): assert serialize_value(test_input) == expected_output def test_datefmt(): """Test passing custom datetime format.""" dt = datetime(2019, 7, 8, 14, 30, 15, 654321, tzinfo=timezone.utc) fmt = "%a, %d %b %Y %H:%M:%S" fmt_dt = "Mon, 08 Jul 2019 14:30:15" assert serialize_value(dt), "2019-07-08T14:30:15.654321+00:00" assert serialize_value(dt, datefmt=fmt), fmt_dt assert serialize_value([1, dt], fmt), [1, fmt_dt] assert serialize_value({"a": "b", "dt": dt}, fmt), {"a": "b", "dt": fmt_dt} assert serialize_value({dt: "Test date", 1: 2}, fmt), {fmt_dt: "Test date", "1": 2}