Skip to main content

No project description provided

Project description

Extra factories for factory_boy

This library contains 2 base factories.

  • AsyncSQLAlchemyModelFactory
  • TortoiseModelFactory

TortoiseModelFactory

Is made to use it with tortoise-orm.

Usage

It works aout of the box, if you have already initialized tortoise-orm for testing.

You can check how to do this in tortoise docs.

import factory
from tortoise import fields, models
from factory_boy_extra.tortoise_factory import TortoiseModelFactory


class TargetModel(models.Model):
    name = fields.CharField(max_length=200)


class TargetModelFactory(TortoiseModelFactory):
    name = factory.Faker("word")

    class Meta:
        model = TargetModel

That's it. Now you can use it in your tests, E.G.

@pytest.mark.asyncio
async def test_factories():
    targets = TargetModelFactory.create_batch(10)
    actual_models = await TargetModel.all()
    assert len(actual_models) == 10

AsyncSQLAlchemyModelFactory

Usage

At your conftest.py initialize your factories with AsyncSession.

@pytest.fixture(autouse=True)
def init_factories(dbsession: AsyncSession) -> None:
    """Init factories."""
    BaseFactory.session = dbsession

The dbsession factory can be obtained in pytest-async-sqlalchemy library, or you can add it by yourself:

import pytest
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker


@pytest.fixture()
async def dbsession():
    """
    Fixture that returns a SQLAlchemy session with a SAVEPOINT, and the rollback to it
    after the test completes.
    """
    engine = create_async_engine(database_url) # You must provide your database URL.
    connection = await engine.connect()
    trans = await connection.begin()

    Session = sessionmaker(connection, expire_on_commit=False, class_=AsyncSession)
    session = Session()

    try:
        yield session
    finally:
        await session.close()
        await trans.rollback()
        await connection.close()
        await engine.dispose()

Now you can create factories and use them in your tests.

from factory_boy_extra.async_sqlalchemy_factory import AsyncSQLAlchemyModelFactory

class TargetModel(Base):

    __tablename__ = "targetmodel"

    name = Column(String(length=120), nullable=False)  # noqa: WPS432


class TargetModelFactory(AsyncSQLAlchemyModelFactory):
    name = factory.Faker("word")

    class Meta:
        model = TargetModel

In tests it wil look like this:

import pytest

from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select


@pytest.mark.asyncio
async def test_successful_notification(dbsession: AsyncSession) -> None:
    TargetModelFactory.create_batch(10)
    actual_models = (await dbsession.execute(select(TargetModel))).fetchall()
    assert len(actual_models) == 10

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

factory_boy_extra-0.1.3.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

factory_boy_extra-0.1.3-py3-none-any.whl (4.7 kB view details)

Uploaded Python 3

File details

Details for the file factory_boy_extra-0.1.3.tar.gz.

File metadata

  • Download URL: factory_boy_extra-0.1.3.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.10 CPython/3.9.7 Linux/5.8.0-1042-azure

File hashes

Hashes for factory_boy_extra-0.1.3.tar.gz
Algorithm Hash digest
SHA256 4cc2791232d591cb5910cddd560ae3e6323e4f1b107b469a882ba56cbc159c82
MD5 13273a619adcb3ec9ba48cc32a04ebfc
BLAKE2b-256 3db03b7a168333534800e74bfea98e57665073f4c91c4841569fe1169063d029

See more details on using hashes here.

File details

Details for the file factory_boy_extra-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: factory_boy_extra-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 4.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.10 CPython/3.9.7 Linux/5.8.0-1042-azure

File hashes

Hashes for factory_boy_extra-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 770e82bdb0e9a98249741641e69fd8f09254e9ea8d6d29c1a7302ed3d1f8bc2b
MD5 e2c26189c24acc067150915babb119fb
BLAKE2b-256 e30a8ba049a5c4389e358203d265f2cf4471e6029a0a366861b5974edeb625ce

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page