Files
twislaandClaude Opus 5.5 a2f421c272 Play albums by their Music Assistant URI
Names can match near-duplicate library albums that differ only in capitals (Let the/The Tribe Increase), and Music Assistant picked the unplayable one. Assignments now store the album's library URI, scans return it after checking it's still in the library (re-finding it by name, exact spelling first, if not), and HA plays by it. sync-library (formerly fetch-covers) links existing assignments.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-26 00:23:54 +00:00

60 lines
1.6 KiB
Python

import httpx
import pytest
from fastapi.testclient import TestClient
from tag_albums.app import create_app
from tag_albums.config import Settings
from tag_albums.library import Album, MusicLibrary, _best_match
from tag_albums.store import Store
TOKEN = "test-token"
AUTH = {"Authorization": f"Bearer {TOKEN}"}
class FakeLibrary:
def __init__(self):
self.queries = []
self.fetched = []
self.fail_search = False
self.library = [Album(artist="Tool", album="Lateralus", image="http://img/1", uri="library://album/1868")]
self.images = {"http://img/1": (b"\x89PNG-lateralus", "image/png")}
def search_albums(self, query, limit=12):
self.queries.append(query)
return list(self.library)
def find_album(self, artist, album):
return _best_match(self.search_albums(album), artist, album)
def current_uri(self, uri, artist, album):
if self.fail_search:
raise httpx.ConnectError("HA down")
return MusicLibrary.current_uri(self, uri, artist, album)
def image_download_url(self, url):
return url
def fetch_image(self, url):
self.fetched.append(url)
if url not in self.images:
raise ValueError("no such image")
return self.images[url]
@pytest.fixture
def store(tmp_path):
s = Store(str(tmp_path / "test.sqlite3"))
yield s
s.close()
@pytest.fixture
def library():
return FakeLibrary()
@pytest.fixture
def client(store, library):
settings = Settings(db_path=":unused:", api_token=TOKEN, ha_url="http://ha", ha_token="x")
return TestClient(create_app(settings, store=store, library=library))