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, MessageSendQueueStatus from app.models import AudienceFan, Campaign, MessageSendQueue class CampaignFactory(SQLAlchemyFactory[Campaign]): id = Use(uuid_string) status = CampaignStatus.SCHEDULED audience_snapshot_id = Use(lambda: SQLAlchemyFactory.__faker__.uuid4(cast_to=str)) global_participant_id = Use(lambda: SQLAlchemyFactory.__faker__.uuid4(cast_to=str)) content = "Hello world" send_at = Use( lambda: SQLAlchemyFactory.__faker__.future_datetime(tzinfo=timezone.UTC) ) deleted_at = None class MessageSendQueueFactory(SQLAlchemyFactory[MessageSendQueue]): id = Use(uuid_string) campaign_id = Use(uuid_string) status = MessageSendQueueStatus.QUEUED offset = 0 send_at = Use(timezone.now) first_sent_at = None last_sent_at = None created_at = Use(timezone.now) updated_at = Use(timezone.now) class AudienceFanFactory(SQLAlchemyFactory[AudienceFan]): last_engagement_at = None