Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions homeassistant/components/shelly/media_player.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,14 @@ def media_position_updated_at(self) -> datetime.datetime | None:

return self._last_media_position_updated_at

@property
def entity_picture(self) -> str | None:
"""Return image of the media playing."""
if not self.available:
return None

return super().entity_picture

@property
def media_image_url(self) -> str | None:
"""Return the image URL of current playing media."""
Expand Down
25 changes: 25 additions & 0 deletions tests/components/shelly/test_media_player.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
STATE_BUFFERING,
STATE_IDLE,
STATE_PLAYING,
STATE_UNAVAILABLE,
Platform,
)
from homeassistant.core import HomeAssistant
Expand Down Expand Up @@ -631,3 +632,27 @@ async def test_rpc_media_player_no_media_meta(
assert state.attributes.get(ATTR_MEDIA_ALBUM_NAME) is None
assert state.attributes.get(ATTR_MEDIA_DURATION) is None
assert state.attributes.get(ATTR_MEDIA_POSITION) is None


async def test_rpc_media_player_unavailable(
hass: HomeAssistant,
mock_rpc_device: Mock,
monkeypatch: pytest.MonkeyPatch,
) -> None:
"""Test media player entity handles device going offline without raising."""
status = deepcopy(mock_rpc_device.status)
status["media"] = STATUS_AUDIO_FILE
monkeypatch.setattr(mock_rpc_device, "status", status)

await init_integration(hass, 2, model=MODEL_WALL_DISPLAY)

assert (state := hass.states.get(ENTITY_ID))
assert state.state == STATE_PLAYING

monkeypatch.setattr(mock_rpc_device, "connected", False)
monkeypatch.setattr(mock_rpc_device, "initialized", False)
mock_rpc_device.mock_disconnected()
await hass.async_block_till_done()
Comment on lines +652 to +655

assert (state := hass.states.get(ENTITY_ID))
assert state.state == STATE_UNAVAILABLE