"""Tests for account.utils.serialization.""" import datetime import pytest from account.utils.serialization import serialize_event, serialize_event_value @pytest.mark.parametrize( 'value, expected', [ pytest.param( datetime.datetime(2024, 6, 15, 12, 0, 0), '2024-06-15T12:00:00', id='datetime to ISO string', ), pytest.param( datetime.datetime(2024, 1, 1, 0, 0, 0, 123456), '2024-01-01T00:00:00.123456', id='datetime with microseconds', ), pytest.param( datetime.date(2026, 1, 15), '2026-01-15', id='date to ISO string', ), pytest.param(42, 42, id='int passthrough'), pytest.param('hello', 'hello', id='str passthrough'), pytest.param(None, None, id='None passthrough'), pytest.param(3.14, 3.14, id='float passthrough'), pytest.param(True, True, id='bool passthrough'), ], ) def test_serialize_event_value(value, expected): assert serialize_event_value(value) == expected def test_serialize_event_converts_datetime_values(): date = datetime.datetime(2024, 6, 15, 12, 0, 0) event = {'date_deleted': date, 'name': 'Test', 'vendor_id': 1} result = serialize_event(event) assert result == {'date_deleted': '2024-06-15T12:00:00', 'name': 'Test', 'vendor_id': 1} def test_serialize_event_passthrough_no_dates(): event = {'vendor_id': 42, 'name': 'Label', 'active': True} result = serialize_event(event) assert result == event def test_serialize_event_does_not_mutate_input(): date = datetime.datetime(2024, 3, 10, 9, 30, 0) event = {'date_created': date} serialize_event(event) assert event['date_created'] is date def test_serialize_event_multiple_datetime_fields(): created = datetime.datetime(2024, 1, 1, 0, 0, 0) deleted = datetime.datetime(2024, 6, 15, 12, 0, 0) event = {'date_created': created, 'date_deleted': deleted, 'name': 'Test'} result = serialize_event(event) assert result['date_created'] == '2024-01-01T00:00:00' assert result['date_deleted'] == '2024-06-15T12:00:00' assert result['name'] == 'Test'