"""conftest.""" import os import uuid from typing import Generator from unittest.mock import MagicMock # Set fake Spotify credentials before any module-level client instantiation. os.environ.setdefault("SPOTIPY_CLIENT_ID", "fake-client-id") os.environ.setdefault("SPOTIPY_CLIENT_SECRET", "fake-client-secret") import pytest from fastapi import FastAPI from fastapi.testclient import TestClient from neo4j import Driver from python_pdp_sdk.backends.authorization_backend import AuthorizationBackend from contributor import config from contributor.api.auth import identity_uuid_from_scope, profiles_from_scope from contributor.api.datasources import get_authorization_backend, get_neo4j_driver from contributor.api.main import app as _app @pytest.fixture(autouse=True) def disable_real_redis_for_unit_tests(monkeypatch: pytest.MonkeyPatch) -> None: """Force unit tests to use FakeRedis via RedisConnector.""" monkeypatch.setattr(config, "CACHE_USE_REDIS", False) @pytest.fixture def mock_authorization_backend() -> AuthorizationBackend: """Return a mocked authorization backend.""" return MagicMock(spec=AuthorizationBackend) @pytest.fixture def mock_neo4j_driver() -> Driver: """Return a mocked Neo4j driver.""" return MagicMock(spec=Driver) @pytest.fixture def identity_uuid() -> str: """Return a valid identity UUID for testing.""" return "10436b38-5e11-472d-b6a4-bf1ee2b1b438" @pytest.fixture def profile_type() -> str: """Return a valid profile type for testing.""" return "LabelProfile" @pytest.fixture def profile_id() -> int: """Return a valid profile ID for testing.""" return 12345 @pytest.fixture def app( mock_authorization_backend: AuthorizationBackend, mock_neo4j_driver: Driver, identity_uuid: str, profile_type: str, profile_id: int, ) -> Generator[FastAPI, None, None]: _app.dependency_overrides[identity_uuid_from_scope] = lambda: uuid.UUID( identity_uuid ) _app.dependency_overrides[profiles_from_scope] = lambda: [ {"profile_type": profile_type, "profile_id": profile_id, "roles": []} ] _app.dependency_overrides[get_authorization_backend] = lambda: ( mock_authorization_backend ) _app.dependency_overrides[get_neo4j_driver] = lambda: mock_neo4j_driver yield _app _app.dependency_overrides = {} @pytest.fixture def test_client(app: FastAPI) -> Generator[TestClient, None, None]: """Fastapi test client fixture.""" with TestClient(app) as client: yield client