from fansifter_common.core.enums import Brand from fansifter_common.testing.factories import SQLAlchemyFactory from fansifter_common.utils import timezone from fansifter_common.utils.uuid import uuid_string from polyfactory import Ignore, Use from ows_text_campaigns.artist.models import ArtistPhoneNumber, ArtistSettings from ows_text_campaigns.audiences.enums import FanDataListType from ows_text_campaigns.audiences.models import Audience, AudienceFanDataList from ows_text_campaigns.campaigns.models import Campaign, UrlDomain SQLAlchemyFactory.__set_foreign_keys__ = False SQLAlchemyFactory.__set_relationships__ = False # Artist class ArtistPhoneNumberFactory(SQLAlchemyFactory[ArtistPhoneNumber]): global_participant_id = Use(uuid_string) phone_number = Use(SQLAlchemyFactory.__faker__.phone_number) country_code = Ignore() class ArtistSettingsFactory(SQLAlchemyFactory[ArtistSettings]): global_participant_id = Use(uuid_string) welcome_message = "" image_key = None image_uploaded_at = None phone_numbers = [] # Audience class AudienceFanDataListFactory(SQLAlchemyFactory[AudienceFanDataList]): list_id = Use(SQLAlchemyFactory.__faker__.uuid4, cast_to=str) type = FanDataListType.ARTIST class AudienceFactory(SQLAlchemyFactory[Audience]): archived_at = None # Shortened urls class UrlDomainFactory(SQLAlchemyFactory[UrlDomain]): domain = Use(SQLAlchemyFactory.__faker__.domain_name) brand = Brand.SME vendor_id = None subaccount_id = None # Campaigns class CampaignFactory(SQLAlchemyFactory[Campaign]): audience_id = None audience_snapshot_id = None recipients_count = None subaccount_id = 0 global_participant_id = Use(SQLAlchemyFactory.__faker__.uuid4) send_at = Use(SQLAlchemyFactory.__faker__.future_datetime, tzinfo=timezone.UTC) send_at_timezone = None deleted_at = None deleted_by = None content = "Hello, world!" assets = [] shortened_urls = [] timezone_adjustments = None