5 from unittest.mock import patch
8 from sqlmodel import create_engine, SQLModel
10 from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock
13 expected_calls_tutorial005 = [
18 "secret_name": "Dive Wilson",
28 "secret_name": "Tommy Sharp",
38 "secret_name": "Pedro Parqueador",
48 "secret_name": "Pedro Parqueador",
56 {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
59 "Team with removed heroes:", # This print is specific to tutorial005.py's main()
60 {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
64 {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
67 "Black Lion has no team:",
70 "secret_name": "Trevor Challa",
77 "Princess Sure-E has no team:",
79 "name": "Princess Sure-E",
80 "secret_name": "Sure-E",
93 pytest.param("tutorial005_py39", marks=needs_py39),
94 pytest.param("tutorial005_py310", marks=needs_py310),
97 def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any):
98 module_name = request.param
99 full_module_name = f"docs_src.tutorial.relationship_attributes.cascade_delete_relationships.{module_name}"
101 if full_module_name in sys.modules:
102 mod = importlib.reload(sys.modules[full_module_name])
104 mod = importlib.import_module(full_module_name)
106 mod.sqlite_url = "sqlite://"
107 mod.engine = create_engine(mod.sqlite_url)
109 if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables):
111 elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"):
112 mod.SQLModel.metadata.create_all(mod.engine)
117 def test_tutorial(module: types.ModuleType, print_mock: PrintMock, clear_sqlmodel: Any):
118 with patch("builtins.print", new=get_testing_print_function(print_mock.calls)):
121 assert print_mock.calls == expected_calls_tutorial005