Coverage for tests / test_advanced / test_datetime / test_tutorial001.py: 100%
27 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-11-09 00:02 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-11-09 00:02 +0000
1import importlib 1abcdefghi
2from datetime import datetime, timedelta, timezone 1abcdefghi
3from types import ModuleType 1abcdefghi
5import pytest 1abcdefghi
6from sqlalchemy import Engine 1abcdefghi
7from sqlmodel import SQLModel 1abcdefghi
9from ...conftest import PrintMock, needs_py311 1abcdefghi
12@pytest.fixture( 1abcdefghi
13 name="mod",
14 params=[
15 pytest.param("tutorial001_py310"),
16 pytest.param("tutorial001_py311", marks=needs_py311),
17 ],
18)
19def get_module(request: pytest.FixtureRequest, database_engine: Engine) -> ModuleType: 1abcdefghi
20 mod = importlib.import_module(f"docs_src.advanced.datetime.{request.param}") 1abcdefghi
21 mod.engine = database_engine 1abcdefghi
22 return mod 1abcdefghi
25def test_tutorial(print_mock: PrintMock, mod: ModuleType) -> None: 1abcdefghi
26 before = datetime.now(timezone.utc) 1jklmnopqr
27 mod.main() 1jklmnopqr
28 after = datetime.now(timezone.utc) 1jklmnopqr
30 created_at = print_mock.calls[0][1]["created_at"] 1jklmnopqr
31 assert created_at.tzinfo is timezone.utc 1jklmnopqr
32 assert before <= created_at <= after 1jklmnopqr
33 stored_created_at = print_mock.calls[1][1]["created_at"] 1jklmnopqr
34 assert stored_created_at.tzinfo is timezone.utc 1jklmnopqr
35 if mod.engine.dialect.name in {"mysql", "mariadb"}: 1jklmnopqr
36 # The default DATETIME columns store whole seconds.
37 assert abs(stored_created_at - created_at) < timedelta(seconds=1) 1jl
38 else:
39 assert stored_created_at == created_at 1kmnopqr
40 assert print_mock.calls == [ 1jklmnopqr
41 ["Event:", {"id": None, "created_at": created_at}],
42 ["Event from database:", {"id": 1, "created_at": stored_created_at}],
43 ]
45 table = SQLModel.metadata.tables["event"] 1jklmnopqr
46 assert table.c.created_at.type.timezone is True 1jklmnopqr