import faker import pytest from fansifter_common.auth.account import Account from dmp.audiences.enums import AudienceTarget from dmp.audiences.exceptions import ( AudienceInvalidCustomListIdError, AudienceTargetInvalidArtistIdError, AudienceUniqueNameError, ) from dmp.audiences.models import Audience from dmp.audiences.types import FanDataListId from dmp.audiences.validators import AudienceValidator from dmp.rosters.enums import FanDataListType from dmp.rosters.models import CustomList from tests.unit.types import CreateModel, CreateReportingModel class TestAudienceValidator: @pytest.mark.db def test_validate_audience_name( self, validator: AudienceValidator, create_model: CreateModel ) -> None: audience = create_model(Audience) with pytest.raises(AudienceUniqueNameError): validator.validate_name(name=audience.name, account=audience.account) def test_validate_fandata_list_email_target_invalid_fandata_list_id( self, validator: AudienceValidator, faker: faker.Faker ) -> None: with pytest.raises(AudienceTargetInvalidArtistIdError): validator.validate_fandata_list( fandata_list_ids=[ FanDataListId( id=faker.pystr(), type=FanDataListType.CUSTOM_LIST, ), FanDataListId( id=faker.pystr(), type=FanDataListType.ARTIST, ), ], account=Account(vendor_id=1, subaccount_id=1), target=AudienceTarget.EMAIL, ) @pytest.mark.db def test_validate_fandata_list_not_allowed_custom_list_id( self, validator: AudienceValidator, faker: faker.Faker ) -> None: vendor_id = 1 subaccount_id = 1 with pytest.raises(AudienceInvalidCustomListIdError): validator.validate_fandata_list( fandata_list_ids=[ FanDataListId( id=faker.pystr(), type=FanDataListType.CUSTOM_LIST, ), ], account=Account(vendor_id=vendor_id, subaccount_id=subaccount_id), target=AudienceTarget.EMAIL, ) @pytest.mark.db def test_validate_fandata_list_valid( self, validator: AudienceValidator, create_reporting_model: CreateReportingModel, ) -> None: vendor_id = 1 subaccount_id = 1 custom_list = create_reporting_model( CustomList, vendor_id=vendor_id, subaccount_id=subaccount_id, ) validator.validate_fandata_list( fandata_list_ids=[ FanDataListId( id=custom_list.id, type=FanDataListType.CUSTOM_LIST, ), ], account=Account(vendor_id=vendor_id, subaccount_id=subaccount_id), target=AudienceTarget.ADS, )