Remove duplicate folder scanning feature
Delete folder_rename_service.py. Stub out get_duplicate_folders API to return empty response. Update folder_scan_service and tests to skip rename step. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -107,13 +107,6 @@ class TestRunFolderScanPrerequisites:
|
||||
"""Scan logs start and completion when prerequisites are met."""
|
||||
with patch.object(
|
||||
folder_scan_service, "_prerequisites_met", return_value=True
|
||||
), patch(
|
||||
"src.server.services.scheduler.folder_scan_service.perform_nfo_repair_scan",
|
||||
new_callable=AsyncMock,
|
||||
), patch(
|
||||
"src.server.services.scheduler.folder_rename_service.validate_and_rename_series_folders",
|
||||
new_callable=AsyncMock,
|
||||
return_value={"scanned": 0, "renamed": 0, "skipped": 0, "errors": 0},
|
||||
), patch.object(
|
||||
folder_scan_service,
|
||||
"check_and_download_missing_posters",
|
||||
@@ -147,10 +140,6 @@ class TestNfoRepairIntegration:
|
||||
"""NFO repair scan is skipped since NFO service removed."""
|
||||
with patch.object(
|
||||
folder_scan_service, "_prerequisites_met", return_value=True
|
||||
), patch(
|
||||
"src.server.services.scheduler.folder_rename_service.validate_and_rename_series_folders",
|
||||
new_callable=AsyncMock,
|
||||
return_value={"scanned": 0, "renamed": 0, "skipped": 0, "errors": 0},
|
||||
), patch.object(
|
||||
folder_scan_service,
|
||||
"check_and_download_missing_posters",
|
||||
@@ -158,62 +147,30 @@ class TestNfoRepairIntegration:
|
||||
return_value={"scanned": 0, "downloaded": 0, "skipped": 0, "errors": 0},
|
||||
):
|
||||
await folder_scan_service.run_folder_scan()
|
||||
# NFO repair is skipped - verify scan continues to folder rename
|
||||
# No exception means the stub worked correctly
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 1.4 – Folder rename integration
|
||||
# 1.4 – Folder rename (removed)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
class TestFolderRenameIntegration:
|
||||
"""Test validate_and_rename_series_folders is called and stats logged."""
|
||||
class TestFolderRenameRemoved:
|
||||
"""Folder rename validation was removed; scan continues to poster check."""
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_calls_folder_rename_service(self, folder_scan_service, tmp_path):
|
||||
"""run_folder_scan must call validate_and_rename_series_folders."""
|
||||
with patch.object(
|
||||
folder_scan_service, "_prerequisites_met", return_value=True
|
||||
), patch(
|
||||
"src.server.services.scheduler.folder_scan_service.perform_nfo_repair_scan",
|
||||
new_callable=AsyncMock,
|
||||
), patch(
|
||||
"src.server.services.scheduler.folder_rename_service.validate_and_rename_series_folders",
|
||||
new_callable=AsyncMock,
|
||||
return_value={"scanned": 5, "renamed": 2, "skipped": 2, "errors": 1},
|
||||
) as mock_rename, patch.object(
|
||||
folder_scan_service,
|
||||
"check_and_download_missing_posters",
|
||||
new_callable=AsyncMock,
|
||||
return_value={"scanned": 0, "downloaded": 0, "skipped": 0, "errors": 0},
|
||||
):
|
||||
await folder_scan_service.run_folder_scan()
|
||||
mock_rename.assert_awaited_once()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_folder_rename_failure_does_not_crash_scan(
|
||||
async def test_folder_rename_skipped_poster_check_runs(
|
||||
self, folder_scan_service, tmp_path
|
||||
):
|
||||
"""If validate_and_rename_series_folders raises, the broad except
|
||||
catches it and the scan stops — poster check is NOT invoked."""
|
||||
"""Folder rename is skipped; scan continues to poster check."""
|
||||
with patch.object(
|
||||
folder_scan_service, "_prerequisites_met", return_value=True
|
||||
), patch(
|
||||
"src.server.services.scheduler.folder_scan_service.perform_nfo_repair_scan",
|
||||
new_callable=AsyncMock,
|
||||
), patch(
|
||||
"src.server.services.scheduler.folder_rename_service.validate_and_rename_series_folders",
|
||||
new_callable=AsyncMock,
|
||||
side_effect=RuntimeError("rename failed"),
|
||||
), patch.object(
|
||||
folder_scan_service,
|
||||
"check_and_download_missing_posters",
|
||||
new_callable=AsyncMock,
|
||||
return_value={"scanned": 0, "downloaded": 0, "skipped": 0, "errors": 0},
|
||||
return_value={"scanned": 5, "downloaded": 2, "skipped": 2, "errors": 1},
|
||||
) as mock_poster:
|
||||
await folder_scan_service.run_folder_scan()
|
||||
# Broad except stops the scan; poster check is skipped
|
||||
mock_poster.assert_not_called()
|
||||
mock_poster.assert_awaited_once()
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -536,23 +493,16 @@ class TestRunFolderScanFull:
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_full_scan_happy_path(self, folder_scan_service, tmp_path):
|
||||
"""All sub-tasks succeed. NFO repair is now a stub."""
|
||||
"""All sub-tasks succeed. NFO repair and folder rename are stubs."""
|
||||
with patch.object(
|
||||
folder_scan_service, "_prerequisites_met", return_value=True
|
||||
), patch(
|
||||
"src.server.services.scheduler.folder_rename_service.validate_and_rename_series_folders",
|
||||
new_callable=AsyncMock,
|
||||
return_value={"scanned": 3, "renamed": 1, "skipped": 1, "errors": 1},
|
||||
) as mock_rename, patch.object(
|
||||
), patch.object(
|
||||
folder_scan_service,
|
||||
"check_and_download_missing_posters",
|
||||
new_callable=AsyncMock,
|
||||
return_value={"scanned": 3, "downloaded": 2, "skipped": 1, "errors": 0},
|
||||
) as mock_poster:
|
||||
await folder_scan_service.run_folder_scan()
|
||||
|
||||
# NFO repair is now a stub - not awaited in code
|
||||
mock_rename.assert_awaited_once()
|
||||
mock_poster.assert_awaited_once()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -560,10 +510,6 @@ class TestRunFolderScanFull:
|
||||
"""Empty library → all stats zero."""
|
||||
with patch.object(
|
||||
folder_scan_service, "_prerequisites_met", return_value=True
|
||||
), patch(
|
||||
"src.server.services.scheduler.folder_rename_service.validate_and_rename_series_folders",
|
||||
new_callable=AsyncMock,
|
||||
return_value={"scanned": 0, "renamed": 0, "skipped": 0, "errors": 0},
|
||||
), patch.object(
|
||||
folder_scan_service,
|
||||
"check_and_download_missing_posters",
|
||||
|
||||
Reference in New Issue
Block a user