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, MessageChannel from app.models import ( ArtistSettings, BatchRecipient, BatchSendRecord, Campaign, CampaignBatch, TwilioAccount, ) class CampaignFactory(SQLAlchemyFactory[Campaign]): id = Use(uuid_string) status = CampaignStatus.IN_PROGRESS channel = MessageChannel.SMS global_participant_id = Use(lambda: SQLAlchemyFactory.__faker__.uuid4(cast_to=str)) content = "Hello world" prepared_at = Use(timezone.now) cancelled_at = None deleted_at = None class CampaignBatchFactory(SQLAlchemyFactory[CampaignBatch]): __set_foreign_keys__ = True campaign_id = Use(uuid_string) country_code = "US" state_province = None batch_offset = 0 first_sent_at = None last_sent_at = None completed_at = None cancelled_at = None created_at = Use(timezone.now) updated_at = Use(timezone.now) class BatchRecipientFactory(SQLAlchemyFactory[BatchRecipient]): __set_foreign_keys__ = True fan_id = Use(uuid_string) fan_phone_number = Use(lambda: SQLAlchemyFactory.__faker__.phone_number()) fan_country = "US" fan_state = None fan_area_code = None class BatchSendRecordFactory(SQLAlchemyFactory[BatchSendRecord]): __set_foreign_keys__ = True id = Use(uuid_string) sent_at = Use(timezone.now) class ArtistSettingsFactory(SQLAlchemyFactory[ArtistSettings]): global_participant_id = Use(uuid_string) twilio_account_sid = Use(lambda: SQLAlchemyFactory.__faker__.pystr()) twilio_messaging_service_sid = Use(lambda: SQLAlchemyFactory.__faker__.pystr()) class TwilioAccountFactory(SQLAlchemyFactory[TwilioAccount]): account_sid = Use(uuid_string) api_key_id = Use(uuid_string) api_secret = Use(uuid_string)