"""Unit tests for provider-scoped platform API credentials.""" from unittest.mock import AsyncMock, MagicMock, patch import pytest from app.core.crypto.credential_crypto import encrypt_secret from app.services.platform_api_registry import ( build_provider_views, provider_scope_id, resolve_platform_credential, ) class TestProviderScopeHelpers: def test_provider_scope_id(self): assert provider_scope_id("scrapingbee") == "@provider:scrapingbee" def test_build_provider_views_empty(self): data = build_provider_views([]) assert len(data["providers"]) == 3 scraping = next(p for p in data["providers"] if p["provider_id"] == "scrapingbee") assert len(scraping["platforms"]) >= 6 assert scraping["source"] == "none" @pytest.mark.asyncio class TestProviderScopeResolution: async def test_falls_back_to_provider_scope(self): row = MagicMock() row.platform_id = provider_scope_id("scrapingbee") row.provider = "scrapingbee" row.api_key_encrypted = encrypt_secret("shared-sb-key") row.api_secret_encrypted = None row.is_enabled = True db = AsyncMock() repo = MagicMock() repo.get_enabled = AsyncMock(side_effect=lambda pid: row if pid == provider_scope_id("scrapingbee") else None) with patch( "app.services.platform_api_registry.PlatformApiCredentialRepository", return_value=repo, ): cred = await resolve_platform_credential("barnes_noble", db=db, redis=None) assert cred is not None assert cred.api_key == "shared-sb-key" assert cred.source == "superadmin"