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))