Remove legacy key file support after DB migration
- SerieScanner: Remove key file fallback, keep data file fallback - SystemSettings: Add legacy_key_cleanup_completed flag - initialization_service: Add cleanup task to remove key files from folders with DB entries - Tests updated to reflect key file removal from legacy path Key files caused duplicate key errors on folder rename. DB is now sole source of truth.
This commit is contained in:
@@ -519,23 +519,8 @@ class TestFindMp4Files:
|
||||
class TestReadDataFromFile:
|
||||
"""Test __read_data_from_file method."""
|
||||
|
||||
def test_reads_key_file(self, mock_loader):
|
||||
"""Should read key from 'key' file."""
|
||||
import tempfile
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
anime_folder = os.path.join(tmpdir, "SomeAnime")
|
||||
os.makedirs(anime_folder)
|
||||
with open(os.path.join(anime_folder, "key"), "w") as f:
|
||||
f.write("some-key")
|
||||
|
||||
scanner = SerieScanner(tmpdir, mock_loader)
|
||||
result = scanner._SerieScanner__read_data_from_file("SomeAnime")
|
||||
assert result is not None
|
||||
assert result.key == "some-key"
|
||||
|
||||
def test_reads_data_file(self, mock_loader):
|
||||
"""Should read Serie from 'data' file when no 'key' file."""
|
||||
"""Should read Serie from 'data' file when no DB entry exists."""
|
||||
import tempfile
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
|
||||
@@ -77,23 +77,19 @@ class TestGetSerieFromFolderDbLookup:
|
||||
assert result.key == "rooster-fighter"
|
||||
lookup.assert_called_once_with("Rooster Fighter (2026)")
|
||||
|
||||
def test_legacy_key_file_as_last_resort(self, temp_directory, mock_loader):
|
||||
"""No DB, no callback -> legacy 'key' file used with deprecation warning."""
|
||||
def test_no_db_no_callback_generates_key_from_folder_name(self, temp_directory, mock_loader):
|
||||
"""No DB entry, no callback -> key generated from folder name."""
|
||||
folder = os.path.join(temp_directory, "Legacy Series")
|
||||
os.makedirs(folder, exist_ok=True)
|
||||
with open(os.path.join(folder, "key"), "w") as f:
|
||||
f.write("legacy-key")
|
||||
# No key file, no data file - should fall through to Step 4 (key generation)
|
||||
|
||||
scanner = SerieScanner(temp_directory, mock_loader)
|
||||
|
||||
with patch.object(logging.getLogger("src.core.SerieScanner"), "warning") as mock_warning:
|
||||
result = scanner._SerieScanner__read_data_from_file("Legacy Series")
|
||||
result = scanner._SerieScanner__read_data_from_file("Legacy Series")
|
||||
|
||||
assert result is not None
|
||||
assert result.key == "legacy-key"
|
||||
mock_warning.assert_called()
|
||||
warning_calls = [str(c) for c in mock_warning.call_args_list]
|
||||
assert any("deprecated" in c or "v3.0.0" in c for c in warning_calls)
|
||||
assert result is not None
|
||||
assert result.key == "legacy-series"
|
||||
assert result.folder == "Legacy Series"
|
||||
|
||||
def test_db_lookup_exception_caught_and_logged(self, temp_directory, mock_loader):
|
||||
"""DB exception -> fallback to provider callback."""
|
||||
|
||||
@@ -23,6 +23,8 @@ async def test_system_settings_integration():
|
||||
assert settings.initial_scan_completed is False
|
||||
assert settings.initial_nfo_scan_completed is False
|
||||
assert settings.initial_media_scan_completed is False
|
||||
assert settings.migration_legacy_files_completed is False
|
||||
assert settings.legacy_key_cleanup_completed is False
|
||||
|
||||
# Test checking individual flags
|
||||
async with get_db_session() as db:
|
||||
@@ -34,6 +36,12 @@ async def test_system_settings_integration():
|
||||
|
||||
is_media_done = await SystemSettingsService.is_initial_media_scan_completed(db)
|
||||
assert is_media_done is False
|
||||
|
||||
is_migration_done = await SystemSettingsService.is_migration_legacy_files_completed(db)
|
||||
assert is_migration_done is False
|
||||
|
||||
is_key_cleanup_done = await SystemSettingsService.is_legacy_key_cleanup_completed(db)
|
||||
assert is_key_cleanup_done is False
|
||||
|
||||
# Test marking scans as completed
|
||||
async with get_db_session() as db:
|
||||
@@ -56,6 +64,8 @@ async def test_system_settings_integration():
|
||||
assert settings.initial_scan_completed is False
|
||||
assert settings.initial_nfo_scan_completed is False
|
||||
assert settings.initial_media_scan_completed is False
|
||||
assert settings.migration_legacy_files_completed is False
|
||||
assert settings.legacy_key_cleanup_completed is False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user