From: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 20 Jun 2025 13:15:46 +0000 (+0000) Subject: 🎨 [pre-commit.ci] Auto format from pre-commit.com hooks X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2Fconsolidate-tests;p=thirdparty%2Ffastapi%2Fsqlmodel.git 🎨 [pre-commit.ci] Auto format from pre-commit.com hooks --- diff --git a/tests/test_advanced/test_decimal/test_tutorial001.py b/tests/test_advanced/test_decimal/test_tutorial001.py index ee5bebc4..db15d709 100644 --- a/tests/test_advanced/test_decimal/test_tutorial001.py +++ b/tests/test_advanced/test_decimal/test_tutorial001.py @@ -1,12 +1,11 @@ import importlib import types from decimal import Decimal -from unittest.mock import MagicMock # Keep MagicMock for type hint, though not strictly necessary for runtime import pytest from sqlmodel import create_engine -from ...conftest import needs_py310, PrintMock # Import PrintMock for type hint +from ...conftest import PrintMock, needs_py310 # Import PrintMock for type hint expected_calls = [ [ @@ -49,4 +48,4 @@ def test_tutorial(print_mock: PrintMock, module: types.ModuleType): module.sqlite_url = "sqlite://" module.engine = create_engine(module.sqlite_url) module.main() - assert print_mock.calls == expected_calls # Use .calls instead of .mock_calls + assert print_mock.calls == expected_calls # Use .calls instead of .mock_calls diff --git a/tests/test_tutorial/test_connect/test_delete/test_tutorial001.py b/tests/test_tutorial/test_connect/test_delete/test_tutorial001.py index 04b68397..7e1a1687 100644 --- a/tests/test_tutorial/test_connect/test_delete/test_tutorial001.py +++ b/tests/test_tutorial/test_connect/test_delete/test_tutorial001.py @@ -69,9 +69,7 @@ expected_calls = [ ) def get_module(request: pytest.FixtureRequest) -> ModuleType: module_name = request.param - mod = importlib.import_module( - f"docs_src.tutorial.connect.delete.{module_name}" - ) + mod = importlib.import_module(f"docs_src.tutorial.connect.delete.{module_name}") mod.sqlite_url = "sqlite://" mod.engine = create_engine(mod.sqlite_url) return mod diff --git a/tests/test_tutorial/test_connect/test_insert/test_tutorial001.py b/tests/test_tutorial/test_connect/test_insert/test_tutorial001.py index 5a29f5d8..2884de3e 100644 --- a/tests/test_tutorial/test_connect/test_insert/test_tutorial001.py +++ b/tests/test_tutorial/test_connect/test_insert/test_tutorial001.py @@ -49,9 +49,7 @@ expected_calls = [ ) def get_module(request: pytest.FixtureRequest) -> ModuleType: module_name = request.param - mod = importlib.import_module( - f"docs_src.tutorial.connect.insert.{module_name}" - ) + mod = importlib.import_module(f"docs_src.tutorial.connect.insert.{module_name}") mod.sqlite_url = "sqlite://" mod.engine = create_engine(mod.sqlite_url) return mod diff --git a/tests/test_tutorial/test_connect/test_select/test_tutorial003.py b/tests/test_tutorial/test_connect/test_select/test_tutorial003.py index 2b6d4235..bc5a9c38 100644 --- a/tests/test_tutorial/test_connect/test_select/test_tutorial003.py +++ b/tests/test_tutorial/test_connect/test_select/test_tutorial003.py @@ -85,9 +85,7 @@ expected_calls = [ ) def get_module(request: pytest.FixtureRequest) -> ModuleType: module_name = request.param - mod = importlib.import_module( - f"docs_src.tutorial.connect.select.{module_name}" - ) + mod = importlib.import_module(f"docs_src.tutorial.connect.select.{module_name}") mod.sqlite_url = "sqlite://" mod.engine = create_engine(mod.sqlite_url) return mod diff --git a/tests/test_tutorial/test_connect/test_select/test_tutorial004.py b/tests/test_tutorial/test_connect/test_select/test_tutorial004.py index ecf00c96..10b1e864 100644 --- a/tests/test_tutorial/test_connect/test_select/test_tutorial004.py +++ b/tests/test_tutorial/test_connect/test_select/test_tutorial004.py @@ -59,9 +59,7 @@ expected_calls = [ ) def get_module(request: pytest.FixtureRequest) -> ModuleType: module_name = request.param - mod = importlib.import_module( - f"docs_src.tutorial.connect.select.{module_name}" - ) + mod = importlib.import_module(f"docs_src.tutorial.connect.select.{module_name}") mod.sqlite_url = "sqlite://" mod.engine = create_engine(mod.sqlite_url) return mod diff --git a/tests/test_tutorial/test_connect/test_select/test_tutorial005.py b/tests/test_tutorial/test_connect/test_select/test_tutorial005.py index 0c64821a..fec4122e 100644 --- a/tests/test_tutorial/test_connect/test_select/test_tutorial005.py +++ b/tests/test_tutorial/test_connect/test_select/test_tutorial005.py @@ -61,9 +61,7 @@ expected_calls = [ ) def get_module(request: pytest.FixtureRequest) -> ModuleType: module_name = request.param - mod = importlib.import_module( - f"docs_src.tutorial.connect.select.{module_name}" - ) + mod = importlib.import_module(f"docs_src.tutorial.connect.select.{module_name}") mod.sqlite_url = "sqlite://" mod.engine = create_engine(mod.sqlite_url) return mod diff --git a/tests/test_tutorial/test_connect/test_update/test_tutorial001.py b/tests/test_tutorial/test_connect/test_update/test_tutorial001.py index e14e30e9..57032565 100644 --- a/tests/test_tutorial/test_connect/test_update/test_tutorial001.py +++ b/tests/test_tutorial/test_connect/test_update/test_tutorial001.py @@ -1,6 +1,6 @@ import importlib from types import ModuleType -from typing import Any # For clear_sqlmodel type hint +from typing import Any # For clear_sqlmodel type hint import pytest from sqlmodel import create_engine @@ -60,14 +60,14 @@ expected_calls = [ ) def get_module(request: pytest.FixtureRequest) -> ModuleType: module_name = request.param - mod = importlib.import_module( - f"docs_src.tutorial.connect.update.{module_name}" - ) + mod = importlib.import_module(f"docs_src.tutorial.connect.update.{module_name}") mod.sqlite_url = "sqlite://" mod.engine = create_engine(mod.sqlite_url) return mod -def test_tutorial(clear_sqlmodel: Any, print_mock: PrintMock, module: ModuleType) -> None: +def test_tutorial( + clear_sqlmodel: Any, print_mock: PrintMock, module: ModuleType +) -> None: module.main() assert print_mock.calls == expected_calls diff --git a/tests/test_tutorial/test_create_db_and_table/test_tutorial002.py b/tests/test_tutorial/test_create_db_and_table/test_tutorial002.py index c5e21c25..c3330488 100644 --- a/tests/test_tutorial/test_create_db_and_table/test_tutorial002.py +++ b/tests/test_tutorial/test_create_db_and_table/test_tutorial002.py @@ -1,6 +1,6 @@ import importlib from types import ModuleType -from typing import Any # For clear_sqlmodel type hint +from typing import Any # For clear_sqlmodel type hint import pytest from sqlalchemy import inspect diff --git a/tests/test_tutorial/test_create_db_and_table/test_tutorial003.py b/tests/test_tutorial/test_create_db_and_table/test_tutorial003.py index e67673bd..5aa3b8ac 100644 --- a/tests/test_tutorial/test_create_db_and_table/test_tutorial003.py +++ b/tests/test_tutorial/test_create_db_and_table/test_tutorial003.py @@ -1,6 +1,6 @@ import importlib from types import ModuleType -from typing import Any # For clear_sqlmodel type hint +from typing import Any # For clear_sqlmodel type hint import pytest from sqlalchemy import inspect diff --git a/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests_main.py b/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests_main.py index 9edb2407..de555c72 100644 --- a/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests_main.py +++ b/tests/test_tutorial/test_fastapi/test_app_testing/test_tutorial001_tests_main.py @@ -5,11 +5,12 @@ from typing import Any, Generator import pytest from fastapi.testclient import TestClient -from sqlmodel import Session, SQLModel, create_engine # Keep this for session_fixture -from sqlmodel.pool import StaticPool # Keep this for session_fixture +from sqlmodel import Session, SQLModel, create_engine # Keep this for session_fixture +from sqlmodel.pool import StaticPool # Keep this for session_fixture from ....conftest import needs_py39, needs_py310 + # This will be our parametrized fixture providing the versioned 'main' module @pytest.fixture( name="module", @@ -20,7 +21,9 @@ from ....conftest import needs_py39, needs_py310 pytest.param("tutorial001_py310", marks=needs_py310), ], ) -def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleType: # clear_sqlmodel is autouse +def get_module( + request: pytest.FixtureRequest, clear_sqlmodel: Any +) -> ModuleType: # clear_sqlmodel is autouse module_name = f"docs_src.tutorial.fastapi.app_testing.{request.param}.main" # Forcing reload to try to get a fresh state for models @@ -30,6 +33,7 @@ def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleTyp module = importlib.import_module(module_name) return module + @pytest.fixture(name="session", scope="function") def session_fixture(module: ModuleType) -> Generator[Session, None, None]: # Store original engine-related attributes from the module @@ -39,13 +43,13 @@ def session_fixture(module: ModuleType) -> Generator[Session, None, None]: # Force module to use a fresh in-memory SQLite DB for this test run module.sqlite_url = "sqlite://" - module.connect_args = {"check_same_thread": False} # Crucial for FastAPI + SQLite + module.connect_args = {"check_same_thread": False} # Crucial for FastAPI + SQLite # Re-create the engine in the module to use these new settings test_engine = create_engine( module.sqlite_url, connect_args=module.connect_args, - poolclass=StaticPool # Recommended for tests + poolclass=StaticPool, # Recommended for tests ) module.engine = test_engine @@ -55,7 +59,9 @@ def session_fixture(module: ModuleType) -> Generator[Session, None, None]: # Fallback if the function isn't named create_db_and_tables SQLModel.metadata.create_all(module.engine) - with Session(module.engine) as session: # Use the module's (now test-configured) engine + with Session( + module.engine + ) as session: # Use the module's (now test-configured) engine yield session # Teardown: drop tables from the module's engine @@ -68,14 +74,16 @@ def session_fixture(module: ModuleType) -> Generator[Session, None, None]: module.connect_args = original_connect_args if original_engine is not None: module.engine = original_engine - else: # If engine didn't exist, remove the one we created + else: # If engine didn't exist, remove the one we created if hasattr(module, "engine"): del module.engine @pytest.fixture(name="client", scope="function") -def client_fixture(session: Session, module: ModuleType) -> Generator[TestClient, None, None]: - def get_session_override() -> Generator[Session, None, None]: # Must be a generator +def client_fixture( + session: Session, module: ModuleType +) -> Generator[TestClient, None, None]: + def get_session_override() -> Generator[Session, None, None]: # Must be a generator yield session module.app.dependency_overrides[module.get_session] = get_session_override @@ -140,7 +148,7 @@ def test_read_heroes(session: Session, client: TestClient, module: ModuleType): def test_read_hero(session: Session, client: TestClient, module: ModuleType): - hero_1 = module.Hero(name="Deadpond", secret_name="Dive Wilson") # Use module.Hero + hero_1 = module.Hero(name="Deadpond", secret_name="Dive Wilson") # Use module.Hero session.add(hero_1) session.commit() @@ -155,7 +163,7 @@ def test_read_hero(session: Session, client: TestClient, module: ModuleType): def test_update_hero(session: Session, client: TestClient, module: ModuleType): - hero_1 = module.Hero(name="Deadpond", secret_name="Dive Wilson") # Use module.Hero + hero_1 = module.Hero(name="Deadpond", secret_name="Dive Wilson") # Use module.Hero session.add(hero_1) session.commit() @@ -170,13 +178,13 @@ def test_update_hero(session: Session, client: TestClient, module: ModuleType): def test_delete_hero(session: Session, client: TestClient, module: ModuleType): - hero_1 = module.Hero(name="Deadpond", secret_name="Dive Wilson") # Use module.Hero + hero_1 = module.Hero(name="Deadpond", secret_name="Dive Wilson") # Use module.Hero session.add(hero_1) session.commit() response = client.delete(f"/heroes/{hero_1.id}") - hero_in_db = session.get(module.Hero, hero_1.id) # Use module.Hero + hero_in_db = session.get(module.Hero, hero_1.id) # Use module.Hero assert response.status_code == 200 assert hero_in_db is None diff --git a/tests/test_tutorial/test_fastapi/test_delete/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_delete/test_tutorial001.py index 2d37d405..08016f86 100644 --- a/tests/test_tutorial/test_fastapi/test_delete/test_tutorial001.py +++ b/tests/test_tutorial/test_fastapi/test_delete/test_tutorial001.py @@ -1,12 +1,12 @@ import importlib import sys from types import ModuleType -from typing import Any # For clear_sqlmodel type hint +from typing import Any # For clear_sqlmodel type hint import pytest from dirty_equals import IsDict from fastapi.testclient import TestClient -from sqlmodel import SQLModel, create_engine # Import SQLModel for metadata operations +from sqlmodel import SQLModel, create_engine # Import SQLModel for metadata operations from sqlmodel.pool import StaticPool from ....conftest import needs_py39, needs_py310 @@ -22,7 +22,7 @@ from ....conftest import needs_py39, needs_py310 ], ) def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleType: - module_name = f"docs_src.tutorial.fastapi.delete.{request.param}" # No .main here + module_name = f"docs_src.tutorial.fastapi.delete.{request.param}" # No .main here if module_name in sys.modules: module = importlib.reload(sys.modules[module_name]) else: @@ -34,19 +34,23 @@ def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleTyp module.sqlite_url = "sqlite://" module.engine = create_engine( module.sqlite_url, - connect_args={"check_same_thread": False}, # connect_args from original main.py - poolclass=StaticPool + connect_args={"check_same_thread": False}, # connect_args from original main.py + poolclass=StaticPool, ) # Assuming the module has a create_db_and_tables or similar, or uses SQLModel.metadata directly if hasattr(module, "create_db_and_tables"): module.create_db_and_tables() else: - SQLModel.metadata.create_all(module.engine) # Fallback, ensure tables are created + SQLModel.metadata.create_all( + module.engine + ) # Fallback, ensure tables are created return module -def test_tutorial(clear_sqlmodel: Any, module: ModuleType): # clear_sqlmodel is autouse but explicit for safety +def test_tutorial( + clear_sqlmodel: Any, module: ModuleType +): # clear_sqlmodel is autouse but explicit for safety # The engine and tables are now set up by the 'module' fixture # The app's dependency overrides for get_session will use module.engine @@ -56,7 +60,7 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): # clear_sqlmodel is hero2_data = { "name": "Spider-Boy", "secret_name": "Pedro Parqueador", - "id": 9000, # Note: ID is part of creation data here + "id": 9000, # Note: ID is part of creation data here } hero3_data = { "name": "Rusty-Man", @@ -65,13 +69,15 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): # clear_sqlmodel is } response = client.post("/heroes/", json=hero1_data) assert response.status_code == 200, response.text - hero1 = response.json() # Get actual ID of hero1 + hero1 = response.json() # Get actual ID of hero1 hero1_id = hero1["id"] response = client.post("/heroes/", json=hero2_data) assert response.status_code == 200, response.text hero2 = response.json() - hero2_id = hero2["id"] # This will be the ID assigned by DB, not 9000 if 9000 is not allowed on POST + hero2_id = hero2[ + "id" + ] # This will be the ID assigned by DB, not 9000 if 9000 is not allowed on POST response = client.post("/heroes/", json=hero3_data) assert response.status_code == 200, response.text @@ -86,8 +92,8 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): # clear_sqlmodel is # For robustness, let's check for a non-existent ID based on actual data. # If hero2_id is 1, check for 9000. If it's 9000, check for 1 (assuming hero1_id is 1). non_existent_id_check = 9000 - if hero2_id == non_existent_id_check: # if DB somehow used 9000 - non_existent_id_check = hero1_id + hero2_id + 100 # just some other ID + if hero2_id == non_existent_id_check: # if DB somehow used 9000 + non_existent_id_check = hero1_id + hero2_id + 100 # just some other ID response = client.get(f"/heroes/{non_existent_id_check}") assert response.status_code == 404, response.text @@ -102,7 +108,9 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): # clear_sqlmodel is ) assert response.status_code == 200, response.text - response = client.patch(f"/heroes/{non_existent_id_check}", json={"name": "Dragon Cube X"}) + response = client.patch( + f"/heroes/{non_existent_id_check}", json={"name": "Dragon Cube X"} + ) assert response.status_code == 404, response.text response = client.delete(f"/heroes/{hero2_id}") @@ -111,7 +119,7 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): # clear_sqlmodel is response = client.get("/heroes/") assert response.status_code == 200, response.text data = response.json() - assert len(data) == 2 # After deleting one hero + assert len(data) == 2 # After deleting one hero response = client.delete(f"/heroes/{non_existent_id_check}") assert response.status_code == 404, response.text diff --git a/tests/test_tutorial/test_fastapi/test_limit_and_offset/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_limit_and_offset/test_tutorial001.py index 2ce49c1e..8909e98f 100644 --- a/tests/test_tutorial/test_fastapi/test_limit_and_offset/test_tutorial001.py +++ b/tests/test_tutorial/test_fastapi/test_limit_and_offset/test_tutorial001.py @@ -1,12 +1,12 @@ import importlib import sys from types import ModuleType -from typing import Any # For clear_sqlmodel type hint +from typing import Any # For clear_sqlmodel type hint import pytest from dirty_equals import IsDict from fastapi.testclient import TestClient -from sqlmodel import SQLModel, create_engine # Import SQLModel for metadata operations +from sqlmodel import SQLModel, create_engine # Import SQLModel for metadata operations from sqlmodel.pool import StaticPool from ....conftest import needs_py39, needs_py310 @@ -22,7 +22,9 @@ from ....conftest import needs_py39, needs_py310 ], ) def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleType: - module_name = f"docs_src.tutorial.fastapi.limit_and_offset.{request.param}" # No .main + module_name = ( + f"docs_src.tutorial.fastapi.limit_and_offset.{request.param}" # No .main + ) if module_name in sys.modules: module = importlib.reload(sys.modules[module_name]) else: @@ -31,8 +33,10 @@ def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleTyp module.sqlite_url = "sqlite://" module.engine = create_engine( module.sqlite_url, - connect_args={"check_same_thread": False}, # Assuming connect_args was in original mod or default - poolclass=StaticPool + connect_args={ + "check_same_thread": False + }, # Assuming connect_args was in original mod or default + poolclass=StaticPool, ) if hasattr(module, "create_db_and_tables"): module.create_db_and_tables() @@ -66,7 +70,7 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): response = client.post("/heroes/", json=hero2_data) assert response.status_code == 200, response.text hero2 = response.json() - hero2_id = hero2["id"] # Use the actual ID from response + hero2_id = hero2["id"] # Use the actual ID from response # Create hero 3 response = client.post("/heroes/", json=hero3_data) @@ -92,7 +96,9 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): assert response.status_code == 200, response.text data_limit2 = response.json() assert len(data_limit2) == 2 - assert data_limit2[0]["name"] == hero1["name"] # Compare with actual created hero data + assert ( + data_limit2[0]["name"] == hero1["name"] + ) # Compare with actual created hero data assert data_limit2[1]["name"] == hero2["name"] response = client.get("/heroes/", params={"offset": 1}) diff --git a/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial001.py index b0c0c6ce..cd36fbe9 100644 --- a/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial001.py +++ b/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial001.py @@ -1,14 +1,14 @@ import importlib import sys from types import ModuleType -from typing import Any # For clear_sqlmodel type hint +from typing import Any # For clear_sqlmodel type hint import pytest from dirty_equals import IsDict from fastapi.testclient import TestClient from sqlalchemy import inspect from sqlalchemy.engine.reflection import Inspector -from sqlmodel import SQLModel, create_engine # Import SQLModel +from sqlmodel import SQLModel, create_engine # Import SQLModel from sqlmodel.pool import StaticPool from ....conftest import needs_py39, needs_py310 @@ -24,7 +24,9 @@ from ....conftest import needs_py39, needs_py310 ], ) def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleType: - module_name = f"docs_src.tutorial.fastapi.multiple_models.{request.param}" # No .main + module_name = ( + f"docs_src.tutorial.fastapi.multiple_models.{request.param}" # No .main + ) if module_name in sys.modules: module = importlib.reload(sys.modules[module_name]) else: @@ -34,13 +36,11 @@ def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleTyp # Ensure connect_args is available in module, default if not. # Some tutorial files might not define it if they don't use on_event("startup") for engine creation. connect_args = getattr(module, "connect_args", {"check_same_thread": False}) - if "check_same_thread" not in connect_args: # Ensure this specific arg for SQLite + if "check_same_thread" not in connect_args: # Ensure this specific arg for SQLite connect_args["check_same_thread"] = False module.engine = create_engine( - module.sqlite_url, - connect_args=connect_args, - poolclass=StaticPool + module.sqlite_url, connect_args=connect_args, poolclass=StaticPool ) if hasattr(module, "create_db_and_tables"): module.create_db_and_tables() @@ -66,7 +66,7 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): assert data["secret_name"] == hero1_data["secret_name"] assert data["id"] is not None assert data["age"] is None - hero1_id = data["id"] # Store actual ID + hero1_id = data["id"] # Store actual ID response = client.post("/heroes/", json=hero2_data) data = response.json() @@ -78,8 +78,7 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): # This is true if ID is auto-generated and not 9000. assert data["id"] is not None assert data["age"] is None - hero2_id = data["id"] # Store actual ID - + hero2_id = data["id"] # Store actual ID response = client.get("/heroes/") data = response.json() @@ -95,7 +94,6 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): assert data[1]["name"] == hero2_data["name"] assert data[1]["secret_name"] == hero2_data["secret_name"] - response = client.get("/openapi.json") assert response.status_code == 200, response.text # OpenAPI schema check - kept as is from original test @@ -237,8 +235,8 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): } # Test inherited indexes - insp: Inspector = inspect(module.engine) # Use module.engine - indexes = insp.get_indexes(str(module.Hero.__tablename__)) # Use module.Hero + insp: Inspector = inspect(module.engine) # Use module.engine + indexes = insp.get_indexes(str(module.Hero.__tablename__)) # Use module.Hero expected_indexes = [ { "name": "ix_hero_name", @@ -255,10 +253,16 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): ] # Convert list of dicts to list of tuples of sorted items for order-agnostic comparison indexes_for_comparison = [tuple(sorted(d.items())) for d in indexes] - expected_indexes_for_comparison = [tuple(sorted(d.items())) for d in expected_indexes] + expected_indexes_for_comparison = [ + tuple(sorted(d.items())) for d in expected_indexes + ] for index_data_tuple in expected_indexes_for_comparison: - assert index_data_tuple in indexes_for_comparison, f"Expected index {index_data_tuple} not found in DB indexes {indexes_for_comparison}" + assert index_data_tuple in indexes_for_comparison, ( + f"Expected index {index_data_tuple} not found in DB indexes {indexes_for_comparison}" + ) indexes_for_comparison.remove(index_data_tuple) - assert len(indexes_for_comparison) == 0, f"Unexpected extra indexes found in DB: {indexes_for_comparison}" + assert len(indexes_for_comparison) == 0, ( + f"Unexpected extra indexes found in DB: {indexes_for_comparison}" + ) diff --git a/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial002.py b/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial002.py index bff39927..92cf5cbf 100644 --- a/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial002.py +++ b/tests/test_tutorial/test_fastapi/test_multiple_models/test_tutorial002.py @@ -1,14 +1,14 @@ import importlib import sys from types import ModuleType -from typing import Any # For clear_sqlmodel type hint +from typing import Any # For clear_sqlmodel type hint import pytest from dirty_equals import IsDict from fastapi.testclient import TestClient from sqlalchemy import inspect from sqlalchemy.engine.reflection import Inspector -from sqlmodel import SQLModel, create_engine # Import SQLModel +from sqlmodel import SQLModel, create_engine # Import SQLModel from sqlmodel.pool import StaticPool from ....conftest import needs_py39, needs_py310 @@ -18,9 +18,13 @@ from ....conftest import needs_py39, needs_py310 name="module", scope="function", params=[ - "tutorial002", # Changed to tutorial002 - pytest.param("tutorial002_py39", marks=needs_py39), # Changed to tutorial002_py39 - pytest.param("tutorial002_py310", marks=needs_py310), # Changed to tutorial002_py310 + "tutorial002", # Changed to tutorial002 + pytest.param( + "tutorial002_py39", marks=needs_py39 + ), # Changed to tutorial002_py39 + pytest.param( + "tutorial002_py310", marks=needs_py310 + ), # Changed to tutorial002_py310 ], ) def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleType: @@ -36,9 +40,7 @@ def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleTyp connect_args["check_same_thread"] = False module.engine = create_engine( - module.sqlite_url, - connect_args=connect_args, - poolclass=StaticPool + module.sqlite_url, connect_args=connect_args, poolclass=StaticPool ) if hasattr(module, "create_db_and_tables"): module.create_db_and_tables() @@ -75,7 +77,6 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): assert data["age"] is None hero2_id = data["id"] - response = client.get("/heroes/") data = response.json() @@ -88,7 +89,6 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): assert data[1]["name"] == hero2_data["name"] assert data[1]["secret_name"] == hero2_data["secret_name"] - response = client.get("/openapi.json") assert response.status_code == 200, response.text assert response.json() == { @@ -233,7 +233,7 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): indexes = insp.get_indexes(str(module.Hero.__tablename__)) expected_indexes = [ { - "name": "ix_hero_age", # For tutorial002, order of expected indexes is different + "name": "ix_hero_age", # For tutorial002, order of expected indexes is different "dialect_options": {}, "column_names": ["age"], "unique": 0, @@ -246,10 +246,16 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): }, ] indexes_for_comparison = [tuple(sorted(d.items())) for d in indexes] - expected_indexes_for_comparison = [tuple(sorted(d.items())) for d in expected_indexes] + expected_indexes_for_comparison = [ + tuple(sorted(d.items())) for d in expected_indexes + ] for index_data_tuple in expected_indexes_for_comparison: - assert index_data_tuple in indexes_for_comparison, f"Expected index {index_data_tuple} not found in DB indexes {indexes_for_comparison}" + assert index_data_tuple in indexes_for_comparison, ( + f"Expected index {index_data_tuple} not found in DB indexes {indexes_for_comparison}" + ) indexes_for_comparison.remove(index_data_tuple) - assert len(indexes_for_comparison) == 0, f"Unexpected extra indexes found in DB: {indexes_for_comparison}" + assert len(indexes_for_comparison) == 0, ( + f"Unexpected extra indexes found in DB: {indexes_for_comparison}" + ) diff --git a/tests/test_tutorial/test_fastapi/test_read_one/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_read_one/test_tutorial001.py index 0d2b1ec9..51fdc80b 100644 --- a/tests/test_tutorial/test_fastapi/test_read_one/test_tutorial001.py +++ b/tests/test_tutorial/test_fastapi/test_read_one/test_tutorial001.py @@ -22,7 +22,7 @@ from ....conftest import needs_py39, needs_py310 ], ) def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleType: - module_name = f"docs_src.tutorial.fastapi.read_one.{request.param}" # No .main + module_name = f"docs_src.tutorial.fastapi.read_one.{request.param}" # No .main if module_name in sys.modules: module = importlib.reload(sys.modules[module_name]) else: @@ -34,9 +34,7 @@ def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any) -> ModuleTyp connect_args["check_same_thread"] = False module.engine = create_engine( - module.sqlite_url, - connect_args=connect_args, - poolclass=StaticPool + module.sqlite_url, connect_args=connect_args, poolclass=StaticPool ) if hasattr(module, "create_db_and_tables"): module.create_db_and_tables() @@ -56,18 +54,18 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): } response = client.post("/heroes/", json=hero1_data) assert response.status_code == 200, response.text - hero1 = response.json() # Store created hero1 data + hero1 = response.json() # Store created hero1 data response = client.post("/heroes/", json=hero2_data) assert response.status_code == 200, response.text - hero2 = response.json() # Store created hero2 data + hero2 = response.json() # Store created hero2 data response_get_all = client.get("/heroes/") assert response_get_all.status_code == 200, response_get_all.text data_all = response_get_all.json() assert len(data_all) == 2 - hero_id_to_get = hero2["id"] # Use actual ID from created hero2 + hero_id_to_get = hero2["id"] # Use actual ID from created hero2 response_get_one = client.get(f"/heroes/{hero_id_to_get}") assert response_get_one.status_code == 200, response_get_one.text data_one = response_get_one.json() @@ -77,9 +75,11 @@ def test_tutorial(clear_sqlmodel: Any, module: ModuleType): assert data_one["id"] == hero2["id"] # Check for a non-existent ID - non_existent_id = hero1["id"] + hero2["id"] + 100 # A likely non-existent ID + non_existent_id = hero1["id"] + hero2["id"] + 100 # A likely non-existent ID response_get_non_existent = client.get(f"/heroes/{non_existent_id}") - assert response_get_non_existent.status_code == 404, response_get_non_existent.text + assert response_get_non_existent.status_code == 404, ( + response_get_non_existent.text + ) response_openapi = client.get("/openapi.json") assert response_openapi.status_code == 200, response_openapi.text diff --git a/tests/test_tutorial/test_fastapi/test_relationships/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_relationships/test_tutorial001.py index bcb9cb13..bc1379d7 100644 --- a/tests/test_tutorial/test_fastapi/test_relationships/test_tutorial001.py +++ b/tests/test_tutorial/test_fastapi/test_relationships/test_tutorial001.py @@ -4,9 +4,8 @@ import types from typing import Any import pytest -from dirty_equals import IsDict from fastapi.testclient import TestClient -from sqlmodel import create_engine, SQLModel +from sqlmodel import SQLModel, create_engine from sqlmodel.pool import StaticPool from ....conftest import needs_py39, needs_py310 @@ -89,7 +88,7 @@ def test_tutorial(module: types.ModuleType): hero2_data = { "name": "Spider-Boy", "secret_name": "Pedro Parqueador", - "id": 9000, # This ID might be problematic if the DB auto-increments differently or if this ID is expected to be user-settable and unique + "id": 9000, # This ID might be problematic if the DB auto-increments differently or if this ID is expected to be user-settable and unique } hero3_data = { "name": "Rusty-Man", @@ -107,8 +106,10 @@ def test_tutorial(module: types.ModuleType): hero2_id = hero2["id"] response = client.post("/heroes/", json=hero3_data) assert response.status_code == 200, response.text - response = client.get("/heroes/9000") # This might fail if hero2_id is not 9000 - assert response.status_code == 404, response.text # Original test expects 404, this implies ID 9000 is not found after creation. This needs to align with how IDs are handled. + response = client.get("/heroes/9000") # This might fail if hero2_id is not 9000 + assert response.status_code == 404, ( + response.text + ) # Original test expects 404, this implies ID 9000 is not found after creation. This needs to align with how IDs are handled. response = client.get("/heroes/") assert response.status_code == 200, response.text @@ -120,18 +121,25 @@ def test_tutorial(module: types.ModuleType): data = response.json() assert data["name"] == hero1_data["name"] # Ensure team is loaded and correct - if "team" in data and data["team"] is not None: # Team might not be present if not correctly loaded by the endpoint + if ( + "team" in data and data["team"] is not None + ): # Team might not be present if not correctly loaded by the endpoint assert data["team"]["name"] == team_z_force["name"] - elif short_module_name != "tutorial001_py310": # tutorial001_py310.py doesn't include team in HeroPublic - # If team is expected, this is a failure. For tutorial001 and tutorial001_py39, team should be present. - assert "team" in data and data["team"] is not None, "Team data missing in hero response" - + elif ( + short_module_name != "tutorial001_py310" + ): # tutorial001_py310.py doesn't include team in HeroPublic + # If team is expected, this is a failure. For tutorial001 and tutorial001_py39, team should be present. + assert "team" in data and data["team"] is not None, ( + "Team data missing in hero response" + ) response = client.patch( f"/heroes/{hero2_id}", json={"secret_name": "Spider-Youngster"} ) assert response.status_code == 200, response.text - response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"}) # Test patching non-existent hero + response = client.patch( + "/heroes/9001", json={"name": "Dragon Cube X"} + ) # Test patching non-existent hero assert response.status_code == 404, response.text response = client.delete(f"/heroes/{hero2_id}") @@ -140,24 +148,24 @@ def test_tutorial(module: types.ModuleType): assert response.status_code == 200, response.text data = response.json() assert len(data) == 2 - response = client.delete("/heroes/9000") # Test deleting non-existent hero + response = client.delete("/heroes/9000") # Test deleting non-existent hero assert response.status_code == 404, response.text response = client.get(f"/teams/{team_preventers_id}") data = response.json() assert response.status_code == 200, response.text assert data["name"] == team_preventers_data["name"] - assert len(data["heroes"]) > 0 # Ensure heroes are loaded + assert len(data["heroes"]) > 0 # Ensure heroes are loaded assert data["heroes"][0]["name"] == hero3_data["name"] response = client.delete(f"/teams/{team_preventers_id}") assert response.status_code == 200, response.text - response = client.delete("/teams/9000") # Test deleting non-existent team + response = client.delete("/teams/9000") # Test deleting non-existent team assert response.status_code == 404, response.text response = client.get("/teams/") assert response.status_code == 200, response.text data = response.json() - assert len(data) == 1 # Only Z-Force should remain + assert len(data) == 1 # Only Z-Force should remain # OpenAPI schema check - this is a long part, keeping it as is from the original. # Small modification to handle potential differences in Pydantic v1 vs v2 for optional fields in schema @@ -177,10 +185,17 @@ def test_tutorial(module: types.ModuleType): # short_module_name is already defined at the start of the 'with TestClient' block # All versions (base, py39, py310) use HeroPublicWithTeam for this endpoint based on previous test run. - assert get_hero_path["responses"]["200"]["content"]["application/json"]["schema"]["$ref"] == "#/components/schemas/HeroPublicWithTeam" + assert ( + get_hero_path["responses"]["200"]["content"]["application/json"]["schema"][ + "$ref" + ] + == "#/components/schemas/HeroPublicWithTeam" + ) # Check HeroCreate schema for age and team_id nullability based on IsDict usage in original - hero_create_props = openapi_schema["components"]["schemas"]["HeroCreate"]["properties"] + hero_create_props = openapi_schema["components"]["schemas"]["HeroCreate"][ + "properties" + ] # For Pydantic v2 style (anyOf with type and null) vs Pydantic v1 (just type, optionality by not being in required) # This test was written with IsDict which complicates exact schema matching without knowing SQLModel version's Pydantic interaction # For simplicity, we check if 'age' and 'team_id' are present. Detailed check would need to adapt to SQLModel's Pydantic version. @@ -203,11 +218,19 @@ def test_tutorial(module: types.ModuleType): # It's better to check for key components and structures. # Check if TeamPublicWithHeroes has heroes list - team_public_with_heroes_props = openapi_schema["components"]["schemas"]["TeamPublicWithHeroes"]["properties"] + team_public_with_heroes_props = openapi_schema["components"]["schemas"][ + "TeamPublicWithHeroes" + ]["properties"] assert "heroes" in team_public_with_heroes_props assert team_public_with_heroes_props["heroes"]["type"] == "array" # short_module_name is already defined if short_module_name == "tutorial001_py310": - assert team_public_with_heroes_props["heroes"]["items"]["$ref"] == "#/components/schemas/HeroPublic" # tutorial001_py310 uses HeroPublic for heroes list + assert ( + team_public_with_heroes_props["heroes"]["items"]["$ref"] + == "#/components/schemas/HeroPublic" + ) # tutorial001_py310 uses HeroPublic for heroes list else: - assert team_public_with_heroes_props["heroes"]["items"]["$ref"] == "#/components/schemas/HeroPublic" # Original tutorial001.py seems to imply HeroPublic as well. + assert ( + team_public_with_heroes_props["heroes"]["items"]["$ref"] + == "#/components/schemas/HeroPublic" + ) # Original tutorial001.py seems to imply HeroPublic as well. diff --git a/tests/test_tutorial/test_fastapi/test_response_model/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_response_model/test_tutorial001.py index 2b935b23..b0dd9e94 100644 --- a/tests/test_tutorial/test_fastapi/test_response_model/test_tutorial001.py +++ b/tests/test_tutorial/test_fastapi/test_response_model/test_tutorial001.py @@ -6,7 +6,7 @@ from typing import Any import pytest from dirty_equals import IsDict from fastapi.testclient import TestClient -from sqlmodel import create_engine, SQLModel +from sqlmodel import SQLModel, create_engine from sqlmodel.pool import StaticPool from ....conftest import needs_py39, needs_py310 @@ -67,7 +67,7 @@ def test_tutorial(module: types.ModuleType): assert data[0]["secret_name"] == hero_data["secret_name"] # Ensure other fields are present as per the model Hero (which is used as response_model) assert "id" in data[0] - assert "age" in data[0] # Even if None, it should be in the response + assert "age" in data[0] # Even if None, it should be in the response response = client.get("/openapi.json") assert response.status_code == 200, response.text diff --git a/tests/test_tutorial/test_fastapi/test_session_with_dependency/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_session_with_dependency/test_tutorial001.py index 388a2fba..0ee7bb48 100644 --- a/tests/test_tutorial/test_fastapi/test_session_with_dependency/test_tutorial001.py +++ b/tests/test_tutorial/test_fastapi/test_session_with_dependency/test_tutorial001.py @@ -6,7 +6,7 @@ from typing import Any import pytest from dirty_equals import IsDict from fastapi.testclient import TestClient -from sqlmodel import create_engine, SQLModel +from sqlmodel import create_engine from sqlmodel.pool import StaticPool from ....conftest import needs_py39, needs_py310 @@ -52,10 +52,10 @@ def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any): # Let's rely on the app's startup event as per the tutorial's design. # If `create_db_and_tables` exists as a global function in the module (outside app event), then call it. if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): - # Check if it's the function that FastAPI would call, or a standalone one. - # This tutorial series usually has `create_db_and_tables` called by `app.on_event("startup")`. - # If the tests run TestClient(mod.app), startup events will run. - pass # Assuming startup event handles it. + # Check if it's the function that FastAPI would call, or a standalone one. + # This tutorial series usually has `create_db_and_tables` called by `app.on_event("startup")`. + # If the tests run TestClient(mod.app), startup events will run. + pass # Assuming startup event handles it. return mod @@ -67,7 +67,7 @@ def test_tutorial(module: types.ModuleType): hero2_data = { "name": "Spider-Boy", "secret_name": "Pedro Parqueador", - "id": 9000, # This ID might be ignored by DB if it's auto-incrementing primary key + "id": 9000, # This ID might be ignored by DB if it's auto-incrementing primary key } hero3_data = { "name": "Rusty-Man", @@ -79,13 +79,13 @@ def test_tutorial(module: types.ModuleType): response = client.post("/heroes/", json=hero2_data) assert response.status_code == 200, response.text - hero2_created = response.json() # Use the ID from the created hero + hero2_created = response.json() # Use the ID from the created hero hero2_id = hero2_created["id"] response = client.post("/heroes/", json=hero3_data) assert response.status_code == 200, response.text - response = client.get(f"/heroes/{hero2_id}") # Use the actual ID from DB + response = client.get(f"/heroes/{hero2_id}") # Use the actual ID from DB assert response.status_code == 200, response.text # If hero ID 9000 was intended to be a specific test case for a non-existent ID @@ -93,8 +93,10 @@ def test_tutorial(module: types.ModuleType): # Otherwise, if hero2 was expected to have ID 9000, this needs adjustment. # Given typical auto-increment, ID 9000 for hero2 is unlikely unless DB is reset and hero2 is first entry. # The original test implies hero2_data's ID is not necessarily the created ID. - response = client.get("/heroes/9000") # Check for a potentially non-existent ID - assert response.status_code == 404, response.text # Expect 404 if 9000 is not hero2_id and not another hero's ID + response = client.get("/heroes/9000") # Check for a potentially non-existent ID + assert response.status_code == 404, ( + response.text + ) # Expect 404 if 9000 is not hero2_id and not another hero's ID response = client.get("/heroes/") assert response.status_code == 200, response.text @@ -106,7 +108,9 @@ def test_tutorial(module: types.ModuleType): ) assert response.status_code == 200, response.text - response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"}) # Non-existent ID + response = client.patch( + "/heroes/9001", json={"name": "Dragon Cube X"} + ) # Non-existent ID assert response.status_code == 404, response.text response = client.delete(f"/heroes/{hero2_id}") @@ -117,7 +121,9 @@ def test_tutorial(module: types.ModuleType): data = response.json() assert len(data) == 2 - response = client.delete("/heroes/9000") # Non-existent ID (same as the GET check) + response = client.delete( + "/heroes/9000" + ) # Non-existent ID (same as the GET check) assert response.status_code == 404, response.text response = client.get("/openapi.json") diff --git a/tests/test_tutorial/test_fastapi/test_simple_hero_api/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_simple_hero_api/test_tutorial001.py index 0a5af9ab..784b2b05 100644 --- a/tests/test_tutorial/test_fastapi/test_simple_hero_api/test_tutorial001.py +++ b/tests/test_tutorial/test_fastapi/test_simple_hero_api/test_tutorial001.py @@ -6,10 +6,12 @@ from typing import Any import pytest from dirty_equals import IsDict from fastapi.testclient import TestClient -from sqlmodel import create_engine, SQLModel +from sqlmodel import create_engine from sqlmodel.pool import StaticPool -from ....conftest import needs_py310 # This needs to be relative to this file's location +from ....conftest import ( + needs_py310, # This needs to be relative to this file's location +) @pytest.fixture( @@ -21,9 +23,7 @@ from ....conftest import needs_py310 # This needs to be relative to this file's ) def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any): module_name = request.param - full_module_name = ( - f"docs_src.tutorial.fastapi.simple_hero_api.{module_name}" - ) + full_module_name = f"docs_src.tutorial.fastapi.simple_hero_api.{module_name}" if full_module_name in sys.modules: mod = importlib.reload(sys.modules[full_module_name]) @@ -46,13 +46,15 @@ def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any): return mod -def test_tutorial(module: types.ModuleType): # clear_sqlmodel is implicitly used by get_module +def test_tutorial( + module: types.ModuleType, +): # clear_sqlmodel is implicitly used by get_module with TestClient(module.app) as client: hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"} hero2_data = { "name": "Spider-Boy", "secret_name": "Pedro Parqueador", - "id": 9000, # This ID is part of the test logic for this tutorial specifically + "id": 9000, # This ID is part of the test logic for this tutorial specifically } response = client.post("/heroes/", json=hero1_data) data = response.json() diff --git a/tests/test_tutorial/test_fastapi/test_teams/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_teams/test_tutorial001.py index 5b97c7c1..933742be 100644 --- a/tests/test_tutorial/test_fastapi/test_teams/test_tutorial001.py +++ b/tests/test_tutorial/test_fastapi/test_teams/test_tutorial001.py @@ -6,7 +6,7 @@ from typing import Any import pytest from dirty_equals import IsDict from fastapi.testclient import TestClient -from sqlmodel import create_engine, SQLModel +from sqlmodel import create_engine from sqlmodel.pool import StaticPool from ....conftest import needs_py39, needs_py310 @@ -44,11 +44,13 @@ def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any): return mod -def test_tutorial(module: types.ModuleType): # clear_sqlmodel is implicitly used by get_module +def test_tutorial( + module: types.ModuleType, +): # clear_sqlmodel is implicitly used by get_module with TestClient(module.app) as client: # Hero Operations hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"} - hero2_data = { # This hero's ID might be overridden by DB if not specified or if ID is auto-incrementing + hero2_data = { # This hero's ID might be overridden by DB if not specified or if ID is auto-incrementing "name": "Spider-Boy", "secret_name": "Pedro Parqueador", "id": 9000, @@ -61,29 +63,35 @@ def test_tutorial(module: types.ModuleType): # clear_sqlmodel is implicitly used response = client.post("/heroes/", json=hero2_data) assert response.status_code == 200, response.text hero2_created = response.json() - hero2_id = hero2_created["id"] # Use the actual ID returned by the DB + hero2_id = hero2_created["id"] # Use the actual ID returned by the DB response = client.post("/heroes/", json=hero3_data) assert response.status_code == 200, response.text - response = client.get(f"/heroes/{hero2_id}") # Use DB generated ID + response = client.get(f"/heroes/{hero2_id}") # Use DB generated ID assert response.status_code == 200, response.text - response = client.get("/heroes/9000") # Check for ID 9000 specifically (could be hero2_id or not) - if hero2_id == 9000 : # If hero2 got ID 9000 - assert response.status_code == 200, response.text - else: # If hero2 got a different ID, then 9000 should not exist - assert response.status_code == 404, response.text + response = client.get( + "/heroes/9000" + ) # Check for ID 9000 specifically (could be hero2_id or not) + if hero2_id == 9000: # If hero2 got ID 9000 + assert response.status_code == 200, response.text + else: # If hero2 got a different ID, then 9000 should not exist + assert response.status_code == 404, response.text response = client.get("/heroes/") assert response.status_code == 200, response.text data = response.json() assert len(data) == 3 - response = client.patch(f"/heroes/{hero2_id}", json={"secret_name": "Spider-Youngster"}) + response = client.patch( + f"/heroes/{hero2_id}", json={"secret_name": "Spider-Youngster"} + ) assert response.status_code == 200, response.text - response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"}) # Non-existent ID + response = client.patch( + "/heroes/9001", json={"name": "Dragon Cube X"} + ) # Non-existent ID assert response.status_code == 404, response.text response = client.delete(f"/heroes/{hero2_id}") @@ -94,13 +102,19 @@ def test_tutorial(module: types.ModuleType): # clear_sqlmodel is implicitly used data = response.json() assert len(data) == 2 - response = client.delete("/heroes/9000") # Try deleting ID 9000 - if hero2_id == 9000 and hero2_id not in [h["id"] for h in data]: # If it was hero2's ID and hero2 was deleted - assert response.status_code == 404 # Already deleted - elif hero2_id != 9000 and 9000 not in [h["id"] for h in data]: # If 9000 was never a valid ID among current heroes + response = client.delete("/heroes/9000") # Try deleting ID 9000 + if hero2_id == 9000 and hero2_id not in [ + h["id"] for h in data + ]: # If it was hero2's ID and hero2 was deleted + assert response.status_code == 404 # Already deleted + elif hero2_id != 9000 and 9000 not in [ + h["id"] for h in data + ]: # If 9000 was never a valid ID among current heroes assert response.status_code == 404 - else: # If 9000 was a valid ID of another hero still present (should not happen with current data) - assert response.status_code == 200 # This case is unlikely with current test data + else: # If 9000 was a valid ID of another hero still present (should not happen with current data) + assert ( + response.status_code == 200 + ) # This case is unlikely with current test data # Team Operations team_preventers_data = {"name": "Preventers", "headquarters": "Sharp Tower"} @@ -127,7 +141,7 @@ def test_tutorial(module: types.ModuleType): # clear_sqlmodel is implicitly used assert data["headquarters"] == team_preventers_created["headquarters"] assert data["id"] == team_preventers_created["id"] - response = client.get("/teams/9000") # Non-existent team ID + response = client.get("/teams/9000") # Non-existent team ID assert response.status_code == 404, response.text response = client.patch( @@ -135,16 +149,18 @@ def test_tutorial(module: types.ModuleType): # clear_sqlmodel is implicitly used ) data = response.json() assert response.status_code == 200, response.text - assert data["name"] == team_preventers_data["name"] # Name should be unchanged + assert data["name"] == team_preventers_data["name"] # Name should be unchanged assert data["headquarters"] == "Preventers Tower" - response = client.patch("/teams/9000", json={"name": "Freedom League"}) # Non-existent + response = client.patch( + "/teams/9000", json={"name": "Freedom League"} + ) # Non-existent assert response.status_code == 404, response.text response = client.delete(f"/teams/{team_preventers_id}") assert response.status_code == 200, response.text - response = client.delete("/teams/9000") # Non-existent + response = client.delete("/teams/9000") # Non-existent assert response.status_code == 404, response.text response = client.get("/teams/") diff --git a/tests/test_tutorial/test_fastapi/test_update/test_tutorial001.py b/tests/test_tutorial/test_fastapi/test_update/test_tutorial001.py index 2a57f417..50841bdd 100644 --- a/tests/test_tutorial/test_fastapi/test_update/test_tutorial001.py +++ b/tests/test_tutorial/test_fastapi/test_update/test_tutorial001.py @@ -6,7 +6,7 @@ from typing import Any import pytest from dirty_equals import IsDict from fastapi.testclient import TestClient -from sqlmodel import create_engine, SQLModel +from sqlmodel import create_engine from sqlmodel.pool import StaticPool from ....conftest import needs_py39, needs_py310 @@ -65,7 +65,7 @@ def test_tutorial(module: types.ModuleType): response = client.post("/heroes/", json=hero2_input_data) assert response.status_code == 200, response.text hero2_created = response.json() - hero2_id = hero2_created["id"] # This is the ID to use for hero2 + hero2_id = hero2_created["id"] # This is the ID to use for hero2 response = client.post("/heroes/", json=hero3_data) assert response.status_code == 200, response.text @@ -93,7 +93,9 @@ def test_tutorial(module: types.ModuleType): ) data = response.json() assert response.status_code == 200, response.text - assert data["name"] == hero2_created["name"] # Name should not change from created state + assert ( + data["name"] == hero2_created["name"] + ) # Name should not change from created state assert data["secret_name"] == "Spider-Youngster" response = client.patch(f"/heroes/{hero3_id}", json={"age": None}) @@ -102,7 +104,9 @@ def test_tutorial(module: types.ModuleType): assert data["name"] == hero3_created["name"] assert data["age"] is None - response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"}) # Non-existent ID + response = client.patch( + "/heroes/9001", json={"name": "Dragon Cube X"} + ) # Non-existent ID assert response.status_code == 404, response.text response = client.get("/openapi.json") @@ -313,7 +317,7 @@ def test_tutorial(module: types.ModuleType): } ) | IsDict( - {"title": "Age", "type": "integer"} # Pydantic v1 + {"title": "Age", "type": "integer"} # Pydantic v1 ), }, }, @@ -331,7 +335,7 @@ def test_tutorial(module: types.ModuleType): } ) | IsDict( - {"title": "Age", "type": "integer"} # Pydantic v1 + {"title": "Age", "type": "integer"} # Pydantic v1 ), "id": {"title": "Id", "type": "integer"}, }, @@ -347,7 +351,7 @@ def test_tutorial(module: types.ModuleType): } ) | IsDict( - {"title": "Name", "type": "string"} # Pydantic v1 + {"title": "Name", "type": "string"} # Pydantic v1 ), "secret_name": IsDict( { @@ -356,7 +360,10 @@ def test_tutorial(module: types.ModuleType): } ) | IsDict( - {"title": "Secret Name", "type": "string"} # Pydantic v1 + { + "title": "Secret Name", + "type": "string", + } # Pydantic v1 ), "age": IsDict( { @@ -365,7 +372,7 @@ def test_tutorial(module: types.ModuleType): } ) | IsDict( - {"title": "Age", "type": "integer"} # Pydantic v1 + {"title": "Age", "type": "integer"} # Pydantic v1 ), }, }, diff --git a/tests/test_tutorial/test_fastapi/test_update/test_tutorial002.py b/tests/test_tutorial/test_fastapi/test_update/test_tutorial002.py index c82c8b88..05c43bc6 100644 --- a/tests/test_tutorial/test_fastapi/test_update/test_tutorial002.py +++ b/tests/test_tutorial/test_fastapi/test_update/test_tutorial002.py @@ -6,7 +6,7 @@ from typing import Any import pytest from dirty_equals import IsDict from fastapi.testclient import TestClient -from sqlmodel import create_engine, SQLModel, Session +from sqlmodel import Session, create_engine from sqlmodel.pool import StaticPool from ....conftest import needs_py39, needs_py310 @@ -48,10 +48,10 @@ def test_tutorial(module: types.ModuleType): "secret_name": "Dive Wilson", "password": "chimichanga", } - hero2_input_data = { # Renamed to avoid confusion with returned hero2 + hero2_input_data = { # Renamed to avoid confusion with returned hero2 "name": "Spider-Boy", "secret_name": "Pedro Parqueador", - "id": 9000, # ID might be ignored by DB + "id": 9000, # ID might be ignored by DB "password": "auntmay", } hero3_data = { @@ -63,7 +63,7 @@ def test_tutorial(module: types.ModuleType): response = client.post("/heroes/", json=hero1_data) assert response.status_code == 200, response.text - hero1_created = response.json() # Use created hero data + hero1_created = response.json() # Use created hero data assert "password" not in hero1_created assert "hashed_password" not in hero1_created hero1_id = hero1_created["id"] @@ -71,7 +71,7 @@ def test_tutorial(module: types.ModuleType): response = client.post("/heroes/", json=hero2_input_data) assert response.status_code == 200, response.text hero2_created = response.json() - hero2_id = hero2_created["id"] # Use DB assigned ID + hero2_id = hero2_created["id"] # Use DB assigned ID response = client.post("/heroes/", json=hero3_data) assert response.status_code == 200, response.text @@ -85,9 +85,9 @@ def test_tutorial(module: types.ModuleType): assert "hashed_password" not in fetched_hero2 response_get_9000 = client.get("/heroes/9000") - if hero2_id == 9000: # If hero2 happened to get ID 9000 + if hero2_id == 9000: # If hero2 happened to get ID 9000 assert response_get_9000.status_code == 200 - else: # Otherwise, 9000 should not exist + else: # Otherwise, 9000 should not exist assert response_get_9000.status_code == 404 response = client.get("/heroes/") @@ -102,7 +102,9 @@ def test_tutorial(module: types.ModuleType): with Session(module.engine) as session: hero1_db = session.get(module.Hero, hero1_id) assert hero1_db - assert not hasattr(hero1_db, "password") # Model should not have 'password' field after read from DB + assert not hasattr( + hero1_db, "password" + ) # Model should not have 'password' field after read from DB assert hero1_db.hashed_password == "not really hashed chimichanga hehehe" hero2_db = session.get(module.Hero, hero2_id) @@ -120,7 +122,7 @@ def test_tutorial(module: types.ModuleType): ) data = response.json() assert response.status_code == 200, response.text - assert data["name"] == hero2_created["name"] # Use created name for comparison + assert data["name"] == hero2_created["name"] # Use created name for comparison assert data["secret_name"] == "Spider-Youngster" assert "password" not in data assert "hashed_password" not in data @@ -128,7 +130,9 @@ def test_tutorial(module: types.ModuleType): hero2b_db = session.get(module.Hero, hero2_id) assert hero2b_db assert not hasattr(hero2b_db, "password") - assert hero2b_db.hashed_password == "not really hashed auntmay hehehe" # Password shouldn't change on this patch + assert ( + hero2b_db.hashed_password == "not really hashed auntmay hehehe" + ) # Password shouldn't change on this patch response = client.patch(f"/heroes/{hero3_id}", json={"age": None}) data = response.json() @@ -149,308 +153,339 @@ def test_tutorial(module: types.ModuleType): data = response.json() assert response.status_code == 200, response.text assert data["name"] == hero3_created["name"] - assert data["age"] is None # Age should persist as None from previous patch + assert data["age"] is None # Age should persist as None from previous patch assert "password" not in data assert "hashed_password" not in data with Session(module.engine) as session: - hero3c_db = session.get(module.Hero, hero3_id) # Renamed to avoid confusion + hero3c_db = session.get(module.Hero, hero3_id) # Renamed to avoid confusion assert hero3c_db assert not hasattr(hero3c_db, "password") - assert hero3c_db.hashed_password == "not really hashed philantroplayboy hehehe" + assert ( + hero3c_db.hashed_password == "not really hashed philantroplayboy hehehe" + ) - response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"}) # Non-existent + response = client.patch( + "/heroes/9001", json={"name": "Dragon Cube X"} + ) # Non-existent assert response.status_code == 404, response.text response = client.get("/openapi.json") assert response.status_code == 200, response.text # OpenAPI schema is consistent - assert response.json() == { - "openapi": "3.1.0", - "info": {"title": "FastAPI", "version": "0.1.0"}, - "paths": { - "/heroes/": { - "get": { - "summary": "Read Heroes", - "operationId": "read_heroes_heroes__get", - "parameters": [ - { - "required": False, - "schema": { - "title": "Offset", - "type": "integer", - "default": 0, + assert ( + response.json() + == { + "openapi": "3.1.0", + "info": {"title": "FastAPI", "version": "0.1.0"}, + "paths": { + "/heroes/": { + "get": { + "summary": "Read Heroes", + "operationId": "read_heroes_heroes__get", + "parameters": [ + { + "required": False, + "schema": { + "title": "Offset", + "type": "integer", + "default": 0, + }, + "name": "offset", + "in": "query", }, - "name": "offset", - "in": "query", - }, - { - "required": False, - "schema": { - "title": "Limit", - "maximum": 100, # Corrected based on original test data - "type": "integer", - "default": 100, + { + "required": False, + "schema": { + "title": "Limit", + "maximum": 100, # Corrected based on original test data + "type": "integer", + "default": 100, + }, + "name": "limit", + "in": "query", }, - "name": "limit", - "in": "query", - }, - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "title": "Response Read Heroes Heroes Get", - "type": "array", - "items": { - "$ref": "#/components/schemas/HeroPublic" - }, + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "title": "Response Read Heroes Heroes Get", + "type": "array", + "items": { + "$ref": "#/components/schemas/HeroPublic" + }, + } } - } + }, }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } } - } + }, }, }, }, - }, - "post": { - "summary": "Create Hero", - "operationId": "create_hero_heroes__post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HeroCreate" - } - } - }, - "required": True, - }, - "responses": { - "200": { - "description": "Successful Response", + "post": { + "summary": "Create Hero", + "operationId": "create_hero_heroes__post", + "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HeroPublic" + "$ref": "#/components/schemas/HeroCreate" } } }, + "required": True, }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HeroPublic" + } } - } + }, + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, }, }, }, }, - }, - "/heroes/{hero_id}": { - "get": { - "summary": "Read Hero", - "operationId": "read_hero_heroes__hero_id__get", - "parameters": [ - { - "required": True, - "schema": {"title": "Hero Id", "type": "integer"}, - "name": "hero_id", - "in": "path", - } - ], - "responses": { - "200": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HeroPublic" + "/heroes/{hero_id}": { + "get": { + "summary": "Read Hero", + "operationId": "read_hero_heroes__hero_id__get", + "parameters": [ + { + "required": True, + "schema": {"title": "Hero Id", "type": "integer"}, + "name": "hero_id", + "in": "path", + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HeroPublic" + } } - } + }, }, - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } } - } + }, }, }, }, - }, - "patch": { - "summary": "Update Hero", - "operationId": "update_hero_heroes__hero_id__patch", - "parameters": [ - { - "required": True, - "schema": {"title": "Hero Id", "type": "integer"}, - "name": "hero_id", - "in": "path", - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HeroUpdate" - } + "patch": { + "summary": "Update Hero", + "operationId": "update_hero_heroes__hero_id__patch", + "parameters": [ + { + "required": True, + "schema": {"title": "Hero Id", "type": "integer"}, + "name": "hero_id", + "in": "path", } - }, - "required": True, - }, - "responses": { - "200": { - "description": "Successful Response", + ], + "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/HeroPublic" + "$ref": "#/components/schemas/HeroUpdate" } } }, + "required": True, }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HeroPublic" + } } - } + }, + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, }, }, }, }, }, - }, - "components": { - "schemas": { - "HTTPValidationError": { - "title": "HTTPValidationError", - "type": "object", - "properties": { - "detail": { - "title": "Detail", - "type": "array", - "items": { - "$ref": "#/components/schemas/ValidationError" - }, - } - }, - }, - "HeroCreate": { - "title": "HeroCreate", - "required": ["name", "secret_name", "password"], - "type": "object", - "properties": { - "name": {"title": "Name", "type": "string"}, - "secret_name": {"title": "Secret Name", "type": "string"}, - "age": IsDict( - { - "anyOf": [{"type": "integer"}, {"type": "null"}], - "title": "Age", + "components": { + "schemas": { + "HTTPValidationError": { + "title": "HTTPValidationError", + "type": "object", + "properties": { + "detail": { + "title": "Detail", + "type": "array", + "items": { + "$ref": "#/components/schemas/ValidationError" + }, } - ) - | IsDict( - {"title": "Age", "type": "integer"} # Pydantic v1 - ), - "password": {"type": "string", "title": "Password"}, + }, }, - }, - "HeroPublic": { - "title": "HeroPublic", - "required": ["name", "secret_name", "id"], - "type": "object", - "properties": { - "name": {"title": "Name", "type": "string"}, - "secret_name": {"title": "Secret Name", "type": "string"}, - "age": IsDict( - { - "anyOf": [{"type": "integer"}, {"type": "null"}], - "title": "Age", - } - ) - | IsDict( - {"title": "Age", "type": "integer"} # Pydantic v1 - ), - "id": {"title": "Id", "type": "integer"}, + "HeroCreate": { + "title": "HeroCreate", + "required": ["name", "secret_name", "password"], + "type": "object", + "properties": { + "name": {"title": "Name", "type": "string"}, + "secret_name": { + "title": "Secret Name", + "type": "string", + }, + "age": IsDict( + { + "anyOf": [ + {"type": "integer"}, + {"type": "null"}, + ], + "title": "Age", + } + ) + | IsDict( + {"title": "Age", "type": "integer"} # Pydantic v1 + ), + "password": {"type": "string", "title": "Password"}, + }, }, - }, - "HeroUpdate": { - "title": "HeroUpdate", - "type": "object", - "properties": { - "name": IsDict( - { - "anyOf": [{"type": "string"}, {"type": "null"}], - "title": "Name", - } - ) - | IsDict( - {"title": "Name", "type": "string"} # Pydantic v1 - ), - "secret_name": IsDict( - { - "anyOf": [{"type": "string"}, {"type": "null"}], + "HeroPublic": { + "title": "HeroPublic", + "required": ["name", "secret_name", "id"], + "type": "object", + "properties": { + "name": {"title": "Name", "type": "string"}, + "secret_name": { "title": "Secret Name", - } - ) - | IsDict( - {"title": "Secret Name", "type": "string"} # Pydantic v1 - ), - "age": IsDict( - { - "anyOf": [{"type": "integer"}, {"type": "null"}], - "title": "Age", - } - ) - | IsDict( - {"title": "Age", "type": "integer"} # Pydantic v1 - ), - "password": IsDict( - { - "anyOf": [{"type": "string"}, {"type": "null"}], - "title": "Password", - } - ) - | IsDict( - {"title": "Password", "type": "string"} # Pydantic v1 - ), + "type": "string", + }, + "age": IsDict( + { + "anyOf": [ + {"type": "integer"}, + {"type": "null"}, + ], + "title": "Age", + } + ) + | IsDict( + {"title": "Age", "type": "integer"} # Pydantic v1 + ), + "id": {"title": "Id", "type": "integer"}, + }, }, - }, - "ValidationError": { - "title": "ValidationError", - "required": ["loc", "msg", "type"], - "type": "object", - "properties": { - "loc": { - "title": "Location", - "type": "array", - "items": { - "anyOf": [{"type": "string"}, {"type": "integer"}] + "HeroUpdate": { + "title": "HeroUpdate", + "type": "object", + "properties": { + "name": IsDict( + { + "anyOf": [{"type": "string"}, {"type": "null"}], + "title": "Name", + } + ) + | IsDict( + {"title": "Name", "type": "string"} # Pydantic v1 + ), + "secret_name": IsDict( + { + "anyOf": [{"type": "string"}, {"type": "null"}], + "title": "Secret Name", + } + ) + | IsDict( + { + "title": "Secret Name", + "type": "string", + } # Pydantic v1 + ), + "age": IsDict( + { + "anyOf": [ + {"type": "integer"}, + {"type": "null"}, + ], + "title": "Age", + } + ) + | IsDict( + {"title": "Age", "type": "integer"} # Pydantic v1 + ), + "password": IsDict( + { + "anyOf": [{"type": "string"}, {"type": "null"}], + "title": "Password", + } + ) + | IsDict( + { + "title": "Password", + "type": "string", + } # Pydantic v1 + ), + }, + }, + "ValidationError": { + "title": "ValidationError", + "required": ["loc", "msg", "type"], + "type": "object", + "properties": { + "loc": { + "title": "Location", + "type": "array", + "items": { + "anyOf": [ + {"type": "string"}, + {"type": "integer"}, + ] + }, }, + "msg": {"title": "Message", "type": "string"}, + "type": {"title": "Error Type", "type": "string"}, }, - "msg": {"title": "Message", "type": "string"}, - "type": {"title": "Error Type", "type": "string"}, }, - }, - } - }, - } + } + }, + } + ) diff --git a/tests/test_tutorial/test_indexes/test_tutorial001.py b/tests/test_tutorial/test_indexes/test_tutorial001.py index e1d0d5f5..a75aa637 100644 --- a/tests/test_tutorial/test_indexes/test_tutorial001.py +++ b/tests/test_tutorial/test_indexes/test_tutorial001.py @@ -7,9 +7,11 @@ from unittest.mock import patch import pytest from sqlalchemy import inspect from sqlalchemy.engine.reflection import Inspector -from sqlmodel import create_engine, SQLModel # Added SQLModel for potential use if main doesn't create tables +from sqlmodel import ( # Added SQLModel for potential use if main doesn't create tables + create_engine, +) -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from ...conftest import PrintMock, get_testing_print_function, needs_py310 @pytest.fixture( @@ -19,7 +21,9 @@ from ...conftest import get_testing_print_function, needs_py310, PrintMock pytest.param("tutorial001_py310", marks=needs_py310), ], ) -def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any): # clear_sqlmodel ensures fresh DB state +def get_module( + request: pytest.FixtureRequest, clear_sqlmodel: Any +): # clear_sqlmodel ensures fresh DB state module_name = request.param full_module_name = f"docs_src.tutorial.indexes.{module_name}" @@ -31,16 +35,19 @@ def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any): # clear_sql # These tests usually define engine in their main() or globally. # We'll ensure it's set up for the test a standard way. mod.sqlite_url = "sqlite://" - mod.engine = create_engine(mod.sqlite_url) # connect_args not typically in these non-FastAPI examples + mod.engine = create_engine( + mod.sqlite_url + ) # connect_args not typically in these non-FastAPI examples # Ensure tables are created. Some tutorials do it in main, others expect it externally. # If mod.main() is expected to create tables, this might be redundant but safe. # If Hero model is defined globally, SQLModel.metadata.create_all(mod.engine) can be used. if hasattr(mod, "Hero") and hasattr(mod.Hero, "metadata"): - mod.Hero.metadata.create_all(mod.engine) - elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): # Fallback if Hero specific metadata not found - mod.SQLModel.metadata.create_all(mod.engine) - + mod.Hero.metadata.create_all(mod.engine) + elif hasattr(mod, "SQLModel") and hasattr( + mod.SQLModel, "metadata" + ): # Fallback if Hero specific metadata not found + mod.SQLModel.metadata.create_all(mod.engine) return mod @@ -83,23 +90,30 @@ def test_tutorial(print_mock: PrintMock, module: types.ModuleType): found_indexes_simplified = [] for index in indexes: - found_indexes_simplified.append({ - "name": index["name"], - "column_names": sorted(index["column_names"]), # Sort for consistency - "unique": index["unique"], - # Not including dialect_options as it can vary or be empty - }) + found_indexes_simplified.append( + { + "name": index["name"], + "column_names": sorted(index["column_names"]), # Sort for consistency + "unique": index["unique"], + # Not including dialect_options as it can vary or be empty + } + ) expected_indexes_simplified = [] for index in expected_indexes: - expected_indexes_simplified.append({ - "name": index["name"], - "column_names": sorted(index["column_names"]), - "unique": index["unique"], - }) + expected_indexes_simplified.append( + { + "name": index["name"], + "column_names": sorted(index["column_names"]), + "unique": index["unique"], + } + ) for expected_index in expected_indexes_simplified: - assert expected_index in found_indexes_simplified, f"Expected index {expected_index['name']} not found or mismatch." + assert expected_index in found_indexes_simplified, ( + f"Expected index {expected_index['name']} not found or mismatch." + ) - assert len(found_indexes_simplified) == len(expected_indexes_simplified), \ + assert len(found_indexes_simplified) == len(expected_indexes_simplified), ( f"Mismatch in number of indexes. Found: {len(found_indexes_simplified)}, Expected: {len(expected_indexes_simplified)}" + ) diff --git a/tests/test_tutorial/test_indexes/test_tutorial002.py b/tests/test_tutorial/test_indexes/test_tutorial002.py index 97454c0b..687a15c3 100644 --- a/tests/test_tutorial/test_indexes/test_tutorial002.py +++ b/tests/test_tutorial/test_indexes/test_tutorial002.py @@ -7,9 +7,9 @@ from unittest.mock import patch import pytest from sqlalchemy import inspect from sqlalchemy.engine.reflection import Inspector -from sqlmodel import create_engine, SQLModel # Added SQLModel +from sqlmodel import create_engine # Added SQLModel -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from ...conftest import PrintMock, get_testing_print_function, needs_py310 @pytest.fixture( @@ -32,9 +32,9 @@ def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any): mod.engine = create_engine(mod.sqlite_url) if hasattr(mod, "Hero") and hasattr(mod.Hero, "metadata"): - mod.Hero.metadata.create_all(mod.engine) + mod.Hero.metadata.create_all(mod.engine) elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod @@ -55,7 +55,7 @@ def test_tutorial(print_mock: PrintMock, module: types.ModuleType): expected_indexes = [ { "name": "ix_hero_name", - "dialect_options": {}, # Included for completeness but not strictly compared below + "dialect_options": {}, # Included for completeness but not strictly compared below "column_names": ["name"], "unique": 0, }, @@ -69,22 +69,29 @@ def test_tutorial(print_mock: PrintMock, module: types.ModuleType): found_indexes_simplified = [] for index in indexes: - found_indexes_simplified.append({ - "name": index["name"], - "column_names": sorted(index["column_names"]), - "unique": index["unique"], - }) + found_indexes_simplified.append( + { + "name": index["name"], + "column_names": sorted(index["column_names"]), + "unique": index["unique"], + } + ) expected_indexes_simplified = [] for index in expected_indexes: - expected_indexes_simplified.append({ - "name": index["name"], - "column_names": sorted(index["column_names"]), - "unique": index["unique"], - }) + expected_indexes_simplified.append( + { + "name": index["name"], + "column_names": sorted(index["column_names"]), + "unique": index["unique"], + } + ) for expected_index in expected_indexes_simplified: - assert expected_index in found_indexes_simplified, f"Expected index {expected_index['name']} not found or mismatch." + assert expected_index in found_indexes_simplified, ( + f"Expected index {expected_index['name']} not found or mismatch." + ) - assert len(found_indexes_simplified) == len(expected_indexes_simplified), \ + assert len(found_indexes_simplified) == len(expected_indexes_simplified), ( f"Mismatch in number of indexes. Found: {len(found_indexes_simplified)}, Expected: {len(expected_indexes_simplified)}" + ) diff --git a/tests/test_tutorial/test_insert/test_tutorial001.py b/tests/test_tutorial/test_insert/test_tutorial001.py index 2c7bd965..4745dbd2 100644 --- a/tests/test_tutorial/test_insert/test_tutorial001.py +++ b/tests/test_tutorial/test_insert/test_tutorial001.py @@ -4,9 +4,13 @@ import types from typing import Any import pytest -from sqlmodel import create_engine, SQLModel, Session, select # Ensure all necessary SQLModel parts are imported +from sqlmodel import ( # Ensure all necessary SQLModel parts are imported + Session, + create_engine, + select, +) -from ...conftest import needs_py310 # Adjusted for typical conftest location +from ...conftest import needs_py310 # Adjusted for typical conftest location @pytest.fixture( @@ -25,26 +29,28 @@ def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any): else: mod = importlib.import_module(full_module_name) - mod.sqlite_url = "sqlite://" # Ensure this is consistent - mod.engine = create_engine(mod.sqlite_url) # Standard engine setup + mod.sqlite_url = "sqlite://" # Ensure this is consistent + mod.engine = create_engine(mod.sqlite_url) # Standard engine setup # Table creation is usually in main() for these examples or implicitly by SQLModel.metadata.create_all # If main() creates tables, calling it here might be redundant if test_tutorial also calls it. # For safety, ensure tables are created if Hero model is defined directly in the module. if hasattr(mod, "Hero") and hasattr(mod.Hero, "metadata"): - mod.Hero.metadata.create_all(mod.engine) + mod.Hero.metadata.create_all(mod.engine) elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod -def test_tutorial(module: types.ModuleType, clear_sqlmodel: Any): # clear_sqlmodel still useful for DB state +def test_tutorial( + module: types.ModuleType, clear_sqlmodel: Any +): # clear_sqlmodel still useful for DB state # If module.main() is responsible for creating data and potentially tables, call it. # The fixture get_module now ensures the engine is set and tables are created if models are defined. # If main() also sets up engine/tables, ensure it's idempotent or adjust. # Typically, main() in these tutorials contains the primary logic to be tested (e.g., data insertion). - module.main() # This should execute the tutorial's data insertion logic + module.main() # This should execute the tutorial's data insertion logic with Session(module.engine) as session: heroes = session.exec(select(module.Hero)).all() diff --git a/tests/test_tutorial/test_insert/test_tutorial002.py b/tests/test_tutorial/test_insert/test_tutorial002.py index d8cfe950..d90d4634 100644 --- a/tests/test_tutorial/test_insert/test_tutorial002.py +++ b/tests/test_tutorial/test_insert/test_tutorial002.py @@ -4,13 +4,13 @@ import types from typing import Any import pytest -from sqlmodel import create_engine, SQLModel, Session, select +from sqlmodel import Session, SQLModel, create_engine, select -from ...conftest import needs_py310, clear_sqlmodel as clear_sqlmodel_fixture # Use aliased import +from ...conftest import needs_py310 # Use aliased import @pytest.fixture( - name="module", # Fixture provides the main module to be tested (tutorial002 variant) + name="module", # Fixture provides the main module to be tested (tutorial002 variant) params=[ "tutorial002", pytest.param("tutorial002_py310", marks=needs_py310), @@ -76,8 +76,10 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel_fixture: Any): return mod_tut002 -def test_tutorial(module: types.ModuleType, clear_sqlmodel_fixture: Any): # `module` is tutorial002 with .Team attached - module.main() # Executes the tutorial002's data insertion logic +def test_tutorial( + module: types.ModuleType, clear_sqlmodel_fixture: Any +): # `module` is tutorial002 with .Team attached + module.main() # Executes the tutorial002's data insertion logic with Session(module.engine) as session: hero_spider_boy = session.exec( @@ -88,7 +90,9 @@ def test_tutorial(module: types.ModuleType, clear_sqlmodel_fixture: Any): # `mod select(module.Team).where(module.Team.name == "Preventers") ).one() assert hero_spider_boy.team_id == team_preventers.id - assert hero_spider_boy.team == team_preventers # This checks the relationship resolves + assert ( + hero_spider_boy.team == team_preventers + ) # This checks the relationship resolves heroes = session.exec(select(module.Hero)).all() diff --git a/tests/test_tutorial/test_insert/test_tutorial003.py b/tests/test_tutorial/test_insert/test_tutorial003.py index ecb42352..566cb42b 100644 --- a/tests/test_tutorial/test_insert/test_tutorial003.py +++ b/tests/test_tutorial/test_insert/test_tutorial003.py @@ -4,7 +4,7 @@ import types from typing import Any import pytest -from sqlmodel import create_engine, SQLModel, Session, select +from sqlmodel import Session, create_engine, select from ...conftest import needs_py310 @@ -30,12 +30,16 @@ def get_module(request: pytest.FixtureRequest, clear_sqlmodel: Any): # Create tables. Tutorial003.py in insert focuses on refresh, so tables and initial data are key. # It's likely main() handles this. If not, direct creation is a fallback. - if hasattr(mod, "create_db_and_tables"): # Some tutorials use this helper + if hasattr(mod, "create_db_and_tables"): # Some tutorials use this helper mod.create_db_and_tables() - elif hasattr(mod, "Hero") and hasattr(mod.Hero, "metadata"): # Check for Hero model metadata - mod.Hero.metadata.create_all(mod.engine) - elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): # Generic fallback - mod.SQLModel.metadata.create_all(mod.engine) + elif hasattr(mod, "Hero") and hasattr( + mod.Hero, "metadata" + ): # Check for Hero model metadata + mod.Hero.metadata.create_all(mod.engine) + elif hasattr(mod, "SQLModel") and hasattr( + mod.SQLModel, "metadata" + ): # Generic fallback + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_limit_and_offset/test_tutorial001.py b/tests/test_tutorial/test_limit_and_offset/test_tutorial001.py index 3978ca09..ab73b1c0 100644 --- a/tests/test_tutorial/test_limit_and_offset/test_tutorial001.py +++ b/tests/test_tutorial/test_limit_and_offset/test_tutorial001.py @@ -5,12 +5,11 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel # Added SQLModel for table creation +from sqlmodel import create_engine # Added SQLModel for table creation -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from ...conftest import PrintMock, get_testing_print_function, needs_py310 - -expected_calls_tutorial001 = [ # Renamed to be specific +expected_calls_tutorial001 = [ # Renamed to be specific [ [ {"id": 1, "name": "Deadpond", "secret_name": "Dive Wilson", "age": None}, @@ -33,7 +32,9 @@ expected_calls_tutorial001 = [ # Renamed to be specific pytest.param("tutorial001_py310", marks=needs_py310), ], ) -def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): # Changed name for clarity +def module_fixture( + request: pytest.FixtureRequest, clear_sqlmodel: Any +): # Changed name for clarity module_name = request.param # Corrected module path full_module_name = f"docs_src.tutorial.offset_and_limit.{module_name}" @@ -50,9 +51,9 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): # Chang # If not, this is a safeguard. if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): # This function should ideally call SQLModel.metadata.create_all(engine) - pass # Assuming main() will call it or tables are created before select + pass # Assuming main() will call it or tables are created before select elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_limit_and_offset/test_tutorial002.py b/tests/test_tutorial/test_limit_and_offset/test_tutorial002.py index cb89901e..0afede24 100644 --- a/tests/test_tutorial/test_limit_and_offset/test_tutorial002.py +++ b/tests/test_tutorial/test_limit_and_offset/test_tutorial002.py @@ -5,12 +5,11 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel +from sqlmodel import create_engine -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from ...conftest import PrintMock, get_testing_print_function, needs_py310 - -expected_calls_tutorial002 = [ # Renamed for specificity +expected_calls_tutorial002 = [ # Renamed for specificity [ [ { @@ -46,9 +45,9 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): mod.engine = create_engine(mod.sqlite_url) if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): - pass # Assuming main() calls it + pass # Assuming main() calls it elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_limit_and_offset/test_tutorial003.py b/tests/test_tutorial/test_limit_and_offset/test_tutorial003.py index e74b4513..30cd51d9 100644 --- a/tests/test_tutorial/test_limit_and_offset/test_tutorial003.py +++ b/tests/test_tutorial/test_limit_and_offset/test_tutorial003.py @@ -5,12 +5,11 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel +from sqlmodel import create_engine -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from ...conftest import PrintMock, get_testing_print_function, needs_py310 - -expected_calls_tutorial003 = [ # Renamed for specificity +expected_calls_tutorial003 = [ # Renamed for specificity [ [ { @@ -44,9 +43,9 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): mod.engine = create_engine(mod.sqlite_url) if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): - pass # Assuming main() calls it + pass # Assuming main() calls it elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_limit_and_offset/test_tutorial004.py b/tests/test_tutorial/test_limit_and_offset/test_tutorial004.py index e7c35d84..7969e4c9 100644 --- a/tests/test_tutorial/test_limit_and_offset/test_tutorial004.py +++ b/tests/test_tutorial/test_limit_and_offset/test_tutorial004.py @@ -5,12 +5,11 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel +from sqlmodel import create_engine -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from ...conftest import PrintMock, get_testing_print_function, needs_py310 - -expected_calls_tutorial004 = [ # Renamed for specificity +expected_calls_tutorial004 = [ # Renamed for specificity [ [ {"name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36, "id": 6}, @@ -40,9 +39,9 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): mod.engine = create_engine(mod.sqlite_url) if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): - pass # Assuming main() calls it + pass # Assuming main() calls it elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_many_to_many/test_tutorial001.py b/tests/test_tutorial/test_many_to_many/test_tutorial001.py index 7cb20196..6e960751 100644 --- a/tests/test_tutorial/test_many_to_many/test_tutorial001.py +++ b/tests/test_tutorial/test_many_to_many/test_tutorial001.py @@ -5,12 +5,11 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel +from sqlmodel import create_engine -from ...conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock +from ...conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310 - -expected_calls_tutorial001 = [ # Renamed for specificity +expected_calls_tutorial001 = [ # Renamed for specificity [ "Deadpond:", {"id": 1, "secret_name": "Dive Wilson", "age": None, "name": "Deadpond"}, @@ -68,7 +67,9 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): # We assume it's called by main() or the test setup is fine if it's not explicitly called here. pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) # Create all tables known to this module's metadata + mod.SQLModel.metadata.create_all( + mod.engine + ) # Create all tables known to this module's metadata return mod diff --git a/tests/test_tutorial/test_many_to_many/test_tutorial002.py b/tests/test_tutorial/test_many_to_many/test_tutorial002.py index 53e3ccc3..958232fb 100644 --- a/tests/test_tutorial/test_many_to_many/test_tutorial002.py +++ b/tests/test_tutorial/test_many_to_many/test_tutorial002.py @@ -5,12 +5,11 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel +from sqlmodel import create_engine -from ...conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock +from ...conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310 - -expected_calls_tutorial002 = [ # Renamed for specificity +expected_calls_tutorial002 = [ # Renamed for specificity [ "Deadpond:", {"id": 1, "secret_name": "Dive Wilson", "age": None, "name": "Deadpond"}, @@ -91,7 +90,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_many_to_many/test_tutorial003.py b/tests/test_tutorial/test_many_to_many/test_tutorial003.py index f2889de8..27ef8f9a 100644 --- a/tests/test_tutorial/test_many_to_many/test_tutorial003.py +++ b/tests/test_tutorial/test_many_to_many/test_tutorial003.py @@ -5,12 +5,11 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel +from sqlmodel import create_engine -from ...conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock +from ...conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310 - -expected_calls_tutorial003 = [ # Renamed for specificity +expected_calls_tutorial003 = [ # Renamed for specificity [ "Z-Force hero:", {"name": "Deadpond", "secret_name": "Dive Wilson", "id": 1, "age": None}, @@ -87,7 +86,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_one/test_tutorial001.py b/tests/test_tutorial/test_one/test_tutorial001.py index 4cf20667..1df68168 100644 --- a/tests/test_tutorial/test_one/test_tutorial001.py +++ b/tests/test_tutorial/test_one/test_tutorial001.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel # Added SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine # Added SQLModel +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial001 = [ [ @@ -48,7 +47,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): # or even lead to issues if not idempotent. Let main() handle it. pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_one/test_tutorial002.py b/tests/test_tutorial/test_one/test_tutorial002.py index f904eb88..de557912 100644 --- a/tests/test_tutorial/test_one/test_tutorial002.py +++ b/tests/test_tutorial/test_one/test_tutorial002.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial002 = [["Hero:", None]] @@ -35,7 +34,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_one/test_tutorial003.py b/tests/test_tutorial/test_one/test_tutorial003.py index 34240cfd..cb8e6f6f 100644 --- a/tests/test_tutorial/test_one/test_tutorial003.py +++ b/tests/test_tutorial/test_one/test_tutorial003.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial003 = [ [ @@ -40,7 +39,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_one/test_tutorial004.py b/tests/test_tutorial/test_one/test_tutorial004.py index 56cb6b5d..ad8738db 100644 --- a/tests/test_tutorial/test_one/test_tutorial004.py +++ b/tests/test_tutorial/test_one/test_tutorial004.py @@ -5,17 +5,20 @@ from typing import Any from unittest.mock import patch import pytest -from sqlalchemy.exc import MultipleResultsFound # Keep this import -from sqlmodel import create_engine, SQLModel, Session, delete # Ensure Session and delete are imported - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlalchemy.exc import MultipleResultsFound # Keep this import +from sqlmodel import ( # Ensure Session and delete are imported + Session, + create_engine, + delete, +) +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial004 = [ [ "Hero:", { - "id": 1, # Assuming ID will be 1 after clearing and adding one hero + "id": 1, # Assuming ID will be 1 after clearing and adding one hero "name": "Test Hero", "secret_name": "Secret Test Hero", "age": 24, @@ -50,7 +53,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): # The original test calls main() first, then manipulates DB. # The fixture should ensure tables are ready. if hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod @@ -63,17 +66,19 @@ def test_tutorial(module: types.ModuleType, print_mock: PrintMock, clear_sqlmode # First, let main() run to create initial data and trigger the expected exception. # The create_db_and_tables is called within main() in docs_src/tutorial/one/tutorial004.py with pytest.raises(MultipleResultsFound): - module.main() # This function in the tutorial is expected to raise this + module.main() # This function in the tutorial is expected to raise this # After the expected exception, the original test clears the Hero table and adds a specific hero. with Session(module.engine) as session: # The delete statement needs the actual Hero class from the module session.exec(delete(module.Hero)) - session.add(module.Hero(name="Test Hero", secret_name="Secret Test Hero", age=24)) + session.add( + module.Hero(name="Test Hero", secret_name="Secret Test Hero", age=24) + ) session.commit() # Now, test the select_heroes function part with patch("builtins.print", new=get_testing_print_function(print_mock.calls)): - module.select_heroes() # This function is defined in the tutorial module + module.select_heroes() # This function is defined in the tutorial module assert print_mock.calls == expected_calls_tutorial004 diff --git a/tests/test_tutorial/test_one/test_tutorial005.py b/tests/test_tutorial/test_one/test_tutorial005.py index eaf88d05..da45d5e5 100644 --- a/tests/test_tutorial/test_one/test_tutorial005.py +++ b/tests/test_tutorial/test_one/test_tutorial005.py @@ -5,11 +5,14 @@ from typing import Any from unittest.mock import patch import pytest -from sqlalchemy.exc import NoResultFound # Keep this import -from sqlmodel import create_engine, SQLModel, Session, delete # Ensure Session and delete - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlalchemy.exc import NoResultFound # Keep this import +from sqlmodel import ( # Ensure Session and delete + Session, + create_engine, + delete, +) +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial005 = [ [ @@ -49,7 +52,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): # The create_db_and_tables() is called inside main() *after* the select that fails. # So, the fixture should create tables. if hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) # Create tables + mod.SQLModel.metadata.create_all(mod.engine) # Create tables return mod @@ -69,16 +72,20 @@ def test_tutorial(module: types.ModuleType, print_mock: PrintMock, clear_sqlmode # The `clear_sqlmodel` fixture ensures the DB is clean (tables might be recreated by module_fixture). with pytest.raises(NoResultFound): - module.main() # This should execute the part of main() that expects no results + module.main() # This should execute the part of main() that expects no results # Phase 2: Test select_heroes() after manually adding a hero # This part matches the original test's logic after the expected exception. with Session(module.engine) as session: - session.exec(delete(module.Hero)) # Clear any heroes if main() somehow added them - session.add(module.Hero(name="Test Hero", secret_name="Secret Test Hero", age=24)) + session.exec( + delete(module.Hero) + ) # Clear any heroes if main() somehow added them + session.add( + module.Hero(name="Test Hero", secret_name="Secret Test Hero", age=24) + ) session.commit() with patch("builtins.print", new=get_testing_print_function(print_mock.calls)): - module.select_heroes() # This function is defined in the tutorial module + module.select_heroes() # This function is defined in the tutorial module assert print_mock.calls == expected_calls_tutorial005 diff --git a/tests/test_tutorial/test_one/test_tutorial006.py b/tests/test_tutorial/test_one/test_tutorial006.py index 7725c825..e7c55b6a 100644 --- a/tests/test_tutorial/test_one/test_tutorial006.py +++ b/tests/test_tutorial/test_one/test_tutorial006.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial006 = [ [ @@ -40,7 +39,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_one/test_tutorial007.py b/tests/test_tutorial/test_one/test_tutorial007.py index 8ad3c798..c6ded93b 100644 --- a/tests/test_tutorial/test_one/test_tutorial007.py +++ b/tests/test_tutorial/test_one/test_tutorial007.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial007 = [ [ @@ -40,7 +39,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_one/test_tutorial008.py b/tests/test_tutorial/test_one/test_tutorial008.py index 71790507..7b0e0e85 100644 --- a/tests/test_tutorial/test_one/test_tutorial008.py +++ b/tests/test_tutorial/test_one/test_tutorial008.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial008 = [ [ @@ -40,7 +39,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_one/test_tutorial009.py b/tests/test_tutorial/test_one/test_tutorial009.py index ca94cf80..d697be0e 100644 --- a/tests/test_tutorial/test_one/test_tutorial009.py +++ b/tests/test_tutorial/test_one/test_tutorial009.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial009 = [["Hero:", None]] @@ -35,7 +34,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial001.py b/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial001.py index b4091922..acc598ee 100644 --- a/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial001.py +++ b/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial001.py @@ -5,11 +5,10 @@ from typing import Any from unittest.mock import patch import pytest -from sqlalchemy.exc import SAWarning # Keep this import -from sqlmodel import create_engine, SQLModel - -from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock +from sqlalchemy.exc import SAWarning # Keep this import +from sqlmodel import create_engine +from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310 expected_calls_tutorial001 = [ [ @@ -186,12 +185,12 @@ expected_calls_tutorial001 = [ "age": None, "id": 3, "secret_name": "Pedro Parqueador", - "team_id": 2, # Still has team_id locally until committed and refreshed + "team_id": 2, # Still has team_id locally until committed and refreshed "name": "Spider-Boy", }, ], [ - "Preventers Team Heroes again:", # Before commit, team still has Spider-Boy + "Preventers Team Heroes again:", # Before commit, team still has Spider-Boy [ { "age": 48, @@ -232,7 +231,7 @@ expected_calls_tutorial001 = [ ], ["After committing"], [ - "Spider-Boy after commit:", # team_id is None after commit and refresh + "Spider-Boy after commit:", # team_id is None after commit and refresh { "age": None, "id": 3, @@ -242,7 +241,7 @@ expected_calls_tutorial001 = [ }, ], [ - "Preventers Team Heroes after commit:", # Spider-Boy is removed + "Preventers Team Heroes after commit:", # Spider-Boy is removed [ { "age": 48, @@ -287,7 +286,9 @@ expected_calls_tutorial001 = [ ) def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): module_name = request.param - full_module_name = f"docs_src.tutorial.relationship_attributes.back_populates.{module_name}" + full_module_name = ( + f"docs_src.tutorial.relationship_attributes.back_populates.{module_name}" + ) if full_module_name in sys.modules: mod = importlib.reload(sys.modules[full_module_name]) @@ -300,7 +301,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial002.py b/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial002.py index 62e3c79a..c4dbda41 100644 --- a/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial002.py +++ b/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial002.py @@ -5,11 +5,11 @@ from typing import Any from unittest.mock import patch import pytest -# SAWarning is not expected in this tutorial's test, so not importing it from sqlalchemy.exc -from sqlmodel import create_engine, SQLModel -from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock +# SAWarning is not expected in this tutorial's test, so not importing it from sqlalchemy.exc +from sqlmodel import create_engine +from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310 expected_calls_tutorial002 = [ [ @@ -280,7 +280,9 @@ expected_calls_tutorial002 = [ ) def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): module_name = request.param - full_module_name = f"docs_src.tutorial.relationship_attributes.back_populates.{module_name}" + full_module_name = ( + f"docs_src.tutorial.relationship_attributes.back_populates.{module_name}" + ) if full_module_name in sys.modules: mod = importlib.reload(sys.modules[full_module_name]) @@ -293,7 +295,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial003.py b/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial003.py index 15477ed2..16b6a9ee 100644 --- a/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial003.py +++ b/tests/test_tutorial/test_relationship_attributes/test_back_populates/test_tutorial003.py @@ -4,11 +4,11 @@ import types from typing import Any import pytest -from sqlalchemy import inspect # Keep this -from sqlalchemy.engine.reflection import Inspector # Keep this -from sqlmodel import create_engine, SQLModel +from sqlalchemy import inspect # Keep this +from sqlalchemy.engine.reflection import Inspector # Keep this +from sqlmodel import create_engine -from ....conftest import needs_py39, needs_py310 # Keep conftest imports +from ....conftest import needs_py39, needs_py310 # Keep conftest imports @pytest.fixture( @@ -21,7 +21,9 @@ from ....conftest import needs_py39, needs_py310 # Keep conftest imports ) def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): module_name = request.param - full_module_name = f"docs_src.tutorial.relationship_attributes.back_populates.{module_name}" + full_module_name = ( + f"docs_src.tutorial.relationship_attributes.back_populates.{module_name}" + ) if full_module_name in sys.modules: mod = importlib.reload(sys.modules[full_module_name]) @@ -41,12 +43,14 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): return mod -def test_tutorial(module: types.ModuleType, clear_sqlmodel: Any): # print_mock not needed +def test_tutorial( + module: types.ModuleType, clear_sqlmodel: Any +): # print_mock not needed # The main() function in the tutorial module is expected to create tables. module.main() insp: Inspector = inspect(module.engine) assert insp.has_table(str(module.Hero.__tablename__)) - assert insp.has_table(str(module.Weapon.__tablename__)) # Specific to tutorial003 + assert insp.has_table(str(module.Weapon.__tablename__)) # Specific to tutorial003 assert insp.has_table(str(module.Power.__tablename__)) # Specific to tutorial003 assert insp.has_table(str(module.Team.__tablename__)) diff --git a/tests/test_tutorial/test_relationship_attributes/test_create_and_update_relationships/test_tutorial001.py b/tests/test_tutorial/test_relationship_attributes/test_create_and_update_relationships/test_tutorial001.py index e48aca5e..f1f4824a 100644 --- a/tests/test_tutorial/test_relationship_attributes/test_create_and_update_relationships/test_tutorial001.py +++ b/tests/test_tutorial/test_relationship_attributes/test_create_and_update_relationships/test_tutorial001.py @@ -5,11 +5,10 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel +from sqlmodel import create_engine # Assuming conftest.py is at tests/conftest.py, the path should be ....conftest -from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock - +from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310 expected_calls_tutorial001 = [ [ @@ -113,7 +112,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): # Assuming main() or create_db_and_tables() handles table creation pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_relationship_attributes/test_define_relationship_attributes/test_tutorial001.py b/tests/test_tutorial/test_relationship_attributes/test_define_relationship_attributes/test_tutorial001.py index 3f2ff465..5c6d01d2 100644 --- a/tests/test_tutorial/test_relationship_attributes/test_define_relationship_attributes/test_tutorial001.py +++ b/tests/test_tutorial/test_relationship_attributes/test_define_relationship_attributes/test_tutorial001.py @@ -5,11 +5,10 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel +from sqlmodel import create_engine # Adjust the import path based on the file's new location or structure -from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock - +from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310 expected_calls_tutorial001 = [ [ @@ -69,7 +68,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): # Assuming main() or create_db_and_tables() handles table creation pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial001.py b/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial001.py index f2603dbd..ebf0c7b2 100644 --- a/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial001.py +++ b/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial001.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock +from sqlmodel import create_engine +from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310 expected_calls_tutorial001 = [ [ @@ -88,7 +87,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial002.py b/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial002.py index df4797fa..a2c55609 100644 --- a/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial002.py +++ b/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial002.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock +from sqlmodel import create_engine +from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310 expected_calls_tutorial002 = [ [ @@ -105,7 +104,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial003.py b/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial003.py index 842a151e..6742dc78 100644 --- a/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial003.py +++ b/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial003.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock +from sqlmodel import create_engine +from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310 expected_calls_tutorial003 = [ [ @@ -105,7 +104,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial004.py b/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial004.py index 9e602fa5..4d9df5bc 100644 --- a/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial004.py +++ b/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial004.py @@ -6,14 +6,15 @@ from unittest.mock import patch import pytest from sqlalchemy.exc import IntegrityError -from sqlmodel import create_engine, SQLModel, Session, select, delete # Added Session, select, delete just in case module uses them - -from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock +from sqlmodel import ( # Added Session, select, delete just in case module uses them + create_engine, +) +from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310 expected_calls_tutorial004 = [ [ - "Created hero:", # From create_heroes() called by main() + "Created hero:", # From create_heroes() called by main() { "age": None, "id": 1, @@ -39,11 +40,11 @@ expected_calls_tutorial004 = [ "id": 3, "name": "Spider-Boy", "secret_name": "Pedro Parqueador", - "team_id": None, # Initially no team + "team_id": None, # Initially no team }, ], [ - "Updated hero:", # Spider-Boy gets a team + "Updated hero:", # Spider-Boy gets a team { "age": None, "id": 3, @@ -53,7 +54,7 @@ expected_calls_tutorial004 = [ }, ], [ - "Team Wakaland:", # Team Wakaland is created + "Team Wakaland:", # Team Wakaland is created {"headquarters": "Wakaland Capital City", "id": 3, "name": "Wakaland"}, ], # The main() in tutorial004.py (cascade_delete) is try_to_delete_team_preventers_alternative. @@ -84,10 +85,10 @@ expected_calls_tutorial004_corrected = [ "Created hero:", { "age": None, - "id": 1, # Assuming IDs start from 1 after clear_sqlmodel + "id": 1, # Assuming IDs start from 1 after clear_sqlmodel "name": "Deadpond", "secret_name": "Dive Wilson", - "team_id": 1, # Assuming Preventers team gets ID 1 + "team_id": 1, # Assuming Preventers team gets ID 1 }, ], [ @@ -97,7 +98,7 @@ expected_calls_tutorial004_corrected = [ "id": 2, "name": "Rusty-Man", "secret_name": "Tommy Sharp", - "team_id": 1, # Also Preventers + "team_id": 1, # Also Preventers }, ], [ @@ -107,7 +108,7 @@ expected_calls_tutorial004_corrected = [ "id": 3, "name": "Spider-Boy", "secret_name": "Pedro Parqueador", - "team_id": 1, # Also Preventers + "team_id": 1, # Also Preventers }, ], ] @@ -138,7 +139,9 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): # However, if other functions from module were tested independently, tables would need to exist. # For safety and consistency with other fixtures: if hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) # Ensure tables are there before main might use them. + mod.SQLModel.metadata.create_all( + mod.engine + ) # Ensure tables are there before main might use them. return mod @@ -153,7 +156,7 @@ def test_tutorial(module: types.ModuleType, print_mock: PrintMock, clear_sqlmode with pytest.raises(IntegrityError) as excinfo: with patch("builtins.print", new=get_testing_print_function(print_mock.calls)): - module.main() # This is try_to_delete_team_preventers_alternative + module.main() # This is try_to_delete_team_preventers_alternative # Check the prints that occurred *before* the exception was raised assert print_mock.calls == expected_calls_tutorial004_corrected diff --git a/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial005.py b/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial005.py index a1364091..7679d7e0 100644 --- a/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial005.py +++ b/tests/test_tutorial/test_relationship_attributes/test_delete_records_relationship/test_tutorial005.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock +from sqlmodel import create_engine +from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310 expected_calls_tutorial005 = [ [ @@ -56,7 +55,7 @@ expected_calls_tutorial005 = [ {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"}, ], [ - "Team with removed heroes:", # This print is specific to tutorial005.py's main() + "Team with removed heroes:", # This print is specific to tutorial005.py's main() {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"}, ], [ @@ -109,7 +108,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial001.py b/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial001.py index eca37f3f..a8bd0ab2 100644 --- a/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial001.py +++ b/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial001.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock +from sqlmodel import create_engine +from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310 expected_calls_tutorial001 = [ [ @@ -106,7 +105,9 @@ expected_calls_tutorial001 = [ ) def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): module_name = request.param - full_module_name = f"docs_src.tutorial.relationship_attributes.read_relationships.{module_name}" + full_module_name = ( + f"docs_src.tutorial.relationship_attributes.read_relationships.{module_name}" + ) if full_module_name in sys.modules: mod = importlib.reload(sys.modules[full_module_name]) @@ -119,7 +120,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial002.py b/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial002.py index 3a77ce87..53140dbf 100644 --- a/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial002.py +++ b/tests/test_tutorial/test_relationship_attributes/test_read_relationships/test_tutorial002.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ....conftest import get_testing_print_function, needs_py39, needs_py310, PrintMock +from sqlmodel import create_engine +from ....conftest import PrintMock, get_testing_print_function, needs_py39, needs_py310 expected_calls_tutorial002 = [ [ @@ -131,7 +130,7 @@ expected_calls_tutorial002 = [ "age": None, "id": 3, "secret_name": "Pedro Parqueador", - "team_id": None, # This is after Spider-Boy's team is set to None + "team_id": None, # This is after Spider-Boy's team is set to None "name": "Spider-Boy", }, ], @@ -148,7 +147,9 @@ expected_calls_tutorial002 = [ ) def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): module_name = request.param - full_module_name = f"docs_src.tutorial.relationship_attributes.read_relationships.{module_name}" + full_module_name = ( + f"docs_src.tutorial.relationship_attributes.read_relationships.{module_name}" + ) if full_module_name in sys.modules: mod = importlib.reload(sys.modules[full_module_name]) @@ -161,7 +162,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_where/test_tutorial001.py b/tests/test_tutorial/test_where/test_tutorial001.py index 165bba32..1d85539a 100644 --- a/tests/test_tutorial/test_where/test_tutorial001.py +++ b/tests/test_tutorial/test_where/test_tutorial001.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial001 = [ [ @@ -42,9 +41,9 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): mod.engine = create_engine(mod.sqlite_url) if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): - pass # Assuming main() calls it or it's handled if needed by the tutorial's main logic + pass # Assuming main() calls it or it's handled if needed by the tutorial's main logic elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_where/test_tutorial002.py b/tests/test_tutorial/test_where/test_tutorial002.py index ce48271f..b0daf4d8 100644 --- a/tests/test_tutorial/test_where/test_tutorial002.py +++ b/tests/test_tutorial/test_where/test_tutorial002.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial002 = [ [ @@ -45,7 +44,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_where/test_tutorial003.py b/tests/test_tutorial/test_where/test_tutorial003.py index 9d7bb2ab..c687e3c6 100644 --- a/tests/test_tutorial/test_where/test_tutorial003.py +++ b/tests/test_tutorial/test_where/test_tutorial003.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 # expected_calls is defined within the test_tutorial function in the original test # This is fine as it's used only there. @@ -36,7 +35,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod @@ -58,7 +57,9 @@ def test_tutorial(module: types.ModuleType, print_mock: PrintMock, clear_sqlmode ], ] # Preserve the original assertion logic - for call_item in expected_calls: # Renamed to avoid conflict with outer scope 'calls' if any + for ( + call_item + ) in expected_calls: # Renamed to avoid conflict with outer scope 'calls' if any assert call_item in print_mock.calls, "This expected item should be in the list" print_mock.calls.pop(print_mock.calls.index(call_item)) assert len(print_mock.calls) == 0, "The list should only have the expected items" diff --git a/tests/test_tutorial/test_where/test_tutorial004.py b/tests/test_tutorial/test_where/test_tutorial004.py index 2b75f9cf..eb750751 100644 --- a/tests/test_tutorial/test_where/test_tutorial004.py +++ b/tests/test_tutorial/test_where/test_tutorial004.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 # expected_calls is defined within the test_tutorial function in the original test @@ -35,7 +34,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_where/test_tutorial005.py b/tests/test_tutorial/test_where/test_tutorial005.py index 55b72321..baefa363 100644 --- a/tests/test_tutorial/test_where/test_tutorial005.py +++ b/tests/test_tutorial/test_where/test_tutorial005.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial005 = [ [{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}] @@ -37,7 +36,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_where/test_tutorial006.py b/tests/test_tutorial/test_where/test_tutorial006.py index 899aefe8..3f60f6d6 100644 --- a/tests/test_tutorial/test_where/test_tutorial006.py +++ b/tests/test_tutorial/test_where/test_tutorial006.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial006 = [ [{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}], @@ -38,7 +37,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_where/test_tutorial007.py b/tests/test_tutorial/test_where/test_tutorial007.py index 0abe03cf..0bf615d3 100644 --- a/tests/test_tutorial/test_where/test_tutorial007.py +++ b/tests/test_tutorial/test_where/test_tutorial007.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial007 = [ [{"id": 5, "name": "Black Lion", "secret_name": "Trevor Challa", "age": 35}], @@ -38,7 +37,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_where/test_tutorial008.py b/tests/test_tutorial/test_where/test_tutorial008.py index c28191f9..3fb56cba 100644 --- a/tests/test_tutorial/test_where/test_tutorial008.py +++ b/tests/test_tutorial/test_where/test_tutorial008.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial008 = [ [{"id": 5, "name": "Black Lion", "secret_name": "Trevor Challa", "age": 35}], @@ -38,7 +37,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_where/test_tutorial009.py b/tests/test_tutorial/test_where/test_tutorial009.py index 46504075..643eae4e 100644 --- a/tests/test_tutorial/test_where/test_tutorial009.py +++ b/tests/test_tutorial/test_where/test_tutorial009.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial009 = [ [{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}], @@ -46,7 +45,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_where/test_tutorial010.py b/tests/test_tutorial/test_where/test_tutorial010.py index a6d481ba..65f54f2f 100644 --- a/tests/test_tutorial/test_where/test_tutorial010.py +++ b/tests/test_tutorial/test_where/test_tutorial010.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 expected_calls_tutorial010 = [ [{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}], @@ -46,7 +45,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod diff --git a/tests/test_tutorial/test_where/test_tutorial011.py b/tests/test_tutorial/test_where/test_tutorial011.py index 30f912dd..0db99c43 100644 --- a/tests/test_tutorial/test_where/test_tutorial011.py +++ b/tests/test_tutorial/test_where/test_tutorial011.py @@ -5,10 +5,9 @@ from typing import Any from unittest.mock import patch import pytest -from sqlmodel import create_engine, SQLModel - -from ...conftest import get_testing_print_function, needs_py310, PrintMock +from sqlmodel import create_engine +from ...conftest import PrintMock, get_testing_print_function, needs_py310 # expected_calls is defined within the test_tutorial function in the original test @@ -35,7 +34,7 @@ def module_fixture(request: pytest.FixtureRequest, clear_sqlmodel: Any): if hasattr(mod, "create_db_and_tables") and callable(mod.create_db_and_tables): pass elif hasattr(mod, "SQLModel") and hasattr(mod.SQLModel, "metadata"): - mod.SQLModel.metadata.create_all(mod.engine) + mod.SQLModel.metadata.create_all(mod.engine) return mod