File: test_association_proxy.py

package info (click to toggle)
python-polyfactory 2.22.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,892 kB
  • sloc: python: 11,338; makefile: 103; sh: 37
file content (43 lines) | stat: -rw-r--r-- 1,602 bytes parent folder | download
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
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession

from polyfactory.factories.sqlalchemy_factory import SQLAlchemyFactory
from tests.sqlalchemy_factory.models import Keyword, User, UserKeywordAssociation


class KeywordFactory(SQLAlchemyFactory[Keyword]): ...


def test_association_proxy() -> None:
    class UserFactory(SQLAlchemyFactory[User]):
        __set_association_proxy__ = True

    user = UserFactory.build()
    assert isinstance(user.keywords[0], Keyword)
    assert isinstance(user.user_keyword_associations[0], UserKeywordAssociation)


async def test_async_persistence(async_engine: AsyncEngine) -> None:
    async with AsyncSession(async_engine) as session:

        class AsyncUserFactory(SQLAlchemyFactory[User]):
            __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)