from datetime import datetime, timedelta from typing import Any from unittest import mock import faker import pytest from anydi import Container from app.config.container import initialize_container from app.config.settings import Settings, initialize_settings from app.models import CustomAudience @pytest.fixture(scope="session") def settings() -> Settings: return initialize_settings() @pytest.fixture(scope="session") def container(settings: Settings) -> Container: return initialize_container(settings, testing=True) @pytest.fixture def fake() -> faker.Faker: return faker.Faker() @pytest.fixture def kms_decrypt_value(fake: faker.Faker) -> Any: return fake.uuid4() @pytest.fixture def kms_client_mock(kms_decrypt_value: str) -> mock.MagicMock: client_mock = mock.MagicMock() client_mock.decrypt.return_value = kms_decrypt_value return client_mock @pytest.fixture def ad_account(fake: faker.Faker) -> Any: return fake.uuid4() @pytest.fixture def audience_ttl_days(fake: faker.Faker) -> int: return fake.random_int() @pytest.fixture def db_mock() -> mock.MagicMock: return mock.MagicMock() @pytest.fixture def repository_mock() -> mock.MagicMock: return mock.MagicMock() @pytest.fixture def test_audience(audience_ttl_days: int) -> CustomAudience: return CustomAudience( id="test_id", time_created=datetime.now() - timedelta(audience_ttl_days + 1) ) @pytest.fixture def api_client_mock(test_audience: CustomAudience) -> mock.MagicMock: client = mock.MagicMock() client.get_audiences.return_value = [test_audience] return client