from fansifter_common.testing.factories import SQLAlchemyFactory from fansifter_common.utils import timezone from fansifter_common.utils.uuid import uuid_string from polyfactory import Use from app.enums import CampaignStatus from app.models import Campaign, CampaignBatch, Profile class CampaignFactory(SQLAlchemyFactory[Campaign]): id = Use(uuid_string) status = CampaignStatus.SCHEDULED send_at = Use( lambda: SQLAlchemyFactory.__faker__.future_datetime(tzinfo=timezone.UTC) ) cancelled_at = None prepared_at = None deleted_at = None class CampaignBatchFactory(SQLAlchemyFactory[CampaignBatch]): __set_foreign_keys__ = True campaign_id = Use(uuid_string) domain_id = Use(uuid_string) batch_offset = 0 first_sent_at = None last_sent_at = None last_hourly_quota = None last_hour_sent_emails = 0 completed_at = None cancelled_at = None created_at = Use(timezone.now) updated_at = Use(timezone.now) class ProfileFactory(SQLAlchemyFactory[Profile]): email = Use(SQLAlchemyFactory.__faker__.email) updated_at = Use(timezone.now)