Files
musicseerr/backend/tests/test_queue_disk_invalidation.py
T
Harvey df779c9e6d Mus 19 library sync completing with issues (#29)
* fix: Sync issues - AudioDB warmig +  automatic sync skips

* progress ui/ux + discovery and album fixes

* artist fixes

* several request level fixes and improvements

* handle request fails + artist refresh + resilience fixes

* fix format

* fix stop sync fail + last.fn mbid issues + failures/validation reworks
2026-04-08 00:29:36 +01:00

85 lines
2.9 KiB
Python

"""Tests that queue processor and on_queue_import invalidate disk cache for artist."""
import os
import tempfile
os.environ.setdefault("ROOT_APP_DIR", tempfile.mkdtemp())
import pytest
from unittest.mock import AsyncMock, MagicMock
from core.dependencies.service_providers import make_on_queue_import, make_processor
from infrastructure.persistence.request_history import RequestHistoryRecord
def _make_record(artist_mbid: str | None = "artist-aaa") -> RequestHistoryRecord:
return RequestHistoryRecord(
musicbrainz_id="album-111",
artist_name="Test",
album_title="Album",
requested_at="2025-01-01",
status="pending",
artist_mbid=artist_mbid,
monitor_artist=True,
auto_download_artist=False,
)
class TestOnQueueImportDiskInvalidation:
"""on_queue_import should call disk_cache.delete_artist when artist_mbid is present."""
@pytest.mark.asyncio
async def test_disk_cache_deleted_for_artist(self):
disk_cache = AsyncMock()
memory_cache = AsyncMock()
memory_cache.delete.return_value = None
memory_cache.clear_prefix.return_value = 0
library_db = AsyncMock()
record = _make_record(artist_mbid="artist-aaa")
on_queue_import = make_on_queue_import(memory_cache, disk_cache, library_db)
await on_queue_import(record)
disk_cache.delete_artist.assert_awaited_once_with("artist-aaa")
@pytest.mark.asyncio
async def test_disk_cache_not_called_without_artist_mbid(self):
disk_cache = AsyncMock()
memory_cache = AsyncMock()
memory_cache.delete.return_value = None
memory_cache.clear_prefix.return_value = 0
library_db = AsyncMock()
record = _make_record(artist_mbid=None)
on_queue_import = make_on_queue_import(memory_cache, disk_cache, library_db)
await on_queue_import(record)
disk_cache.delete_artist.assert_not_awaited()
class TestProcessorDiskInvalidation:
"""processor should call disk_cache.delete_artist after deferred monitoring."""
@pytest.mark.asyncio
async def test_disk_cache_deleted_after_artist_monitoring(self):
disk_cache = AsyncMock()
memory_cache = AsyncMock()
memory_cache.delete.return_value = None
lidarr_repo = AsyncMock()
lidarr_repo.add_album.return_value = {
"payload": {"monitored": True, "artist": {"foreignArtistId": "artist-aaa"}},
"monitored": True,
}
lidarr_repo.update_artist_monitoring.return_value = {}
request_history = MagicMock()
record = _make_record()
request_history.async_get_record = AsyncMock(return_value=record)
cover_repo = AsyncMock()
processor = make_processor(lidarr_repo, memory_cache, disk_cache, cover_repo, request_history)
await processor("album-111")
disk_cache.delete_artist.assert_awaited_once_with("artist-aaa")