import io import pathlib from typing import Any from unittest import mock import pytest from app.handler import ShareAudienceHandler from app.strategies import ( GoogleAudienceShareStrategy, MetaAudienceShareStrategy, TikTokAudienceShareStrategy, ) @pytest.fixture def mock_download_fileobj( s3_client_mock: mock.MagicMock, audience_file: pathlib.Path ) -> None: def _download_fileobj(file_obj: io.BufferedWriter, **kwargs: Any) -> Any: file_obj.write(audience_file.read_bytes()) s3_client_mock.download_fileobj = mock.Mock(side_effect=_download_fileobj) @pytest.fixture def mock_download_fileobj_meta( s3_client_mock: mock.MagicMock, audience_file_meta: pathlib.Path ) -> None: def _download_fileobj(file_obj: io.BufferedWriter, **kwargs: Any) -> Any: file_obj.write(audience_file_meta.read_bytes()) s3_client_mock.download_fileobj = mock.Mock(side_effect=_download_fileobj) @pytest.fixture def mock_download_fileobj_google( s3_client_mock: mock.MagicMock, audience_file_google: pathlib.Path ) -> None: def _download_fileobj(file_obj: io.BufferedWriter, **kwargs: Any) -> Any: file_obj.write(audience_file_google.read_bytes()) s3_client_mock.download_fileobj = mock.Mock(side_effect=_download_fileobj) @pytest.fixture def mock_download_fileobj_tiktok( s3_client_mock: mock.MagicMock, audience_file_tiktok: pathlib.Path ) -> None: def _download_fileobj(file_obj: io.BufferedWriter, **kwargs: Any) -> Any: file_obj.write(audience_file_tiktok.read_bytes()) s3_client_mock.download_fileobj = mock.Mock(side_effect=_download_fileobj) @pytest.fixture def handler( s3_client_mock: mock.MagicMock, ows_dmp_client_mock: mock.MagicMock, meta_strategy: MetaAudienceShareStrategy, tiktok_strategy: TikTokAudienceShareStrategy, google_strategy: GoogleAudienceShareStrategy, ) -> ShareAudienceHandler: return ShareAudienceHandler( s3_client=s3_client_mock, ows_dmp_client=ows_dmp_client_mock, strategies=[ meta_strategy, tiktok_strategy, google_strategy, ], )