from unittest import mock import pytest from audience_common.auth.account import Account, AccountAccess from campaigns.campaigns.handlers import ( GetCampaignsArtistsHandler, GetCampaignsArtistsRequest, ) from campaigns.connectors.db import Database from campaigns.meta.models import Campaign from tests.unit.faker import FakerTyped from tests.unit.types import CreateModel @pytest.fixture def handler( db: Database, auth_service_mock: mock.MagicMock ) -> GetCampaignsArtistsHandler: return GetCampaignsArtistsHandler(db=db, auth_service=auth_service_mock) async def test_get_unique_global_participant_ids( handler: GetCampaignsArtistsHandler, create_model: CreateModel, fake: FakerTyped, identity_id: str, profile_id: int, ) -> None: global_participant_id_1 = fake.uuid4_string() global_participant_id_2 = fake.uuid4_string() await create_model(Campaign, global_participant_id=global_participant_id_1) await create_model(Campaign, global_participant_id=global_participant_id_2) await create_model(Campaign, global_participant_id=global_participant_id_2) await create_model(Campaign, global_participant_id=global_participant_id_2) result = await handler.handle( GetCampaignsArtistsRequest(identity_id=identity_id, profile_id=profile_id) ) assert set(result) == { global_participant_id_1, global_participant_id_2, } async def test_get_unique_global_participant_ids_with_filter( handler: GetCampaignsArtistsHandler, auth_service_mock: mock.MagicMock, create_model: CreateModel, fake: FakerTyped, identity_id: str, profile_id: int, ) -> None: vendor_id_1 = fake.integer() vendor_id_2 = fake.integer() global_participant_id_1 = fake.uuid4_string() global_participant_id_2 = fake.uuid4_string() await create_model( Campaign, vendor_id=vendor_id_1, global_participant_id=global_participant_id_1, ) await create_model( Campaign, vendor_id=vendor_id_1, global_participant_id=global_participant_id_2, ) await create_model( Campaign, vendor_id=vendor_id_2, global_participant_id=global_participant_id_1, ) auth_service_mock.authorize_account = mock.AsyncMock( return_value=AccountAccess( accounts=[Account(vendor_id=vendor_id_2, subaccount_id=0)], allowed_any_account=False, ) ) result = await handler.handle( GetCampaignsArtistsRequest(identity_id=identity_id, profile_id=profile_id) ) assert set(result) == { global_participant_id_1, }