unit tests for typecast functions in django db backends util ticket 14453 unit tests for typecast functions in django db backends util ticket 14453
import datetime
import unittest

from django.db.backends import utils as typecasts

TEST_CASES = {
    "typecast_date": (
        ("", None),
        (None, None),
        ("2005-08-11", datetime.date(2005, 8, 11)),
        ("1990-01-01", datetime.date(1990, 1, 1)),
    ),
    "typecast_time": (
        ("", None),
        (None, None),
        ("0:00:00", datetime.time(0, 0)),
        ("0:30:00", datetime.time(0, 30)),
        ("8:50:00", datetime.time(8, 50)),
        ("08:50:00", datetime.time(8, 50)),
        ("12:00:00", datetime.time(12, 00)),
        ("12:30:00", datetime.time(12, 30)),
        ("13:00:00", datetime.time(13, 00)),
        ("23:59:00", datetime.time(23, 59)),
        ("00:00:12", datetime.time(0, 0, 12)),
        ("00:00:12.5", datetime.time(0, 0, 12, 500000)),
        ("7:22:13.312", datetime.time(7, 22, 13, 312000)),
        ("12:45:30.126631", datetime.time(12, 45, 30, 126631)),
        ("12:45:30.126630", datetime.time(12, 45, 30, 126630)),
        ("12:45:30.123456789", datetime.time(12, 45, 30, 123456)),
    ),
    "typecast_timestamp": (
        ("", None),
        (None, None),
        ("2005-08-11 0:00:00", datetime.datetime(2005, 8, 11)),
        ("2005-08-11 0:30:00", datetime.datetime(2005, 8, 11, 0, 30)),
        ("2005-08-11 8:50:30", datetime.datetime(2005, 8, 11, 8, 50, 30)),
        ("2005-08-11 8:50:30.123", datetime.datetime(2005, 8, 11, 8, 50, 30, 123000)),
        ("2005-08-11 8:50:30.9", datetime.datetime(2005, 8, 11, 8, 50, 30, 900000)),
        (
            "2005-08-11 8:50:30.312-05",
            datetime.datetime(2005, 8, 11, 8, 50, 30, 312000),
        ),
        (
            "2005-08-11 8:50:30.312+02",
            datetime.datetime(2005, 8, 11, 8, 50, 30, 312000),
        ),
        
        (
            "2010-10-12 15:29:22.063202",
            datetime.datetime(2010, 10, 12, 15, 29, 22, 63202),
        ),
        (
            "2010-10-12 15:29:22.063202-03",
            datetime.datetime(2010, 10, 12, 15, 29, 22, 63202),
        ),
        (
            "2010-10-12 15:29:22.063202+04",
            datetime.datetime(2010, 10, 12, 15, 29, 22, 63202),
        ),
        (
            "2010-10-12 15:29:22.0632021",
            datetime.datetime(2010, 10, 12, 15, 29, 22, 63202),
        ),
        (
            "2010-10-12 15:29:22.0632029",
            datetime.datetime(2010, 10, 12, 15, 29, 22, 63202),
        ),
    ),
}


class DBTypeCasts(unittest.TestCase):
    def test_typeCasts(self):
        for k, v in TEST_CASES.items():
            for inpt, expected in v:
                with self.subTest(k=k, inpt=inpt):
                    got = getattr(typecasts, k)(inpt)
                    self.assertEqual(
                        got,
                        expected,
                        "In %s: %r doesn't match %r. Got %r instead."
                        % (k, inpt, expected, got),
                    )