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

1import importlib 1abcdefghi

2from datetime import datetime, timedelta, timezone 1abcdefghi

3from types import ModuleType 1abcdefghi

4 

5import pytest 1abcdefghi

6from sqlalchemy import Engine 1abcdefghi

7from sqlmodel import SQLModel 1abcdefghi

8 

9from ...conftest import PrintMock, needs_py311 1abcdefghi

10 

11 

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

23 

24 

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

29 

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 ] 

44 

45 table = SQLModel.metadata.tables["event"] 1jklmnopqr

46 assert table.c.created_at.type.timezone is True 1jklmnopqr