Refactor Cast (#26550)
* Refactor Cast * Fix tests & address comments * Update reqs
This commit is contained in:
parent
a7830bc2d2
commit
7468cc21be
7 changed files with 526 additions and 471 deletions
|
@ -22,12 +22,16 @@ from tests.common import MockConfigEntry, mock_coro
|
|||
@pytest.fixture(autouse=True)
|
||||
def cast_mock():
|
||||
"""Mock pychromecast."""
|
||||
with patch.dict(
|
||||
"sys.modules",
|
||||
{
|
||||
"pychromecast": MagicMock(),
|
||||
"pychromecast.controllers.multizone": MagicMock(),
|
||||
},
|
||||
pycast_mock = MagicMock()
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.cast.media_player.pychromecast", pycast_mock
|
||||
), patch(
|
||||
"homeassistant.components.cast.discovery.pychromecast", pycast_mock
|
||||
), patch(
|
||||
"homeassistant.components.cast.helpers.dial", MagicMock()
|
||||
), patch(
|
||||
"homeassistant.components.cast.media_player.MultizoneManager", MagicMock()
|
||||
):
|
||||
yield
|
||||
|
||||
|
@ -73,7 +77,8 @@ async def async_setup_cast_internal_discovery(hass, config=None, discovery_info=
|
|||
browser = MagicMock(zc={})
|
||||
|
||||
with patch(
|
||||
"pychromecast.start_discovery", return_value=(listener, browser)
|
||||
"homeassistant.components.cast.discovery.pychromecast.start_discovery",
|
||||
return_value=(listener, browser),
|
||||
) as start_discovery:
|
||||
add_entities = await async_setup_cast(hass, config, discovery_info)
|
||||
await hass.async_block_till_done()
|
||||
|
@ -104,7 +109,8 @@ async def async_setup_media_player_cast(hass: HomeAssistantType, info: Chromecas
|
|||
cast.CastStatusListener = MagicMock()
|
||||
|
||||
with patch(
|
||||
"pychromecast._get_chromecast_from_host", return_value=chromecast
|
||||
"homeassistant.components.cast.discovery.pychromecast._get_chromecast_from_host",
|
||||
return_value=chromecast,
|
||||
) as get_chromecast:
|
||||
await async_setup_component(
|
||||
hass,
|
||||
|
@ -122,7 +128,8 @@ async def async_setup_media_player_cast(hass: HomeAssistantType, info: Chromecas
|
|||
def test_start_discovery_called_once(hass):
|
||||
"""Test pychromecast.start_discovery called exactly once."""
|
||||
with patch(
|
||||
"pychromecast.start_discovery", return_value=(None, None)
|
||||
"homeassistant.components.cast.discovery.pychromecast.start_discovery",
|
||||
return_value=(None, None),
|
||||
) as start_discovery:
|
||||
yield from async_setup_cast(hass)
|
||||
|
||||
|
@ -138,14 +145,17 @@ def test_stop_discovery_called_on_stop(hass):
|
|||
browser = MagicMock(zc={})
|
||||
|
||||
with patch(
|
||||
"pychromecast.start_discovery", return_value=(None, browser)
|
||||
"homeassistant.components.cast.discovery.pychromecast.start_discovery",
|
||||
return_value=(None, browser),
|
||||
) as start_discovery:
|
||||
# start_discovery should be called with empty config
|
||||
yield from async_setup_cast(hass, {})
|
||||
|
||||
assert start_discovery.call_count == 1
|
||||
|
||||
with patch("pychromecast.stop_discovery") as stop_discovery:
|
||||
with patch(
|
||||
"homeassistant.components.cast.discovery.pychromecast.stop_discovery"
|
||||
) as stop_discovery:
|
||||
# stop discovery should be called on shutdown
|
||||
hass.bus.async_fire(EVENT_HOMEASSISTANT_STOP)
|
||||
yield from hass.async_block_till_done()
|
||||
|
@ -153,7 +163,8 @@ def test_stop_discovery_called_on_stop(hass):
|
|||
stop_discovery.assert_called_once_with(browser)
|
||||
|
||||
with patch(
|
||||
"pychromecast.start_discovery", return_value=(None, browser)
|
||||
"homeassistant.components.cast.discovery.pychromecast.start_discovery",
|
||||
return_value=(None, browser),
|
||||
) as start_discovery:
|
||||
# start_discovery should be called again on re-startup
|
||||
yield from async_setup_cast(hass)
|
||||
|
@ -173,7 +184,10 @@ async def test_internal_discovery_callback_fill_out(hass):
|
|||
info, model_name="google home", friendly_name="Speaker", uuid=FakeUUID
|
||||
)
|
||||
|
||||
with patch("pychromecast.dial.get_device_status", return_value=full_info):
|
||||
with patch(
|
||||
"homeassistant.components.cast.helpers.dial.get_device_status",
|
||||
return_value=full_info,
|
||||
):
|
||||
signal = MagicMock()
|
||||
|
||||
async_dispatcher_connect(hass, "cast_discovered", signal)
|
||||
|
@ -210,7 +224,7 @@ async def test_normal_chromecast_not_starting_discovery(hass):
|
|||
"""Test cast platform not starting discovery when not required."""
|
||||
# pylint: disable=no-member
|
||||
with patch(
|
||||
"homeassistant.components.cast.media_player." "_setup_internal_discovery"
|
||||
"homeassistant.components.cast.media_player.setup_internal_discovery"
|
||||
) as setup_discovery:
|
||||
# normal (non-group) chromecast shouldn't start discovery.
|
||||
add_entities = await async_setup_cast(hass, {"host": "host1"})
|
||||
|
@ -275,7 +289,10 @@ async def test_entity_media_states(hass: HomeAssistantType):
|
|||
info, model_name="google home", friendly_name="Speaker", uuid=FakeUUID
|
||||
)
|
||||
|
||||
with patch("pychromecast.dial.get_device_status", return_value=full_info):
|
||||
with patch(
|
||||
"homeassistant.components.cast.helpers.dial.get_device_status",
|
||||
return_value=full_info,
|
||||
):
|
||||
chromecast, entity = await async_setup_media_player_cast(hass, info)
|
||||
|
||||
entity._available = True
|
||||
|
@ -330,7 +347,10 @@ async def test_group_media_states(hass: HomeAssistantType):
|
|||
info, model_name="google home", friendly_name="Speaker", uuid=FakeUUID
|
||||
)
|
||||
|
||||
with patch("pychromecast.dial.get_device_status", return_value=full_info):
|
||||
with patch(
|
||||
"homeassistant.components.cast.helpers.dial.get_device_status",
|
||||
return_value=full_info,
|
||||
):
|
||||
chromecast, entity = await async_setup_media_player_cast(hass, info)
|
||||
|
||||
entity._available = True
|
||||
|
@ -377,7 +397,10 @@ async def test_dynamic_group_media_states(hass: HomeAssistantType):
|
|||
info, model_name="google home", friendly_name="Speaker", uuid=FakeUUID
|
||||
)
|
||||
|
||||
with patch("pychromecast.dial.get_device_status", return_value=full_info):
|
||||
with patch(
|
||||
"homeassistant.components.cast.helpers.dial.get_device_status",
|
||||
return_value=full_info,
|
||||
):
|
||||
chromecast, entity = await async_setup_media_player_cast(hass, info)
|
||||
|
||||
entity._available = True
|
||||
|
@ -426,12 +449,14 @@ async def test_group_media_control(hass: HomeAssistantType):
|
|||
info, model_name="google home", friendly_name="Speaker", uuid=FakeUUID
|
||||
)
|
||||
|
||||
with patch("pychromecast.dial.get_device_status", return_value=full_info):
|
||||
with patch(
|
||||
"homeassistant.components.cast.helpers.dial.get_device_status",
|
||||
return_value=full_info,
|
||||
):
|
||||
chromecast, entity = await async_setup_media_player_cast(hass, info)
|
||||
|
||||
entity._available = True
|
||||
entity.schedule_update_ha_state()
|
||||
await hass.async_block_till_done()
|
||||
entity.async_write_ha_state()
|
||||
|
||||
state = hass.states.get("media_player.speaker")
|
||||
assert state is not None
|
||||
|
@ -480,7 +505,10 @@ async def test_dynamic_group_media_control(hass: HomeAssistantType):
|
|||
info, model_name="google home", friendly_name="Speaker", uuid=FakeUUID
|
||||
)
|
||||
|
||||
with patch("pychromecast.dial.get_device_status", return_value=full_info):
|
||||
with patch(
|
||||
"homeassistant.components.cast.helpers.dial.get_device_status",
|
||||
return_value=full_info,
|
||||
):
|
||||
chromecast, entity = await async_setup_media_player_cast(hass, info)
|
||||
|
||||
entity._available = True
|
||||
|
@ -529,7 +557,10 @@ async def test_disconnect_on_stop(hass: HomeAssistantType):
|
|||
"""Test cast device disconnects socket on stop."""
|
||||
info = get_fake_chromecast_info()
|
||||
|
||||
with patch("pychromecast.dial.get_device_status", return_value=info):
|
||||
with patch(
|
||||
"homeassistant.components.cast.helpers.dial.get_device_status",
|
||||
return_value=info,
|
||||
):
|
||||
chromecast, _ = await async_setup_media_player_cast(hass, info)
|
||||
|
||||
hass.bus.async_fire(EVENT_HOMEASSISTANT_STOP)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue