+import importlib
from decimal import Decimal
-from unittest.mock import patch
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
+
+
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.advanced.decimal.{request.param}")
+ mod.sqlite_url = "sqlite://"
+ mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
expected_calls = [
[
]
-def test_tutorial():
- from docs_src.advanced.decimal import tutorial001 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from decimal import Decimal
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Hero 1:",
- {
- "name": "Deadpond",
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "money": Decimal("1.100"),
- },
- ],
- [
- "Hero 2:",
- {
- "name": "Rusty-Man",
- "age": 48,
- "id": 3,
- "secret_name": "Tommy Sharp",
- "money": Decimal("2.200"),
- },
- ],
- ["Total money: 3.300"],
-]
-
-
-@needs_py310
-def test_tutorial():
- from docs_src.advanced.decimal import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from dirty_equals import IsUUID
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial() -> None:
- from docs_src.advanced.uuid import tutorial001 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.advanced.uuid.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- first_uuid = calls[1][0]["id"]
+def test_tutorial(print_mock: PrintMock, mod: ModuleType) -> None:
+ mod.main()
+ first_uuid = print_mock.calls[1][0]["id"]
assert first_uuid == IsUUID(4)
- second_uuid = calls[7][0]["id"]
+ second_uuid = print_mock.calls[7][0]["id"]
assert second_uuid == IsUUID(4)
assert first_uuid != second_uuid
- assert calls == [
+ assert print_mock.calls == [
["The hero before saving in the DB"],
[
{
+++ /dev/null
-from unittest.mock import patch
-
-from dirty_equals import IsUUID
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial() -> None:
- from docs_src.advanced.uuid import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- first_uuid = calls[1][0]["id"]
- assert first_uuid == IsUUID(4)
-
- second_uuid = calls[7][0]["id"]
- assert second_uuid == IsUUID(4)
-
- assert first_uuid != second_uuid
-
- assert calls == [
- ["The hero before saving in the DB"],
- [
- {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "id": first_uuid,
- "age": None,
- }
- ],
- ["The hero ID was already set"],
- [first_uuid],
- ["After saving in the DB"],
- [
- {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "age": None,
- "id": first_uuid,
- }
- ],
- ["Created hero:"],
- [
- {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "age": None,
- "id": second_uuid,
- }
- ],
- ["Created hero ID:"],
- [second_uuid],
- ["Selected hero:"],
- [
- {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "age": None,
- "id": second_uuid,
- }
- ],
- ["Selected hero ID:"],
- [second_uuid],
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from dirty_equals import IsUUID
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial() -> None:
- from docs_src.advanced.uuid import tutorial002 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial002",
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.advanced.uuid.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- first_uuid = calls[1][0]["id"]
+def test_tutorial(print_mock: PrintMock, mod: ModuleType) -> None:
+ mod.main()
+ first_uuid = print_mock.calls[1][0]["id"]
assert first_uuid == IsUUID(4)
- second_uuid = calls[7][0]["id"]
+ second_uuid = print_mock.calls[7][0]["id"]
assert second_uuid == IsUUID(4)
assert first_uuid != second_uuid
- assert calls == [
+ assert print_mock.calls == [
["The hero before saving in the DB"],
[
{
+++ /dev/null
-from unittest.mock import patch
-
-from dirty_equals import IsUUID
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial() -> None:
- from docs_src.advanced.uuid import tutorial002_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- first_uuid = calls[1][0]["id"]
- assert first_uuid == IsUUID(4)
-
- second_uuid = calls[7][0]["id"]
- assert second_uuid == IsUUID(4)
-
- assert first_uuid != second_uuid
-
- assert calls == [
- ["The hero before saving in the DB"],
- [
- {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "id": first_uuid,
- "age": None,
- }
- ],
- ["The hero ID was already set"],
- [first_uuid],
- ["After saving in the DB"],
- [
- {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "age": None,
- "id": first_uuid,
- }
- ],
- ["Created hero:"],
- [
- {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "age": None,
- "id": second_uuid,
- }
- ],
- ["Created hero ID:"],
- [second_uuid],
- ["Selected hero:"],
- [
- {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "age": None,
- "id": second_uuid,
- }
- ],
- ["Selected hero ID:"],
- [second_uuid],
- ]
-from unittest.mock import patch
+import importlib
+from dataclasses import dataclass
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py39, needs_py310
expected_calls = [
[
]
-def test_tutorial():
- from docs_src.tutorial.code_structure.tutorial002 import app, database
+@dataclass
+class Modules:
+ app: ModuleType
+ database: ModuleType
- database.sqlite_url = "sqlite://"
- database.engine = create_engine(database.sqlite_url)
- app.engine = database.engine
- calls = []
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- app.main()
- assert calls == expected_calls
+@pytest.fixture(
+ name="modules",
+ params=[
+ "tutorial002",
+ pytest.param("tutorial002_py39", marks=needs_py39),
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+)
+def get_modules(request: pytest.FixtureRequest) -> Modules:
+ app_module = importlib.import_module(
+ f"docs_src.tutorial.code_structure.{request.param}.app"
+ )
+ database_module = importlib.import_module(
+ f"docs_src.tutorial.code_structure.{request.param}.database"
+ )
+ database_module.sqlite_url = "sqlite://"
+ database_module.engine = create_engine(database_module.sqlite_url)
+ app_module.engine = database_module.engine
+
+ return Modules(app=app_module, database=database_module)
+
+
+def test_tutorial(print_mock: PrintMock, modules: Modules):
+ modules.app.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Created hero:",
- {
- "id": 1,
- "name": "Deadpond",
- "age": None,
- "secret_name": "Dive Wilson",
- "team_id": 1,
- },
- ],
- [
- "Hero's team:",
- {"name": "Z-Force", "headquarters": "Sister Margaret's Bar", "id": 1},
- ],
-]
-
-
-@needs_py310
-def test_tutorial():
- from docs_src.tutorial.code_structure.tutorial002_py310 import app, database
-
- database.sqlite_url = "sqlite://"
- database.engine = create_engine(database.sqlite_url)
- app.engine = database.engine
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- app.main()
- assert calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py39
-
-expected_calls = [
- [
- "Created hero:",
- {
- "id": 1,
- "name": "Deadpond",
- "age": None,
- "secret_name": "Dive Wilson",
- "team_id": 1,
- },
- ],
- [
- "Hero's team:",
- {"name": "Z-Force", "headquarters": "Sister Margaret's Bar", "id": 1},
- ],
-]
-
-
-@needs_py39
-def test_tutorial():
- from docs_src.tutorial.code_structure.tutorial002_py39 import app, database
-
- database.sqlite_url = "sqlite://"
- database.engine = create_engine(database.sqlite_url)
- app.engine = database.engine
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- app.main()
- assert calls == expected_calls
+import importlib
+from types import ModuleType
+
+import pytest
from sqlalchemy import inspect
from sqlalchemy.engine.reflection import Inspector
from sqlmodel import create_engine
+from tests.conftest import needs_py310
+
+
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(
+ f"docs_src.tutorial.connect.create_tables.{request.param}"
+ )
+ return module
-def test_tutorial001():
- from docs_src.tutorial.connect.create_tables import tutorial001 as mod
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- mod.main()
- insp: Inspector = inspect(mod.engine)
- assert insp.has_table(str(mod.Hero.__tablename__))
- assert insp.has_table(str(mod.Team.__tablename__))
+def test_tutorial001(module: ModuleType):
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ module.main()
+ insp: Inspector = inspect(module.engine)
+ assert insp.has_table(str(module.Hero.__tablename__))
+ assert insp.has_table(str(module.Team.__tablename__))
+++ /dev/null
-from sqlalchemy import inspect
-from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import create_engine
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial001():
- from docs_src.tutorial.connect.create_tables import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- mod.main()
- insp: Inspector = inspect(mod.engine)
- assert insp.has_table(str(mod.Hero.__tablename__))
- assert insp.has_table(str(mod.Team.__tablename__))
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py310
expected_calls = [
[
]
-def test_tutorial():
- from docs_src.tutorial.connect.delete import tutorial001 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(
+ f"docs_src.tutorial.connect.delete.{request.param}"
+ )
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ return module
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 2,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 1,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 1,
- "name": "Spider-Boy",
- },
- ],
- [
- "No longer Preventer:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
-]
-
-
-@needs_py310
-def test_tutorial():
- from docs_src.tutorial.connect.delete import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py310
expected_calls = [
[
]
-def test_tutorial001():
- from docs_src.tutorial.connect.insert import tutorial001 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(
+ f"docs_src.tutorial.connect.insert.{request.param}"
+ )
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ return module
+
+
+def test_tutorial001(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 2,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 1,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
-]
-
-
-@needs_py310
-def test_tutorial001():
- from docs_src.tutorial.connect.insert import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 2,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 1,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 2,
- "name": "Deadpond",
- },
- "Team:",
- {"id": 2, "name": "Z-Force", "headquarters": "Sister Margaret's Bar"},
- ],
- [
- "Hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 1,
- "name": "Rusty-Man",
- },
- "Team:",
- {"id": 1, "name": "Preventers", "headquarters": "Sharp Tower"},
- ],
-]
-
-
-@needs_py310
-def test_tutorial001():
- from docs_src.tutorial.connect.select import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-
-
-@needs_py310
-def test_tutorial002():
- from docs_src.tutorial.connect.select import tutorial002_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py310
expected_calls = [
[
]
-def test_tutorial001():
- from docs_src.tutorial.connect.select import tutorial001 as mod
+@pytest.fixture(name="module")
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(
+ f"docs_src.tutorial.connect.select.{request.param}"
+ )
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ return module
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-
-
-def test_tutorial002():
- from docs_src.tutorial.connect.select import tutorial002 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
+@pytest.mark.parametrize(
+ "module",
+ [
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+ indirect=True,
+)
+def test_tutorial001(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ assert print_mock.calls == expected_calls
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+@pytest.mark.parametrize(
+ "module",
+ [
+ "tutorial002",
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+ indirect=True,
+)
+def test_tutorial002(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ assert print_mock.calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py310
expected_calls = [
[
]
-def test_tutorial():
- from docs_src.tutorial.connect.select import tutorial003 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial003",
+ pytest.param("tutorial003_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(
+ f"docs_src.tutorial.connect.select.{request.param}"
+ )
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ return module
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 2,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 1,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 2,
- "name": "Deadpond",
- },
- "Team:",
- {"id": 2, "name": "Z-Force", "headquarters": "Sister Margaret's Bar"},
- ],
- [
- "Hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 1,
- "name": "Rusty-Man",
- },
- "Team:",
- {"id": 1, "name": "Preventers", "headquarters": "Sharp Tower"},
- ],
- [
- "Hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- "Team:",
- None,
- ],
-]
-
-
-@needs_py310
-def test_tutorial():
- from docs_src.tutorial.connect.select import tutorial003_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py310
expected_calls = [
[
]
-def test_tutorial():
- from docs_src.tutorial.connect.select import tutorial004 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial004",
+ pytest.param("tutorial004_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(
+ f"docs_src.tutorial.connect.select.{request.param}"
+ )
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ return module
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 2,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 1,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Preventer Hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 1,
- "name": "Rusty-Man",
- },
- ],
-]
-
-
-@needs_py310
-def test_tutorial():
- from docs_src.tutorial.connect.select import tutorial004_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py310
expected_calls = [
[
]
-def test_tutorial():
- from docs_src.tutorial.connect.select import tutorial005 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial005",
+ pytest.param("tutorial005_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(
+ f"docs_src.tutorial.connect.select.{request.param}"
+ )
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ return module
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 2,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 1,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Preventer Hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 1,
- "name": "Rusty-Man",
- },
- "Team:",
- {"id": 1, "name": "Preventers", "headquarters": "Sharp Tower"},
- ],
-]
-
-
-@needs_py310
-def test_tutorial():
- from docs_src.tutorial.connect.select import tutorial005_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py310
expected_calls = [
[
]
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.connect.update import tutorial001 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(
+ f"docs_src.tutorial.connect.update.{request.param}"
+ )
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ return module
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 2,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 1,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 1,
- "name": "Spider-Boy",
- },
- ],
-]
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.connect.update import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
from pathlib import Path
-from ...conftest import coverage_run
+import pytest
+from ...conftest import coverage_run, needs_py310
-def test_create_db_and_table(cov_tmp_path: Path):
- module = "docs_src.tutorial.create_db_and_table.tutorial001"
+
+@pytest.mark.parametrize(
+ "module_name",
+ [
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def test_create_db_and_table(cov_tmp_path: Path, module_name: str):
+ module = f"docs_src.tutorial.create_db_and_table.{module_name}"
result = coverage_run(module=module, cwd=cov_tmp_path)
assert "BEGIN" in result.stdout
assert 'PRAGMA main.table_info("hero")' in result.stdout
+++ /dev/null
-from pathlib import Path
-
-from ...conftest import coverage_run, needs_py310
-
-
-@needs_py310
-def test_create_db_and_table(cov_tmp_path: Path):
- module = "docs_src.tutorial.create_db_and_table.tutorial001_py310"
- result = coverage_run(module=module, cwd=cov_tmp_path)
- assert "BEGIN" in result.stdout
- assert 'PRAGMA main.table_info("hero")' in result.stdout
- assert "CREATE TABLE hero (" in result.stdout
- assert "id INTEGER NOT NULL," in result.stdout
- assert "name VARCHAR NOT NULL," in result.stdout
- assert "secret_name VARCHAR NOT NULL," in result.stdout
- assert "age INTEGER," in result.stdout
- assert "PRIMARY KEY (id)" in result.stdout
- assert ")" in result.stdout
- assert "COMMIT" in result.stdout
+import importlib
+from types import ModuleType
+
+import pytest
from sqlalchemy import inspect
from sqlalchemy.engine.reflection import Inspector
from sqlmodel import create_engine
+from ...conftest import needs_py310
+
+
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial002",
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(
+ f"docs_src.tutorial.create_db_and_table.{request.param}"
+ )
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ return module
-def test_create_db_and_table(clear_sqlmodel):
- from docs_src.tutorial.create_db_and_table import tutorial002 as mod
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- mod.create_db_and_tables()
- insp: Inspector = inspect(mod.engine)
- assert insp.has_table(str(mod.Hero.__tablename__))
+def test_create_db_and_table(module: ModuleType):
+ module.create_db_and_tables()
+ insp: Inspector = inspect(module.engine)
+ assert insp.has_table(str(module.Hero.__tablename__))
+++ /dev/null
-from sqlalchemy import inspect
-from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import create_engine
-
-from ...conftest import needs_py310
-
-
-@needs_py310
-def test_create_db_and_table(clear_sqlmodel):
- from docs_src.tutorial.create_db_and_table import tutorial002_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- mod.create_db_and_tables()
- insp: Inspector = inspect(mod.engine)
- assert insp.has_table(str(mod.Hero.__tablename__))
+import importlib
+from types import ModuleType
+
+import pytest
from sqlalchemy import inspect
from sqlalchemy.engine.reflection import Inspector
from sqlmodel import create_engine
+from ...conftest import needs_py310
+
+
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial003",
+ pytest.param("tutorial003_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(
+ f"docs_src.tutorial.create_db_and_table.{request.param}"
+ )
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ return module
-def test_create_db_and_table(clear_sqlmodel):
- from docs_src.tutorial.create_db_and_table import tutorial003 as mod
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- mod.create_db_and_tables()
- insp: Inspector = inspect(mod.engine)
- assert insp.has_table(str(mod.Hero.__tablename__))
+def test_create_db_and_table(module: ModuleType):
+ module.create_db_and_tables()
+ insp: Inspector = inspect(module.engine)
+ assert insp.has_table(str(module.Hero.__tablename__))
+++ /dev/null
-from sqlalchemy import inspect
-from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import create_engine
-
-from ...conftest import needs_py310
-
-
-@needs_py310
-def test_create_db_and_table(clear_sqlmodel):
- from docs_src.tutorial.create_db_and_table import tutorial003_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- mod.create_db_and_tables()
- insp: Inspector = inspect(mod.engine)
- assert insp.has_table(str(mod.Hero.__tablename__))
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Hero 1:",
- {"id": 2, "name": "Spider-Boy", "secret_name": "Pedro Parqueador", "age": None},
- ],
- [
- "Hero 2:",
- {
- "id": 7,
- "name": "Captain North America",
- "secret_name": "Esteban Rogelios",
- "age": 93,
- },
- ],
- [
- "Updated hero 1:",
- {
- "id": 2,
- "name": "Spider-Youngster",
- "secret_name": "Pedro Parqueador",
- "age": 16,
- },
- ],
- [
- "Updated hero 2:",
- {
- "id": 7,
- "name": "Captain North America Except Canada",
- "secret_name": "Esteban Rogelios",
- "age": 110,
- },
- ],
- [
- "Hero: ",
- {
- "id": 2,
- "name": "Spider-Youngster",
- "secret_name": "Pedro Parqueador",
- "age": 16,
- },
- ],
- [
- "Deleted hero:",
- {
- "id": 2,
- "name": "Spider-Youngster",
- "secret_name": "Pedro Parqueador",
- "age": 16,
- },
- ],
- ["There's no hero named Spider-Youngster"],
-]
-
-
-@needs_py310
-def test_tutorial001(clear_sqlmodel):
- from docs_src.tutorial.delete import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-
-
-@needs_py310
-def test_tutorial002(clear_sqlmodel):
- from docs_src.tutorial.delete import tutorial002_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
expected_calls = [
[
]
-def test_tutorial001(clear_sqlmodel):
- from docs_src.tutorial.delete import tutorial001 as mod
+@pytest.fixture(name="module")
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(f"docs_src.tutorial.delete.{request.param}")
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ return module
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-
-
-def test_tutorial002(clear_sqlmodel):
- from docs_src.tutorial.delete import tutorial002 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
+@pytest.mark.parametrize(
+ "module",
+ [
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+ indirect=True,
+)
+def test_tutorial001(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ assert print_mock.calls == expected_calls
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+@pytest.mark.parametrize(
+ "module",
+ [
+ "tutorial002",
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+ indirect=True,
+)
+def test_tutorial002(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-import subprocess
-from pathlib import Path
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_run_tests(clear_sqlmodel):
- from docs_src.tutorial.fastapi.app_testing.tutorial001_py310 import test_main as mod
-
- test_path = Path(mod.__file__).resolve().parent
- top_level_path = Path(__file__).resolve().parent.parent.parent.parent.parent
- result = subprocess.run(
- [
- "coverage",
- "run",
- "--parallel-mode",
- "-m",
- "pytest",
- test_path,
- ],
- cwd=top_level_path,
- capture_output=True,
- )
- assert result.returncode == 0, result.stdout.decode("utf-8")
+++ /dev/null
-import subprocess
-from pathlib import Path
-
-from ....conftest import needs_py39
-
-
-@needs_py39
-def test_run_tests(clear_sqlmodel):
- from docs_src.tutorial.fastapi.app_testing.tutorial001_py39 import test_main as mod
-
- test_path = Path(mod.__file__).resolve().parent
- top_level_path = Path(__file__).resolve().parent.parent.parent.parent.parent
- result = subprocess.run(
- [
- "coverage",
- "run",
- "--parallel-mode",
- "-m",
- "pytest",
- test_path,
- ],
- cwd=top_level_path,
- capture_output=True,
- )
- assert result.returncode == 0, result.stdout.decode("utf-8")
import importlib
+import sys
+from dataclasses import dataclass
+from types import ModuleType
import pytest
-from docs_src.tutorial.fastapi.app_testing.tutorial001 import main as app_mod
-from docs_src.tutorial.fastapi.app_testing.tutorial001 import test_main_001 as test_mod
+from tests.conftest import needs_py39, needs_py310
-@pytest.fixture(name="prepare", autouse=True)
-def prepare_fixture(clear_sqlmodel):
+@dataclass
+class Modules:
+ app: ModuleType
+ test: ModuleType
+
+
+@pytest.fixture(
+ name="modules_path",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_modules_path(request: pytest.FixtureRequest) -> str:
+ return f"docs_src.tutorial.fastapi.app_testing.{request.param}"
+
+
+@pytest.fixture(name="modules")
+def load_modules(clear_sqlmodel, modules_path: str) -> Modules:
# Trigger side effects of registering table models in SQLModel
# This has to be called after clear_sqlmodel
- importlib.reload(app_mod)
- importlib.reload(test_mod)
+ app_mod_path = f"{modules_path}.main"
+ if app_mod_path in sys.modules:
+ app_mod = sys.modules[app_mod_path]
+ importlib.reload(app_mod)
+ else:
+ app_mod = importlib.import_module(app_mod_path)
+ test_mod = importlib.import_module(f"{modules_path}.test_main_001")
+ return Modules(app=app_mod, test=test_mod)
-def test_tutorial():
- test_mod.test_create_hero()
+def test_tutorial(modules: Modules):
+ modules.test.test_create_hero()
import importlib
+import sys
+from dataclasses import dataclass
+from types import ModuleType
import pytest
-from docs_src.tutorial.fastapi.app_testing.tutorial001 import main as app_mod
-from docs_src.tutorial.fastapi.app_testing.tutorial001 import test_main_002 as test_mod
+from tests.conftest import needs_py39, needs_py310
-@pytest.fixture(name="prepare", autouse=True)
-def prepare_fixture(clear_sqlmodel):
+@dataclass
+class Modules:
+ app: ModuleType
+ test: ModuleType
+
+
+@pytest.fixture(
+ name="modules_path",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_modules_path(request: pytest.FixtureRequest) -> str:
+ return f"docs_src.tutorial.fastapi.app_testing.{request.param}"
+
+
+@pytest.fixture(name="modules")
+def load_modules(clear_sqlmodel, modules_path: str) -> Modules:
# Trigger side effects of registering table models in SQLModel
# This has to be called after clear_sqlmodel
- importlib.reload(app_mod)
- importlib.reload(test_mod)
+ app_mod_path = f"{modules_path}.main"
+ if app_mod_path in sys.modules:
+ app_mod = sys.modules[app_mod_path]
+ importlib.reload(app_mod)
+ else:
+ app_mod = importlib.import_module(app_mod_path)
+ test_mod = importlib.import_module(f"{modules_path}.test_main_002")
+ return Modules(app=app_mod, test=test_mod)
-def test_tutorial():
- test_mod.test_create_hero()
+def test_tutorial(modules: Modules):
+ modules.test.test_create_hero()
import importlib
+import sys
+from dataclasses import dataclass
+from types import ModuleType
import pytest
-from docs_src.tutorial.fastapi.app_testing.tutorial001 import main as app_mod
-from docs_src.tutorial.fastapi.app_testing.tutorial001 import test_main_003 as test_mod
+from tests.conftest import needs_py39, needs_py310
-@pytest.fixture(name="prepare", autouse=True)
-def prepare_fixture(clear_sqlmodel):
+@dataclass
+class Modules:
+ app: ModuleType
+ test: ModuleType
+
+
+@pytest.fixture(
+ name="modules_path",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_modules_path(request: pytest.FixtureRequest) -> str:
+ return f"docs_src.tutorial.fastapi.app_testing.{request.param}"
+
+
+@pytest.fixture(name="modules")
+def load_modules(clear_sqlmodel, modules_path: str) -> Modules:
# Trigger side effects of registering table models in SQLModel
# This has to be called after clear_sqlmodel
- importlib.reload(app_mod)
- importlib.reload(test_mod)
+ app_mod_path = f"{modules_path}.main"
+ if app_mod_path in sys.modules:
+ app_mod = sys.modules[app_mod_path]
+ importlib.reload(app_mod)
+ else:
+ app_mod = importlib.import_module(app_mod_path)
+ test_mod = importlib.import_module(f"{modules_path}.test_main_003")
+ return Modules(app=app_mod, test=test_mod)
-def test_tutorial():
- test_mod.test_create_hero()
+def test_tutorial(modules: Modules):
+ modules.test.test_create_hero()
import importlib
+import sys
+from dataclasses import dataclass
+from types import ModuleType
import pytest
-from docs_src.tutorial.fastapi.app_testing.tutorial001 import main as app_mod
-from docs_src.tutorial.fastapi.app_testing.tutorial001 import test_main_004 as test_mod
+from tests.conftest import needs_py39, needs_py310
-@pytest.fixture(name="prepare", autouse=True)
-def prepare_fixture(clear_sqlmodel):
+@dataclass
+class Modules:
+ app: ModuleType
+ test: ModuleType
+
+
+@pytest.fixture(
+ name="modules_path",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_modules_path(request: pytest.FixtureRequest) -> str:
+ return f"docs_src.tutorial.fastapi.app_testing.{request.param}"
+
+
+@pytest.fixture(name="modules")
+def load_modules(clear_sqlmodel, modules_path: str) -> Modules:
# Trigger side effects of registering table models in SQLModel
# This has to be called after clear_sqlmodel
- importlib.reload(app_mod)
- importlib.reload(test_mod)
+ app_mod_path = f"{modules_path}.main"
+ if app_mod_path in sys.modules:
+ app_mod = sys.modules[app_mod_path]
+ importlib.reload(app_mod)
+ else:
+ app_mod = importlib.import_module(app_mod_path)
+ test_mod = importlib.import_module(f"{modules_path}.test_main_004")
+ return Modules(app=app_mod, test=test_mod)
-def test_tutorial():
- test_mod.test_create_hero()
+def test_tutorial(modules: Modules):
+ modules.test.test_create_hero()
+import importlib
import subprocess
from pathlib import Path
+from types import ModuleType
+import pytest
-def test_run_tests(clear_sqlmodel):
- from docs_src.tutorial.fastapi.app_testing.tutorial001 import test_main as mod
+from ....conftest import needs_py39, needs_py310
- test_path = Path(mod.__file__).resolve().parent
+
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(
+ f"docs_src.tutorial.fastapi.app_testing.{request.param}.test_main"
+ )
+ return module
+
+
+def test_run_tests(module: ModuleType):
+ test_path = Path(module.__file__).resolve().parent
top_level_path = Path(__file__).resolve().parent.parent.parent.parent.parent
result = subprocess.run(
[
+import importlib
+from types import ModuleType
+
+import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
+from tests.conftest import needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.delete import tutorial001 as mod
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.fastapi.delete.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(
mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
)
+ return mod
+
- with TestClient(mod.app) as client:
+def test_tutorial(module: ModuleType):
+ with TestClient(module.app) as client:
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.delete import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- hero3_data = {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- response = client.post("/heroes/", json=hero2_data)
- assert response.status_code == 200, response.text
- hero2 = response.json()
- hero2_id = hero2["id"]
- response = client.post("/heroes/", json=hero3_data)
- assert response.status_code == 200, response.text
- response = client.get(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/9000")
- 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"}
- )
- assert response.status_code == 200, response.text
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"})
- assert response.status_code == 404, response.text
-
- response = client.delete(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/")
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 2
-
- response = client.delete("/heroes/9000")
- assert response.status_code == 404, response.text
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
- 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",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "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"
- },
- }
- }
- },
- },
- "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",
- "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"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "delete": {
- "summary": "Delete Hero",
- "operationId": "delete_hero_heroes__hero_id__delete",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Hero Id", "type": "integer"},
- "name": "hero_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {"application/json": {"schema": {}}},
- },
- "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"
- }
- }
- },
- "required": True,
- },
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "HeroUpdate": {
- "title": "HeroUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "title": "Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "secret_name": IsDict(
- {
- "title": "Secret Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Secret Name", "type": "string"}
- ),
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.delete import tutorial001_py39 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- hero3_data = {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- response = client.post("/heroes/", json=hero2_data)
- assert response.status_code == 200, response.text
- hero2 = response.json()
- hero2_id = hero2["id"]
- response = client.post("/heroes/", json=hero3_data)
- assert response.status_code == 200, response.text
- response = client.get(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/9000")
- 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"}
- )
- assert response.status_code == 200, response.text
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"})
- assert response.status_code == 404, response.text
-
- response = client.delete(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/")
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 2
-
- response = client.delete("/heroes/9000")
- assert response.status_code == 404, response.text
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
- 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",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "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"
- },
- }
- }
- },
- },
- "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",
- "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"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "delete": {
- "summary": "Delete Hero",
- "operationId": "delete_hero_heroes__hero_id__delete",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Hero Id", "type": "integer"},
- "name": "hero_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {"application/json": {"schema": {}}},
- },
- "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"
- }
- }
- },
- "required": True,
- },
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "HeroUpdate": {
- "title": "HeroUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "title": "Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "secret_name": IsDict(
- {
- "title": "Secret Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Secret Name", "type": "string"}
- ),
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
+import importlib
+from types import ModuleType
+
+import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
+from tests.conftest import needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.limit_and_offset import tutorial001 as mod
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.fastapi.limit_and_offset.{request.param}"
+ )
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(
mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
)
+ return mod
+
- with TestClient(mod.app) as client:
+def test_tutorial(module: ModuleType):
+ with TestClient(module.app) as client:
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.limit_and_offset import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- hero3_data = {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- response = client.post("/heroes/", json=hero2_data)
- assert response.status_code == 200, response.text
- hero2 = response.json()
- hero_id = hero2["id"]
- response = client.post("/heroes/", json=hero3_data)
- assert response.status_code == 200, response.text
- response = client.get(f"/heroes/{hero_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/9000")
- 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.get("/heroes/", params={"limit": 2})
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 2
- assert data[0]["name"] == hero1_data["name"]
- assert data[1]["name"] == hero2_data["name"]
-
- response = client.get("/heroes/", params={"offset": 1})
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 2
- assert data[0]["name"] == hero2_data["name"]
- assert data[1]["name"] == hero3_data["name"]
-
- response = client.get("/heroes/", params={"offset": 1, "limit": 1})
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 1
- assert data[0]["name"] == hero2_data["name"]
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
- 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",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "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"
- },
- }
- }
- },
- },
- "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",
- "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"
- }
- }
- },
- },
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "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"}]
- },
- },
- "msg": {"title": "Message", "type": "string"},
- "type": {"title": "Error Type", "type": "string"},
- },
- },
- }
- },
- }
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.limit_and_offset import tutorial001_py39 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- hero3_data = {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- response = client.post("/heroes/", json=hero2_data)
- assert response.status_code == 200, response.text
- hero2 = response.json()
- hero_id = hero2["id"]
- response = client.post("/heroes/", json=hero3_data)
- assert response.status_code == 200, response.text
- response = client.get(f"/heroes/{hero_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/9000")
- 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.get("/heroes/", params={"limit": 2})
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 2
- assert data[0]["name"] == hero1_data["name"]
- assert data[1]["name"] == hero2_data["name"]
-
- response = client.get("/heroes/", params={"offset": 1})
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 2
- assert data[0]["name"] == hero2_data["name"]
- assert data[1]["name"] == hero3_data["name"]
-
- response = client.get("/heroes/", params={"offset": 1, "limit": 1})
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 1
- assert data[0]["name"] == hero2_data["name"]
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
- 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",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "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"
- },
- }
- }
- },
- },
- "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",
- "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"
- }
- }
- },
- },
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "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"}]
- },
- },
- "msg": {"title": "Message", "type": "string"},
- "type": {"title": "Error Type", "type": "string"},
- },
- },
- }
- },
- }
+import importlib
+from types import ModuleType
+
+import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from sqlalchemy import inspect
from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
+from tests.conftest import needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.multiple_models import tutorial001 as mod
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.fastapi.multiple_models.{request.param}"
+ )
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(
mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
)
+ return mod
+
- with TestClient(mod.app) as client:
+def test_tutorial(module: ModuleType):
+ with TestClient(module.app) as client:
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
}
# Test inherited indexes
- insp: Inspector = inspect(mod.engine)
- indexes = insp.get_indexes(str(mod.Hero.__tablename__))
+ insp: Inspector = inspect(module.engine)
+ indexes = insp.get_indexes(str(module.Hero.__tablename__))
expected_indexes = [
{
"name": "ix_hero_name",
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlalchemy import inspect
-from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.multiple_models import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- response = client.post("/heroes/", json=hero1_data)
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert data["name"] == hero1_data["name"]
- assert data["secret_name"] == hero1_data["secret_name"]
- assert data["id"] is not None
- assert data["age"] is None
-
- response = client.post("/heroes/", json=hero2_data)
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert data["name"] == hero2_data["name"]
- assert data["secret_name"] == hero2_data["secret_name"]
- assert data["id"] != hero2_data["id"], (
- "Now it's not possible to predefine the ID from the request, "
- "it's now set by the database"
- )
- assert data["age"] is None
-
- response = client.get("/heroes/")
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert len(data) == 2
- assert data[0]["name"] == hero1_data["name"]
- assert data[0]["secret_name"] == hero1_data["secret_name"]
- assert data[1]["name"] == hero2_data["name"]
- assert data[1]["secret_name"] == hero2_data["secret_name"]
- assert data[1]["id"] != hero2_data["id"]
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
-
- 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",
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "title": "Response Read Heroes Heroes Get",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/HeroPublic"
- },
- }
- }
- },
- }
- },
- },
- "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",
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "HeroPublic": {
- "title": "HeroPublic",
- "required": ["id", "name", "secret_name"],
- "type": "object",
- "properties": {
- "id": {"title": "Id", "type": "integer"},
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
-
- # Test inherited indexes
- insp: Inspector = inspect(mod.engine)
- indexes = insp.get_indexes(str(mod.Hero.__tablename__))
- expected_indexes = [
- {
- "name": "ix_hero_name",
- "dialect_options": {},
- "column_names": ["name"],
- "unique": 0,
- },
- {
- "name": "ix_hero_age",
- "dialect_options": {},
- "column_names": ["age"],
- "unique": 0,
- },
- ]
- for index in expected_indexes:
- assert index in indexes, "This expected index should be in the indexes in DB"
- # Now that this index was checked, remove it from the list of indexes
- indexes.pop(indexes.index(index))
- assert len(indexes) == 0, "The database should only have the expected indexes"
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlalchemy import inspect
-from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.multiple_models import tutorial001_py39 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- response = client.post("/heroes/", json=hero1_data)
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert data["name"] == hero1_data["name"]
- assert data["secret_name"] == hero1_data["secret_name"]
- assert data["id"] is not None
- assert data["age"] is None
-
- response = client.post("/heroes/", json=hero2_data)
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert data["name"] == hero2_data["name"]
- assert data["secret_name"] == hero2_data["secret_name"]
- assert data["id"] != hero2_data["id"], (
- "Now it's not possible to predefine the ID from the request, "
- "it's now set by the database"
- )
- assert data["age"] is None
-
- response = client.get("/heroes/")
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert len(data) == 2
- assert data[0]["name"] == hero1_data["name"]
- assert data[0]["secret_name"] == hero1_data["secret_name"]
- assert data[1]["name"] == hero2_data["name"]
- assert data[1]["secret_name"] == hero2_data["secret_name"]
- assert data[1]["id"] != hero2_data["id"]
-
- response = client.get("/openapi.json")
-
- assert response.status_code == 200, response.text
-
- 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",
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "title": "Response Read Heroes Heroes Get",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/HeroPublic"
- },
- }
- }
- },
- }
- },
- },
- "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",
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "HeroPublic": {
- "title": "HeroPublic",
- "required": ["id", "name", "secret_name"],
- "type": "object",
- "properties": {
- "id": {"title": "Id", "type": "integer"},
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
-
- # Test inherited indexes
- insp: Inspector = inspect(mod.engine)
- indexes = insp.get_indexes(str(mod.Hero.__tablename__))
- expected_indexes = [
- {
- "name": "ix_hero_name",
- "dialect_options": {},
- "column_names": ["name"],
- "unique": 0,
- },
- {
- "name": "ix_hero_age",
- "dialect_options": {},
- "column_names": ["age"],
- "unique": 0,
- },
- ]
- for index in expected_indexes:
- assert index in indexes, "This expected index should be in the indexes in DB"
- # Now that this index was checked, remove it from the list of indexes
- indexes.pop(indexes.index(index))
- assert len(indexes) == 0, "The database should only have the expected indexes"
+import importlib
+from types import ModuleType
+
+import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from sqlalchemy import inspect
from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
+from tests.conftest import needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.multiple_models import tutorial002 as mod
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial002",
+ pytest.param("tutorial002_py39", marks=needs_py39),
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.fastapi.multiple_models.{request.param}"
+ )
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(
mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
)
+ return mod
+
- with TestClient(mod.app) as client:
+def test_tutorial(module: ModuleType):
+ with TestClient(module.app) as client:
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
}
# Test inherited indexes
- insp: Inspector = inspect(mod.engine)
- indexes = insp.get_indexes(str(mod.Hero.__tablename__))
+ insp: Inspector = inspect(module.engine)
+ indexes = insp.get_indexes(str(module.Hero.__tablename__))
expected_indexes = [
{
"name": "ix_hero_age",
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlalchemy import inspect
-from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.multiple_models import tutorial002_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- response = client.post("/heroes/", json=hero1_data)
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert data["name"] == hero1_data["name"]
- assert data["secret_name"] == hero1_data["secret_name"]
- assert data["id"] is not None
- assert data["age"] is None
-
- response = client.post("/heroes/", json=hero2_data)
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert data["name"] == hero2_data["name"]
- assert data["secret_name"] == hero2_data["secret_name"]
- assert data["id"] != hero2_data["id"], (
- "Now it's not possible to predefine the ID from the request, "
- "it's now set by the database"
- )
- assert data["age"] is None
-
- response = client.get("/heroes/")
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert len(data) == 2
- assert data[0]["name"] == hero1_data["name"]
- assert data[0]["secret_name"] == hero1_data["secret_name"]
- assert data[1]["name"] == hero2_data["name"]
- assert data[1]["secret_name"] == hero2_data["secret_name"]
- assert data[1]["id"] != hero2_data["id"]
-
- response = client.get("/openapi.json")
-
- assert response.status_code == 200, response.text
-
- 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",
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "title": "Response Read Heroes Heroes Get",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/HeroPublic"
- },
- }
- }
- },
- }
- },
- },
- "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",
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "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"}]
- },
- },
- "msg": {"title": "Message", "type": "string"},
- "type": {"title": "Error Type", "type": "string"},
- },
- },
- }
- },
- }
-
- # Test inherited indexes
- insp: Inspector = inspect(mod.engine)
- indexes = insp.get_indexes(str(mod.Hero.__tablename__))
- expected_indexes = [
- {
- "name": "ix_hero_age",
- "dialect_options": {},
- "column_names": ["age"],
- "unique": 0,
- },
- {
- "name": "ix_hero_name",
- "dialect_options": {},
- "column_names": ["name"],
- "unique": 0,
- },
- ]
- for index in expected_indexes:
- assert index in indexes, "This expected index should be in the indexes in DB"
- # Now that this index was checked, remove it from the list of indexes
- indexes.pop(indexes.index(index))
- assert len(indexes) == 0, "The database should only have the expected indexes"
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlalchemy import inspect
-from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.multiple_models import tutorial002_py39 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- response = client.post("/heroes/", json=hero1_data)
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert data["name"] == hero1_data["name"]
- assert data["secret_name"] == hero1_data["secret_name"]
- assert data["id"] is not None
- assert data["age"] is None
-
- response = client.post("/heroes/", json=hero2_data)
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert data["name"] == hero2_data["name"]
- assert data["secret_name"] == hero2_data["secret_name"]
- assert data["id"] != hero2_data["id"], (
- "Now it's not possible to predefine the ID from the request, "
- "it's now set by the database"
- )
- assert data["age"] is None
-
- response = client.get("/heroes/")
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert len(data) == 2
- assert data[0]["name"] == hero1_data["name"]
- assert data[0]["secret_name"] == hero1_data["secret_name"]
- assert data[1]["name"] == hero2_data["name"]
- assert data[1]["secret_name"] == hero2_data["secret_name"]
- assert data[1]["id"] != hero2_data["id"]
-
- response = client.get("/openapi.json")
-
- assert response.status_code == 200, response.text
-
- 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",
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "title": "Response Read Heroes Heroes Get",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/HeroPublic"
- },
- }
- }
- },
- }
- },
- },
- "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",
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "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"}]
- },
- },
- "msg": {"title": "Message", "type": "string"},
- "type": {"title": "Error Type", "type": "string"},
- },
- },
- }
- },
- }
-
- # Test inherited indexes
- insp: Inspector = inspect(mod.engine)
- indexes = insp.get_indexes(str(mod.Hero.__tablename__))
- expected_indexes = [
- {
- "name": "ix_hero_age",
- "dialect_options": {},
- "column_names": ["age"],
- "unique": 0,
- },
- {
- "name": "ix_hero_name",
- "dialect_options": {},
- "column_names": ["name"],
- "unique": 0,
- },
- ]
- for index in expected_indexes:
- assert index in indexes, "This expected index should be in the indexes in DB"
- # Now that this index was checked, remove it from the list of indexes
- indexes.pop(indexes.index(index))
- assert len(indexes) == 0, "The database should only have the expected indexes"
+import importlib
+from types import ModuleType
+
+import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
+from tests.conftest import needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.read_one import tutorial001 as mod
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.fastapi.read_one.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(
mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
)
+ return mod
+
- with TestClient(mod.app) as client:
+def test_tutorial(module: ModuleType):
+ with TestClient(module.app) as client:
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.read_one import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- response = client.post("/heroes/", json=hero2_data)
- assert response.status_code == 200, response.text
- hero2 = response.json()
- response = client.get("/heroes/")
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 2
-
- hero_id = hero2["id"]
- response = client.get(f"/heroes/{hero_id}")
- assert response.status_code == 200, response.text
- data = response.json()
- assert data == hero2
-
- response = client.get("/heroes/9000")
- assert response.status_code == 404, response.text
-
- response = client.get("/openapi.json")
-
- assert response.status_code == 200, response.text
-
- 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",
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "title": "Response Read Heroes Heroes Get",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/HeroPublic"
- },
- }
- }
- },
- }
- },
- },
- "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",
- "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"
- }
- }
- },
- },
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "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"}]
- },
- },
- "msg": {"title": "Message", "type": "string"},
- "type": {"title": "Error Type", "type": "string"},
- },
- },
- }
- },
- }
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.read_one import tutorial001_py39 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- response = client.post("/heroes/", json=hero2_data)
- assert response.status_code == 200, response.text
- hero2 = response.json()
- response = client.get("/heroes/")
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 2
-
- hero_id = hero2["id"]
- response = client.get(f"/heroes/{hero_id}")
- assert response.status_code == 200, response.text
- data = response.json()
- assert data == hero2
-
- response = client.get("/heroes/9000")
- assert response.status_code == 404, response.text
-
- response = client.get("/openapi.json")
-
- assert response.status_code == 200, response.text
-
- 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",
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "title": "Response Read Heroes Heroes Get",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/HeroPublic"
- },
- }
- }
- },
- }
- },
- },
- "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",
- "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"
- }
- }
- },
- },
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "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"}]
- },
- },
- "msg": {"title": "Message", "type": "string"},
- "type": {"title": "Error Type", "type": "string"},
- },
- },
- }
- },
- }
+import importlib
+from types import ModuleType
+
+import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
+from tests.conftest import needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.relationships import tutorial001 as mod
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.fastapi.relationships.{request.param}"
+ )
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(
mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
)
+ return mod
+
- with TestClient(mod.app) as client:
+def test_tutorial(module: ModuleType):
+ with TestClient(module.app) as client:
team_preventers = {"name": "Preventers", "headquarters": "Sharp Tower"}
team_z_force = {"name": "Z-Force", "headquarters": "Sister Margaret's Bar"}
response = client.post("/teams/", json=team_preventers)
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.relationships import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- team_preventers = {"name": "Preventers", "headquarters": "Sharp Tower"}
- team_z_force = {"name": "Z-Force", "headquarters": "Sister Margaret's Bar"}
- response = client.post("/teams/", json=team_preventers)
- assert response.status_code == 200, response.text
- team_preventers_data = response.json()
- team_preventers_id = team_preventers_data["id"]
- response = client.post("/teams/", json=team_z_force)
- assert response.status_code == 200, response.text
- team_z_force_data = response.json()
- team_z_force_id = team_z_force_data["id"]
- response = client.get("/teams/")
- data = response.json()
- assert len(data) == 2
- response = client.get("/teams/9000")
- assert response.status_code == 404, response.text
- response = client.patch(
- f"/teams/{team_preventers_id}", json={"headquarters": "Preventers Tower"}
- )
- data = response.json()
- assert response.status_code == 200, response.text
- assert data["name"] == team_preventers["name"]
- assert data["headquarters"] == "Preventers Tower"
- response = client.patch("/teams/9000", json={"name": "Freedom League"})
- assert response.status_code == 404, response.text
-
- hero1_data = {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "team_id": team_z_force_id,
- }
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- hero3_data = {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- "team_id": team_preventers_id,
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- hero1 = response.json()
- 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"]
- response = client.post("/heroes/", json=hero3_data)
- assert response.status_code == 200, response.text
- response = client.get("/heroes/9000")
- 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.get(f"/heroes/{hero1_id}")
- assert response.status_code == 200, response.text
- data = response.json()
- assert data["name"] == hero1_data["name"]
- assert data["team"]["name"] == team_z_force["name"]
- 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"})
- assert response.status_code == 404, response.text
- response = client.delete(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/")
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 2
- response = client.delete("/heroes/9000")
- 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 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")
- 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
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
- 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",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "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"
- },
- }
- }
- },
- },
- "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",
- "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/HeroPublicWithTeam"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "delete": {
- "summary": "Delete Hero",
- "operationId": "delete_hero_heroes__hero_id__delete",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Hero Id", "type": "integer"},
- "name": "hero_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {"application/json": {"schema": {}}},
- },
- "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"
- }
- }
- },
- "required": True,
- },
- "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"
- }
- }
- },
- },
- },
- },
- },
- "/teams/": {
- "get": {
- "summary": "Read Teams",
- "operationId": "read_teams_teams__get",
- "parameters": [
- {
- "required": False,
- "schema": {
- "title": "Offset",
- "type": "integer",
- "default": 0,
- },
- "name": "offset",
- "in": "query",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "name": "limit",
- "in": "query",
- },
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "title": "Response Read Teams Teams Get",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/TeamPublic"
- },
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "post": {
- "summary": "Create Team",
- "operationId": "create_team_teams__post",
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamCreate"
- }
- }
- },
- "required": True,
- },
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamPublic"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- },
- "/teams/{team_id}": {
- "get": {
- "summary": "Read Team",
- "operationId": "read_team_teams__team_id__get",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Team Id", "type": "integer"},
- "name": "team_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamPublicWithHeroes"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "delete": {
- "summary": "Delete Team",
- "operationId": "delete_team_teams__team_id__delete",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Team Id", "type": "integer"},
- "name": "team_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {"application/json": {"schema": {}}},
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "patch": {
- "summary": "Update Team",
- "operationId": "update_team_teams__team_id__patch",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Team Id", "type": "integer"},
- "name": "team_id",
- "in": "path",
- }
- ],
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamUpdate"
- }
- }
- },
- "required": True,
- },
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamPublic"
- }
- }
- },
- },
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "team_id": IsDict(
- {
- "title": "Team Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Team Id", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "team_id": IsDict(
- {
- "title": "Team Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Team Id", "type": "integer"}
- ),
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "HeroPublicWithTeam": {
- "title": "HeroPublicWithTeam",
- "required": ["name", "secret_name", "id"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "team_id": IsDict(
- {
- "title": "Team Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Team Id", "type": "integer"}
- ),
- "id": {"title": "Id", "type": "integer"},
- "team": IsDict(
- {
- "anyOf": [
- {"$ref": "#/components/schemas/TeamPublic"},
- {"type": "null"},
- ]
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"$ref": "#/components/schemas/TeamPublic"}
- ),
- },
- },
- "HeroUpdate": {
- "title": "HeroUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "title": "Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "secret_name": IsDict(
- {
- "title": "Secret Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Secret Name", "type": "string"}
- ),
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "team_id": IsDict(
- {
- "title": "Team Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Team Id", "type": "integer"}
- ),
- },
- },
- "TeamCreate": {
- "title": "TeamCreate",
- "required": ["name", "headquarters"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "headquarters": {"title": "Headquarters", "type": "string"},
- },
- },
- "TeamPublic": {
- "title": "TeamPublic",
- "required": ["name", "headquarters", "id"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "headquarters": {"title": "Headquarters", "type": "string"},
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "TeamPublicWithHeroes": {
- "title": "TeamPublicWithHeroes",
- "required": ["name", "headquarters", "id"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "headquarters": {"title": "Headquarters", "type": "string"},
- "id": {"title": "Id", "type": "integer"},
- "heroes": {
- "title": "Heroes",
- "type": "array",
- "items": {"$ref": "#/components/schemas/HeroPublic"},
- "default": [],
- },
- },
- },
- "TeamUpdate": {
- "title": "TeamUpdate",
- "type": "object",
- "properties": {
- "id": IsDict(
- {
- "title": "Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Id", "type": "integer"}
- ),
- "name": IsDict(
- {
- "title": "Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "headquarters": IsDict(
- {
- "title": "Headquarters",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Headquarters", "type": "string"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.relationships import tutorial001_py39 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- team_preventers = {"name": "Preventers", "headquarters": "Sharp Tower"}
- team_z_force = {"name": "Z-Force", "headquarters": "Sister Margaret's Bar"}
- response = client.post("/teams/", json=team_preventers)
- assert response.status_code == 200, response.text
- team_preventers_data = response.json()
- team_preventers_id = team_preventers_data["id"]
- response = client.post("/teams/", json=team_z_force)
- assert response.status_code == 200, response.text
- team_z_force_data = response.json()
- team_z_force_id = team_z_force_data["id"]
- response = client.get("/teams/")
- data = response.json()
- assert len(data) == 2
- response = client.get("/teams/9000")
- assert response.status_code == 404, response.text
- response = client.patch(
- f"/teams/{team_preventers_id}", json={"headquarters": "Preventers Tower"}
- )
- data = response.json()
- assert response.status_code == 200, response.text
- assert data["name"] == team_preventers["name"]
- assert data["headquarters"] == "Preventers Tower"
- response = client.patch("/teams/9000", json={"name": "Freedom League"})
- assert response.status_code == 404, response.text
-
- hero1_data = {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "team_id": team_z_force_id,
- }
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- hero3_data = {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- "team_id": team_preventers_id,
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- hero1 = response.json()
- 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"]
- response = client.post("/heroes/", json=hero3_data)
- assert response.status_code == 200, response.text
- response = client.get("/heroes/9000")
- 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.get(f"/heroes/{hero1_id}")
- assert response.status_code == 200, response.text
- data = response.json()
- assert data["name"] == hero1_data["name"]
- assert data["team"]["name"] == team_z_force["name"]
- 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"})
- assert response.status_code == 404, response.text
- response = client.delete(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/")
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 2
- response = client.delete("/heroes/9000")
- 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 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")
- 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
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
- 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",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "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"
- },
- }
- }
- },
- },
- "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",
- "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/HeroPublicWithTeam"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "delete": {
- "summary": "Delete Hero",
- "operationId": "delete_hero_heroes__hero_id__delete",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Hero Id", "type": "integer"},
- "name": "hero_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {"application/json": {"schema": {}}},
- },
- "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"
- }
- }
- },
- "required": True,
- },
- "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"
- }
- }
- },
- },
- },
- },
- },
- "/teams/": {
- "get": {
- "summary": "Read Teams",
- "operationId": "read_teams_teams__get",
- "parameters": [
- {
- "required": False,
- "schema": {
- "title": "Offset",
- "type": "integer",
- "default": 0,
- },
- "name": "offset",
- "in": "query",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "name": "limit",
- "in": "query",
- },
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "title": "Response Read Teams Teams Get",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/TeamPublic"
- },
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "post": {
- "summary": "Create Team",
- "operationId": "create_team_teams__post",
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamCreate"
- }
- }
- },
- "required": True,
- },
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamPublic"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- },
- "/teams/{team_id}": {
- "get": {
- "summary": "Read Team",
- "operationId": "read_team_teams__team_id__get",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Team Id", "type": "integer"},
- "name": "team_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamPublicWithHeroes"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "delete": {
- "summary": "Delete Team",
- "operationId": "delete_team_teams__team_id__delete",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Team Id", "type": "integer"},
- "name": "team_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {"application/json": {"schema": {}}},
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "patch": {
- "summary": "Update Team",
- "operationId": "update_team_teams__team_id__patch",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Team Id", "type": "integer"},
- "name": "team_id",
- "in": "path",
- }
- ],
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamUpdate"
- }
- }
- },
- "required": True,
- },
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamPublic"
- }
- }
- },
- },
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "team_id": IsDict(
- {
- "title": "Team Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Team Id", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "team_id": IsDict(
- {
- "title": "Team Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Team Id", "type": "integer"}
- ),
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "HeroPublicWithTeam": {
- "title": "HeroPublicWithTeam",
- "required": ["name", "secret_name", "id"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "team_id": IsDict(
- {
- "title": "Team Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Team Id", "type": "integer"}
- ),
- "id": {"title": "Id", "type": "integer"},
- "team": IsDict(
- {
- "anyOf": [
- {"$ref": "#/components/schemas/TeamPublic"},
- {"type": "null"},
- ]
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"$ref": "#/components/schemas/TeamPublic"}
- ),
- },
- },
- "HeroUpdate": {
- "title": "HeroUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "title": "Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "secret_name": IsDict(
- {
- "title": "Secret Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Secret Name", "type": "string"}
- ),
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "team_id": IsDict(
- {
- "title": "Team Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Team Id", "type": "integer"}
- ),
- },
- },
- "TeamCreate": {
- "title": "TeamCreate",
- "required": ["name", "headquarters"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "headquarters": {"title": "Headquarters", "type": "string"},
- },
- },
- "TeamPublic": {
- "title": "TeamPublic",
- "required": ["name", "headquarters", "id"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "headquarters": {"title": "Headquarters", "type": "string"},
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "TeamPublicWithHeroes": {
- "title": "TeamPublicWithHeroes",
- "required": ["name", "headquarters", "id"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "headquarters": {"title": "Headquarters", "type": "string"},
- "id": {"title": "Id", "type": "integer"},
- "heroes": {
- "title": "Heroes",
- "type": "array",
- "items": {"$ref": "#/components/schemas/HeroPublic"},
- "default": [],
- },
- },
- },
- "TeamUpdate": {
- "title": "TeamUpdate",
- "type": "object",
- "properties": {
- "id": IsDict(
- {
- "title": "Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Id", "type": "integer"}
- ),
- "name": IsDict(
- {
- "title": "Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "headquarters": IsDict(
- {
- "title": "Headquarters",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Headquarters", "type": "string"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
+import importlib
+from types import ModuleType
+
+import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
+from tests.conftest import needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.response_model import tutorial001 as mod
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.fastapi.response_model.{request.param}"
+ )
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(
mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
)
+ return mod
+
- with TestClient(mod.app) as client:
+def test_tutorial(module: ModuleType):
+ with TestClient(module.app) as client:
hero_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
response = client.post("/heroes/", json=hero_data)
data = response.json()
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.response_model import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- response = client.post("/heroes/", json=hero_data)
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert data["name"] == hero_data["name"]
- assert data["secret_name"] == hero_data["secret_name"]
- assert data["id"] is not None
- assert data["age"] is None
-
- response = client.get("/heroes/")
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert len(data) == 1
- assert data[0]["name"] == hero_data["name"]
- assert data[0]["secret_name"] == hero_data["secret_name"]
-
- response = client.get("/openapi.json")
-
- assert response.status_code == 200, response.text
-
- 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",
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "title": "Response Read Heroes Heroes Get",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/Hero"
- },
- }
- }
- },
- }
- },
- },
- "post": {
- "summary": "Create Hero",
- "operationId": "create_hero_heroes__post",
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {"$ref": "#/components/schemas/Hero"}
- }
- },
- "required": True,
- },
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {"$ref": "#/components/schemas/Hero"}
- }
- },
- },
- "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"
- },
- }
- },
- },
- "Hero": {
- "title": "Hero",
- "required": ["name", "secret_name"],
- "type": "object",
- "properties": {
- "id": IsDict(
- {
- "title": "Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Id", "type": "integer"}
- ),
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.response_model import tutorial001_py39 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- response = client.post("/heroes/", json=hero_data)
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert data["name"] == hero_data["name"]
- assert data["secret_name"] == hero_data["secret_name"]
- assert data["id"] is not None
- assert data["age"] is None
-
- response = client.get("/heroes/")
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert len(data) == 1
- assert data[0]["name"] == hero_data["name"]
- assert data[0]["secret_name"] == hero_data["secret_name"]
-
- response = client.get("/openapi.json")
-
- assert response.status_code == 200, response.text
-
- 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",
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "title": "Response Read Heroes Heroes Get",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/Hero"
- },
- }
- }
- },
- }
- },
- },
- "post": {
- "summary": "Create Hero",
- "operationId": "create_hero_heroes__post",
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {"$ref": "#/components/schemas/Hero"}
- }
- },
- "required": True,
- },
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {"$ref": "#/components/schemas/Hero"}
- }
- },
- },
- "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"
- },
- }
- },
- },
- "Hero": {
- "title": "Hero",
- "required": ["name", "secret_name"],
- "type": "object",
- "properties": {
- "id": IsDict(
- {
- "title": "Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Id", "type": "integer"}
- ),
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
+import importlib
+from types import ModuleType
+
+import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
+from tests.conftest import needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.session_with_dependency import tutorial001 as mod
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.fastapi.session_with_dependency.{request.param}"
+ )
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(
mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
)
+ return mod
+
- with TestClient(mod.app) as client:
+def test_tutorial(module: ModuleType):
+ with TestClient(module.app) as client:
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.session_with_dependency import (
- tutorial001_py310 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- hero3_data = {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- response = client.post("/heroes/", json=hero2_data)
- assert response.status_code == 200, response.text
- hero2 = response.json()
- hero2_id = hero2["id"]
- response = client.post("/heroes/", json=hero3_data)
- assert response.status_code == 200, response.text
- response = client.get(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/9000")
- 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"}
- )
- assert response.status_code == 200, response.text
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"})
- assert response.status_code == 404, response.text
-
- response = client.delete(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/")
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 2
-
- response = client.delete("/heroes/9000")
- assert response.status_code == 404, response.text
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
- 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",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "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"
- },
- }
- }
- },
- },
- "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",
- "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"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "delete": {
- "summary": "Delete Hero",
- "operationId": "delete_hero_heroes__hero_id__delete",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Hero Id", "type": "integer"},
- "name": "hero_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {"application/json": {"schema": {}}},
- },
- "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"
- }
- }
- },
- "required": True,
- },
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "HeroUpdate": {
- "title": "HeroUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "title": "Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "secret_name": IsDict(
- {
- "title": "Secret Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Secret Name", "type": "string"}
- ),
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.session_with_dependency import (
- tutorial001_py39 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- hero3_data = {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- response = client.post("/heroes/", json=hero2_data)
- assert response.status_code == 200, response.text
- hero2 = response.json()
- hero2_id = hero2["id"]
- response = client.post("/heroes/", json=hero3_data)
- assert response.status_code == 200, response.text
- response = client.get(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/9000")
- 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"}
- )
- assert response.status_code == 200, response.text
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"})
- assert response.status_code == 404, response.text
-
- response = client.delete(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/")
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 2
-
- response = client.delete("/heroes/9000")
- assert response.status_code == 404, response.text
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
- 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",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "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"
- },
- }
- }
- },
- },
- "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",
- "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"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "delete": {
- "summary": "Delete Hero",
- "operationId": "delete_hero_heroes__hero_id__delete",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Hero Id", "type": "integer"},
- "name": "hero_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {"application/json": {"schema": {}}},
- },
- "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"
- }
- }
- },
- "required": True,
- },
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "HeroUpdate": {
- "title": "HeroUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "title": "Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "secret_name": IsDict(
- {
- "title": "Secret Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Secret Name", "type": "string"}
- ),
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
+import importlib
+from types import ModuleType
+
+import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
+from tests.conftest import needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.simple_hero_api import tutorial001 as mod
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.fastapi.simple_hero_api.{request.param}"
+ )
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(
mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
)
+ return mod
+
- with TestClient(mod.app) as client:
+def test_tutorial(module: ModuleType):
+ with TestClient(module.app) as client:
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.simple_hero_api import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- response = client.post("/heroes/", json=hero1_data)
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert data["name"] == hero1_data["name"]
- assert data["secret_name"] == hero1_data["secret_name"]
- assert data["id"] is not None
- assert data["age"] is None
-
- response = client.post("/heroes/", json=hero2_data)
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert data["name"] == hero2_data["name"]
- assert data["secret_name"] == hero2_data["secret_name"]
- assert data["id"] == hero2_data["id"], (
- "Up to this point it's still possible to "
- "set the ID of the hero in the request"
- )
- assert data["age"] is None
-
- response = client.get("/heroes/")
- data = response.json()
-
- assert response.status_code == 200, response.text
- assert len(data) == 2
- assert data[0]["name"] == hero1_data["name"]
- assert data[0]["secret_name"] == hero1_data["secret_name"]
- assert data[1]["name"] == hero2_data["name"]
- assert data[1]["secret_name"] == hero2_data["secret_name"]
- assert data[1]["id"] == hero2_data["id"]
-
- response = client.get("/openapi.json")
-
- assert response.status_code == 200, response.text
-
- 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",
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {"application/json": {"schema": {}}},
- }
- },
- },
- "post": {
- "summary": "Create Hero",
- "operationId": "create_hero_heroes__post",
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {"$ref": "#/components/schemas/Hero"}
- }
- },
- "required": True,
- },
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {"application/json": {"schema": {}}},
- },
- "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"
- },
- }
- },
- },
- "Hero": {
- "title": "Hero",
- "required": ["name", "secret_name"],
- "type": "object",
- "properties": {
- "id": IsDict(
- {
- "title": "Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Id", "type": "integer"}
- ),
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
+import importlib
+from types import ModuleType
+
+import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
+from tests.conftest import needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.teams import tutorial001 as mod
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.fastapi.teams.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(
mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
)
+ return mod
+
- with TestClient(mod.app) as client:
+def test_tutorial(module: ModuleType):
+ with TestClient(module.app) as client:
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.teams import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- hero3_data = {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- response = client.post("/heroes/", json=hero2_data)
- assert response.status_code == 200, response.text
- hero2 = response.json()
- hero2_id = hero2["id"]
- response = client.post("/heroes/", json=hero3_data)
- assert response.status_code == 200, response.text
- response = client.get(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/9000")
- 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"}
- )
- assert response.status_code == 200, response.text
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"})
- assert response.status_code == 404, response.text
- response = client.delete(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/")
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 2
- response = client.delete("/heroes/9000")
- assert response.status_code == 404, response.text
-
- team_preventers = {"name": "Preventers", "headquarters": "Sharp Tower"}
- team_z_force = {"name": "Z-Force", "headquarters": "Sister Margaret's Bar"}
- response = client.post("/teams/", json=team_preventers)
- assert response.status_code == 200, response.text
- team_preventers_data = response.json()
- team_preventers_id = team_preventers_data["id"]
- response = client.post("/teams/", json=team_z_force)
- assert response.status_code == 200, response.text
- team_z_force_data = response.json()
- team_z_force_data["id"]
- response = client.get("/teams/")
- data = response.json()
- assert len(data) == 2
- response = client.get(f"/teams/{team_preventers_id}")
- data = response.json()
- assert response.status_code == 200, response.text
- assert data == team_preventers_data
- response = client.get("/teams/9000")
- assert response.status_code == 404, response.text
- response = client.patch(
- f"/teams/{team_preventers_id}", json={"headquarters": "Preventers Tower"}
- )
- data = response.json()
- assert response.status_code == 200, response.text
- assert data["name"] == team_preventers["name"]
- assert data["headquarters"] == "Preventers Tower"
- response = client.patch("/teams/9000", json={"name": "Freedom League"})
- 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")
- 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
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
- 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",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "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"
- },
- }
- }
- },
- },
- "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",
- "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"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "delete": {
- "summary": "Delete Hero",
- "operationId": "delete_hero_heroes__hero_id__delete",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Hero Id", "type": "integer"},
- "name": "hero_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {"application/json": {"schema": {}}},
- },
- "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"
- }
- }
- },
- "required": True,
- },
- "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"
- }
- }
- },
- },
- },
- },
- },
- "/teams/": {
- "get": {
- "summary": "Read Teams",
- "operationId": "read_teams_teams__get",
- "parameters": [
- {
- "required": False,
- "schema": {
- "title": "Offset",
- "type": "integer",
- "default": 0,
- },
- "name": "offset",
- "in": "query",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "name": "limit",
- "in": "query",
- },
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "title": "Response Read Teams Teams Get",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/TeamPublic"
- },
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "post": {
- "summary": "Create Team",
- "operationId": "create_team_teams__post",
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamCreate"
- }
- }
- },
- "required": True,
- },
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamPublic"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- },
- "/teams/{team_id}": {
- "get": {
- "summary": "Read Team",
- "operationId": "read_team_teams__team_id__get",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Team Id", "type": "integer"},
- "name": "team_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamPublic"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "delete": {
- "summary": "Delete Team",
- "operationId": "delete_team_teams__team_id__delete",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Team Id", "type": "integer"},
- "name": "team_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {"application/json": {"schema": {}}},
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "patch": {
- "summary": "Update Team",
- "operationId": "update_team_teams__team_id__patch",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Team Id", "type": "integer"},
- "name": "team_id",
- "in": "path",
- }
- ],
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamUpdate"
- }
- }
- },
- "required": True,
- },
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamPublic"
- }
- }
- },
- },
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "team_id": IsDict(
- {
- "title": "Team Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Team Id", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "team_id": IsDict(
- {
- "title": "Team Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Team Id", "type": "integer"}
- ),
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "HeroUpdate": {
- "title": "HeroUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "title": "Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "secret_name": IsDict(
- {
- "title": "Secret Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Secret Name", "type": "string"}
- ),
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "team_id": IsDict(
- {
- "title": "Team Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Team Id", "type": "integer"}
- ),
- },
- },
- "TeamCreate": {
- "title": "TeamCreate",
- "required": ["name", "headquarters"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "headquarters": {"title": "Headquarters", "type": "string"},
- },
- },
- "TeamPublic": {
- "title": "TeamPublic",
- "required": ["name", "headquarters", "id"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "headquarters": {"title": "Headquarters", "type": "string"},
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "TeamUpdate": {
- "title": "TeamUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "title": "Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "headquarters": IsDict(
- {
- "title": "Headquarters",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Headquarters", "type": "string"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.teams import tutorial001_py39 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- hero3_data = {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- response = client.post("/heroes/", json=hero2_data)
- assert response.status_code == 200, response.text
- hero2 = response.json()
- hero2_id = hero2["id"]
- response = client.post("/heroes/", json=hero3_data)
- assert response.status_code == 200, response.text
- response = client.get(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/9000")
- 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"}
- )
- assert response.status_code == 200, response.text
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"})
- assert response.status_code == 404, response.text
- response = client.delete(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/")
- assert response.status_code == 200, response.text
- data = response.json()
- assert len(data) == 2
- response = client.delete("/heroes/9000")
- assert response.status_code == 404, response.text
-
- team_preventers = {"name": "Preventers", "headquarters": "Sharp Tower"}
- team_z_force = {"name": "Z-Force", "headquarters": "Sister Margaret's Bar"}
- response = client.post("/teams/", json=team_preventers)
- assert response.status_code == 200, response.text
- team_preventers_data = response.json()
- team_preventers_id = team_preventers_data["id"]
- response = client.post("/teams/", json=team_z_force)
- assert response.status_code == 200, response.text
- team_z_force_data = response.json()
- team_z_force_data["id"]
- response = client.get("/teams/")
- data = response.json()
- assert len(data) == 2
- response = client.get(f"/teams/{team_preventers_id}")
- data = response.json()
- assert response.status_code == 200, response.text
- assert data == team_preventers_data
- response = client.get("/teams/9000")
- assert response.status_code == 404, response.text
- response = client.patch(
- f"/teams/{team_preventers_id}", json={"headquarters": "Preventers Tower"}
- )
- data = response.json()
- assert response.status_code == 200, response.text
- assert data["name"] == team_preventers["name"]
- assert data["headquarters"] == "Preventers Tower"
- response = client.patch("/teams/9000", json={"name": "Freedom League"})
- 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")
- 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
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
- 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",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "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"
- },
- }
- }
- },
- },
- "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",
- "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"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "delete": {
- "summary": "Delete Hero",
- "operationId": "delete_hero_heroes__hero_id__delete",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Hero Id", "type": "integer"},
- "name": "hero_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {"application/json": {"schema": {}}},
- },
- "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"
- }
- }
- },
- "required": True,
- },
- "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"
- }
- }
- },
- },
- },
- },
- },
- "/teams/": {
- "get": {
- "summary": "Read Teams",
- "operationId": "read_teams_teams__get",
- "parameters": [
- {
- "required": False,
- "schema": {
- "title": "Offset",
- "type": "integer",
- "default": 0,
- },
- "name": "offset",
- "in": "query",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "name": "limit",
- "in": "query",
- },
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "title": "Response Read Teams Teams Get",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/TeamPublic"
- },
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "post": {
- "summary": "Create Team",
- "operationId": "create_team_teams__post",
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamCreate"
- }
- }
- },
- "required": True,
- },
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamPublic"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- },
- "/teams/{team_id}": {
- "get": {
- "summary": "Read Team",
- "operationId": "read_team_teams__team_id__get",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Team Id", "type": "integer"},
- "name": "team_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamPublic"
- }
- }
- },
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "delete": {
- "summary": "Delete Team",
- "operationId": "delete_team_teams__team_id__delete",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Team Id", "type": "integer"},
- "name": "team_id",
- "in": "path",
- }
- ],
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {"application/json": {"schema": {}}},
- },
- "422": {
- "description": "Validation Error",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/HTTPValidationError"
- }
- }
- },
- },
- },
- },
- "patch": {
- "summary": "Update Team",
- "operationId": "update_team_teams__team_id__patch",
- "parameters": [
- {
- "required": True,
- "schema": {"title": "Team Id", "type": "integer"},
- "name": "team_id",
- "in": "path",
- }
- ],
- "requestBody": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamUpdate"
- }
- }
- },
- "required": True,
- },
- "responses": {
- "200": {
- "description": "Successful Response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/TeamPublic"
- }
- }
- },
- },
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "team_id": IsDict(
- {
- "title": "Team Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Team Id", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "team_id": IsDict(
- {
- "title": "Team Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Team Id", "type": "integer"}
- ),
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "HeroUpdate": {
- "title": "HeroUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "title": "Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "secret_name": IsDict(
- {
- "title": "Secret Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Secret Name", "type": "string"}
- ),
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "team_id": IsDict(
- {
- "title": "Team Id",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Team Id", "type": "integer"}
- ),
- },
- },
- "TeamCreate": {
- "title": "TeamCreate",
- "required": ["name", "headquarters"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "headquarters": {"title": "Headquarters", "type": "string"},
- },
- },
- "TeamPublic": {
- "title": "TeamPublic",
- "required": ["name", "headquarters", "id"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "headquarters": {"title": "Headquarters", "type": "string"},
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "TeamUpdate": {
- "title": "TeamUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "title": "Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "headquarters": IsDict(
- {
- "title": "Headquarters",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Headquarters", "type": "string"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
+import importlib
+from types import ModuleType
+
+import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from sqlmodel import create_engine
from sqlmodel.pool import StaticPool
+from tests.conftest import needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.update import tutorial001 as mod
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.fastapi.update.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(
mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
)
+ return mod
+
- with TestClient(mod.app) as client:
+def test_tutorial(module: ModuleType):
+ with TestClient(module.app) as client:
hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
hero2_data = {
"name": "Spider-Boy",
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.update import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- hero3_data = {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- response = client.post("/heroes/", json=hero2_data)
- assert response.status_code == 200, response.text
- hero2 = response.json()
- hero2_id = hero2["id"]
- response = client.post("/heroes/", json=hero3_data)
- assert response.status_code == 200, response.text
- hero3 = response.json()
- hero3_id = hero3["id"]
- response = client.get(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/9000")
- 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"}
- )
- data = response.json()
- assert response.status_code == 200, response.text
- assert data["name"] == hero2_data["name"], "The name should not be set to none"
- assert data["secret_name"] == "Spider-Youngster", (
- "The secret name should be updated"
- )
-
- response = client.patch(f"/heroes/{hero3_id}", json={"age": None})
- data = response.json()
- assert response.status_code == 200, response.text
- assert data["name"] == hero3_data["name"]
- assert data["age"] is None, (
- "A field should be updatable to None, even if that's the default"
- )
-
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"})
- assert response.status_code == 404, response.text
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
- 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",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "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"
- },
- }
- }
- },
- },
- "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",
- "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"
- }
- }
- },
- },
- "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"
- }
- }
- },
- "required": True,
- },
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "HeroUpdate": {
- "title": "HeroUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "title": "Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "secret_name": IsDict(
- {
- "title": "Secret Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Secret Name", "type": "string"}
- ),
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.update import tutorial001_py39 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {"name": "Deadpond", "secret_name": "Dive Wilson"}
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- }
- hero3_data = {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- response = client.post("/heroes/", json=hero2_data)
- assert response.status_code == 200, response.text
- hero2 = response.json()
- hero2_id = hero2["id"]
- response = client.post("/heroes/", json=hero3_data)
- assert response.status_code == 200, response.text
- hero3 = response.json()
- hero3_id = hero3["id"]
- response = client.get(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- response = client.get("/heroes/9000")
- 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"}
- )
- data = response.json()
- assert response.status_code == 200, response.text
- assert data["name"] == hero2_data["name"], "The name should not be set to none"
- assert data["secret_name"] == "Spider-Youngster", (
- "The secret name should be updated"
- )
-
- response = client.patch(f"/heroes/{hero3_id}", json={"age": None})
- data = response.json()
- assert response.status_code == 200, response.text
- assert data["name"] == hero3_data["name"]
- assert data["age"] is None, (
- "A field should be updatable to None, even if that's the default"
- )
-
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"})
- assert response.status_code == 404, response.text
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
- 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",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100.0,
- "type": "integer",
- "default": 100,
- },
- "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"
- },
- }
- }
- },
- },
- "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",
- "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"
- }
- }
- },
- },
- "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"
- }
- }
- },
- "required": True,
- },
- "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"],
- "type": "object",
- "properties": {
- "name": {"title": "Name", "type": "string"},
- "secret_name": {"title": "Secret Name", "type": "string"},
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "HeroUpdate": {
- "title": "HeroUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "title": "Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "secret_name": IsDict(
- {
- "title": "Secret Name",
- "anyOf": [{"type": "string"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Secret Name", "type": "string"}
- ),
- "age": IsDict(
- {
- "title": "Age",
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- }
- )
- | IsDict(
- # TODO: remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
+import importlib
+from types import ModuleType
+
+import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from sqlmodel import Session, create_engine
from sqlmodel.pool import StaticPool
+from tests.conftest import needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.update import tutorial002 as mod
+@pytest.fixture(
+ name="module",
+ params=[
+ "tutorial002",
+ pytest.param("tutorial002_py39", marks=needs_py39),
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.fastapi.update.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(
mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
)
+ return mod
+
- with TestClient(mod.app) as client:
+def test_tutorial(module: ModuleType):
+ with TestClient(module.app) as client:
hero1_data = {
"name": "Deadpond",
"secret_name": "Dive Wilson",
assert "hashed_password" not in response_hero
# Test hashed passwords
- with Session(mod.engine) as session:
- hero1_db = session.get(mod.Hero, hero1_id)
+ with Session(module.engine) as session:
+ hero1_db = session.get(module.Hero, hero1_id)
assert hero1_db
assert not hasattr(hero1_db, "password")
assert hero1_db.hashed_password == "not really hashed chimichanga hehehe"
- hero2_db = session.get(mod.Hero, hero2_id)
+ hero2_db = session.get(module.Hero, hero2_id)
assert hero2_db
assert not hasattr(hero2_db, "password")
assert hero2_db.hashed_password == "not really hashed auntmay hehehe"
- hero3_db = session.get(mod.Hero, hero3_id)
+ hero3_db = session.get(module.Hero, hero3_id)
assert hero3_db
assert not hasattr(hero3_db, "password")
assert hero3_db.hashed_password == "not really hashed bestpreventer hehehe"
)
assert "password" not in data
assert "hashed_password" not in data
- with Session(mod.engine) as session:
- hero2b_db = session.get(mod.Hero, hero2_id)
+ with Session(module.engine) as session:
+ 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"
)
assert "password" not in data
assert "hashed_password" not in data
- with Session(mod.engine) as session:
- hero3b_db = session.get(mod.Hero, hero3_id)
+ with Session(module.engine) as session:
+ hero3b_db = session.get(module.Hero, hero3_id)
assert hero3b_db
assert not hasattr(hero3b_db, "password")
assert hero3b_db.hashed_password == "not really hashed bestpreventer hehehe"
assert data["age"] is None
assert "password" not in data
assert "hashed_password" not in data
- with Session(mod.engine) as session:
- hero3b_db = session.get(mod.Hero, hero3_id)
+ with Session(module.engine) as session:
+ hero3b_db = session.get(module.Hero, hero3_id)
assert hero3b_db
assert not hasattr(hero3b_db, "password")
assert (
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import Session, create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.update import tutorial002_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "password": "chimichanga",
- }
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- "password": "auntmay",
- }
- hero3_data = {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- "password": "bestpreventer",
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- hero1 = response.json()
- assert "password" not in hero1
- assert "hashed_password" not in 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"]
- response = client.post("/heroes/", json=hero3_data)
- assert response.status_code == 200, response.text
- hero3 = response.json()
- hero3_id = hero3["id"]
- response = client.get(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- fetched_hero2 = response.json()
- assert "password" not in fetched_hero2
- assert "hashed_password" not in fetched_hero2
- response = client.get("/heroes/9000")
- 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
- for response_hero in data:
- assert "password" not in response_hero
- assert "hashed_password" not in response_hero
-
- # Test hashed passwords
- with Session(mod.engine) as session:
- hero1_db = session.get(mod.Hero, hero1_id)
- assert hero1_db
- assert not hasattr(hero1_db, "password")
- assert hero1_db.hashed_password == "not really hashed chimichanga hehehe"
- hero2_db = session.get(mod.Hero, hero2_id)
- assert hero2_db
- assert not hasattr(hero2_db, "password")
- assert hero2_db.hashed_password == "not really hashed auntmay hehehe"
- hero3_db = session.get(mod.Hero, hero3_id)
- assert hero3_db
- assert not hasattr(hero3_db, "password")
- assert hero3_db.hashed_password == "not really hashed bestpreventer hehehe"
-
- response = client.patch(
- f"/heroes/{hero2_id}", json={"secret_name": "Spider-Youngster"}
- )
- data = response.json()
- assert response.status_code == 200, response.text
- assert data["name"] == hero2_data["name"], "The name should not be set to none"
- assert data["secret_name"] == "Spider-Youngster", (
- "The secret name should be updated"
- )
- assert "password" not in data
- assert "hashed_password" not in data
- with Session(mod.engine) as session:
- hero2b_db = session.get(mod.Hero, hero2_id)
- assert hero2b_db
- assert not hasattr(hero2b_db, "password")
- assert hero2b_db.hashed_password == "not really hashed auntmay hehehe"
-
- response = client.patch(f"/heroes/{hero3_id}", json={"age": None})
- data = response.json()
- assert response.status_code == 200, response.text
- assert data["name"] == hero3_data["name"]
- assert data["age"] is None, (
- "A field should be updatable to None, even if that's the default"
- )
- assert "password" not in data
- assert "hashed_password" not in data
- with Session(mod.engine) as session:
- hero3b_db = session.get(mod.Hero, hero3_id)
- assert hero3b_db
- assert not hasattr(hero3b_db, "password")
- assert hero3b_db.hashed_password == "not really hashed bestpreventer hehehe"
-
- # Test update dict, hashed_password
- response = client.patch(
- f"/heroes/{hero3_id}", json={"password": "philantroplayboy"}
- )
- data = response.json()
- assert response.status_code == 200, response.text
- assert data["name"] == hero3_data["name"]
- assert data["age"] is None
- assert "password" not in data
- assert "hashed_password" not in data
- with Session(mod.engine) as session:
- hero3b_db = session.get(mod.Hero, hero3_id)
- assert hero3b_db
- assert not hasattr(hero3b_db, "password")
- assert (
- hero3b_db.hashed_password == "not really hashed philantroplayboy hehehe"
- )
-
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"})
- assert response.status_code == 404, response.text
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
- 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",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100,
- "type": "integer",
- "default": 100,
- },
- "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"
- },
- }
- }
- },
- },
- "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",
- "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"
- }
- }
- },
- },
- "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"
- }
- }
- },
- "required": True,
- },
- "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",
- }
- )
- | IsDict(
- # TODO: Remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "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(
- # TODO: Remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "HeroUpdate": {
- "title": "HeroUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "anyOf": [{"type": "string"}, {"type": "null"}],
- "title": "Name",
- }
- )
- | IsDict(
- # TODO: Remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "secret_name": IsDict(
- {
- "anyOf": [{"type": "string"}, {"type": "null"}],
- "title": "Secret Name",
- }
- )
- | IsDict(
- # TODO: Remove when deprecating Pydantic v1
- {"title": "Secret Name", "type": "string"}
- ),
- "age": IsDict(
- {
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- "title": "Age",
- }
- )
- | IsDict(
- # TODO: Remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "password": IsDict(
- {
- "anyOf": [{"type": "string"}, {"type": "null"}],
- "title": "Password",
- }
- )
- | IsDict(
- # TODO: Remove when deprecating Pydantic v1
- {"title": "Password", "type": "string"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
+++ /dev/null
-from dirty_equals import IsDict
-from fastapi.testclient import TestClient
-from sqlmodel import Session, create_engine
-from sqlmodel.pool import StaticPool
-
-from ....conftest import needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.fastapi.update import tutorial002_py39 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(
- mod.sqlite_url, connect_args=mod.connect_args, poolclass=StaticPool
- )
-
- with TestClient(mod.app) as client:
- hero1_data = {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "password": "chimichanga",
- }
- hero2_data = {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "id": 9000,
- "password": "auntmay",
- }
- hero3_data = {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- "password": "bestpreventer",
- }
- response = client.post("/heroes/", json=hero1_data)
- assert response.status_code == 200, response.text
- hero1 = response.json()
- assert "password" not in hero1
- assert "hashed_password" not in 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"]
- response = client.post("/heroes/", json=hero3_data)
- assert response.status_code == 200, response.text
- hero3 = response.json()
- hero3_id = hero3["id"]
- response = client.get(f"/heroes/{hero2_id}")
- assert response.status_code == 200, response.text
- fetched_hero2 = response.json()
- assert "password" not in fetched_hero2
- assert "hashed_password" not in fetched_hero2
- response = client.get("/heroes/9000")
- 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
- for response_hero in data:
- assert "password" not in response_hero
- assert "hashed_password" not in response_hero
-
- # Test hashed passwords
- with Session(mod.engine) as session:
- hero1_db = session.get(mod.Hero, hero1_id)
- assert hero1_db
- assert not hasattr(hero1_db, "password")
- assert hero1_db.hashed_password == "not really hashed chimichanga hehehe"
- hero2_db = session.get(mod.Hero, hero2_id)
- assert hero2_db
- assert not hasattr(hero2_db, "password")
- assert hero2_db.hashed_password == "not really hashed auntmay hehehe"
- hero3_db = session.get(mod.Hero, hero3_id)
- assert hero3_db
- assert not hasattr(hero3_db, "password")
- assert hero3_db.hashed_password == "not really hashed bestpreventer hehehe"
-
- response = client.patch(
- f"/heroes/{hero2_id}", json={"secret_name": "Spider-Youngster"}
- )
- data = response.json()
- assert response.status_code == 200, response.text
- assert data["name"] == hero2_data["name"], "The name should not be set to none"
- assert data["secret_name"] == "Spider-Youngster", (
- "The secret name should be updated"
- )
- assert "password" not in data
- assert "hashed_password" not in data
- with Session(mod.engine) as session:
- hero2b_db = session.get(mod.Hero, hero2_id)
- assert hero2b_db
- assert not hasattr(hero2b_db, "password")
- assert hero2b_db.hashed_password == "not really hashed auntmay hehehe"
-
- response = client.patch(f"/heroes/{hero3_id}", json={"age": None})
- data = response.json()
- assert response.status_code == 200, response.text
- assert data["name"] == hero3_data["name"]
- assert data["age"] is None, (
- "A field should be updatable to None, even if that's the default"
- )
- assert "password" not in data
- assert "hashed_password" not in data
- with Session(mod.engine) as session:
- hero3b_db = session.get(mod.Hero, hero3_id)
- assert hero3b_db
- assert not hasattr(hero3b_db, "password")
- assert hero3b_db.hashed_password == "not really hashed bestpreventer hehehe"
-
- # Test update dict, hashed_password
- response = client.patch(
- f"/heroes/{hero3_id}", json={"password": "philantroplayboy"}
- )
- data = response.json()
- assert response.status_code == 200, response.text
- assert data["name"] == hero3_data["name"]
- assert data["age"] is None
- assert "password" not in data
- assert "hashed_password" not in data
- with Session(mod.engine) as session:
- hero3b_db = session.get(mod.Hero, hero3_id)
- assert hero3b_db
- assert not hasattr(hero3b_db, "password")
- assert (
- hero3b_db.hashed_password == "not really hashed philantroplayboy hehehe"
- )
-
- response = client.patch("/heroes/9001", json={"name": "Dragon Cube X"})
- assert response.status_code == 404, response.text
-
- response = client.get("/openapi.json")
- assert response.status_code == 200, response.text
- 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",
- },
- {
- "required": False,
- "schema": {
- "title": "Limit",
- "maximum": 100,
- "type": "integer",
- "default": 100,
- },
- "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"
- },
- }
- }
- },
- },
- "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",
- "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"
- }
- }
- },
- },
- "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"
- }
- }
- },
- "required": True,
- },
- "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",
- }
- )
- | IsDict(
- # TODO: Remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "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(
- # TODO: Remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "id": {"title": "Id", "type": "integer"},
- },
- },
- "HeroUpdate": {
- "title": "HeroUpdate",
- "type": "object",
- "properties": {
- "name": IsDict(
- {
- "anyOf": [{"type": "string"}, {"type": "null"}],
- "title": "Name",
- }
- )
- | IsDict(
- # TODO: Remove when deprecating Pydantic v1
- {"title": "Name", "type": "string"}
- ),
- "secret_name": IsDict(
- {
- "anyOf": [{"type": "string"}, {"type": "null"}],
- "title": "Secret Name",
- }
- )
- | IsDict(
- # TODO: Remove when deprecating Pydantic v1
- {"title": "Secret Name", "type": "string"}
- ),
- "age": IsDict(
- {
- "anyOf": [{"type": "integer"}, {"type": "null"}],
- "title": "Age",
- }
- )
- | IsDict(
- # TODO: Remove when deprecating Pydantic v1
- {"title": "Age", "type": "integer"}
- ),
- "password": IsDict(
- {
- "anyOf": [{"type": "string"}, {"type": "null"}],
- "title": "Password",
- }
- )
- | IsDict(
- # TODO: Remove when deprecating Pydantic v1
- {"title": "Password", "type": "string"}
- ),
- },
- },
- "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"},
- },
- },
- }
- },
- }
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlalchemy import inspect
from sqlalchemy.engine.reflection import Inspector
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.indexes import tutorial001 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.indexes.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[{"secret_name": "Dive Wilson", "age": None, "id": 1, "name": "Deadpond"}]
]
+++ /dev/null
-from unittest.mock import patch
-
-from sqlalchemy import inspect
-from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.indexes import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [{"secret_name": "Dive Wilson", "age": None, "id": 1, "name": "Deadpond"}]
- ]
-
- insp: Inspector = inspect(mod.engine)
- indexes = insp.get_indexes(str(mod.Hero.__tablename__))
- expected_indexes = [
- {
- "name": "ix_hero_name",
- "dialect_options": {},
- "column_names": ["name"],
- "unique": 0,
- },
- {
- "name": "ix_hero_age",
- "dialect_options": {},
- "column_names": ["age"],
- "unique": 0,
- },
- ]
- for index in expected_indexes:
- assert index in indexes, "This expected index should be in the indexes in DB"
- # Now that this index was checked, remove it from the list of indexes
- indexes.pop(indexes.index(index))
- assert len(indexes) == 0, "The database should only have the expected indexes"
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlalchemy import inspect
from sqlalchemy.engine.reflection import Inspector
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.indexes import tutorial002 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial002",
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.indexes.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}],
[{"name": "Black Lion", "secret_name": "Trevor Challa", "age": 35, "id": 5}],
]
+++ /dev/null
-from unittest.mock import patch
-
-from sqlalchemy import inspect
-from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.indexes import tutorial002_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}],
- [{"name": "Black Lion", "secret_name": "Trevor Challa", "age": 35, "id": 5}],
- ]
-
- insp: Inspector = inspect(mod.engine)
- indexes = insp.get_indexes(str(mod.Hero.__tablename__))
- expected_indexes = [
- {
- "name": "ix_hero_name",
- "dialect_options": {},
- "column_names": ["name"],
- "unique": 0,
- },
- {
- "name": "ix_hero_age",
- "dialect_options": {},
- "column_names": ["age"],
- "unique": 0,
- },
- ]
- for index in expected_indexes:
- assert index in indexes, "This expected index should be in the indexes in DB"
- # Now that this index was checked, remove it from the list of indexes
- indexes.pop(indexes.index(index))
- assert len(indexes) == 0, "The database should only have the expected indexes"
+import importlib
+from types import ModuleType
+
+import pytest
from sqlmodel import Session, create_engine, select
+from ...conftest import needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.insert import tutorial001 as mod
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.insert.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
+
+def test_tutorial(mod: ModuleType):
mod.main()
with Session(mod.engine) as session:
heroes = session.exec(select(mod.Hero)).all()
+++ /dev/null
-from sqlmodel import Session, create_engine, select
-
-from ...conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.insert import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- mod.main()
- with Session(mod.engine) as session:
- heroes = session.exec(select(mod.Hero)).all()
- heroes_by_name = {hero.name: hero for hero in heroes}
- deadpond = heroes_by_name["Deadpond"]
- spider_boy = heroes_by_name["Spider-Boy"]
- rusty_man = heroes_by_name["Rusty-Man"]
- assert deadpond.name == "Deadpond"
- assert deadpond.age is None
- assert deadpond.id is not None
- assert deadpond.secret_name == "Dive Wilson"
- assert spider_boy.name == "Spider-Boy"
- assert spider_boy.age is None
- assert spider_boy.id is not None
- assert spider_boy.secret_name == "Pedro Parqueador"
- assert rusty_man.name == "Rusty-Man"
- assert rusty_man.age == 48
- assert rusty_man.id is not None
- assert rusty_man.secret_name == "Tommy Sharp"
+import importlib
+from types import ModuleType
+
+import pytest
from sqlmodel import Session, create_engine, select
+from ...conftest import needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.insert import tutorial002 as mod
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial002",
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.insert.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
+
+def test_tutorial(mod: ModuleType):
mod.main()
with Session(mod.engine) as session:
heroes = session.exec(select(mod.Hero)).all()
+++ /dev/null
-from sqlmodel import Session, create_engine, select
-
-from ...conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.insert import tutorial002_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- mod.main()
- with Session(mod.engine) as session:
- heroes = session.exec(select(mod.Hero)).all()
- heroes_by_name = {hero.name: hero for hero in heroes}
- deadpond = heroes_by_name["Deadpond"]
- spider_boy = heroes_by_name["Spider-Boy"]
- rusty_man = heroes_by_name["Rusty-Man"]
- assert deadpond.name == "Deadpond"
- assert deadpond.age is None
- assert deadpond.id is not None
- assert deadpond.secret_name == "Dive Wilson"
- assert spider_boy.name == "Spider-Boy"
- assert spider_boy.age is None
- assert spider_boy.id is not None
- assert spider_boy.secret_name == "Pedro Parqueador"
- assert rusty_man.name == "Rusty-Man"
- assert rusty_man.age == 48
- assert rusty_man.id is not None
- assert rusty_man.secret_name == "Tommy Sharp"
+import importlib
+from types import ModuleType
+
+import pytest
from sqlmodel import Session, create_engine, select
+from ...conftest import needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.insert import tutorial003 as mod
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial003",
+ pytest.param("tutorial003_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.insert.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
+
+def test_tutorial(mod: ModuleType):
mod.main()
with Session(mod.engine) as session:
heroes = session.exec(select(mod.Hero)).all()
+++ /dev/null
-from sqlmodel import Session, create_engine, select
-
-from ...conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.insert import tutorial003_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- mod.main()
- with Session(mod.engine) as session:
- heroes = session.exec(select(mod.Hero)).all()
- heroes_by_name = {hero.name: hero for hero in heroes}
- deadpond = heroes_by_name["Deadpond"]
- spider_boy = heroes_by_name["Spider-Boy"]
- rusty_man = heroes_by_name["Rusty-Man"]
- assert deadpond.name == "Deadpond"
- assert deadpond.age is None
- assert deadpond.id is not None
- assert deadpond.secret_name == "Dive Wilson"
- assert spider_boy.name == "Spider-Boy"
- assert spider_boy.age is None
- assert spider_boy.id is not None
- assert spider_boy.secret_name == "Pedro Parqueador"
- assert rusty_man.name == "Rusty-Man"
- assert rusty_man.age == 48
- assert rusty_man.id is not None
- assert rusty_man.secret_name == "Tommy Sharp"
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
+
+
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.offset_and_limit.{request.param}")
+ mod.sqlite_url = "sqlite://"
+ mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
expected_calls = [
[
]
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.offset_and_limit import tutorial001 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- [
- {"id": 1, "name": "Deadpond", "secret_name": "Dive Wilson", "age": None},
- {
- "id": 2,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "age": None,
- },
- {"id": 3, "name": "Rusty-Man", "secret_name": "Tommy Sharp", "age": 48},
- ]
- ]
-]
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.offset_and_limit import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
+
+
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial002",
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.offset_and_limit.{request.param}")
+ mod.sqlite_url = "sqlite://"
+ mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
expected_calls = [
[
]
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.offset_and_limit import tutorial002 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- [
- {
- "id": 4,
- "name": "Tarantula",
- "secret_name": "Natalia Roman-on",
- "age": 32,
- },
- {"id": 5, "name": "Black Lion", "secret_name": "Trevor Challa", "age": 35},
- {"id": 6, "name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36},
- ]
- ]
-]
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.offset_and_limit import tutorial002_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
+
+
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial003",
+ pytest.param("tutorial003_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.offset_and_limit.{request.param}")
+ mod.sqlite_url = "sqlite://"
+ mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
expected_calls = [
[
]
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.offset_and_limit import tutorial003 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- [
- {
- "id": 7,
- "name": "Captain North America",
- "secret_name": "Esteban Rogelios",
- "age": 93,
- }
- ]
- ]
-]
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.offset_and_limit import tutorial003_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.offset_and_limit import tutorial004 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial004",
+ pytest.param("tutorial004_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.offset_and_limit.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[
[
{"name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36, "id": 6},
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.offset_and_limit import tutorial004_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- [
- {"name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36, "id": 6},
- {"name": "Rusty-Man", "secret_name": "Tommy Sharp", "age": 48, "id": 3},
- ]
- ]
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py39, needs_py310
+
+
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.many_to_many.{request.param}")
+ mod.sqlite_url = "sqlite://"
+ mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
expected_calls = [
[
]
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.many_to_many import tutorial001 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Deadpond:",
- {"id": 1, "secret_name": "Dive Wilson", "age": None, "name": "Deadpond"},
- ],
- [
- "Deadpond teams:",
- [
- {"id": 1, "name": "Z-Force", "headquarters": "Sister Margaret's Bar"},
- {"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"},
- ],
- ],
- [
- "Rusty-Man:",
- {"id": 2, "secret_name": "Tommy Sharp", "age": 48, "name": "Rusty-Man"},
- ],
- [
- "Rusty-Man Teams:",
- [{"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"}],
- ],
- [
- "Spider-Boy:",
- {"id": 3, "secret_name": "Pedro Parqueador", "age": None, "name": "Spider-Boy"},
- ],
- [
- "Spider-Boy Teams:",
- [{"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"}],
- ],
-]
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.many_to_many import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py39
-
-expected_calls = [
- [
- "Deadpond:",
- {"id": 1, "secret_name": "Dive Wilson", "age": None, "name": "Deadpond"},
- ],
- [
- "Deadpond teams:",
- [
- {"id": 1, "name": "Z-Force", "headquarters": "Sister Margaret's Bar"},
- {"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"},
- ],
- ],
- [
- "Rusty-Man:",
- {"id": 2, "secret_name": "Tommy Sharp", "age": 48, "name": "Rusty-Man"},
- ],
- [
- "Rusty-Man Teams:",
- [{"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"}],
- ],
- [
- "Spider-Boy:",
- {"id": 3, "secret_name": "Pedro Parqueador", "age": None, "name": "Spider-Boy"},
- ],
- [
- "Spider-Boy Teams:",
- [{"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"}],
- ],
-]
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.many_to_many import tutorial001_py39 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py39, needs_py310
+
+
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial002",
+ pytest.param("tutorial002_py39", marks=needs_py39),
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.many_to_many.{request.param}")
+ mod.sqlite_url = "sqlite://"
+ mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
expected_calls = [
[
]
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.many_to_many import tutorial002 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Deadpond:",
- {"id": 1, "secret_name": "Dive Wilson", "age": None, "name": "Deadpond"},
- ],
- [
- "Deadpond teams:",
- [
- {"id": 1, "name": "Z-Force", "headquarters": "Sister Margaret's Bar"},
- {"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"},
- ],
- ],
- [
- "Rusty-Man:",
- {"id": 2, "secret_name": "Tommy Sharp", "age": 48, "name": "Rusty-Man"},
- ],
- [
- "Rusty-Man Teams:",
- [{"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"}],
- ],
- [
- "Spider-Boy:",
- {"id": 3, "secret_name": "Pedro Parqueador", "age": None, "name": "Spider-Boy"},
- ],
- [
- "Spider-Boy Teams:",
- [{"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"}],
- ],
- [
- "Updated Spider-Boy's Teams:",
- [
- {"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"},
- {"id": 1, "name": "Z-Force", "headquarters": "Sister Margaret's Bar"},
- ],
- ],
- [
- "Z-Force heroes:",
- [
- {"id": 1, "secret_name": "Dive Wilson", "age": None, "name": "Deadpond"},
- {
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "age": None,
- "name": "Spider-Boy",
- },
- ],
- ],
- [
- "Reverted Z-Force's heroes:",
- [{"id": 1, "secret_name": "Dive Wilson", "age": None, "name": "Deadpond"}],
- ],
- [
- "Reverted Spider-Boy's teams:",
- [{"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"}],
- ],
-]
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.many_to_many import tutorial002_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py39
-
-expected_calls = [
- [
- "Deadpond:",
- {"id": 1, "secret_name": "Dive Wilson", "age": None, "name": "Deadpond"},
- ],
- [
- "Deadpond teams:",
- [
- {"id": 1, "name": "Z-Force", "headquarters": "Sister Margaret's Bar"},
- {"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"},
- ],
- ],
- [
- "Rusty-Man:",
- {"id": 2, "secret_name": "Tommy Sharp", "age": 48, "name": "Rusty-Man"},
- ],
- [
- "Rusty-Man Teams:",
- [{"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"}],
- ],
- [
- "Spider-Boy:",
- {"id": 3, "secret_name": "Pedro Parqueador", "age": None, "name": "Spider-Boy"},
- ],
- [
- "Spider-Boy Teams:",
- [{"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"}],
- ],
- [
- "Updated Spider-Boy's Teams:",
- [
- {"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"},
- {"id": 1, "name": "Z-Force", "headquarters": "Sister Margaret's Bar"},
- ],
- ],
- [
- "Z-Force heroes:",
- [
- {"id": 1, "secret_name": "Dive Wilson", "age": None, "name": "Deadpond"},
- {
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "age": None,
- "name": "Spider-Boy",
- },
- ],
- ],
- [
- "Reverted Z-Force's heroes:",
- [{"id": 1, "secret_name": "Dive Wilson", "age": None, "name": "Deadpond"}],
- ],
- [
- "Reverted Spider-Boy's teams:",
- [{"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"}],
- ],
-]
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.many_to_many import tutorial002_py39 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py39, needs_py310
+
+
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial003",
+ pytest.param("tutorial003_py39", marks=needs_py39),
+ pytest.param("tutorial003_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.many_to_many.{request.param}")
+ mod.sqlite_url = "sqlite://"
+ mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
expected_calls = [
[
]
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.many_to_many import tutorial003 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Z-Force hero:",
- {"name": "Deadpond", "secret_name": "Dive Wilson", "id": 1, "age": None},
- "is training:",
- False,
- ],
- [
- "Preventers hero:",
- {"name": "Deadpond", "secret_name": "Dive Wilson", "id": 1, "age": None},
- "is training:",
- True,
- ],
- [
- "Preventers hero:",
- {"name": "Spider-Boy", "secret_name": "Pedro Parqueador", "id": 2, "age": None},
- "is training:",
- True,
- ],
- [
- "Preventers hero:",
- {"name": "Rusty-Man", "secret_name": "Tommy Sharp", "id": 3, "age": 48},
- "is training:",
- False,
- ],
- [
- "Updated Spider-Boy's Teams:",
- [
- {"team_id": 2, "is_training": True, "hero_id": 2},
- {"team_id": 1, "is_training": True, "hero_id": 2},
- ],
- ],
- [
- "Z-Force heroes:",
- [
- {"team_id": 1, "is_training": False, "hero_id": 1},
- {"team_id": 1, "is_training": True, "hero_id": 2},
- ],
- ],
- [
- "Spider-Boy team:",
- {"headquarters": "Sharp Tower", "id": 2, "name": "Preventers"},
- "is training:",
- False,
- ],
- [
- "Spider-Boy team:",
- {"headquarters": "Sister Margaret's Bar", "id": 1, "name": "Z-Force"},
- "is training:",
- True,
- ],
-]
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.many_to_many import tutorial003_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py39
-
-expected_calls = [
- [
- "Z-Force hero:",
- {"name": "Deadpond", "secret_name": "Dive Wilson", "id": 1, "age": None},
- "is training:",
- False,
- ],
- [
- "Preventers hero:",
- {"name": "Deadpond", "secret_name": "Dive Wilson", "id": 1, "age": None},
- "is training:",
- True,
- ],
- [
- "Preventers hero:",
- {"name": "Spider-Boy", "secret_name": "Pedro Parqueador", "id": 2, "age": None},
- "is training:",
- True,
- ],
- [
- "Preventers hero:",
- {"name": "Rusty-Man", "secret_name": "Tommy Sharp", "id": 3, "age": 48},
- "is training:",
- False,
- ],
- [
- "Updated Spider-Boy's Teams:",
- [
- {"team_id": 2, "is_training": True, "hero_id": 2},
- {"team_id": 1, "is_training": True, "hero_id": 2},
- ],
- ],
- [
- "Z-Force heroes:",
- [
- {"team_id": 1, "is_training": False, "hero_id": 1},
- {"team_id": 1, "is_training": True, "hero_id": 2},
- ],
- ],
- [
- "Spider-Boy team:",
- {"headquarters": "Sharp Tower", "id": 2, "name": "Preventers"},
- "is training:",
- False,
- ],
- [
- "Spider-Boy team:",
- {"headquarters": "Sister Margaret's Bar", "id": 1, "name": "Z-Force"},
- "is training:",
- True,
- ],
-]
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.many_to_many import tutorial003_py39 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial001 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.one.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[
"Hero:",
{
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- "Hero:",
- {
- "name": "Tarantula",
- "secret_name": "Natalia Roman-on",
- "age": 32,
- "id": 4,
- },
- ]
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial002 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial002",
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.one.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [["Hero:", None]]
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [["Hero:", None]]
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial002_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [["Hero:", None]]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial003 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial003",
+ pytest.param("tutorial003_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.one.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[
"Hero:",
{"name": "Deadpond", "secret_name": "Dive Wilson", "age": None, "id": 1},
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial003_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- "Hero:",
- {"name": "Deadpond", "secret_name": "Dive Wilson", "age": None, "id": 1},
- ]
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
import pytest
from sqlalchemy.exc import MultipleResultsFound
from sqlmodel import Session, create_engine, delete
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial004 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial004",
+ pytest.param("tutorial004_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.one.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
+
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
with pytest.raises(MultipleResultsFound):
mod.main()
with Session(mod.engine) as session:
session.add(mod.Hero(name="Test Hero", secret_name="Secret Test Hero", age=24))
session.commit()
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.select_heroes()
- assert calls == [
+ mod.select_heroes()
+ assert print_mock.calls == [
[
"Hero:",
{
+++ /dev/null
-from unittest.mock import patch
-
-import pytest
-from sqlalchemy.exc import MultipleResultsFound
-from sqlmodel import Session, create_engine, delete
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial004_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- with pytest.raises(MultipleResultsFound):
- mod.main()
- with Session(mod.engine) as session:
- # TODO: create delete() function
- # TODO: add overloads for .exec() with delete object
- session.exec(delete(mod.Hero))
- session.add(mod.Hero(name="Test Hero", secret_name="Secret Test Hero", age=24))
- session.commit()
-
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.select_heroes()
- assert calls == [
- [
- "Hero:",
- {
- "id": 1,
- "name": "Test Hero",
- "secret_name": "Secret Test Hero",
- "age": 24,
- },
- ]
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
import pytest
from sqlalchemy.exc import NoResultFound
from sqlmodel import Session, create_engine, delete
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial005 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial005",
+ pytest.param("tutorial005_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.one.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
+
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
with pytest.raises(NoResultFound):
mod.main()
with Session(mod.engine) as session:
session.add(mod.Hero(name="Test Hero", secret_name="Secret Test Hero", age=24))
session.commit()
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.select_heroes()
- assert calls == [
+ mod.select_heroes()
+ assert print_mock.calls == [
[
"Hero:",
{
+++ /dev/null
-from unittest.mock import patch
-
-import pytest
-from sqlalchemy.exc import NoResultFound
-from sqlmodel import Session, create_engine, delete
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial005_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- with pytest.raises(NoResultFound):
- mod.main()
- with Session(mod.engine) as session:
- # TODO: create delete() function
- # TODO: add overloads for .exec() with delete object
- session.exec(delete(mod.Hero))
- session.add(mod.Hero(name="Test Hero", secret_name="Secret Test Hero", age=24))
- session.commit()
-
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.select_heroes()
- assert calls == [
- [
- "Hero:",
- {
- "id": 1,
- "name": "Test Hero",
- "secret_name": "Secret Test Hero",
- "age": 24,
- },
- ]
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial006 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial006",
+ pytest.param("tutorial006_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.one.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[
"Hero:",
{"name": "Deadpond", "secret_name": "Dive Wilson", "age": None, "id": 1},
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial006_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- "Hero:",
- {"name": "Deadpond", "secret_name": "Dive Wilson", "age": None, "id": 1},
- ]
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial007 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial007",
+ pytest.param("tutorial007_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.one.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[
"Hero:",
{"name": "Deadpond", "secret_name": "Dive Wilson", "age": None, "id": 1},
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial007_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- "Hero:",
- {"name": "Deadpond", "secret_name": "Dive Wilson", "age": None, "id": 1},
- ]
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial008 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial008",
+ pytest.param("tutorial008_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.one.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[
"Hero:",
{"name": "Deadpond", "secret_name": "Dive Wilson", "age": None, "id": 1},
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial008_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- "Hero:",
- {"name": "Deadpond", "secret_name": "Dive Wilson", "age": None, "id": 1},
- ]
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial009 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial009",
+ pytest.param("tutorial009_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.one.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [["Hero:", None]]
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [["Hero:", None]]
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.one import tutorial009_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [["Hero:", None]]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
import pytest
from sqlalchemy.exc import SAWarning
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py39, needs_py310
+
+
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.relationship_attributes.back_populates.{request.param}"
+ )
+ mod.sqlite_url = "sqlite://"
+ mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
expected_calls = [
[
]
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.back_populates import (
- tutorial001 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- with pytest.warns(SAWarning):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ with pytest.warns(SAWarning):
+ mod.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-import pytest
-from sqlalchemy.exc import SAWarning
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 1,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Team Wakaland:",
- {"headquarters": "Wakaland Capital City", "id": 3, "name": "Wakaland"},
- ],
- [
- "Preventers new hero:",
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- [
- "Preventers heroes:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
- [
- "Hero Spider-Boy:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Preventers Team:",
- {"headquarters": "Sharp Tower", "id": 2, "name": "Preventers"},
- ],
- [
- "Preventers Team Heroes:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
- [
- "Spider-Boy without team:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Preventers Team Heroes again:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
- ["After committing"],
- [
- "Spider-Boy after commit:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Preventers Team Heroes after commit:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
-]
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.back_populates import (
- tutorial001_py310 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- with pytest.warns(SAWarning):
- mod.main()
- assert calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-import pytest
-from sqlalchemy.exc import SAWarning
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py39
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 1,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Team Wakaland:",
- {"headquarters": "Wakaland Capital City", "id": 3, "name": "Wakaland"},
- ],
- [
- "Preventers new hero:",
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- [
- "Preventers heroes:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
- [
- "Hero Spider-Boy:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Preventers Team:",
- {"headquarters": "Sharp Tower", "id": 2, "name": "Preventers"},
- ],
- [
- "Preventers Team Heroes:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
- [
- "Spider-Boy without team:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Preventers Team Heroes again:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
- ["After committing"],
- [
- "Spider-Boy after commit:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Preventers Team Heroes after commit:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
-]
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.back_populates import (
- tutorial001_py39 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- with pytest.warns(SAWarning):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py39, needs_py310
+
+
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial002",
+ pytest.param("tutorial002_py39", marks=needs_py39),
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.relationship_attributes.back_populates.{request.param}"
+ )
+ mod.sqlite_url = "sqlite://"
+ mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
expected_calls = [
[
]
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.back_populates import (
- tutorial002 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 1,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Team Wakaland:",
- {"id": 3, "name": "Wakaland", "headquarters": "Wakaland Capital City"},
- ],
- [
- "Preventers new hero:",
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- [
- "Preventers heroes:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
- [
- "Hero Spider-Boy:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Preventers Team:",
- {"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"},
- ],
- [
- "Preventers Team Heroes:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
- [
- "Spider-Boy without team:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Preventers Team Heroes again:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
- ["After committing"],
- [
- "Spider-Boy after commit:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Preventers Team Heroes after commit:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
-]
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.back_populates import (
- tutorial002_py310 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py39
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 1,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Team Wakaland:",
- {"id": 3, "name": "Wakaland", "headquarters": "Wakaland Capital City"},
- ],
- [
- "Preventers new hero:",
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- [
- "Preventers heroes:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
- [
- "Hero Spider-Boy:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Preventers Team:",
- {"id": 2, "name": "Preventers", "headquarters": "Sharp Tower"},
- ],
- [
- "Preventers Team Heroes:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
- [
- "Spider-Boy without team:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Preventers Team Heroes again:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
- ["After committing"],
- [
- "Spider-Boy after commit:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Preventers Team Heroes after commit:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
-]
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.back_populates import (
- tutorial002_py39 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+import importlib
+from types import ModuleType
+
+import pytest
from sqlalchemy import inspect
from sqlalchemy.engine.reflection import Inspector
from sqlmodel import create_engine
+from ....conftest import needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.back_populates import (
- tutorial003 as mod,
- )
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial003",
+ pytest.param("tutorial003_py39", marks=needs_py39),
+ pytest.param("tutorial003_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.relationship_attributes.back_populates.{request.param}"
+ )
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
+
+def test_tutorial(mod: ModuleType):
mod.main()
insp: Inspector = inspect(mod.engine)
assert insp.has_table(str(mod.Hero.__tablename__))
+++ /dev/null
-from sqlalchemy import inspect
-from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import create_engine
-
-from ....conftest import needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.back_populates import (
- tutorial003_py310 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- mod.main()
- insp: Inspector = inspect(mod.engine)
- assert insp.has_table(str(mod.Hero.__tablename__))
- assert insp.has_table(str(mod.Weapon.__tablename__))
- assert insp.has_table(str(mod.Power.__tablename__))
- assert insp.has_table(str(mod.Team.__tablename__))
+++ /dev/null
-from sqlalchemy import inspect
-from sqlalchemy.engine.reflection import Inspector
-from sqlmodel import create_engine
-
-from ....conftest import needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.back_populates import (
- tutorial003_py39 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- mod.main()
- insp: Inspector = inspect(mod.engine)
- assert insp.has_table(str(mod.Hero.__tablename__))
- assert insp.has_table(str(mod.Weapon.__tablename__))
- assert insp.has_table(str(mod.Power.__tablename__))
- assert insp.has_table(str(mod.Team.__tablename__))
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py39, needs_py310
+
+
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.relationship_attributes.create_and_update_relationships.{request.param}"
+ )
+ mod.sqlite_url = "sqlite://"
+ mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
expected_calls = [
[
]
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.create_and_update_relationships import (
- tutorial001 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 1,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Team Wakaland:",
- {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
- ],
- [
- "Preventers new hero:",
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
-]
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.create_and_update_relationships import (
- tutorial001_py310 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py39
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 1,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Team Wakaland:",
- {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
- ],
- [
- "Preventers new hero:",
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
-]
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.create_and_update_relationships import (
- tutorial001_py39 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py39, needs_py310
+
+
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.relationship_attributes.define_relationship_attributes.{request.param}"
+ )
+ mod.sqlite_url = "sqlite://"
+ mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
expected_calls = [
[
]
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.define_relationship_attributes import (
- tutorial001 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Created hero:",
- {
- "name": "Deadpond",
- "age": None,
- "team_id": 1,
- "id": 1,
- "secret_name": "Dive Wilson",
- },
- ],
- [
- "Created hero:",
- {
- "name": "Rusty-Man",
- "age": 48,
- "team_id": 2,
- "id": 2,
- "secret_name": "Tommy Sharp",
- },
- ],
- [
- "Created hero:",
- {
- "name": "Spider-Boy",
- "age": None,
- "team_id": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- },
- ],
-]
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.define_relationship_attributes import (
- tutorial001_py310 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py39
-
-expected_calls = [
- [
- "Created hero:",
- {
- "name": "Deadpond",
- "age": None,
- "team_id": 1,
- "id": 1,
- "secret_name": "Dive Wilson",
- },
- ],
- [
- "Created hero:",
- {
- "name": "Rusty-Man",
- "age": 48,
- "team_id": 2,
- "id": 2,
- "secret_name": "Tommy Sharp",
- },
- ],
- [
- "Created hero:",
- {
- "name": "Spider-Boy",
- "age": None,
- "team_id": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- },
- ],
-]
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.define_relationship_attributes import (
- tutorial001_py39 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial001 as mod,
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.relationship_attributes.cascade_delete_relationships.{request.param}"
)
-
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[
"Created hero:",
{
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial001_py310 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- "Created hero:",
- {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "team_id": 1,
- "id": 1,
- "age": None,
- },
- ],
- [
- "Created hero:",
- {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "id": 2,
- "age": 48,
- },
- ],
- [
- "Created hero:",
- {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "id": 3,
- "age": None,
- },
- ],
- [
- "Updated hero:",
- {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "id": 3,
- "age": None,
- },
- ],
- [
- "Team Wakaland:",
- {"name": "Wakaland", "id": 3, "headquarters": "Wakaland Capital City"},
- ],
- [
- "Deleted team:",
- {"name": "Wakaland", "id": 3, "headquarters": "Wakaland Capital City"},
- ],
- ["Black Lion not found:", None],
- ["Princess Sure-E not found:", None],
- ]
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial001_py39 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- "Created hero:",
- {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "team_id": 1,
- "id": 1,
- "age": None,
- },
- ],
- [
- "Created hero:",
- {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "id": 2,
- "age": 48,
- },
- ],
- [
- "Created hero:",
- {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "id": 3,
- "age": None,
- },
- ],
- [
- "Updated hero:",
- {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "id": 3,
- "age": None,
- },
- ],
- [
- "Team Wakaland:",
- {"name": "Wakaland", "id": 3, "headquarters": "Wakaland Capital City"},
- ],
- [
- "Deleted team:",
- {"name": "Wakaland", "id": 3, "headquarters": "Wakaland Capital City"},
- ],
- ["Black Lion not found:", None],
- ["Princess Sure-E not found:", None],
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial002 as mod,
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial002",
+ pytest.param("tutorial002_py39", marks=needs_py39),
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.relationship_attributes.cascade_delete_relationships.{request.param}"
)
-
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[
"Created hero:",
{
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial002_py310 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "team_id": 1,
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- },
- ],
- [
- "Team Wakaland:",
- {"headquarters": "Wakaland Capital City", "id": 3, "name": "Wakaland"},
- ],
- [
- "Deleted team:",
- {"headquarters": "Wakaland Capital City", "id": 3, "name": "Wakaland"},
- ],
- [
- "Black Lion has no team:",
- {
- "age": 35,
- "id": 4,
- "name": "Black Lion",
- "secret_name": "Trevor Challa",
- "team_id": None,
- },
- ],
- [
- "Princess Sure-E has no team:",
- {
- "age": None,
- "id": 5,
- "name": "Princess Sure-E",
- "secret_name": "Sure-E",
- "team_id": None,
- },
- ],
- ]
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial002_py39 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "team_id": 1,
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- },
- ],
- [
- "Team Wakaland:",
- {"headquarters": "Wakaland Capital City", "id": 3, "name": "Wakaland"},
- ],
- [
- "Deleted team:",
- {"headquarters": "Wakaland Capital City", "id": 3, "name": "Wakaland"},
- ],
- [
- "Black Lion has no team:",
- {
- "age": 35,
- "id": 4,
- "name": "Black Lion",
- "secret_name": "Trevor Challa",
- "team_id": None,
- },
- ],
- [
- "Princess Sure-E has no team:",
- {
- "age": None,
- "id": 5,
- "name": "Princess Sure-E",
- "secret_name": "Sure-E",
- "team_id": None,
- },
- ],
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from tests.conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial003 as mod,
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial003",
+ pytest.param("tutorial003_py39", marks=needs_py39),
+ pytest.param("tutorial003_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.relationship_attributes.cascade_delete_relationships.{request.param}"
)
-
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[
"Created hero:",
{
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial003_py310 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "team_id": 1,
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- },
- ],
- [
- "Team Wakaland:",
- {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
- ],
- [
- "Deleted team:",
- {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
- ],
- [
- "Black Lion has no team:",
- {
- "age": 35,
- "id": 4,
- "name": "Black Lion",
- "secret_name": "Trevor Challa",
- "team_id": None,
- },
- ],
- [
- "Princess Sure-E has no team:",
- {
- "age": None,
- "id": 5,
- "name": "Princess Sure-E",
- "secret_name": "Sure-E",
- "team_id": None,
- },
- ],
- ]
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial003_py39 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "team_id": 1,
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- },
- ],
- [
- "Team Wakaland:",
- {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
- ],
- [
- "Deleted team:",
- {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
- ],
- [
- "Black Lion has no team:",
- {
- "age": 35,
- "id": 4,
- "name": "Black Lion",
- "secret_name": "Trevor Challa",
- "team_id": None,
- },
- ],
- [
- "Princess Sure-E has no team:",
- {
- "age": None,
- "id": 5,
- "name": "Princess Sure-E",
- "secret_name": "Sure-E",
- "team_id": None,
- },
- ],
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
import pytest
from sqlalchemy.exc import IntegrityError
from sqlmodel import Session, create_engine, select
-from tests.conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial004 as mod,
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial004",
+ pytest.param("tutorial004_py39", marks=needs_py39),
+ pytest.param("tutorial004_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.relationship_attributes.cascade_delete_relationships.{request.param}"
)
-
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.create_db_and_tables()
- mod.create_heroes()
- mod.select_deleted_heroes()
- with Session(mod.engine) as session:
- team = session.exec(
- select(mod.Team).where(mod.Team.name == "Wakaland")
- ).one()
- team.heroes.clear()
- session.add(team)
- session.commit()
- mod.delete_team()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.create_db_and_tables()
+ mod.create_heroes()
+ mod.select_deleted_heroes()
+ with Session(mod.engine) as session:
+ team = session.exec(select(mod.Team).where(mod.Team.name == "Wakaland")).one()
+ team.heroes.clear()
+ session.add(team)
+ session.commit()
+ mod.delete_team()
+ assert print_mock.calls == [
[
"Created hero:",
{
+++ /dev/null
-from unittest.mock import patch
-
-import pytest
-from sqlalchemy.exc import IntegrityError
-from sqlmodel import Session, create_engine, select
-
-from tests.conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial004_py310 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.create_db_and_tables()
- mod.create_heroes()
- mod.select_deleted_heroes()
- with Session(mod.engine) as session:
- team = session.exec(
- select(mod.Team).where(mod.Team.name == "Wakaland")
- ).one()
- team.heroes.clear()
- session.add(team)
- session.commit()
- mod.delete_team()
- assert calls == [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "team_id": 1,
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- },
- ],
- [
- "Team Wakaland:",
- {"headquarters": "Wakaland Capital City", "id": 3, "name": "Wakaland"},
- ],
- [
- "Black Lion has no team:",
- {
- "age": 35,
- "id": 4,
- "name": "Black Lion",
- "secret_name": "Trevor Challa",
- "team_id": 3,
- },
- ],
- [
- "Princess Sure-E has no team:",
- {
- "age": None,
- "id": 5,
- "name": "Princess Sure-E",
- "secret_name": "Sure-E",
- "team_id": 3,
- },
- ],
- [
- "Deleted team:",
- {"headquarters": "Wakaland Capital City", "id": 3, "name": "Wakaland"},
- ],
- ]
-
- with pytest.raises(IntegrityError) as exc:
- mod.main()
- assert "FOREIGN KEY constraint failed" in str(exc.value)
+++ /dev/null
-from unittest.mock import patch
-
-import pytest
-from sqlalchemy.exc import IntegrityError
-from sqlmodel import Session, create_engine, select
-
-from tests.conftest import get_testing_print_function, needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial004_py39 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.create_db_and_tables()
- mod.create_heroes()
- mod.select_deleted_heroes()
- with Session(mod.engine) as session:
- team = session.exec(
- select(mod.Team).where(mod.Team.name == "Wakaland")
- ).one()
- team.heroes.clear()
- session.add(team)
- session.commit()
- mod.delete_team()
- assert calls == [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "team_id": 1,
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- },
- ],
- [
- "Team Wakaland:",
- {"headquarters": "Wakaland Capital City", "id": 3, "name": "Wakaland"},
- ],
- [
- "Black Lion has no team:",
- {
- "age": 35,
- "id": 4,
- "name": "Black Lion",
- "secret_name": "Trevor Challa",
- "team_id": 3,
- },
- ],
- [
- "Princess Sure-E has no team:",
- {
- "age": None,
- "id": 5,
- "name": "Princess Sure-E",
- "secret_name": "Sure-E",
- "team_id": 3,
- },
- ],
- [
- "Deleted team:",
- {"headquarters": "Wakaland Capital City", "id": 3, "name": "Wakaland"},
- ],
- ]
-
- with pytest.raises(IntegrityError) as exc:
- mod.main()
- assert "FOREIGN KEY constraint failed" in str(exc.value)
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from tests.conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py39, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial005 as mod,
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial005",
+ pytest.param("tutorial005_py39", marks=needs_py39),
+ pytest.param("tutorial005_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.relationship_attributes.cascade_delete_relationships.{request.param}"
)
-
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[
"Created hero:",
{
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from tests.conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial005_py310 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- "Created hero:",
- {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "team_id": 1,
- "id": 1,
- "age": None,
- },
- ],
- [
- "Created hero:",
- {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "id": 2,
- "age": 48,
- },
- ],
- [
- "Created hero:",
- {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "id": 3,
- "age": None,
- },
- ],
- [
- "Updated hero:",
- {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "id": 3,
- "age": None,
- },
- ],
- [
- "Team Wakaland:",
- {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
- ],
- [
- "Team with removed heroes:",
- {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
- ],
- [
- "Deleted team:",
- {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
- ],
- [
- "Black Lion has no team:",
- {
- "name": "Black Lion",
- "secret_name": "Trevor Challa",
- "team_id": None,
- "id": 4,
- "age": 35,
- },
- ],
- [
- "Princess Sure-E has no team:",
- {
- "name": "Princess Sure-E",
- "secret_name": "Sure-E",
- "team_id": None,
- "id": 5,
- "age": None,
- },
- ],
- ]
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from tests.conftest import get_testing_print_function, needs_py39
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.cascade_delete_relationships import (
- tutorial005_py39 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- "Created hero:",
- {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "team_id": 1,
- "id": 1,
- "age": None,
- },
- ],
- [
- "Created hero:",
- {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "id": 2,
- "age": 48,
- },
- ],
- [
- "Created hero:",
- {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "id": 3,
- "age": None,
- },
- ],
- [
- "Updated hero:",
- {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "id": 3,
- "age": None,
- },
- ],
- [
- "Team Wakaland:",
- {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
- ],
- [
- "Team with removed heroes:",
- {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
- ],
- [
- "Deleted team:",
- {"id": 3, "headquarters": "Wakaland Capital City", "name": "Wakaland"},
- ],
- [
- "Black Lion has no team:",
- {
- "name": "Black Lion",
- "secret_name": "Trevor Challa",
- "team_id": None,
- "id": 4,
- "age": 35,
- },
- ],
- [
- "Princess Sure-E has no team:",
- {
- "name": "Princess Sure-E",
- "secret_name": "Sure-E",
- "team_id": None,
- "id": 5,
- "age": None,
- },
- ],
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py39, needs_py310
+
+
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py39", marks=needs_py39),
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.relationship_attributes.read_relationships.{request.param}"
+ )
+ mod.sqlite_url = "sqlite://"
+ mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
expected_calls = [
[
]
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.read_relationships import (
- tutorial001 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 1,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Team Wakaland:",
- {"headquarters": "Wakaland Capital City", "id": 3, "name": "Wakaland"},
- ],
- [
- "Preventers new hero:",
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- [
- "Spider-Boy's team:",
- {"headquarters": "Sharp Tower", "id": 2, "name": "Preventers"},
- ],
- [
- "Spider-Boy's team again:",
- {"headquarters": "Sharp Tower", "id": 2, "name": "Preventers"},
- ],
-]
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.read_relationships import (
- tutorial001_py310 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py39
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 1,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Team Wakaland:",
- {"headquarters": "Wakaland Capital City", "id": 3, "name": "Wakaland"},
- ],
- [
- "Preventers new hero:",
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- [
- "Spider-Boy's team:",
- {"headquarters": "Sharp Tower", "id": 2, "name": "Preventers"},
- ],
- [
- "Spider-Boy's team again:",
- {"headquarters": "Sharp Tower", "id": 2, "name": "Preventers"},
- ],
-]
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.read_relationships import (
- tutorial001_py39 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ....conftest import get_testing_print_function
+from ....conftest import PrintMock, needs_py39, needs_py310
+
+
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial002",
+ pytest.param("tutorial002_py39", marks=needs_py39),
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(
+ f"docs_src.tutorial.relationship_attributes.read_relationships.{request.param}"
+ )
+ mod.sqlite_url = "sqlite://"
+ mod.engine = create_engine(mod.sqlite_url)
+ return mod
+
expected_calls = [
[
]
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.read_relationships import (
- tutorial002 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 1,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Team Wakaland:",
- {"id": 3, "name": "Wakaland", "headquarters": "Wakaland Capital City"},
- ],
- [
- "Preventers new hero:",
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- [
- "Preventers heroes:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
- [
- "Spider-Boy without team:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
-]
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.read_relationships import (
- tutorial002_py310 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ....conftest import get_testing_print_function, needs_py39
-
-expected_calls = [
- [
- "Created hero:",
- {
- "age": None,
- "id": 1,
- "secret_name": "Dive Wilson",
- "team_id": 1,
- "name": "Deadpond",
- },
- ],
- [
- "Created hero:",
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- ],
- [
- "Created hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
- [
- "Updated hero:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- ],
- [
- "Team Wakaland:",
- {"id": 3, "name": "Wakaland", "headquarters": "Wakaland Capital City"},
- ],
- [
- "Preventers new hero:",
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- ],
- [
- "Preventers new hero:",
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- [
- "Preventers heroes:",
- [
- {
- "age": 48,
- "id": 2,
- "secret_name": "Tommy Sharp",
- "team_id": 2,
- "name": "Rusty-Man",
- },
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": 2,
- "name": "Spider-Boy",
- },
- {
- "age": 32,
- "id": 6,
- "secret_name": "Natalia Roman-on",
- "team_id": 2,
- "name": "Tarantula",
- },
- {
- "age": 36,
- "id": 7,
- "secret_name": "Steve Weird",
- "team_id": 2,
- "name": "Dr. Weird",
- },
- {
- "age": 93,
- "id": 8,
- "secret_name": "Esteban Rogelios",
- "team_id": 2,
- "name": "Captain North America",
- },
- ],
- ],
- [
- "Spider-Boy without team:",
- {
- "age": None,
- "id": 3,
- "secret_name": "Pedro Parqueador",
- "team_id": None,
- "name": "Spider-Boy",
- },
- ],
-]
-
-
-@needs_py39
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.relationship_attributes.read_relationships import (
- tutorial002_py39 as mod,
- )
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+++ /dev/null
-from typing import Any, Dict, List, Union
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-def check_calls(calls: List[List[Union[str, Dict[str, Any]]]]):
- assert calls[0][0] == {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "age": None,
- "id": 1,
- }
- assert calls[1][0] == {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "age": None,
- "id": 2,
- }
- assert calls[2][0] == {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- "id": 3,
- }
-
-
-@needs_py310
-def test_tutorial_001(clear_sqlmodel):
- from docs_src.tutorial.select import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- check_calls(calls)
-
-
-@needs_py310
-def test_tutorial_002(clear_sqlmodel):
- from docs_src.tutorial.select import tutorial002_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- check_calls(calls)
+import importlib
+from types import ModuleType
from typing import Any, Dict, List, Union
-from unittest.mock import patch
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
def check_calls(calls: List[List[Union[str, Dict[str, Any]]]]):
}
-def test_tutorial_001(clear_sqlmodel):
- from docs_src.tutorial.select import tutorial001 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- check_calls(calls)
-
-
-def test_tutorial_002(clear_sqlmodel):
- from docs_src.tutorial.select import tutorial002 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- check_calls(calls)
+@pytest.fixture(name="module")
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(f"docs_src.tutorial.select.{request.param}")
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ return module
+
+
+@pytest.mark.parametrize(
+ "module",
+ [
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+ indirect=True,
+)
+def test_tutorial_001(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ check_calls(print_mock.calls)
+
+
+@pytest.mark.parametrize(
+ "module",
+ [
+ "tutorial002",
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+ indirect=True,
+)
+def test_tutorial_002(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ check_calls(print_mock.calls)
+++ /dev/null
-from typing import Any, Dict, List, Union
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-def check_calls(calls: List[List[Union[str, Dict[str, Any]]]]):
- assert calls[0][0] == [
- {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "age": None,
- "id": 1,
- },
- {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "age": None,
- "id": 2,
- },
- {
- "name": "Rusty-Man",
- "secret_name": "Tommy Sharp",
- "age": 48,
- "id": 3,
- },
- ]
-
-
-@needs_py310
-def test_tutorial_003(clear_sqlmodel):
- from docs_src.tutorial.select import tutorial003_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- check_calls(calls)
-
-
-@needs_py310
-def test_tutorial_002(clear_sqlmodel):
- from docs_src.tutorial.select import tutorial004_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- check_calls(calls)
+import importlib
+from types import ModuleType
from typing import Any, Dict, List, Union
-from unittest.mock import patch
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
def check_calls(calls: List[List[Union[str, Dict[str, Any]]]]):
]
-def test_tutorial_003(clear_sqlmodel):
- from docs_src.tutorial.select import tutorial003 as mod
+@pytest.fixture(name="module")
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(f"docs_src.tutorial.select.{request.param}")
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ return module
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
- new_print = get_testing_print_function(calls)
+@pytest.mark.parametrize(
+ "module",
+ [
+ "tutorial003",
+ pytest.param("tutorial003_py310", marks=needs_py310),
+ ],
+ indirect=True,
+)
+def test_tutorial_003(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ check_calls(print_mock.calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- check_calls(calls)
-
-def test_tutorial_002(clear_sqlmodel):
- from docs_src.tutorial.select import tutorial004 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- check_calls(calls)
+@pytest.mark.parametrize(
+ "module",
+ [
+ "tutorial004",
+ pytest.param("tutorial004_py310", marks=needs_py310),
+ ],
+ indirect=True,
+)
+def test_tutorial_004(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ check_calls(print_mock.calls)
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Hero:",
- {
- "id": 2,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "age": None,
- },
- ],
- [
- "Updated hero:",
- {
- "id": 2,
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "age": 16,
- },
- ],
-]
-
-
-@needs_py310
-def test_tutorial001(clear_sqlmodel):
- from docs_src.tutorial.update import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-
-
-@needs_py310
-def test_tutorial002(clear_sqlmodel):
- from docs_src.tutorial.update import tutorial002_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
expected_calls = [
[
]
-def test_tutorial001(clear_sqlmodel):
- from docs_src.tutorial.update import tutorial001 as mod
+@pytest.fixture(name="module")
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(f"docs_src.tutorial.update.{request.param}")
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ return module
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-
-
-def test_tutorial002(clear_sqlmodel):
- from docs_src.tutorial.update import tutorial002 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
+@pytest.mark.parametrize(
+ "module",
+ [
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+ indirect=True,
+)
+def test_tutorial001(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ assert print_mock.calls == expected_calls
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+@pytest.mark.parametrize(
+ "module",
+ [
+ "tutorial002",
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+ indirect=True,
+)
+def test_tutorial002(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ assert print_mock.calls == expected_calls
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-expected_calls = [
- [
- "Hero 1:",
- {"id": 2, "name": "Spider-Boy", "secret_name": "Pedro Parqueador", "age": None},
- ],
- [
- "Hero 2:",
- {
- "id": 7,
- "name": "Captain North America",
- "secret_name": "Esteban Rogelios",
- "age": 93,
- },
- ],
- [
- "Updated hero 1:",
- {
- "id": 2,
- "name": "Spider-Youngster",
- "secret_name": "Pedro Parqueador",
- "age": 16,
- },
- ],
- [
- "Updated hero 2:",
- {
- "id": 7,
- "name": "Captain North America Except Canada",
- "secret_name": "Esteban Rogelios",
- "age": 110,
- },
- ],
-]
-
-
-@needs_py310
-def test_tutorial003(clear_sqlmodel):
- from docs_src.tutorial.update import tutorial003_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-
-
-@needs_py310
-def test_tutorial004(clear_sqlmodel):
- from docs_src.tutorial.update import tutorial004_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
expected_calls = [
[
]
-def test_tutorial003(clear_sqlmodel):
- from docs_src.tutorial.update import tutorial003 as mod
+@pytest.fixture(name="module")
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ module = importlib.import_module(f"docs_src.tutorial.update.{request.param}")
+ module.sqlite_url = "sqlite://"
+ module.engine = create_engine(module.sqlite_url)
+ return module
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
-
-
-def test_tutorial004(clear_sqlmodel):
- from docs_src.tutorial.update import tutorial004 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
+@pytest.mark.parametrize(
+ "module",
+ [
+ "tutorial003",
+ pytest.param("tutorial003_py310", marks=needs_py310),
+ ],
+ indirect=True,
+)
+def test_tutorial003(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ assert print_mock.calls == expected_calls
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == expected_calls
+@pytest.mark.parametrize(
+ "module",
+ [
+ "tutorial004",
+ pytest.param("tutorial004_py310", marks=needs_py310),
+ ],
+ indirect=True,
+)
+def test_tutorial004(print_mock: PrintMock, module: ModuleType):
+ module.main()
+ assert print_mock.calls == expected_calls
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial001 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial001",
+ pytest.param("tutorial001_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.where.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[
{
"name": "Deadpond",
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial001_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- {
- "name": "Deadpond",
- "secret_name": "Dive Wilson",
- "age": None,
- "id": 1,
- }
- ]
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial002 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial002",
+ pytest.param("tutorial002_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.where.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[
{
"name": "Spider-Boy",
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial002_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [
- {
- "name": "Spider-Boy",
- "secret_name": "Pedro Parqueador",
- "age": None,
- "id": 2,
- }
- ],
- [{"name": "Rusty-Man", "secret_name": "Tommy Sharp", "age": 48, "id": 3}],
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial003 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial003",
+ pytest.param("tutorial003_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.where.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
expected_calls = [
[{"id": 6, "name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36}],
}
],
]
+ calls = print_mock.calls
for call in expected_calls:
assert call in calls, "This expected item should be in the list"
# Now that this item was checked, remove it from the list
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial003_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
-
- expected_calls = [
- [{"id": 6, "name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36}],
- [{"id": 3, "name": "Rusty-Man", "secret_name": "Tommy Sharp", "age": 48}],
- [
- {
- "id": 7,
- "name": "Captain North America",
- "secret_name": "Esteban Rogelios",
- "age": 93,
- }
- ],
- ]
- for call in expected_calls:
- assert call in calls, "This expected item should be in the list"
- # Now that this item was checked, remove it from the list
- calls.pop(calls.index(call))
- assert len(calls) == 0, "The list should only have the expected items"
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial004 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial004",
+ pytest.param("tutorial004_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.where.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
expected_calls = [
[{"id": 5, "name": "Black Lion", "secret_name": "Trevor Challa", "age": 35}],
[{"id": 6, "name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36}],
}
],
]
+ calls = print_mock.calls
for call in expected_calls:
assert call in calls, "This expected item should be in the list"
# Now that this item was checked, remove it from the list
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial004_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- expected_calls = [
- [{"id": 5, "name": "Black Lion", "secret_name": "Trevor Challa", "age": 35}],
- [{"id": 6, "name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36}],
- [{"id": 3, "name": "Rusty-Man", "secret_name": "Tommy Sharp", "age": 48}],
- [
- {
- "id": 7,
- "name": "Captain North America",
- "secret_name": "Esteban Rogelios",
- "age": 93,
- }
- ],
- ]
- for call in expected_calls:
- assert call in calls, "This expected item should be in the list"
- # Now that this item was checked, remove it from the list
- calls.pop(calls.index(call))
- assert len(calls) == 0, "The list should only have the expected items"
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial005 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial005",
+ pytest.param("tutorial005_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.where.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}]
]
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial005_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}]
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial006 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial006",
+ pytest.param("tutorial006_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.where.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}],
[{"name": "Black Lion", "secret_name": "Trevor Challa", "age": 35, "id": 5}],
]
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial006_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}],
- [{"name": "Black Lion", "secret_name": "Trevor Challa", "age": 35, "id": 5}],
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial007 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial007",
+ pytest.param("tutorial007_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.where.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[{"id": 5, "name": "Black Lion", "secret_name": "Trevor Challa", "age": 35}],
[{"id": 6, "name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36}],
]
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial007_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [{"id": 5, "name": "Black Lion", "secret_name": "Trevor Challa", "age": 35}],
- [{"id": 6, "name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36}],
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial008 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial008",
+ pytest.param("tutorial008_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.where.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[{"id": 5, "name": "Black Lion", "secret_name": "Trevor Challa", "age": 35}],
[{"id": 6, "name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36}],
]
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial008_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [{"id": 5, "name": "Black Lion", "secret_name": "Trevor Challa", "age": 35}],
- [{"id": 6, "name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36}],
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial009 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial009",
+ pytest.param("tutorial009_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.where.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}],
[{"name": "Black Lion", "secret_name": "Trevor Challa", "age": 35, "id": 5}],
[
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial009_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}],
- [{"name": "Black Lion", "secret_name": "Trevor Challa", "age": 35, "id": 5}],
- [
- {
- "name": "Captain North America",
- "secret_name": "Esteban Rogelios",
- "age": 93,
- "id": 7,
- }
- ],
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial010 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial010",
+ pytest.param("tutorial010_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.where.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
+ assert print_mock.calls == [
[{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}],
[{"name": "Black Lion", "secret_name": "Trevor Challa", "age": 35, "id": 5}],
[
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial010_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- assert calls == [
- [{"name": "Tarantula", "secret_name": "Natalia Roman-on", "age": 32, "id": 4}],
- [{"name": "Black Lion", "secret_name": "Trevor Challa", "age": 35, "id": 5}],
- [
- {
- "name": "Captain North America",
- "secret_name": "Esteban Rogelios",
- "age": 93,
- "id": 7,
- }
- ],
- ]
-from unittest.mock import patch
+import importlib
+from types import ModuleType
+import pytest
from sqlmodel import create_engine
-from ...conftest import get_testing_print_function
+from ...conftest import PrintMock, needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial011 as mod
-
+@pytest.fixture(
+ name="mod",
+ params=[
+ "tutorial011",
+ pytest.param("tutorial011_py310", marks=needs_py310),
+ ],
+)
+def get_module(request: pytest.FixtureRequest) -> ModuleType:
+ mod = importlib.import_module(f"docs_src.tutorial.where.{request.param}")
mod.sqlite_url = "sqlite://"
mod.engine = create_engine(mod.sqlite_url)
- calls = []
+ return mod
- new_print = get_testing_print_function(calls)
- with patch("builtins.print", new=new_print):
- mod.main()
+def test_tutorial(print_mock: PrintMock, mod: ModuleType):
+ mod.main()
expected_calls = [
[{"id": 5, "name": "Black Lion", "secret_name": "Trevor Challa", "age": 35}],
[{"id": 6, "name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36}],
}
],
]
+ calls = print_mock.calls
for call in expected_calls:
assert call in calls, "This expected item should be in the list"
# Now that this item was checked, remove it from the list
+++ /dev/null
-from unittest.mock import patch
-
-from sqlmodel import create_engine
-
-from ...conftest import get_testing_print_function, needs_py310
-
-
-@needs_py310
-def test_tutorial(clear_sqlmodel):
- from docs_src.tutorial.where import tutorial011_py310 as mod
-
- mod.sqlite_url = "sqlite://"
- mod.engine = create_engine(mod.sqlite_url)
- calls = []
-
- new_print = get_testing_print_function(calls)
-
- with patch("builtins.print", new=new_print):
- mod.main()
- expected_calls = [
- [{"id": 5, "name": "Black Lion", "secret_name": "Trevor Challa", "age": 35}],
- [{"id": 6, "name": "Dr. Weird", "secret_name": "Steve Weird", "age": 36}],
- [{"id": 3, "name": "Rusty-Man", "secret_name": "Tommy Sharp", "age": 48}],
- [
- {
- "id": 7,
- "name": "Captain North America",
- "secret_name": "Esteban Rogelios",
- "age": 93,
- }
- ],
- ]
- for call in expected_calls:
- assert call in calls, "This expected item should be in the list"
- # Now that this item was checked, remove it from the list
- calls.pop(calls.index(call))
- assert len(calls) == 0, "The list should only have the expected items"