Coverage for tests / test_tutorial / test_indexes / test_tutorial002.py: 100%
23 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-01-06 21:09 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-01-06 21:09 +0000
1import importlib 1abcdefghi
2from types import ModuleType 1abcdefghi
4import pytest 1abcdefghi
5from sqlalchemy import inspect 1abcdefghi
6from sqlalchemy.engine.reflection import Inspector 1abcdefghi
7from sqlmodel import create_engine 1abcdefghi
9from ...conftest import PrintMock, needs_py310 1abcdefghi
12@pytest.fixture( 1abcdefghi
13 name="mod",
14 params=[
15 pytest.param("tutorial002_py39"),
16 pytest.param("tutorial002_py310", marks=needs_py310),
17 ],
18)
19def get_module(request: pytest.FixtureRequest) -> ModuleType: 1abcdefghi
20 mod = importlib.import_module(f"docs_src.tutorial.indexes.{request.param}") 1abcdefghi
21 mod.sqlite_url = "sqlite://" 1abcdefghi
22 mod.engine = create_engine(mod.sqlite_url) 1abcdefghi
23 return mod 1abcdefghi
26def test_tutorial(print_mock: PrintMock, mod: ModuleType): 1abcdefghi
27 mod.main() 1jklmnopqr
28 assert print_mock.calls == [ 1jklmnopqr
29 [{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}],
30 [{"name": "Black Lion", "secret_name": "Trevor Challa", "age": 35, "id": 5}],
31 ]
33 insp: Inspector = inspect(mod.engine) 1jklmnopqr
34 indexes = insp.get_indexes(str(mod.Hero.__tablename__)) 1jklmnopqr
35 expected_indexes = [ 1jklmnopqr
36 {
37 "name": "ix_hero_name",
38 "dialect_options": {},
39 "column_names": ["name"],
40 "unique": 0,
41 },
42 {
43 "name": "ix_hero_age",
44 "dialect_options": {},
45 "column_names": ["age"],
46 "unique": 0,
47 },
48 ]
49 for index in expected_indexes: 1jklmnopqr
50 assert index in indexes, "This expected index should be in the indexes in DB" 1jklmnopqr
51 # Now that this index was checked, remove it from the list of indexes
52 indexes.pop(indexes.index(index)) 1jklmnopqr
53 assert len(indexes) == 0, "The database should only have the expected indexes" 1jklmnopqr