from datetime import datetime import factory from factory import Sequence # type: ignore from factory.alchemy import SQLAlchemyModelFactory from factory.faker import Faker from tests import config from tests.models.account_contract import Account, AccountContract from tests.utils import db _USER = config.TEST_USER _NOW = factory.LazyAttribute(lambda _: datetime.now().strftime('%Y-%m-%d %H:%M:%S')) # type: ignore class BaseFactory(SQLAlchemyModelFactory): """Base factory for shared fields and automatic session handling.""" created_at = _NOW sap_created_at = _NOW last_modified = _NOW created_by = _USER last_modified_by = _USER class Meta: abstract = True # Ensures this base factory is not used directly sqlalchemy_session = db.create_session() sqlalchemy_session_persistence = 'commit' class AccountFactory(BaseFactory): """Factory for creating Account entities.""" class Meta: model = Account # MAX(account_id): 9973223 account_id = Sequence(lambda n: n + 10000000) # type: ignore account_name = Faker('name') # type: ignore class AccountContractFactory(BaseFactory): """Factory for creating AccountContract entities.""" class Meta: model = AccountContract # MAX(account_contract_id):80093, MAX(account_id): 9973223, MAX(contract_id): 992541 account_contract_id = Faker('random_int', min=1000000, max=9999999) # type: ignore account_id = Faker('random_int', min=10000000, max=99999999) # type: ignore contract_id = Faker('random_int', min=1000000, max=9999999) # type: ignore