1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession
from polyfactory.factories.sqlalchemy_factory import SQLAlchemyFactory
from tests.sqlalchemy_factory.models import Company, Keyword, User, UserKeywordAssociation
class KeywordFactory(SQLAlchemyFactory[Keyword]): ...
def test_association_proxy() -> None:
class UserFactory(SQLAlchemyFactory[User]):
__set_relationships__ = False
__set_association_proxy__ = True
user = UserFactory.build()
assert isinstance(user.keywords[0], Keyword)
assert isinstance(user.user_keyword_associations[0], UserKeywordAssociation)
def test_association_proxy_no_creator() -> None:
class CompanyFactory(SQLAlchemyFactory[Company]):
__set_relationships__ = True
__set_association_proxy__ = True
company = CompanyFactory.build()
assert isinstance(company.employee_ids[0], int)
assert company.employees[0].id in company.employee_ids
def test_association_proxy_no_creator_no_relationship() -> None:
class CompanyFactory(SQLAlchemyFactory[Company]):
__set_relationships__ = False
__set_association_proxy__ = True
company = CompanyFactory.build()
assert len(company.employees) == 0
assert len(company.employee_ids) == 0
async def test_async_persistence(async_engine: AsyncEngine) -> None:
async with AsyncSession(async_engine) as session:
class AsyncUserFactory(SQLAlchemyFactory[User]):
__set_relationships__ = False
__set_association_proxy__ = True
__async_session__ = session
instance = await AsyncUserFactory.create_async()
instances = await AsyncUserFactory.create_batch_async(3)
async with AsyncSession(async_engine) as session:
result = await session.scalars(select(User))
assert len(result.all()) == 4
user = await session.get(User, instance.id)
assert user
assert isinstance(user.keywords[0], Keyword)
assert isinstance(user.user_keyword_associations[0], UserKeywordAssociation)
for instance in instances:
user = await session.get(User, instance.id)
assert user
assert isinstance(user.keywords[0], Keyword)
assert isinstance(user.user_keyword_associations[0], UserKeywordAssociation)
|