/
/
/
1"""Shared MagicMock builders for FastMCP server tests."""
2# mypy: disable-error-code="no-untyped-def, assignment"
3
4from __future__ import annotations
5
6from typing import Any
7from unittest.mock import MagicMock
8
9from music_assistant_models.enums import MediaType
10
11
12def fake_media_item(media_type: MediaType, **kwargs: Any) -> MagicMock:
13 """Build a stub item exposing ``media_type`` and the usual brief fields."""
14 item = MagicMock(
15 spec_set=[
16 "media_type",
17 "uri",
18 "name",
19 "artists",
20 "artist",
21 "album",
22 "duration",
23 "year",
24 "track_count",
25 "owner",
26 "description",
27 "metadata",
28 "item_id",
29 "provider",
30 "available",
31 "disc_number",
32 "track_number",
33 ]
34 )
35 item.media_type = media_type
36 item.uri = kwargs.get("uri", f"library://{media_type.value}/1")
37 item.name = kwargs.get("name", f"{media_type.value.title()} Name")
38 item.artists = kwargs.get("artists", [])
39 item.artist = kwargs.get("artist")
40 item.album = kwargs.get("album")
41 item.duration = kwargs.get("duration", 180)
42 item.year = kwargs.get("year")
43 item.track_count = kwargs.get("track_count")
44 item.owner = kwargs.get("owner")
45 item.description = kwargs.get("description")
46 item.metadata = kwargs.get("metadata")
47 item.item_id = kwargs.get("item_id", "1")
48 item.provider = kwargs.get("provider", "library")
49 item.available = kwargs.get("available", True)
50 item.disc_number = kwargs.get("disc_number")
51 item.track_number = kwargs.get("track_number")
52 return item
53
54
55def fake_album(**kwargs: Any) -> MagicMock:
56 """Album-shaped stub with drill-down fields populated."""
57 defaults = {
58 "uri": "library://album/7",
59 "name": "Black Sands",
60 "artist": "Bonobo",
61 "year": 2010,
62 "item_id": "7",
63 }
64 defaults.update(kwargs)
65 return fake_media_item(MediaType.ALBUM, **defaults)
66
67
68def fake_artist(**kwargs: Any) -> MagicMock:
69 """Artist-shaped stub with drill-down fields populated."""
70 defaults = {
71 "uri": "library://artist/27",
72 "name": "deadmau5",
73 "item_id": "27",
74 }
75 defaults.update(kwargs)
76 return fake_media_item(MediaType.ARTIST, **defaults)
77
78
79def fake_track(**kwargs: Any) -> MagicMock:
80 """Track-shaped stub for album track listings (no ``media_type``)."""
81 track = MagicMock(
82 spec_set=[
83 "uri",
84 "name",
85 "artists",
86 "album",
87 "duration",
88 "disc_number",
89 "track_number",
90 "available",
91 ]
92 )
93 track.uri = kwargs.get("uri", "library://track/1")
94 track.name = kwargs.get("name", "Kiara")
95 track.artists = kwargs.get("artists", [])
96 track.album = kwargs.get("album", "Black Sands")
97 track.duration = kwargs.get("duration", 230)
98 track.disc_number = kwargs.get("disc_number", 1)
99 track.track_number = kwargs.get("track_number", 1)
100 track.available = kwargs.get("available", True)
101 return track
102