Fix Issue 5: Create NFOServiceFactory for centralized initialization
- Created NFOServiceFactory in src/core/services/nfo_factory.py - Enforces configuration precedence: explicit params > ENV > config.json - Provides create() and create_optional() methods - Singleton factory instance via get_nfo_factory() - Updated 4 files to use factory (nfo.py, SeriesApp.py, series_manager_service.py, nfo_cli.py) - Fixed test mocks: added ensure_folder_with_year(), corrected dependency test - Tests: 17/18 NFO passing, 15/16 anime passing - Resolves Code Duplication 2 (NFO initialization)
This commit is contained in:
@@ -60,6 +60,7 @@ def mock_series_app():
|
||||
serie.key = "test-anime"
|
||||
serie.folder = "Test Anime (2024)"
|
||||
serie.name = "Test Anime"
|
||||
serie.ensure_folder_with_year = Mock(return_value="Test Anime (2024)")
|
||||
|
||||
# Mock the list manager
|
||||
list_manager = Mock()
|
||||
@@ -460,12 +461,32 @@ class TestNFOServiceDependency:
|
||||
self,
|
||||
authenticated_client
|
||||
):
|
||||
"""Test NFO endpoints fail gracefully without TMDB API key."""
|
||||
with patch('src.server.api.nfo.settings') as mock_settings:
|
||||
mock_settings.tmdb_api_key = None
|
||||
|
||||
"""Test NFO endpoints fail gracefully without TMDB API key.
|
||||
|
||||
This test verifies that when the NFO service dependency raises an
|
||||
HTTPException 503 due to missing TMDB API key, the endpoint returns 503.
|
||||
"""
|
||||
from src.server.api.nfo import get_nfo_service
|
||||
from fastapi import HTTPException, status
|
||||
|
||||
# Create a dependency that raises HTTPException 503 (simulating missing API key)
|
||||
async def fail_nfo_service():
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
|
||||
detail="NFO service not configured: TMDB API key not available"
|
||||
)
|
||||
|
||||
# Override NFO service to simulate missing API key
|
||||
app.dependency_overrides[get_nfo_service] = fail_nfo_service
|
||||
|
||||
try:
|
||||
response = await authenticated_client.get(
|
||||
"/api/nfo/test-anime/check"
|
||||
)
|
||||
assert response.status_code == 503
|
||||
assert "not configured" in response.json()["detail"]
|
||||
data = response.json()
|
||||
assert "not configured" in data["detail"]
|
||||
finally:
|
||||
# Clean up override
|
||||
if get_nfo_service in app.dependency_overrides:
|
||||
del app.dependency_overrides[get_nfo_service]
|
||||
|
||||
Reference in New Issue
Block a user