Skip to content

Commit bccf276

Browse files
committed
Add SQLAlchemy multiple binds test
1 parent 3d02f47 commit bccf276

File tree

3 files changed

+28
-13
lines changed

3 files changed

+28
-13
lines changed

tests/panels/sqlalchemy/conftest.py

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,34 @@
33
import pytest
44
from fastapi import Depends, FastAPI, Request
55
from fastapi.responses import HTMLResponse
6-
from sqlalchemy.orm import Session
6+
from sqlalchemy.orm import Session, sessionmaker
77

88
from ...testclient import TestClient
99
from .crud import create_user, get_user
10-
from .database import Base, SessionLocal, engine
10+
from .database import Base, engine
1111

1212
Base.metadata.create_all(bind=engine)
1313

1414

15-
def get_db() -> t.Generator:
16-
db = SessionLocal()
17-
try:
18-
yield db
19-
finally:
20-
db.close()
15+
@pytest.fixture
16+
def get_db(session_options: dict[str, t.Any]) -> t.Callable:
17+
SessionLocal = sessionmaker(**session_options or {"bind": engine})
18+
19+
def f() -> t.Generator:
20+
db = SessionLocal()
21+
try:
22+
yield db
23+
finally:
24+
db.close()
25+
26+
return f
2127

2228

2329
@pytest.fixture
24-
def client(app: FastAPI, get_index: t.Callable) -> TestClient:
30+
def client(app: FastAPI, get_index: t.Callable, get_db: t.Callable) -> TestClient:
2531
@app.get("/sql", response_class=HTMLResponse)
2632
async def get_sql(request: Request, db: Session = Depends(get_db)) -> HTMLResponse:
27-
user = create_user(db=db, username="test")
33+
user = create_user(db=db, username=str(id(get_db)))
2834
get_user(db=db, user_id=user.id)
2935
get_user(db=db, user_id=user.id)
3036
return get_index(request)
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
from sqlalchemy import create_engine
2-
from sqlalchemy.orm import declarative_base, sessionmaker
2+
from sqlalchemy.orm import declarative_base
33
from sqlalchemy.pool import StaticPool
44

55
engine = create_engine(
66
"sqlite://",
77
connect_args={"check_same_thread": False},
88
poolclass=StaticPool,
99
)
10-
SessionLocal = sessionmaker(bind=engine)
1110
Base = declarative_base()

tests/panels/sqlalchemy/test_sqlalchemy.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
1+
import typing as t
2+
3+
import pytest
4+
from sqlalchemy.orm import declarative_base
5+
16
from ...mark import override_panels
27
from ...testclient import TestClient
8+
from .database import Base, engine
39

410

511
@override_panels(["debug_toolbar.panels.sqlalchemy.SQLAlchemyPanel"])
6-
def test_sqlalchemy(client: TestClient) -> None:
12+
@pytest.mark.parametrize(
13+
"session_options",
14+
(None, {"binds": {Base: engine, declarative_base(): engine}}),
15+
)
16+
def test_sqlalchemy(client: TestClient, session_options: dict[str, t.Any]) -> None:
717
store_id = client.get_store_id("/sql")
818
stats = client.get_stats(store_id, "SQLAlchemyPanel")
919
queries = stats["queries"]

0 commit comments

Comments
 (0)