refactor: move NFO repair from initialization_service to folder_scan_service
Moves perform_nfo_repair_scan and its helpers (_repair_one_series, _NFO_REPAIR_SEMAPHORE) into folder_scan_service.py so NFO repair runs during the scheduled folder scan instead of on startup. - Removes NFO repair code from initialization_service.py - Updates all test imports and patch targets - Updates docs/NFO_GUIDE.md and docs/CHANGELOG.md references All 174 related tests pass.
This commit is contained in:
@@ -67,7 +67,7 @@ class TestNfoRepairScanIntegrationWithBackgroundLoader:
|
||||
@pytest.mark.asyncio
|
||||
async def test_incomplete_nfo_series_scheduled_for_repair(self, tmp_path):
|
||||
"""Series whose tvshow.nfo is missing required tags are scheduled via asyncio.create_task."""
|
||||
from src.server.services.initialization_service import perform_nfo_repair_scan
|
||||
from src.server.services.folder_scan_service import perform_nfo_repair_scan
|
||||
|
||||
series_dir = tmp_path / "IncompleteAnime"
|
||||
series_dir.mkdir()
|
||||
@@ -83,7 +83,7 @@ class TestNfoRepairScanIntegrationWithBackgroundLoader:
|
||||
mock_repair_service.repair_series = AsyncMock(return_value=True)
|
||||
|
||||
with patch(
|
||||
"src.server.services.initialization_service.settings", mock_settings
|
||||
"src.server.services.folder_scan_service._settings", mock_settings
|
||||
), patch(
|
||||
"src.core.services.nfo_repair_service.nfo_needs_repair",
|
||||
return_value=True,
|
||||
@@ -103,7 +103,7 @@ class TestNfoRepairScanIntegrationWithBackgroundLoader:
|
||||
@pytest.mark.asyncio
|
||||
async def test_complete_nfo_series_not_scheduled(self, tmp_path):
|
||||
"""Series whose tvshow.nfo has all required tags are not scheduled for repair."""
|
||||
from src.server.services.initialization_service import perform_nfo_repair_scan
|
||||
from src.server.services.folder_scan_service import perform_nfo_repair_scan
|
||||
|
||||
series_dir = tmp_path / "CompleteAnime"
|
||||
series_dir.mkdir()
|
||||
@@ -116,7 +116,7 @@ class TestNfoRepairScanIntegrationWithBackgroundLoader:
|
||||
mock_settings.anime_directory = str(tmp_path)
|
||||
|
||||
with patch(
|
||||
"src.server.services.initialization_service.settings", mock_settings
|
||||
"src.server.services.folder_scan_service._settings", mock_settings
|
||||
), patch(
|
||||
"src.core.services.nfo_repair_service.nfo_needs_repair",
|
||||
return_value=False,
|
||||
|
||||
@@ -20,6 +20,7 @@ from src.server.services.folder_scan_service import (
|
||||
_TMDB_SEMAPHORE,
|
||||
FolderScanService,
|
||||
FolderScanServiceError,
|
||||
perform_nfo_repair_scan,
|
||||
)
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
@@ -10,6 +10,7 @@ from unittest.mock import AsyncMock, MagicMock, call, patch
|
||||
|
||||
import pytest
|
||||
|
||||
from src.server.services.folder_scan_service import perform_nfo_repair_scan
|
||||
from src.server.services.initialization_service import (
|
||||
_check_initial_scan_status,
|
||||
_check_media_scan_status,
|
||||
@@ -27,7 +28,6 @@ from src.server.services.initialization_service import (
|
||||
_validate_anime_directory,
|
||||
perform_initial_setup,
|
||||
perform_media_scan_if_needed,
|
||||
perform_nfo_repair_scan,
|
||||
perform_nfo_scan_if_needed,
|
||||
)
|
||||
|
||||
@@ -771,7 +771,7 @@ class TestPerformNfoRepairScan:
|
||||
mock_settings.anime_directory = str(tmp_path)
|
||||
|
||||
with patch(
|
||||
"src.server.services.initialization_service.settings", mock_settings
|
||||
"src.server.services.folder_scan_service._settings", mock_settings
|
||||
):
|
||||
await perform_nfo_repair_scan()
|
||||
|
||||
@@ -785,7 +785,7 @@ class TestPerformNfoRepairScan:
|
||||
mock_settings.anime_directory = ""
|
||||
|
||||
with patch(
|
||||
"src.server.services.initialization_service.settings", mock_settings
|
||||
"src.server.services.folder_scan_service._settings", mock_settings
|
||||
):
|
||||
await perform_nfo_repair_scan()
|
||||
|
||||
@@ -805,7 +805,7 @@ class TestPerformNfoRepairScan:
|
||||
mock_repair_service.repair_series = AsyncMock(return_value=True)
|
||||
|
||||
with patch(
|
||||
"src.server.services.initialization_service.settings", mock_settings
|
||||
"src.server.services.folder_scan_service._settings", mock_settings
|
||||
), patch(
|
||||
"src.core.services.nfo_repair_service.nfo_needs_repair",
|
||||
return_value=True,
|
||||
@@ -835,7 +835,7 @@ class TestPerformNfoRepairScan:
|
||||
mock_settings.anime_directory = str(tmp_path)
|
||||
|
||||
with patch(
|
||||
"src.server.services.initialization_service.settings", mock_settings
|
||||
"src.server.services.folder_scan_service._settings", mock_settings
|
||||
), patch(
|
||||
"src.core.services.nfo_repair_service.nfo_needs_repair",
|
||||
return_value=False,
|
||||
@@ -865,7 +865,7 @@ class TestPerformNfoRepairScan:
|
||||
mock_repair_service.repair_series = AsyncMock(return_value=True)
|
||||
|
||||
with patch(
|
||||
"src.server.services.initialization_service.settings", mock_settings
|
||||
"src.server.services.folder_scan_service._settings", mock_settings
|
||||
), patch(
|
||||
"src.core.services.nfo_repair_service.nfo_needs_repair",
|
||||
return_value=True,
|
||||
|
||||
Reference in New Issue
Block a user