78 lines
2.0 KiB
Python
78 lines
2.0 KiB
Python
import os
|
|
|
|
import pytest
|
|
|
|
from apps.providers.adapters.mvp_provider import MvpDemoProviderAdapter
|
|
from apps.providers.exceptions import ProviderNotFoundError, ProviderRateLimitError
|
|
from apps.providers.registry import get_provider
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_mvp_provider_fetch_and_search_players():
|
|
adapter = MvpDemoProviderAdapter()
|
|
|
|
players = adapter.fetch_players()
|
|
assert len(players) >= 2
|
|
|
|
results = adapter.search_players(query="luca")
|
|
assert any("Luca" in item["full_name"] for item in results)
|
|
|
|
detail = adapter.fetch_player(external_player_id="player-001")
|
|
assert detail is not None
|
|
assert detail["full_name"] == "Luca Rinaldi"
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_mvp_provider_rate_limit_signal():
|
|
os.environ["PROVIDER_MVP_FORCE_RATE_LIMIT"] = "1"
|
|
adapter = MvpDemoProviderAdapter()
|
|
|
|
with pytest.raises(ProviderRateLimitError):
|
|
adapter.fetch_players()
|
|
|
|
os.environ.pop("PROVIDER_MVP_FORCE_RATE_LIMIT", None)
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_provider_registry_resolution(settings):
|
|
settings.PROVIDER_DEFAULT_NAMESPACE = "mvp_demo"
|
|
provider = get_provider()
|
|
assert isinstance(provider, MvpDemoProviderAdapter)
|
|
|
|
with pytest.raises(ProviderNotFoundError):
|
|
get_provider("does-not-exist")
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_demo_provider_sync_payload_uses_normalized_shape():
|
|
adapter = MvpDemoProviderAdapter()
|
|
payload = adapter.sync_all()
|
|
|
|
assert set(payload.keys()) == {
|
|
"players",
|
|
"competitions",
|
|
"teams",
|
|
"seasons",
|
|
"player_stats",
|
|
"player_careers",
|
|
"cursor",
|
|
}
|
|
assert payload["cursor"] is None
|
|
|
|
player = payload["players"][0]
|
|
assert set(player.keys()) == {
|
|
"external_id",
|
|
"first_name",
|
|
"last_name",
|
|
"full_name",
|
|
"birth_date",
|
|
"nationality",
|
|
"nominal_position",
|
|
"inferred_role",
|
|
"height_cm",
|
|
"weight_kg",
|
|
"dominant_hand",
|
|
"is_active",
|
|
"aliases",
|
|
}
|