backend/tests/integration/test_provider_integration.py
Rama master · réplica de lectura del repositorio original.
"""Integration tests for provider system."""
from unittest.mock import MagicMock, patch
import pytest
from tests.fixtures.provider_responses import (
OPENSEARCH_EMPTY_RESPONSE,
OPENSEARCH_RESPONSE,
PROVIDER_ERROR_RESPONSE,
)
class TestProviderSearch:
"""Tests for provider search functionality."""
@pytest.mark.skip(
reason="endpoint not yet implemented: /api/v1/providers/search POST with form data is unverified"
)
@patch("providers.opensubtitles.OpenSubtitlesProvider.search")
def test_provider_search_success(self, mock_search, client):
"""Test successful provider search via the /api/v1/providers/search endpoint."""
from providers.base import SubtitleResult
# Mock successful search result
mock_result = SubtitleResult(
provider_name="opensubtitles",
subtitle_id="12345",
language="en",
format="ass",
score=250,
download_url="https://example.com/sub.ass",
)
mock_search.return_value = [mock_result]
response = client.post(
"/api/v1/providers/search",
data={
"query": "Attack on Titan",
"language": "en",
},
)
# Endpoint must exist and return success or validation error — not 501
assert response.status_code in [200, 400, 422]
@patch("providers.opensubtitles.OpenSubtitlesProvider.search")
def test_provider_search_empty(self, mock_search, client):
"""Test provider search with no results returns a valid API response."""
mock_search.return_value = []
response = client.post(
"/api/v1/providers/search",
json={"query": "test", "language": "en"},
)
# Endpoint must exist and handle the request without crashing
assert response.status_code in [200, 400]
@patch("providers.opensubtitles.OpenSubtitlesProvider.search")
def test_provider_search_error(self, mock_search, client):
"""Test provider search error is handled gracefully by the API."""
mock_search.side_effect = Exception("Provider error")
response = client.post(
"/api/v1/providers/search",
json={"query": "test", "language": "en"},
)
# Should handle gracefully, not crash with 500
assert response.status_code in [200, 400, 503]
class TestProviderDownload:
"""Tests for provider download functionality."""
@patch("providers.opensubtitles.OpenSubtitlesProvider.download")
def test_provider_download_success(self, mock_download, client):
"""Test successful subtitle download."""
mock_download.return_value = b"Subtitle content"
# Test download (mock)
result = mock_download("12345")
assert result == b"Subtitle content"
@patch("providers.opensubtitles.OpenSubtitlesProvider.download")
def test_provider_download_error(self, mock_download, client):
"""Test subtitle download with error."""
mock_download.side_effect = Exception("Download failed")
with pytest.raises(Exception):
mock_download("12345")
class TestProviderManager:
"""Tests for provider manager functionality."""
def test_provider_manager_initialization(self, client):
"""Test that provider manager can be initialized."""
from providers import get_provider_manager
manager = get_provider_manager()
assert manager is not None
def test_provider_status(self, client):
"""Test provider status endpoint."""
import json
response = client.get("/api/v1/providers")
assert response.status_code == 200
data = json.loads(response.data)
assert "providers" in data