diff --git a/homeassistant/components/cast/discovery.py b/homeassistant/components/cast/discovery.py index 01b00c82f64fe..e76302fefbc17 100644 --- a/homeassistant/components/cast/discovery.py +++ b/homeassistant/components/cast/discovery.py @@ -26,12 +26,7 @@ def discover_chromecast( """Discover a Chromecast.""" info = ChromecastInfo( - services=cast_info.services, - uuid=cast_info.uuid, - model_name=cast_info.model_name, - friendly_name=cast_info.friendly_name, - cast_type=cast_info.cast_type, - manufacturer=cast_info.manufacturer, + cast_info=cast_info, ) if info.uuid is None: @@ -76,12 +71,7 @@ def remove_cast(self, uuid, service, cast_info): _remove_chromecast( hass, ChromecastInfo( - services=cast_info.services, - uuid=cast_info.uuid, - model_name=cast_info.model_name, - friendly_name=cast_info.friendly_name, - cast_type=cast_info.cast_type, - manufacturer=cast_info.manufacturer, + cast_info=cast_info, ), ) diff --git a/homeassistant/components/cast/helpers.py b/homeassistant/components/cast/helpers.py index a3bf34ab3ae3a..ba7380bcaa208 100644 --- a/homeassistant/components/cast/helpers.py +++ b/homeassistant/components/cast/helpers.py @@ -6,6 +6,7 @@ import attr from pychromecast import dial from pychromecast.const import CAST_TYPE_GROUP +from pychromecast.models import CastInfo @attr.s(slots=True, frozen=True) @@ -15,18 +16,23 @@ class ChromecastInfo: This also has the same attributes as the mDNS fields by zeroconf. """ - services: set | None = attr.ib() - uuid: str = attr.ib(converter=attr.converters.optional(str)) - model_name: str = attr.ib() - friendly_name: str = attr.ib() - cast_type: str = attr.ib() - manufacturer: str = attr.ib() + cast_info: CastInfo = attr.ib() is_dynamic_group = attr.ib(type=Optional[bool], default=None) + @property + def friendly_name(self) -> str: + """Return the UUID.""" + return self.cast_info.friendly_name + @property def is_audio_group(self) -> bool: """Return if the cast is an audio group.""" - return self.cast_type == CAST_TYPE_GROUP + return self.cast_info.cast_type == CAST_TYPE_GROUP + + @property + def uuid(self) -> bool: + """Return the UUID.""" + return self.cast_info.uuid def fill_out_missing_chromecast_info(self) -> ChromecastInfo: """Return a new ChromecastInfo object with missing attributes filled in. @@ -42,21 +48,16 @@ def fill_out_missing_chromecast_info(self) -> ChromecastInfo: http_group_status = None http_group_status = dial.get_multizone_status( None, - services=self.services, + services=self.cast_info.services, zconf=ChromeCastZeroconf.get_zeroconf(), ) if http_group_status is not None: is_dynamic_group = any( - str(g.uuid) == self.uuid for g in http_group_status.dynamic_groups + g.uuid == self.cast_info.uuid for g in http_group_status.dynamic_groups ) return ChromecastInfo( - services=self.services, - uuid=self.uuid, - friendly_name=self.friendly_name, - model_name=self.model_name, - cast_type=self.cast_type, - manufacturer=self.manufacturer, + cast_info=self.cast_info, is_dynamic_group=is_dynamic_group, ) diff --git a/homeassistant/components/cast/media_player.py b/homeassistant/components/cast/media_player.py index 32c303dfd8bc2..46c25501f3a91 100644 --- a/homeassistant/components/cast/media_player.py +++ b/homeassistant/components/cast/media_player.py @@ -134,7 +134,7 @@ def async_cast_discovered(discover: ChromecastInfo) -> None: """Handle discovery of a new chromecast.""" # If wanted_uuids is set, we're only accepting specific cast devices identified # by UUID - if wanted_uuids is not None and discover.uuid not in wanted_uuids: + if wanted_uuids is not None and str(discover.uuid) not in wanted_uuids: # UUID not matching, ignore. return @@ -162,7 +162,6 @@ def __init__(self, cast_info: ChromecastInfo) -> None: """Initialize the cast device.""" self._cast_info = cast_info - self.services = cast_info.services self._chromecast: pychromecast.Chromecast | None = None self.cast_status = None self.media_status = None @@ -176,13 +175,13 @@ def __init__(self, cast_info: ChromecastInfo) -> None: self._add_remove_handler = None self._cast_view_remove_handler = None - self._attr_unique_id = cast_info.uuid + self._attr_unique_id = str(cast_info.uuid) self._attr_name = cast_info.friendly_name - if cast_info.model_name != "Google Cast Group": + if cast_info.cast_info.model_name != "Google Cast Group": self._attr_device_info = DeviceInfo( identifiers={(CAST_DOMAIN, str(cast_info.uuid).replace("-", ""))}, - manufacturer=str(cast_info.manufacturer), - model=cast_info.model_name, + manufacturer=str(cast_info.cast_info.manufacturer), + model=cast_info.cast_info.model_name, name=str(cast_info.friendly_name), ) @@ -224,20 +223,11 @@ async def async_connect_to_chromecast(self): "[%s %s] Connecting to cast device by service %s", self.entity_id, self._cast_info.friendly_name, - self.services, + self._cast_info.cast_info.services, ) chromecast = await self.hass.async_add_executor_job( pychromecast.get_chromecast_from_cast_info, - pychromecast.discovery.CastInfo( - self.services, - self._cast_info.uuid, - self._cast_info.model_name, - self._cast_info.friendly_name, - None, - None, - self._cast_info.cast_type, - self._cast_info.manufacturer, - ), + self._cast_info.cast_info, ChromeCastZeroconf.get_zeroconf(), ) chromecast.media_controller.app_id = CAST_APP_ID_HOMEASSISTANT_MEDIA @@ -776,7 +766,6 @@ def __init__(self, hass, cast_info: ChromecastInfo): self.hass = hass self._cast_info = cast_info - self.services = cast_info.services self._chromecast: pychromecast.Chromecast | None = None self.mz_mgr = None self._status_listener: CastStatusListener | None = None @@ -824,20 +813,11 @@ async def async_connect_to_chromecast(self): "[%s %s] Connecting to cast device by service %s", "Dynamic group", self._cast_info.friendly_name, - self.services, + self._cast_info.cast_info.services, ) chromecast = await self.hass.async_add_executor_job( pychromecast.get_chromecast_from_cast_info, - pychromecast.discovery.CastInfo( - self.services, - self._cast_info.uuid, - self._cast_info.model_name, - self._cast_info.friendly_name, - None, - None, - self._cast_info.cast_type, - self._cast_info.manufacturer, - ), + self._cast_info.cast_info, ChromeCastZeroconf.get_zeroconf(), ) chromecast.media_controller.app_id = CAST_APP_ID_HOMEASSISTANT_MEDIA @@ -889,7 +869,7 @@ async def _async_cast_removed(self, discover: ChromecastInfo): # Removed is not our device. return - if not discover.services: + if not discover.cast_info.services: # Clean up the dynamic group _LOGGER.debug("Clean up dynamic group: %s", discover) await self.async_tear_down() diff --git a/tests/components/cast/conftest.py b/tests/components/cast/conftest.py index 901f7fb74fb68..3b96f378906e9 100644 --- a/tests/components/cast/conftest.py +++ b/tests/components/cast/conftest.py @@ -7,11 +7,11 @@ @pytest.fixture() -def dial_mock(): +def get_multizone_status_mock(): """Mock pychromecast dial.""" - dial_mock = MagicMock() - dial_mock.get_multizone_status.return_value.dynamic_groups = [] - return dial_mock + mock = MagicMock(spec_set=pychromecast.dial.get_multizone_status) + mock.return_value.dynamic_groups = [] + return mock @pytest.fixture() @@ -23,7 +23,7 @@ def castbrowser_mock(): @pytest.fixture() def mz_mock(): """Mock pychromecast MultizoneManager.""" - return MagicMock() + return MagicMock(spec_set=pychromecast.controllers.multizone.MultizoneManager) @pytest.fixture() @@ -40,7 +40,11 @@ def get_chromecast_mock(): @pytest.fixture(autouse=True) def cast_mock( - dial_mock, mz_mock, quick_play_mock, castbrowser_mock, get_chromecast_mock + mz_mock, + quick_play_mock, + castbrowser_mock, + get_chromecast_mock, + get_multizone_status_mock, ): """Mock pychromecast.""" ignore_cec_orig = list(pychromecast.IGNORE_CEC) @@ -48,7 +52,10 @@ def cast_mock( with patch( "homeassistant.components.cast.discovery.pychromecast.discovery.CastBrowser", castbrowser_mock, - ), patch("homeassistant.components.cast.helpers.dial", dial_mock), patch( + ), patch( + "homeassistant.components.cast.helpers.dial.get_multizone_status", + get_multizone_status_mock, + ), patch( "homeassistant.components.cast.media_player.MultizoneManager", return_value=mz_mock, ), patch( diff --git a/tests/components/cast/test_media_player.py b/tests/components/cast/test_media_player.py index 3690cb7a2e046..adab55c50dff3 100644 --- a/tests/components/cast/test_media_player.py +++ b/tests/components/cast/test_media_player.py @@ -67,40 +67,21 @@ def get_fake_chromecast_info( ): """Generate a Fake ChromecastInfo with the specified arguments.""" - @attr.s(slots=True, frozen=True, eq=False) - class ExtendedChromecastInfo(ChromecastInfo): - host: str | None = attr.ib(default=None) - port: int | None = attr.ib(default=0) - - def __eq__(self, other): - if isinstance(other, ChromecastInfo): - return ( - ChromecastInfo( - services=self.services, - uuid=self.uuid, - model_name=self.model_name, - friendly_name=self.friendly_name, - cast_type=self.cast_type, - manufacturer=self.manufacturer, - is_dynamic_group=self.is_dynamic_group, - ) - == other - ) - return super().__eq__(other) - if service is None: service = pychromecast.discovery.ServiceInfo( pychromecast.const.SERVICE_TYPE_HOST, (host, port) ) - return ExtendedChromecastInfo( - host=host, - port=port, - services={service}, - uuid=uuid, - model_name="Chromecast", - friendly_name="Speaker", - cast_type=CAST_TYPE_GROUP if port != 8009 else CAST_TYPE_CHROMECAST, - manufacturer="Nabu Casa", + return ChromecastInfo( + cast_info=pychromecast.models.CastInfo( + services={service}, + uuid=uuid, + model_name="Chromecast", + friendly_name="Speaker", + host=host, + port=port, + cast_type=CAST_TYPE_GROUP if port != 8009 else CAST_TYPE_CHROMECAST, + manufacturer="Nabu Casa", + ) ) @@ -154,12 +135,12 @@ def discover_chromecast( browser.devices[info.uuid] = pychromecast.discovery.CastInfo( {service}, info.uuid, - info.model_name, + info.cast_info.model_name, info.friendly_name, - info.host, - info.port, - info.cast_type, - info.manufacturer, + info.cast_info.host, + info.cast_info.port, + info.cast_info.cast_type, + info.cast_info.manufacturer, ) discovery_callback(info.uuid, "") @@ -168,15 +149,15 @@ def remove_chromecast(service_name: str, info: ChromecastInfo) -> None: remove_callback( info.uuid, service_name, - pychromecast.discovery.CastInfo( + pychromecast.models.CastInfo( set(), info.uuid, - info.model_name, - info.friendly_name, - info.host, - info.port, - info.cast_type, - info.manufacturer, + info.cast_info.model_name, + info.cast_info.friendly_name, + info.cast_info.host, + info.cast_info.port, + info.cast_info.cast_type, + info.cast_info.manufacturer, ), ) @@ -187,7 +168,7 @@ async def async_setup_media_player_cast(hass: HomeAssistant, info: ChromecastInf """Set up the cast platform with async_setup_component.""" browser = MagicMock(devices={}, zc={}) chromecast = get_fake_chromecast(info) - zconf = get_fake_zconf(host=info.host, port=info.port) + zconf = get_fake_zconf(host=info.cast_info.host, port=info.cast_info.port) with patch( "homeassistant.components.cast.discovery.pychromecast.get_chromecast_from_cast_info", @@ -210,12 +191,12 @@ async def async_setup_media_player_cast(hass: HomeAssistant, info: ChromecastInf browser.devices[info.uuid] = pychromecast.discovery.CastInfo( {FAKE_MDNS_SERVICE}, info.uuid, - info.model_name, + info.cast_info.model_name, info.friendly_name, - info.host, - info.port, - info.cast_type, - info.manufacturer, + info.cast_info.host, + info.cast_info.port, + info.cast_info.cast_type, + info.cast_info.manufacturer, ) discovery_callback(info.uuid, FAKE_MDNS_SERVICE[1]) @@ -228,12 +209,12 @@ def discover_chromecast(service_name: str, info: ChromecastInfo) -> None: browser.devices[info.uuid] = pychromecast.discovery.CastInfo( {FAKE_MDNS_SERVICE}, info.uuid, - info.model_name, + info.cast_info.model_name, info.friendly_name, - info.host, - info.port, - info.cast_type, - info.manufacturer, + info.cast_info.host, + info.cast_info.port, + info.cast_info.cast_type, + info.cast_info.manufacturer, ) discovery_callback(info.uuid, FAKE_MDNS_SERVICE[1]) @@ -268,19 +249,32 @@ async def test_start_discovery_called_once(hass, castbrowser_mock): assert castbrowser_mock.return_value.start_discovery.call_count == 1 -async def test_internal_discovery_callback_fill_out_fail(hass): +async def test_internal_discovery_callback_fill_out_group_fail( + hass, get_multizone_status_mock +): """Test internal discovery automatically filling out information.""" discover_cast, _, _ = await async_setup_cast_internal_discovery(hass) - info = get_fake_chromecast_info(host="host1", service=FAKE_MDNS_SERVICE) - zconf = get_fake_zconf(host="host1", port=8009) - full_info = ( - info # attr.evolve(info, model_name="", friendly_name="Speaker", uuid=FakeUUID) + info = get_fake_chromecast_info(host="host1", port=12345, service=FAKE_MDNS_SERVICE) + zconf = get_fake_zconf(host="host1", port=12345) + full_info = attr.evolve( + info, + cast_info=pychromecast.discovery.CastInfo( + services=info.cast_info.services, + uuid=FakeUUID, + model_name="Chromecast", + friendly_name="Speaker", + host=info.cast_info.host, + port=info.cast_info.port, + cast_type=info.cast_info.cast_type, + manufacturer=info.cast_info.manufacturer, + ), + is_dynamic_group=False, ) + get_multizone_status_mock.assert_not_called() + get_multizone_status_mock.return_value = None + with patch( - "homeassistant.components.cast.helpers.dial.get_device_status", - return_value=None, - ), patch( "homeassistant.components.cast.discovery.ChromeCastZeroconf.get_zeroconf", return_value=zconf, ): @@ -293,25 +287,35 @@ async def test_internal_discovery_callback_fill_out_fail(hass): # when called with incomplete info, it should use HTTP to get missing discover = signal.mock_calls[0][1][0] assert discover == full_info + get_multizone_status_mock.assert_called_once() -async def test_internal_discovery_callback_fill_out_group(hass): +async def test_internal_discovery_callback_fill_out_group( + hass, get_multizone_status_mock +): """Test internal discovery automatically filling out information.""" discover_cast, _, _ = await async_setup_cast_internal_discovery(hass) info = get_fake_chromecast_info(host="host1", port=12345, service=FAKE_MDNS_SERVICE) zconf = get_fake_zconf(host="host1", port=12345) full_info = attr.evolve( info, - model_name="Chromecast", - friendly_name="Speaker", - uuid=FakeUUID, + cast_info=pychromecast.discovery.CastInfo( + services=info.cast_info.services, + uuid=FakeUUID, + model_name="Chromecast", + friendly_name="Speaker", + host=info.cast_info.host, + port=info.cast_info.port, + cast_type=info.cast_info.cast_type, + manufacturer=info.cast_info.manufacturer, + ), is_dynamic_group=False, ) + get_multizone_status_mock.assert_not_called() + get_multizone_status_mock.return_value = None + with patch( - "homeassistant.components.cast.helpers.dial.get_device_status", - return_value=full_info, - ), patch( "homeassistant.components.cast.discovery.ChromeCastZeroconf.get_zeroconf", return_value=zconf, ): @@ -324,6 +328,7 @@ async def test_internal_discovery_callback_fill_out_group(hass): # when called with incomplete info, it should use HTTP to get missing discover = signal.mock_calls[0][1][0] assert discover == full_info + get_multizone_status_mock.assert_called_once() async def test_stop_discovery_called_on_stop(hass, castbrowser_mock): @@ -437,7 +442,9 @@ async def test_auto_cast_chromecasts(hass): assert add_dev1.call_count == 2 -async def test_discover_dynamic_group(hass, dial_mock, get_chromecast_mock, caplog): +async def test_discover_dynamic_group( + hass, get_multizone_status_mock, get_chromecast_mock, caplog +): """Test dynamic group does not create device or entity.""" cast_1 = get_fake_chromecast_info(host="host_1", port=23456, uuid=FakeUUID) cast_2 = get_fake_chromecast_info(host="host_2", port=34567, uuid=FakeUUID2) @@ -451,7 +458,7 @@ async def test_discover_dynamic_group(hass, dial_mock, get_chromecast_mock, capl tmp1.uuid = FakeUUID tmp2 = MagicMock() tmp2.uuid = FakeUUID2 - dial_mock.get_multizone_status.return_value.dynamic_groups = [tmp1, tmp2] + get_multizone_status_mock.return_value.dynamic_groups = [tmp1, tmp2] get_chromecast_mock.assert_not_called() discover_cast, remove_cast, add_dev1 = await async_setup_cast_internal_discovery( @@ -492,7 +499,7 @@ async def test_discover_dynamic_group(hass, dial_mock, get_chromecast_mock, capl get_chromecast_mock.assert_called() get_chromecast_mock.reset_mock() assert add_dev1.call_count == 0 - assert reg.async_get_entity_id("media_player", "cast", cast_1.uuid) is None + assert reg.async_get_entity_id("media_player", "cast", cast_2.uuid) is None # Get update for cast service with patch( @@ -601,9 +608,6 @@ async def test_entity_cast_status(hass: HomeAssistant): 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) chromecast.cast_type = pychromecast.const.CAST_TYPE_CHROMECAST @@ -618,7 +622,7 @@ async def test_entity_cast_status(hass: HomeAssistant): 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) + assert entity_id == reg.async_get_entity_id("media_player", "cast", str(info.uuid)) # No media status, pause, play, stop not supported assert state.attributes.get("supported_features") == ( @@ -756,9 +760,6 @@ async def test_entity_play_media(hass: HomeAssistant): 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) _, conn_status_cb, _ = get_status_callbacks(chromecast) @@ -772,7 +773,7 @@ async def test_entity_play_media(hass: HomeAssistant): 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) + assert entity_id == reg.async_get_entity_id("media_player", "cast", str(info.uuid)) # Play_media await common.async_play_media(hass, "audio", "best.mp3", entity_id) @@ -785,9 +786,6 @@ async def test_entity_play_media_cast(hass: HomeAssistant, quick_play_mock): 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) _, conn_status_cb, _ = get_status_callbacks(chromecast) @@ -801,7 +799,7 @@ async def test_entity_play_media_cast(hass: HomeAssistant, quick_play_mock): 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) + assert entity_id == reg.async_get_entity_id("media_player", "cast", str(info.uuid)) # Play_media - cast with app ID await common.async_play_media(hass, "cast", '{"app_id": "abc123"}', entity_id) @@ -830,9 +828,6 @@ async def test_entity_play_media_cast_invalid(hass, caplog, quick_play_mock): 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) _, conn_status_cb, _ = get_status_callbacks(chromecast) @@ -846,7 +841,7 @@ async def test_entity_play_media_cast_invalid(hass, caplog, quick_play_mock): 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) + assert entity_id == reg.async_get_entity_id("media_player", "cast", str(info.uuid)) # play_media - media_type cast with invalid JSON with pytest.raises(json.decoder.JSONDecodeError): @@ -903,9 +898,6 @@ async def test_entity_media_content_type(hass: HomeAssistant): 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) _, conn_status_cb, media_status_cb = get_status_callbacks(chromecast) @@ -919,7 +911,7 @@ async def test_entity_media_content_type(hass: HomeAssistant): 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) + assert entity_id == reg.async_get_entity_id("media_player", "cast", str(info.uuid)) media_status = MagicMock(images=None) media_status.media_is_movie = False @@ -957,9 +949,6 @@ async def test_entity_control(hass: HomeAssistant): 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) chromecast.cast_type = pychromecast.const.CAST_TYPE_CHROMECAST @@ -982,7 +971,7 @@ async def test_entity_control(hass: HomeAssistant): assert state is not None assert state.name == "Speaker" assert state.state == "playing" - assert entity_id == reg.async_get_entity_id("media_player", "cast", full_info.uuid) + assert entity_id == reg.async_get_entity_id("media_player", "cast", str(info.uuid)) assert state.attributes.get("supported_features") == ( SUPPORT_PAUSE @@ -1075,9 +1064,6 @@ async def test_entity_media_states(hass: HomeAssistant): 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) _, conn_status_cb, media_status_cb = get_status_callbacks(chromecast) @@ -1091,7 +1077,7 @@ async def test_entity_media_states(hass: HomeAssistant): 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) + assert entity_id == reg.async_get_entity_id("media_player", "cast", str(info.uuid)) media_status = MagicMock(images=None) media_status.player_is_playing = True @@ -1134,9 +1120,6 @@ async def test_entity_media_states_lovelace_app(hass: HomeAssistant): 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) @@ -1150,7 +1133,7 @@ async def test_entity_media_states_lovelace_app(hass: HomeAssistant): 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) + assert entity_id == reg.async_get_entity_id("media_player", "cast", str(info.uuid)) chromecast.app_id = CAST_APP_ID_HOMEASSISTANT_LOVELACE cast_status = MagicMock() @@ -1204,9 +1187,6 @@ async def test_group_media_states(hass, mz_mock): 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) _, conn_status_cb, media_status_cb, group_media_status_cb = get_status_callbacks( @@ -1222,7 +1202,7 @@ async def test_group_media_states(hass, mz_mock): 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) + assert entity_id == reg.async_get_entity_id("media_player", "cast", str(info.uuid)) group_media_status = MagicMock(images=None) player_media_status = MagicMock(images=None) @@ -1257,9 +1237,6 @@ async def test_group_media_control(hass, mz_mock): 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) @@ -1276,7 +1253,7 @@ async def test_group_media_control(hass, mz_mock): 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) + assert entity_id == reg.async_get_entity_id("media_player", "cast", str(info.uuid)) group_media_status = MagicMock(images=None) player_media_status = MagicMock(images=None)