import pytest from dirty_equals import IsList from dmp.meta.models import ( MetaAdAccount, MetaAdReportingConnection, MetaUserAdAccount, MetaUserConnection, ) from dmp.meta.repositories import MetaUserAdAccountRepository from tests.unit.faker import FakerTyped from tests.unit.types import CreateModel class TestMetaUserAdAccountRepository: @pytest.mark.db def test_find_by_accounts_ids_and_identity_id( self, repository: MetaUserAdAccountRepository, create_model: CreateModel, fake: FakerTyped, identity_id: str, ) -> None: ad_account_1 = create_model(MetaAdAccount, name="ad_account_1") ad_account_2 = create_model(MetaAdAccount, name="ad_account_2") ad_account_3 = create_model(MetaAdAccount, name="ad_account_3") user_ad_account_1 = create_model( MetaUserAdAccount, identity_id=identity_id, ad_account_id=ad_account_1.id ) user_ad_account_2 = create_model( MetaUserAdAccount, identity_id=identity_id, ad_account_id=ad_account_2.id ) create_model( MetaUserAdAccount, identity_id=fake.pystr(), ad_account_id=ad_account_3.id ) create_model( MetaUserConnection, identity_id=identity_id, ad_accounts=[ad_account_1, ad_account_2], ) create_model( MetaAdReportingConnection, identity_id=identity_id, ad_accounts=[ad_account_2, ad_account_3], ) user_ad_accounts = repository.find_by_ad_accounts_ids_and_identity_id( ad_accounts_ids=[ad_account_1.id, ad_account_2.id], identity_id=identity_id ) assert user_ad_accounts assert len(user_ad_accounts) == 2 assert {user_ad_accounts[0].id, user_ad_accounts[1].id} == { user_ad_account_1.id, user_ad_account_2.id, } @pytest.mark.db def test_find_by_vendor_and_subaccount_ids( self, repository: MetaUserAdAccountRepository, create_model: CreateModel ) -> None: ad_account = create_model(MetaAdAccount) ad_account_2 = create_model(MetaAdAccount) user_ad_account_1 = create_model( MetaUserAdAccount, ad_account_id=ad_account.id, ) user_ad_account_2 = create_model( MetaUserAdAccount, ad_account_id=ad_account_2.id, vendor_id=user_ad_account_1.vendor_id, subaccount_id=user_ad_account_1.subaccount_id, ) user_ad_accounts = repository.find_by_vendor_and_subaccount_ids( vendor_ids=[user_ad_account_1.vendor_id], subaccount_ids=[user_ad_account_1.subaccount_id], ) assert user_ad_accounts == IsList( user_ad_account_1, user_ad_account_2, check_order=False ) @pytest.mark.db def test_find_by_ad_account_id_and_account( self, repository: MetaUserAdAccountRepository, create_model: CreateModel ) -> None: ad_account = create_model(MetaAdAccount) ad_account_2 = create_model(MetaAdAccount) user_ad_account_1 = create_model( MetaUserAdAccount, ad_account_id=ad_account.id, ) create_model( MetaUserAdAccount, ad_account_id=ad_account_2.id, vendor_id=user_ad_account_1.vendor_id, subaccount_id=user_ad_account_1.subaccount_id, ) user_ad_accounts = repository.find_by_ad_account_id_and_account( ad_account_id=ad_account.id, vendor_id=user_ad_account_1.vendor_id, subaccount_id=user_ad_account_1.subaccount_id, ) assert user_ad_accounts == IsList(user_ad_account_1, check_order=False) @pytest.mark.db def test_find_by_ad_accounts_external_ids( self, repository: MetaUserAdAccountRepository, create_model: CreateModel ) -> None: ad_account_1 = create_model(MetaAdAccount) ad_account_2 = create_model(MetaAdAccount) user_ad_account_1 = create_model( MetaUserAdAccount, ad_account_id=ad_account_1.id, ) user_ad_account_2 = create_model( MetaUserAdAccount, ad_account_id=ad_account_2.id, vendor_id=user_ad_account_1.vendor_id, subaccount_id=user_ad_account_1.subaccount_id, ) user_ad_accounts = repository.find_by_ad_accounts_external_ids( ad_accounts_ids={ad_account_1.external_id, ad_account_2.external_id}, ) assert user_ad_accounts == IsList( user_ad_account_1, user_ad_account_2, check_order=False, )