Skip to content

Commit b081bf3

Browse files
committed
test: Add custom executor tests
1 parent e9a2b1d commit b081bf3

2 files changed

Lines changed: 38 additions & 4 deletions

File tree

tests/test_AsyncDatabase.py

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22
from contextlib import asynccontextmanager
33
from typing import AsyncGenerator, List
44

5+
import pytest
56
import pytest_asyncio
67
from sqlalchemy import insert, select, update, delete
7-
from sqlalchemy.orm import Session
8+
from sqlalchemy.orm import Session, selectinload
9+
from sqlalchemy.orm.exc import DetachedInstanceError
810

9-
from tests.conftest import async_db as db, Base, User
11+
from tests.conftest import async_db as db, Base, User, Group
1012

1113
@pytest_asyncio.fixture
1214
async def prepare_database() -> AsyncGenerator[None, None]:
@@ -124,3 +126,31 @@ def get_user(session: Session, user_id: int):
124126

125127
user_id = await db.run_sync(get_user, 2, on_close_pre = lambda r: r.id)
126128
assert user_id == 2
129+
130+
async def test_executor(fake_users):
131+
user = await db.get(User, 1)
132+
assert user.id == 1
133+
assert user.username == 'User-1'
134+
assert user.group_id is None
135+
with pytest.raises(DetachedInstanceError):
136+
assert user.group is None
137+
138+
# test relationship
139+
group = Group(name = 'group1')
140+
async with db.session_maker() as session:
141+
await db.save(group, refresh = True, session = session)
142+
assert group.id == 1
143+
user.group_id = group.id
144+
await db.save(user, group, refresh = True, session = session)
145+
assert user.group_id == group.id
146+
assert user.group.name == 'group1' # type: ignore
147+
148+
user2 = await db.get(User, 2, session = session, options = [selectinload(User.group)])
149+
assert user2.group is None
150+
151+
user3 = await db.scalar(select(User).where(User.id == 3), session = session)
152+
assert user3.group is None
153+
154+
users = await db.scalars_all(select(User), session = session)
155+
for user in users:
156+
assert user.group is None if user.group_id is None else user.group

tests/test_Database.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,10 @@ def test_executor(fake_users):
137137
# test relationship
138138
group = Group(name = 'group1')
139139
with db.session_maker() as session:
140-
db.save(group, session = session)
140+
db.save(group, refresh = True, session = session)
141141
assert group.id == 1
142142
user.group_id = group.id
143-
db.save(user, session = session)
143+
db.save(user, refresh = True, session = session)
144144
assert user.group_id == group.id
145145
assert user.group.name == 'group1' # type: ignore
146146

@@ -149,3 +149,7 @@ def test_executor(fake_users):
149149

150150
user3 = db.scalar(select(User).where(User.id == 3), session = session)
151151
assert user3.group is None
152+
153+
users = db.scalars_all(select(User), session = session)
154+
for user in users:
155+
assert user.group is None if user.group_id is None else user.group

0 commit comments

Comments
 (0)