diff --git a/homeassistant/components/shelly/media_player.py b/homeassistant/components/shelly/media_player.py index 3198053cd31cb0..f66a4994852235 100644 --- a/homeassistant/components/shelly/media_player.py +++ b/homeassistant/components/shelly/media_player.py @@ -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.""" diff --git a/tests/components/shelly/test_media_player.py b/tests/components/shelly/test_media_player.py index d1f1b6ce74e35c..844ac9742472b6 100644 --- a/tests/components/shelly/test_media_player.py +++ b/tests/components/shelly/test_media_player.py @@ -36,6 +36,7 @@ STATE_BUFFERING, STATE_IDLE, STATE_PLAYING, + STATE_UNAVAILABLE, Platform, ) from homeassistant.core import HomeAssistant @@ -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() + + assert (state := hass.states.get(ENTITY_ID)) + assert state.state == STATE_UNAVAILABLE