Coverage for tests / test_tutorial / test_one / test_tutorial005.py: 100%

21 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-01-06 21:09 +0000

1import importlib 1abcdefghi

2from types import ModuleType 1abcdefghi

3 

4import pytest 1abcdefghi

5from sqlalchemy.exc import NoResultFound 1abcdefghi

6from sqlmodel import Session, create_engine, delete 1abcdefghi

7 

8from ...conftest import PrintMock, needs_py310 1abcdefghi

9 

10 

11@pytest.fixture( 1abcdefghi

12 name="mod", 

13 params=[ 

14 pytest.param("tutorial005_py39"), 

15 pytest.param("tutorial005_py310", marks=needs_py310), 

16 ], 

17) 

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

19 mod = importlib.import_module(f"docs_src.tutorial.one.{request.param}") 1abcdefghi

20 mod.sqlite_url = "sqlite://" 1abcdefghi

21 mod.engine = create_engine(mod.sqlite_url) 1abcdefghi

22 return mod 1abcdefghi

23 

24 

25def test_tutorial(print_mock: PrintMock, mod: ModuleType): 1abcdefghi

26 with pytest.raises(NoResultFound): 1jklmnopqr

27 mod.main() 1jklmnopqr

28 with Session(mod.engine) as session: 1jklmnopqr

29 # TODO: create delete() function 

30 # TODO: add overloads for .exec() with delete object 

31 session.exec(delete(mod.Hero)) 1jklmnopqr

32 session.add(mod.Hero(name="Test Hero", secret_name="Secret Test Hero", age=24)) 1jklmnopqr

33 session.commit() 1jklmnopqr

34 

35 mod.select_heroes() 1jklmnopqr

36 assert print_mock.calls == [ 1jklmnopqr

37 [ 

38 "Hero:", 

39 { 

40 "id": 1, 

41 "name": "Test Hero", 

42 "secret_name": "Secret Test Hero", 

43 "age": 24, 

44 }, 

45 ] 

46 ]