Coverage for tests / test_advanced / test_datetime / test_tutorial002.py: 100%

20 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-11-09 00:02 +0000

1import importlib 1abcdefghi

2from datetime import datetime, timezone 1abcdefghi

3from types import ModuleType 1abcdefghi

4 

5import pytest 1abcdefghi

6from pydantic import ValidationError 1abcdefghi

7from sqlmodel import SQLModel 1abcdefghi

8 

9from ...conftest import PrintMock 1abcdefghi

10 

11 

12@pytest.fixture( 1abcdefghi

13 name="mod", 

14 params=[ 

15 pytest.param("tutorial002_py310"), 

16 ], 

17) 

18def get_module(request: pytest.FixtureRequest) -> ModuleType: 1abcdefghi

19 return importlib.import_module(f"docs_src.advanced.datetime.{request.param}") 1abcdefghi

20 

21 

22def test_tutorial(print_mock: PrintMock, mod: ModuleType) -> None: 1abcdefghi

23 mod.main() 1jklmnopqr

24 assert print_mock.calls == [ 1jklmnopqr

25 [ 

26 "Event:", 

27 { 

28 "id": None, 

29 "starts_at": datetime(2026, 1, 1, 12, tzinfo=timezone.utc), 

30 "local_time": datetime(2026, 1, 1, 12), 

31 }, 

32 ] 

33 ] 

34 

35 with pytest.raises(ValidationError) as exc_info: 1jklmnopqr

36 mod.Event.model_validate( 1jklmnopqr

37 { 

38 "starts_at": "2026-01-01T12:00:00", 

39 "local_time": "2026-01-01T12:00:00Z", 

40 } 

41 ) 

42 errors = exc_info.value.errors() 1jklmnopqr

43 assert [(error["loc"], error["type"]) for error in errors] == [ 1jklmnopqr

44 (("starts_at",), "timezone_aware"), 

45 (("local_time",), "timezone_naive"), 

46 ] 

47 

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

49 assert table.c.starts_at.type.timezone is True 1jklmnopqr

50 assert table.c.local_time.type.timezone is False 1jklmnopqr