Skip to content

Commit 71898d0

Browse files
authored
Add snapshot testing to Spotify (#128032)
* Add snapshot testing to Spotify * Fix
1 parent 416ead5 commit 71898d0

File tree

2 files changed

+144
-52
lines changed

2 files changed

+144
-52
lines changed
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
# serializer version: 1
2+
# name: test_entities[media_player.spotify_spotify_1-entry]
3+
EntityRegistryEntrySnapshot({
4+
'aliases': set({
5+
}),
6+
'area_id': None,
7+
'capabilities': dict({
8+
}),
9+
'config_entry_id': <ANY>,
10+
'device_class': None,
11+
'device_id': <ANY>,
12+
'disabled_by': None,
13+
'domain': 'media_player',
14+
'entity_category': None,
15+
'entity_id': 'media_player.spotify_spotify_1',
16+
'has_entity_name': True,
17+
'hidden_by': None,
18+
'icon': None,
19+
'id': <ANY>,
20+
'labels': set({
21+
}),
22+
'name': None,
23+
'options': dict({
24+
}),
25+
'original_device_class': None,
26+
'original_icon': None,
27+
'original_name': None,
28+
'platform': 'spotify',
29+
'previous_unique_id': None,
30+
'supported_features': <MediaPlayerEntityFeature: 444983>,
31+
'translation_key': 'spotify',
32+
'unique_id': '1112264111',
33+
'unit_of_measurement': None,
34+
})
35+
# ---
36+
# name: test_entities[media_player.spotify_spotify_1-state]
37+
StateSnapshot({
38+
'attributes': ReadOnlyDict({
39+
'entity_picture': '/api/media_player_proxy/media_player.spotify_spotify_1?token=mock-token&cache=7bb89748322acb6c',
40+
'friendly_name': 'Spotify spotify_1',
41+
'media_album_name': 'Permanent Waves',
42+
'media_artist': 'Rush',
43+
'media_content_id': 'spotify:track:4e9hUiLsN4mx61ARosFi7p',
44+
'media_content_type': <MediaType.MUSIC: 'music'>,
45+
'media_duration': 296.466,
46+
'media_playlist': 'Spotify Web API Testing playlist',
47+
'media_position': 249.367,
48+
'media_position_updated_at': HAFakeDatetime(2023, 10, 21, 0, 0, tzinfo=datetime.timezone.utc),
49+
'media_title': 'The Spirit Of Radio',
50+
'media_track': 1,
51+
'repeat': <RepeatMode.OFF: 'off'>,
52+
'shuffle': False,
53+
'source': 'Master Bathroom Speaker',
54+
'supported_features': <MediaPlayerEntityFeature: 444983>,
55+
'volume_level': 0.25,
56+
}),
57+
'context': <ANY>,
58+
'entity_id': 'media_player.spotify_spotify_1',
59+
'last_changed': <ANY>,
60+
'last_reported': <ANY>,
61+
'last_updated': <ANY>,
62+
'state': 'playing',
63+
})
64+
# ---
65+
# name: test_podcast[media_player.spotify_spotify_1-entry]
66+
EntityRegistryEntrySnapshot({
67+
'aliases': set({
68+
}),
69+
'area_id': None,
70+
'capabilities': dict({
71+
}),
72+
'config_entry_id': <ANY>,
73+
'device_class': None,
74+
'device_id': <ANY>,
75+
'disabled_by': None,
76+
'domain': 'media_player',
77+
'entity_category': None,
78+
'entity_id': 'media_player.spotify_spotify_1',
79+
'has_entity_name': True,
80+
'hidden_by': None,
81+
'icon': None,
82+
'id': <ANY>,
83+
'labels': set({
84+
}),
85+
'name': None,
86+
'options': dict({
87+
}),
88+
'original_device_class': None,
89+
'original_icon': None,
90+
'original_name': None,
91+
'platform': 'spotify',
92+
'previous_unique_id': None,
93+
'supported_features': <MediaPlayerEntityFeature: 2048>,
94+
'translation_key': 'spotify',
95+
'unique_id': '1112264111',
96+
'unit_of_measurement': None,
97+
})
98+
# ---
99+
# name: test_podcast[media_player.spotify_spotify_1-state]
100+
StateSnapshot({
101+
'attributes': ReadOnlyDict({
102+
'entity_picture': '/api/media_player_proxy/media_player.spotify_spotify_1?token=mock-token&cache=cf1e6e1e830f08d3',
103+
'friendly_name': 'Spotify spotify_1',
104+
'media_album_name': 'Safety Third',
105+
'media_artist': 'Safety Third ',
106+
'media_content_id': 'spotify:episode:3o0RYoo5iOMKSmEbunsbvW',
107+
'media_content_type': <MediaType.PODCAST: 'podcast'>,
108+
'media_duration': 3690.161,
109+
'media_position': 5.41,
110+
'media_position_updated_at': HAFakeDatetime(2023, 10, 21, 0, 0, tzinfo=datetime.timezone.utc),
111+
'media_title': 'My Squirrel Has Brain Damage - Safety Third 119',
112+
'repeat': <RepeatMode.OFF: 'off'>,
113+
'shuffle': False,
114+
'source': 'Sonos Roam SL',
115+
'supported_features': <MediaPlayerEntityFeature: 2048>,
116+
'volume_level': 0.46,
117+
}),
118+
'context': <ANY>,
119+
'entity_id': 'media_player.spotify_spotify_1',
120+
'last_changed': <ANY>,
121+
'last_reported': <ANY>,
122+
'last_updated': <ANY>,
123+
'state': 'playing',
124+
})
125+
# ---

tests/components/spotify/test_media_player.py

Lines changed: 19 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
"""Tests for the Spotify media player platform."""
22

3-
from unittest.mock import MagicMock
3+
from unittest.mock import MagicMock, patch
44

55
import pytest
66
from spotipy import SpotifyException
7+
from syrupy import SnapshotAssertion
78

89
from homeassistant.components.media_player import (
910
MediaPlayerEntityFeature,
@@ -15,80 +16,46 @@
1516

1617
from . import setup_integration
1718

18-
from tests.common import MockConfigEntry, load_json_value_fixture
19+
from tests.common import MockConfigEntry, load_json_value_fixture, snapshot_platform
1920

2021

22+
@pytest.mark.freeze_time("2023-10-21")
2123
@pytest.mark.usefixtures("setup_credentials")
2224
async def test_entities(
2325
hass: HomeAssistant,
2426
mock_spotify: MagicMock,
2527
mock_config_entry: MockConfigEntry,
2628
entity_registry: er.EntityRegistry,
29+
snapshot: SnapshotAssertion,
2730
) -> None:
2831
"""Test the Spotify entities."""
29-
await setup_integration(hass, mock_config_entry)
30-
state = hass.states.get("media_player.spotify_spotify_1")
31-
assert state
32-
assert state.state == MediaPlayerState.PLAYING
33-
assert state.attributes["media_content_type"] == "music"
34-
assert state.attributes["media_duration"] == 296.466
35-
assert state.attributes["media_position"] == 249.367
36-
assert "media_position_updated_at" in state.attributes
37-
assert state.attributes["media_title"] == "The Spirit Of Radio"
38-
assert state.attributes["media_artist"] == "Rush"
39-
assert state.attributes["media_album_name"] == "Permanent Waves"
40-
assert state.attributes["media_track"] == 1
41-
assert state.attributes["repeat"] == "off"
42-
assert state.attributes["shuffle"] is False
43-
assert state.attributes["volume_level"] == 0.25
44-
assert state.attributes["source"] == "Master Bathroom Speaker"
45-
assert state.attributes["supported_features"] == (
46-
MediaPlayerEntityFeature.BROWSE_MEDIA
47-
| MediaPlayerEntityFeature.NEXT_TRACK
48-
| MediaPlayerEntityFeature.PAUSE
49-
| MediaPlayerEntityFeature.PLAY
50-
| MediaPlayerEntityFeature.PLAY_MEDIA
51-
| MediaPlayerEntityFeature.PREVIOUS_TRACK
52-
| MediaPlayerEntityFeature.REPEAT_SET
53-
| MediaPlayerEntityFeature.SEEK
54-
| MediaPlayerEntityFeature.SELECT_SOURCE
55-
| MediaPlayerEntityFeature.SHUFFLE_SET
56-
| MediaPlayerEntityFeature.VOLUME_SET
57-
)
32+
with patch("secrets.token_hex", return_value="mock-token"):
33+
await setup_integration(hass, mock_config_entry)
5834

35+
await snapshot_platform(
36+
hass, entity_registry, snapshot, mock_config_entry.entry_id
37+
)
5938

39+
40+
@pytest.mark.freeze_time("2023-10-21")
6041
@pytest.mark.usefixtures("setup_credentials")
6142
async def test_podcast(
6243
hass: HomeAssistant,
6344
mock_spotify: MagicMock,
6445
mock_config_entry: MockConfigEntry,
6546
entity_registry: er.EntityRegistry,
47+
snapshot: SnapshotAssertion,
6648
) -> None:
6749
"""Test the Spotify entities while listening a podcast."""
6850
mock_spotify.return_value.current_playback.return_value = load_json_value_fixture(
6951
"playback_episode.json", DOMAIN
7052
)
71-
await setup_integration(hass, mock_config_entry)
72-
state = hass.states.get("media_player.spotify_spotify_1")
73-
assert state
74-
assert state.state == MediaPlayerState.PLAYING
75-
assert state.attributes["media_content_type"] == "podcast"
76-
assert state.attributes["media_duration"] == 3690.161
77-
assert state.attributes["media_position"] == 5.41
78-
assert "media_position_updated_at" in state.attributes
79-
assert (
80-
state.attributes["media_title"]
81-
== "My Squirrel Has Brain Damage - Safety Third 119"
82-
)
83-
assert state.attributes["media_artist"] == "Safety Third "
84-
assert state.attributes["media_album_name"] == "Safety Third"
85-
assert state.attributes["repeat"] == "off"
86-
assert state.attributes["shuffle"] is False
87-
assert state.attributes["volume_level"] == 0.46
88-
assert state.attributes["source"] == "Sonos Roam SL"
89-
assert (
90-
state.attributes["supported_features"] == MediaPlayerEntityFeature.SELECT_SOURCE
91-
)
53+
with patch("secrets.token_hex", return_value="mock-token"):
54+
await setup_integration(hass, mock_config_entry)
55+
56+
await snapshot_platform(
57+
hass, entity_registry, snapshot, mock_config_entry.entry_id
58+
)
9259

9360

9461
@pytest.mark.usefixtures("setup_credentials")

0 commit comments

Comments
 (0)