Arag / tests /unit /test_platform_api_provider_scope.py
AuthorBot
SuperAdmin QoL: persistent session, TOTP session, shared provider keys.
65a6194
Raw
History Blame Contribute Delete
1.69 kB
"""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"