From 731bec31458eac89e092c5cc4546e2d2edb84331 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Thu, 11 Nov 2021 10:25:23 +0100 Subject: [PATCH] Improve test coverage (#59531) --- tests/components/cast/conftest.py | 1 + tests/components/cast/test_media_player.py | 73 +++++++++++++++++++++- 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/tests/components/cast/conftest.py b/tests/components/cast/conftest.py index a8118a94967..5078e4d34ad 100644 --- a/tests/components/cast/conftest.py +++ b/tests/components/cast/conftest.py @@ -40,6 +40,7 @@ def mz_mock(): def pycast_mock(castbrowser_mock, castbrowser_constructor_mock): """Mock pychromecast.""" pycast_mock = MagicMock() + pycast_mock.IDLE_APP_ID = pychromecast.IDLE_APP_ID pycast_mock.IGNORE_CEC = [] pycast_mock.discovery.CastBrowser = castbrowser_constructor_mock pycast_mock.discovery.CastBrowser.return_value = castbrowser_mock diff --git a/tests/components/cast/test_media_player.py b/tests/components/cast/test_media_player.py index 48ed54cb76e..bbb648a835f 100644 --- a/tests/components/cast/test_media_player.py +++ b/tests/components/cast/test_media_player.py @@ -27,7 +27,11 @@ from homeassistant.components.media_player.const import ( SUPPORT_VOLUME_SET, ) from homeassistant.config import async_process_ha_core_config -from homeassistant.const import ATTR_ENTITY_ID, EVENT_HOMEASSISTANT_STOP +from homeassistant.const import ( + ATTR_ENTITY_ID, + CAST_APP_ID_HOMEASSISTANT_LOVELACE, + EVENT_HOMEASSISTANT_STOP, +) from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er from homeassistant.helpers.dispatcher import async_dispatcher_connect @@ -1025,6 +1029,73 @@ async def test_entity_media_states(hass: HomeAssistant): assert state.state == "unknown" +async def test_entity_media_states_lovelace_app(hass: HomeAssistant): + """Test various entity media states when the lovelace app is active.""" + entity_id = "media_player.speaker" + reg = er.async_get(hass) + + info = get_fake_chromecast_info() + full_info = attr.evolve( + info, model_name="google home", friendly_name="Speaker", uuid=FakeUUID + ) + + chromecast, _ = await async_setup_media_player_cast(hass, info) + cast_status_cb, conn_status_cb, media_status_cb = get_status_callbacks(chromecast) + + connection_status = MagicMock() + connection_status.status = "CONNECTED" + conn_status_cb(connection_status) + await hass.async_block_till_done() + + state = hass.states.get(entity_id) + assert state is not None + assert state.name == "Speaker" + assert state.state == "off" + assert entity_id == reg.async_get_entity_id("media_player", "cast", full_info.uuid) + + chromecast.app_id = CAST_APP_ID_HOMEASSISTANT_LOVELACE + cast_status = MagicMock() + cast_status_cb(cast_status) + await hass.async_block_till_done() + state = hass.states.get(entity_id) + assert state.state == "casting" + + media_status = MagicMock(images=None) + media_status.player_is_playing = True + media_status_cb(media_status) + await hass.async_block_till_done() + state = hass.states.get(entity_id) + assert state.state == "casting" + + media_status.player_is_playing = False + media_status.player_is_paused = True + media_status_cb(media_status) + await hass.async_block_till_done() + state = hass.states.get(entity_id) + assert state.state == "casting" + + media_status.player_is_paused = False + media_status.player_is_idle = True + media_status_cb(media_status) + await hass.async_block_till_done() + state = hass.states.get(entity_id) + assert state.state == "casting" + + chromecast.app_id = pychromecast.IDLE_APP_ID + media_status.player_is_idle = False + chromecast.is_idle = True + media_status_cb(media_status) + await hass.async_block_till_done() + state = hass.states.get(entity_id) + assert state.state == "off" + + chromecast.is_idle = False + media_status_cb(media_status) + await hass.async_block_till_done() + state = hass.states.get(entity_id) + assert state.state == "unknown" + + async def test_group_media_states(hass, mz_mock): """Test media states are read from group if entity has no state.""" entity_id = "media_player.speaker"