/
/
1"""Tests for the albums controller."""
2
3from __future__ import annotations
4
5from typing import TYPE_CHECKING
6
7from .helpers import create_album, create_track
8
9if TYPE_CHECKING:
10 import pytest
11
12 from music_assistant.mass import MusicAssistant
13
14
15async def test_overwrite_update_keeps_artists_when_none_are_given(
16 mass: MusicAssistant, caplog: pytest.LogCaptureFixture
17) -> None:
18 """An overwrite update carrying no artists must not clear the stored ones."""
19 db_album = await mass.music.albums.add_item_to_library(create_album("spotify_1", "album1"))
20
21 update = create_album("spotify_1", "album1", artist_name=None)
22 await mass.music.albums.update_item_in_library(db_album.item_id, update, overwrite=True)
23
24 refreshed = await mass.music.albums.get_library_item(db_album.item_id)
25 assert [artist.name for artist in refreshed.artists] == ["Test Artist"]
26 assert "Ignoring request to clear all artists" in caplog.text
27
28
29async def test_overwrite_update_replaces_artists(mass: MusicAssistant) -> None:
30 """An overwrite update carrying artists still replaces the stored ones."""
31 db_album = await mass.music.albums.add_item_to_library(create_album("spotify_1", "album1"))
32
33 # a distinct artist id, so the stored relation is replaced rather than renamed
34 update = create_album(
35 "spotify_1", "album1", artist_name="Other Artist", artist_item_id="other_artist"
36 )
37 await mass.music.albums.update_item_in_library(db_album.item_id, update, overwrite=True)
38
39 refreshed = await mass.music.albums.get_library_item(db_album.item_id)
40 assert [artist.name for artist in refreshed.artists] == ["Other Artist"]
41
42
43async def test_track_overwrite_keeps_album_artists(mass: MusicAssistant) -> None:
44 """A track update carrying an artist-less album must not clear that album's artists."""
45 db_album = await mass.music.albums.add_item_to_library(create_album("spotify_1", "album1"))
46 track = create_track("spotify_1", "track1")
47 track.album = create_album("spotify_1", "album1")
48 db_track = await mass.music.tracks.add_item_to_library(track)
49
50 # a provider that builds an album object without artists (as qqmusic does)
51 update = create_track("spotify_1", "track1")
52 update.album = create_album("spotify_1", "album1", artist_name=None)
53 await mass.music.tracks.update_item_in_library(db_track.item_id, update, overwrite=True)
54
55 refreshed = await mass.music.albums.get_library_item(db_album.item_id)
56 assert [artist.name for artist in refreshed.artists] == ["Test Artist"]
57