import pathlib from unittest import mock import pytest from anydi import Container from owsclient import OwsClient from app.adapters.aws.kms import KMSClient from app.adapters.aws.s3 import S3Client from app.adapters.facebook import FacebookClient from app.adapters.google import GoogleClient from app.adapters.ows_dmp import OwsDmpClient from app.adapters.tiktok import TikTokClient from app.config import Settings, settings as _settings from app.container import container as _container from app.strategies import ( GoogleAudienceShareStrategy, MetaAudienceShareStrategy, TikTokAudienceShareStrategy, ) @pytest.fixture(scope="session") def container() -> Container: return _container @pytest.fixture(scope="session") def settings() -> Settings: return _settings @pytest.fixture def s3_client_mock() -> mock.MagicMock: return mock.MagicMock(spec=S3Client) @pytest.fixture def kms_client_mock() -> mock.MagicMock: return mock.MagicMock(spec=KMSClient) @pytest.fixture def ows_client() -> OwsClient: return OwsClient( environment="test", service_name="lambda-audience-share-audience", ) @pytest.fixture def ows_dmp_client(ows_client: OwsClient) -> OwsDmpClient: return OwsDmpClient(ows_client=ows_client) @pytest.fixture def ows_dmp_client_mock() -> mock.MagicMock: return mock.MagicMock(spec=OwsDmpClient) @pytest.fixture def facebook_client_mock() -> mock.MagicMock: return mock.MagicMock(spec=FacebookClient) @pytest.fixture def tiktok_client_mock() -> mock.MagicMock: return mock.MagicMock(spec=TikTokClient) @pytest.fixture def google_client_mock() -> mock.MagicMock: return mock.MagicMock(spec=GoogleClient) @pytest.fixture def audience_file() -> pathlib.Path: return pathlib.Path(__file__).parent / "data" / "test-audience.csv" @pytest.fixture def audience_file_meta() -> pathlib.Path: return pathlib.Path(__file__).parent / "data" / "test-audience-meta.csv" @pytest.fixture def audience_file_google() -> pathlib.Path: return pathlib.Path(__file__).parent / "data" / "test-audience-google.csv" @pytest.fixture def audience_file_tiktok() -> pathlib.Path: return pathlib.Path(__file__).parent / "data" / "test-audience-tiktok.csv" @pytest.fixture def meta_strategy( kms_client_mock: mock.MagicMock, ows_dmp_client_mock: mock.MagicMock, facebook_client_mock: mock.MagicMock, ) -> MetaAudienceShareStrategy: return MetaAudienceShareStrategy( ows_dmp_client=ows_dmp_client_mock, kms_client=kms_client_mock, facebook_client=facebook_client_mock, ) @pytest.fixture def tiktok_strategy( kms_client_mock: mock.MagicMock, ows_dmp_client_mock: mock.MagicMock, tiktok_client_mock: mock.MagicMock, ) -> TikTokAudienceShareStrategy: return TikTokAudienceShareStrategy( ows_dmp_client=ows_dmp_client_mock, kms_client=kms_client_mock, tiktok_client=tiktok_client_mock, ) @pytest.fixture def google_strategy( kms_client_mock: mock.MagicMock, ows_dmp_client_mock: mock.MagicMock, google_client_mock: mock.MagicMock, ) -> GoogleAudienceShareStrategy: return GoogleAudienceShareStrategy( ows_dmp_client=ows_dmp_client_mock, kms_client=kms_client_mock, google_client=google_client_mock, )