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", }