Files
embycovers/tests/test_tasks_cleanup.py
T

58 lines
2.3 KiB
Python
Raw Normal View History

2026-06-08 21:58:16 +12:00
import asyncio
from pathlib import Path
from services import emby_tasks
from services import music_covers as music_service
def run(coro):
return asyncio.run(coro)
def test_describe_tasks_marks_navidrome_tasks_unavailable_without_music_root(tmp_path, monkeypatch):
monkeypatch.setattr(music_service, "MUSIC_ROOT", tmp_path / "missing-music-root")
settings = emby_tasks.default_settings()
tasks = {task["id"]: task for task in emby_tasks.describe_tasks(settings)}
assert tasks["navidrome_file_cleanup"]["supports_run"] is False
assert tasks["navidrome_cover_backfill"]["requires"] == "music_root"
def test_navidrome_file_cleanup_preview_and_apply(tmp_path, monkeypatch):
music_root = tmp_path / "music"
album = music_root / "Boards of Canada" / "Music Has the Right to Children"
album.mkdir(parents=True)
(album / "cover.jpg").write_bytes(b"cover")
(album / "booklet.pdf").write_bytes(b"pdf")
(album / "notes.nfo").write_text("extra", encoding="utf-8")
monkeypatch.setattr(music_service, "MUSIC_ROOT", music_root)
monkeypatch.setattr(emby_tasks, "STATE_FILE", tmp_path / "tasks-state.json")
settings = emby_tasks.default_settings()
preview = run(emby_tasks.run_task("navidrome_file_cleanup", client=None, settings=settings, dry_run=True))
assert preview["ok"] is True
assert preview["matched_count"] == 2
assert "would be removed" in preview["message"]
assert (album / "booklet.pdf").exists()
assert (album / "notes.nfo").exists()
applied = run(emby_tasks.run_task("navidrome_file_cleanup", client=None, settings=settings, dry_run=False))
assert applied["ok"] is True
assert applied["removed_count"] == 2
assert not (album / "booklet.pdf").exists()
assert not (album / "notes.nfo").exists()
def test_record_run_persists_task_status(tmp_path, monkeypatch):
monkeypatch.setattr(emby_tasks, "STATE_FILE", tmp_path / "tasks-state.json")
entry = emby_tasks.record_run("navidrome_file_cleanup", {"ok": True, "message": "done"}, automated=True)
state = emby_tasks.load_state()
assert entry["last_status"] == "ok"
assert state["tasks"]["navidrome_file_cleanup"]["last_result"]["message"] == "done"
assert "last_automation_week" in state["tasks"]["navidrome_file_cleanup"]