Spaces:
Running
Running
| """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" | |
| 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" | |