import faker import pytest from dirty_equals import IsList from fansifter_common.auth.identity import Identity from dmp.audiences.dtos import AudienceCriteria from dmp.audiences.enums import AudienceTarget from dmp.audiences.filters import AudienceFilters from dmp.audiences.models import AudienceTextFan from dmp.audiences.repositories import AudienceTextFanRepository from dmp.audiences.types import FanDataListId from dmp.fandata.models import TwilioFanSubscriptionStatus from dmp.fandata.utils import make_fan_id from dmp.rosters.models import ArtistRosterMainRep from dmp.text_campaigns.models import ArtistPhoneNumber from tests.unit.types import CreateReportingModel class TestAudienceTextFanRepository: @pytest.mark.db def test_insert_bulk( self, repository: AudienceTextFanRepository, create_reporting_model: CreateReportingModel, identity: Identity, faker: faker.Faker, ) -> None: global_participant_id = faker.uuid4() vendor_id = faker.pyint() subaccount_id = faker.pyint() audience_id = faker.uuid4() artist_phone_number = faker.phone_number() fan_phone_number_1 = faker.phone_number() fan_phone_number_2 = faker.phone_number() create_reporting_model( ArtistRosterMainRep, global_participant_id=global_participant_id, vendor_id=vendor_id, subaccount_id=subaccount_id, ) create_reporting_model( ArtistPhoneNumber, global_participant_id=global_participant_id, phone_number=artist_phone_number, ) fan_subscription_1 = create_reporting_model( TwilioFanSubscriptionStatus, artist_phone_number=artist_phone_number, fan_phone_number=fan_phone_number_1, subscription_status="opted_in", ) fan_subscription_2 = create_reporting_model( TwilioFanSubscriptionStatus, artist_phone_number=artist_phone_number, fan_phone_number=fan_phone_number_2, subscription_status="opted_in", ) fan_count = repository.insert_bulk( audience_id=audience_id, criteria=AudienceCriteria( vendor_id=vendor_id, subaccount_id=subaccount_id, fandata_list_ids=[ FanDataListId.from_artist_id(global_participant_id), ], identity=identity, filters=AudienceFilters.model_construct(), target=AudienceTarget.TEXT, ), ) assert fan_count == 2 assert repository.all() == IsList( AudienceTextFan( audience_id=audience_id, fan_id=make_fan_id(fan_phone_number_1), fan_phone_number=fan_subscription_1.fan_phone_number, fan_country=fan_subscription_1.fan_country, fan_state=fan_subscription_1.fan_state, fan_area_code=fan_subscription_1.fan_area_code, channel=fan_subscription_1.channel, ), AudienceTextFan( audience_id=audience_id, fan_id=make_fan_id(fan_phone_number_2), fan_phone_number=fan_subscription_2.fan_phone_number, fan_country=fan_subscription_2.fan_country, fan_state=fan_subscription_2.fan_state, fan_area_code=fan_subscription_2.fan_area_code, channel=fan_subscription_2.channel, ), check_order=False, )