import datetime
from decimal import Decimal

import pytest

from personal_data.csv_import import csv_str_to_value

PARSE_MAPPINGS = [
    (
        '2024-04-28 21:35:40+00:00',
        datetime.datetime(2024, 4, 28, 21, 35, 40, tzinfo=datetime.UTC),
    ),
    (
        '2024-07-06 19:30:11+02:00',
        datetime.datetime(
            2024,
            7,
            6,
            19,
            30,
            11,
            tzinfo=datetime.timezone(datetime.timedelta(seconds=7200)),
        ),
    ),
    (
        '2023-10-21 11:43:27+02:00',
        datetime.datetime(
            2023,
            10,
            21,
            11,
            43,
            27,
            tzinfo=datetime.timezone(datetime.timedelta(seconds=7200)),
        ),
    ),
    (
        '0003791e9f5f3691b8bbbe0d12a7ae9c3f2e89db38',
        '0003791e9f5f3691b8bbbe0d12a7ae9c3f2e89db38',
    ),
    ('', None),
    ('0', Decimal(0)),
    ('200', Decimal(200)),
    ('52.5474', Decimal('52.5474')),
    ('true', True),
    ('True', True),
    ('TRUE', True),
    ('false', False),
    ('False', False),
    ('FALSE', False),
    ('none', None),
    ('None', None),
    ('NONE', None),
]


@pytest.mark.parametrize(('text', 'parsed'), PARSE_MAPPINGS)
def test_csv_str_to_value(text: str, parsed: object):
    assert csv_str_to_value(text) == parsed, text