mirror of
https://github.com/home-assistant/core.git
synced 2025-07-21 12:17:07 +00:00
Use new enums in cast (#77946)
Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com>
This commit is contained in:
parent
eb28d7188b
commit
7ff23506fe
@ -7,7 +7,7 @@ from typing import Protocol
|
|||||||
from pychromecast import Chromecast
|
from pychromecast import Chromecast
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.components.media_player import BrowseMedia
|
from homeassistant.components.media_player import BrowseMedia, MediaType
|
||||||
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
|
from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry
|
||||||
from homeassistant.const import Platform
|
from homeassistant.const import Platform
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
@ -74,7 +74,7 @@ class CastProtocol(Protocol):
|
|||||||
async def async_browse_media(
|
async def async_browse_media(
|
||||||
self,
|
self,
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
media_content_type: str,
|
media_content_type: MediaType | str,
|
||||||
media_content_id: str,
|
media_content_id: str,
|
||||||
cast_type: str,
|
cast_type: str,
|
||||||
) -> BrowseMedia | None:
|
) -> BrowseMedia | None:
|
||||||
@ -88,7 +88,7 @@ class CastProtocol(Protocol):
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
cast_entity_id: str,
|
cast_entity_id: str,
|
||||||
chromecast: Chromecast,
|
chromecast: Chromecast,
|
||||||
media_type: str,
|
media_type: MediaType | str,
|
||||||
media_id: str,
|
media_id: str,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""Play media.
|
"""Play media.
|
||||||
|
@ -7,7 +7,7 @@ from contextlib import suppress
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
from typing import Any
|
from typing import TYPE_CHECKING, Any
|
||||||
|
|
||||||
import pychromecast
|
import pychromecast
|
||||||
from pychromecast.controllers.homeassistant import HomeAssistantController
|
from pychromecast.controllers.homeassistant import HomeAssistantController
|
||||||
@ -29,29 +29,21 @@ import yarl
|
|||||||
|
|
||||||
from homeassistant.components import media_source, zeroconf
|
from homeassistant.components import media_source, zeroconf
|
||||||
from homeassistant.components.media_player import (
|
from homeassistant.components.media_player import (
|
||||||
|
ATTR_MEDIA_EXTRA,
|
||||||
BrowseError,
|
BrowseError,
|
||||||
BrowseMedia,
|
BrowseMedia,
|
||||||
|
MediaClass,
|
||||||
MediaPlayerDeviceClass,
|
MediaPlayerDeviceClass,
|
||||||
MediaPlayerEntity,
|
MediaPlayerEntity,
|
||||||
MediaPlayerEntityFeature,
|
MediaPlayerEntityFeature,
|
||||||
|
MediaPlayerState,
|
||||||
|
MediaType,
|
||||||
async_process_play_media_url,
|
async_process_play_media_url,
|
||||||
)
|
)
|
||||||
from homeassistant.components.media_player.const import (
|
|
||||||
ATTR_MEDIA_EXTRA,
|
|
||||||
MEDIA_CLASS_DIRECTORY,
|
|
||||||
MEDIA_TYPE_MOVIE,
|
|
||||||
MEDIA_TYPE_MUSIC,
|
|
||||||
MEDIA_TYPE_TVSHOW,
|
|
||||||
)
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
CAST_APP_ID_HOMEASSISTANT_LOVELACE,
|
CAST_APP_ID_HOMEASSISTANT_LOVELACE,
|
||||||
EVENT_HOMEASSISTANT_STOP,
|
EVENT_HOMEASSISTANT_STOP,
|
||||||
STATE_BUFFERING,
|
|
||||||
STATE_IDLE,
|
|
||||||
STATE_OFF,
|
|
||||||
STATE_PAUSED,
|
|
||||||
STATE_PLAYING,
|
|
||||||
)
|
)
|
||||||
from homeassistant.core import CALLBACK_TYPE, Event, HomeAssistant, callback
|
from homeassistant.core import CALLBACK_TYPE, Event, HomeAssistant, callback
|
||||||
from homeassistant.exceptions import HomeAssistantError
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
@ -83,6 +75,9 @@ from .helpers import (
|
|||||||
parse_playlist,
|
parse_playlist,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from . import CastProtocol
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
APP_IDS_UNRELIABLE_MEDIA_INFO = ("Netflix",)
|
APP_IDS_UNRELIABLE_MEDIA_INFO = ("Netflix",)
|
||||||
@ -590,7 +585,7 @@ class CastMediaPlayerEntity(CastDevice, MediaPlayerEntity):
|
|||||||
|
|
||||||
return BrowseMedia(
|
return BrowseMedia(
|
||||||
title="Cast",
|
title="Cast",
|
||||||
media_class=MEDIA_CLASS_DIRECTORY,
|
media_class=MediaClass.DIRECTORY,
|
||||||
media_content_id="",
|
media_content_id="",
|
||||||
media_content_type="",
|
media_content_type="",
|
||||||
can_play=False,
|
can_play=False,
|
||||||
@ -599,7 +594,9 @@ class CastMediaPlayerEntity(CastDevice, MediaPlayerEntity):
|
|||||||
)
|
)
|
||||||
|
|
||||||
async def async_browse_media(
|
async def async_browse_media(
|
||||||
self, media_content_type: str | None = None, media_content_id: str | None = None
|
self,
|
||||||
|
media_content_type: MediaType | str | None = None,
|
||||||
|
media_content_id: str | None = None,
|
||||||
) -> BrowseMedia:
|
) -> BrowseMedia:
|
||||||
"""Implement the websocket media browsing helper."""
|
"""Implement the websocket media browsing helper."""
|
||||||
content_filter = None
|
content_filter = None
|
||||||
@ -619,6 +616,8 @@ class CastMediaPlayerEntity(CastDevice, MediaPlayerEntity):
|
|||||||
if media_content_id is None:
|
if media_content_id is None:
|
||||||
return await self._async_root_payload(content_filter)
|
return await self._async_root_payload(content_filter)
|
||||||
|
|
||||||
|
platform: CastProtocol
|
||||||
|
assert media_content_type is not None
|
||||||
for platform in self.hass.data[CAST_DOMAIN]["cast_platform"].values():
|
for platform in self.hass.data[CAST_DOMAIN]["cast_platform"].values():
|
||||||
browse_media = await platform.async_browse_media(
|
browse_media = await platform.async_browse_media(
|
||||||
self.hass,
|
self.hass,
|
||||||
@ -634,7 +633,7 @@ class CastMediaPlayerEntity(CastDevice, MediaPlayerEntity):
|
|||||||
)
|
)
|
||||||
|
|
||||||
async def async_play_media(
|
async def async_play_media(
|
||||||
self, media_type: str, media_id: str, **kwargs: Any
|
self, media_type: MediaType | str, media_id: str, **kwargs: Any
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Play a piece of media."""
|
"""Play a piece of media."""
|
||||||
chromecast = self._get_chromecast()
|
chromecast = self._get_chromecast()
|
||||||
@ -774,27 +773,27 @@ class CastMediaPlayerEntity(CastDevice, MediaPlayerEntity):
|
|||||||
return (media_status, media_status_received)
|
return (media_status, media_status_received)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def state(self) -> str | None:
|
def state(self) -> MediaPlayerState | None:
|
||||||
"""Return the state of the player."""
|
"""Return the state of the player."""
|
||||||
# The lovelace app loops media to prevent timing out, don't show that
|
# The lovelace app loops media to prevent timing out, don't show that
|
||||||
if self.app_id == CAST_APP_ID_HOMEASSISTANT_LOVELACE:
|
if self.app_id == CAST_APP_ID_HOMEASSISTANT_LOVELACE:
|
||||||
return STATE_PLAYING
|
return MediaPlayerState.PLAYING
|
||||||
if (media_status := self._media_status()[0]) is not None:
|
if (media_status := self._media_status()[0]) is not None:
|
||||||
if media_status.player_state == MEDIA_PLAYER_STATE_PLAYING:
|
if media_status.player_state == MEDIA_PLAYER_STATE_PLAYING:
|
||||||
return STATE_PLAYING
|
return MediaPlayerState.PLAYING
|
||||||
if media_status.player_state == MEDIA_PLAYER_STATE_BUFFERING:
|
if media_status.player_state == MEDIA_PLAYER_STATE_BUFFERING:
|
||||||
return STATE_BUFFERING
|
return MediaPlayerState.BUFFERING
|
||||||
if media_status.player_is_paused:
|
if media_status.player_is_paused:
|
||||||
return STATE_PAUSED
|
return MediaPlayerState.PAUSED
|
||||||
if media_status.player_is_idle:
|
if media_status.player_is_idle:
|
||||||
return STATE_IDLE
|
return MediaPlayerState.IDLE
|
||||||
if self.app_id is not None and self.app_id != pychromecast.IDLE_APP_ID:
|
if self.app_id is not None and self.app_id != pychromecast.IDLE_APP_ID:
|
||||||
if self.app_id in APP_IDS_UNRELIABLE_MEDIA_INFO:
|
if self.app_id in APP_IDS_UNRELIABLE_MEDIA_INFO:
|
||||||
# Some apps don't report media status, show the player as playing
|
# Some apps don't report media status, show the player as playing
|
||||||
return STATE_PLAYING
|
return MediaPlayerState.PLAYING
|
||||||
return STATE_IDLE
|
return MediaPlayerState.IDLE
|
||||||
if self._chromecast is not None and self._chromecast.is_idle:
|
if self._chromecast is not None and self._chromecast.is_idle:
|
||||||
return STATE_OFF
|
return MediaPlayerState.OFF
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -807,7 +806,7 @@ class CastMediaPlayerEntity(CastDevice, MediaPlayerEntity):
|
|||||||
return media_status.content_id if media_status else None
|
return media_status.content_id if media_status else None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def media_content_type(self) -> str | None:
|
def media_content_type(self) -> MediaType | None:
|
||||||
"""Content type of current playing media."""
|
"""Content type of current playing media."""
|
||||||
# The lovelace app loops media to prevent timing out, don't show that
|
# The lovelace app loops media to prevent timing out, don't show that
|
||||||
if self.app_id == CAST_APP_ID_HOMEASSISTANT_LOVELACE:
|
if self.app_id == CAST_APP_ID_HOMEASSISTANT_LOVELACE:
|
||||||
@ -815,11 +814,11 @@ class CastMediaPlayerEntity(CastDevice, MediaPlayerEntity):
|
|||||||
if (media_status := self._media_status()[0]) is None:
|
if (media_status := self._media_status()[0]) is None:
|
||||||
return None
|
return None
|
||||||
if media_status.media_is_tvshow:
|
if media_status.media_is_tvshow:
|
||||||
return MEDIA_TYPE_TVSHOW
|
return MediaType.TVSHOW
|
||||||
if media_status.media_is_movie:
|
if media_status.media_is_movie:
|
||||||
return MEDIA_TYPE_MOVIE
|
return MediaType.MOVIE
|
||||||
if media_status.media_is_musictrack:
|
if media_status.media_is_musictrack:
|
||||||
return MEDIA_TYPE_MUSIC
|
return MediaType.MUSIC
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -12,8 +12,12 @@ from homeassistant.components.cast.home_assistant_cast import (
|
|||||||
NO_URL_AVAILABLE_ERROR,
|
NO_URL_AVAILABLE_ERROR,
|
||||||
SERVICE_SHOW_VIEW,
|
SERVICE_SHOW_VIEW,
|
||||||
)
|
)
|
||||||
from homeassistant.components.media_player import BrowseError, BrowseMedia
|
from homeassistant.components.media_player import (
|
||||||
from homeassistant.components.media_player.const import MEDIA_CLASS_APP
|
BrowseError,
|
||||||
|
BrowseMedia,
|
||||||
|
MediaClass,
|
||||||
|
MediaType,
|
||||||
|
)
|
||||||
from homeassistant.const import ATTR_ENTITY_ID
|
from homeassistant.const import ATTR_ENTITY_ID
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.exceptions import HomeAssistantError
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
@ -34,7 +38,7 @@ async def async_get_media_browser_root_object(
|
|||||||
return [
|
return [
|
||||||
BrowseMedia(
|
BrowseMedia(
|
||||||
title="Dashboards",
|
title="Dashboards",
|
||||||
media_class=MEDIA_CLASS_APP,
|
media_class=MediaClass.APP,
|
||||||
media_content_id="",
|
media_content_id="",
|
||||||
media_content_type=DOMAIN,
|
media_content_type=DOMAIN,
|
||||||
thumbnail="https://brands.home-assistant.io/_/lovelace/logo.png",
|
thumbnail="https://brands.home-assistant.io/_/lovelace/logo.png",
|
||||||
@ -46,7 +50,7 @@ async def async_get_media_browser_root_object(
|
|||||||
|
|
||||||
async def async_browse_media(
|
async def async_browse_media(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
media_content_type: str,
|
media_content_type: MediaType | str,
|
||||||
media_content_id: str,
|
media_content_id: str,
|
||||||
cast_type: str,
|
cast_type: str,
|
||||||
) -> BrowseMedia | None:
|
) -> BrowseMedia | None:
|
||||||
@ -64,7 +68,7 @@ async def async_browse_media(
|
|||||||
children = [
|
children = [
|
||||||
BrowseMedia(
|
BrowseMedia(
|
||||||
title="Default",
|
title="Default",
|
||||||
media_class=MEDIA_CLASS_APP,
|
media_class=MediaClass.APP,
|
||||||
media_content_id=DEFAULT_DASHBOARD,
|
media_content_id=DEFAULT_DASHBOARD,
|
||||||
media_content_type=DOMAIN,
|
media_content_type=DOMAIN,
|
||||||
thumbnail="https://brands.home-assistant.io/_/lovelace/logo.png",
|
thumbnail="https://brands.home-assistant.io/_/lovelace/logo.png",
|
||||||
@ -96,7 +100,7 @@ async def async_browse_media(
|
|||||||
children.append(
|
children.append(
|
||||||
BrowseMedia(
|
BrowseMedia(
|
||||||
title=view["title"],
|
title=view["title"],
|
||||||
media_class=MEDIA_CLASS_APP,
|
media_class=MediaClass.APP,
|
||||||
media_content_id=f'{info["url_path"]}/{view["path"]}',
|
media_content_id=f'{info["url_path"]}/{view["path"]}',
|
||||||
media_content_type=DOMAIN,
|
media_content_type=DOMAIN,
|
||||||
thumbnail="https://brands.home-assistant.io/_/lovelace/logo.png",
|
thumbnail="https://brands.home-assistant.io/_/lovelace/logo.png",
|
||||||
@ -114,7 +118,7 @@ async def async_play_media(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
cast_entity_id: str,
|
cast_entity_id: str,
|
||||||
chromecast: Chromecast,
|
chromecast: Chromecast,
|
||||||
media_type: str,
|
media_type: MediaType | str,
|
||||||
media_id: str,
|
media_id: str,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""Play media."""
|
"""Play media."""
|
||||||
@ -195,7 +199,7 @@ def _item_from_info(info: dict) -> BrowseMedia:
|
|||||||
"""Convert dashboard info to browse item."""
|
"""Convert dashboard info to browse item."""
|
||||||
return BrowseMedia(
|
return BrowseMedia(
|
||||||
title=info["title"],
|
title=info["title"],
|
||||||
media_class=MEDIA_CLASS_APP,
|
media_class=MediaClass.APP,
|
||||||
media_content_id=info["url_path"],
|
media_content_id=info["url_path"],
|
||||||
media_content_type=DOMAIN,
|
media_content_type=DOMAIN,
|
||||||
thumbnail="https://brands.home-assistant.io/_/lovelace/logo.png",
|
thumbnail="https://brands.home-assistant.io/_/lovelace/logo.png",
|
||||||
|
@ -5,8 +5,7 @@ from pychromecast import Chromecast
|
|||||||
from pychromecast.controllers.plex import PlexController
|
from pychromecast.controllers.plex import PlexController
|
||||||
|
|
||||||
from homeassistant.components.cast.const import DOMAIN as CAST_DOMAIN
|
from homeassistant.components.cast.const import DOMAIN as CAST_DOMAIN
|
||||||
from homeassistant.components.media_player import BrowseMedia
|
from homeassistant.components.media_player import BrowseMedia, MediaClass, MediaType
|
||||||
from homeassistant.components.media_player.const import MEDIA_CLASS_APP
|
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
|
||||||
from . import async_browse_media as async_browse_plex_media, is_plex_media_id
|
from . import async_browse_media as async_browse_plex_media, is_plex_media_id
|
||||||
@ -20,7 +19,7 @@ async def async_get_media_browser_root_object(
|
|||||||
return [
|
return [
|
||||||
BrowseMedia(
|
BrowseMedia(
|
||||||
title="Plex",
|
title="Plex",
|
||||||
media_class=MEDIA_CLASS_APP,
|
media_class=MediaClass.APP,
|
||||||
media_content_id="",
|
media_content_id="",
|
||||||
media_content_type="plex",
|
media_content_type="plex",
|
||||||
thumbnail="https://brands.home-assistant.io/_/plex/logo.png",
|
thumbnail="https://brands.home-assistant.io/_/plex/logo.png",
|
||||||
@ -32,7 +31,7 @@ async def async_get_media_browser_root_object(
|
|||||||
|
|
||||||
async def async_browse_media(
|
async def async_browse_media(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
media_content_type: str,
|
media_content_type: MediaType | str,
|
||||||
media_content_id: str,
|
media_content_id: str,
|
||||||
cast_type: str,
|
cast_type: str,
|
||||||
) -> BrowseMedia | None:
|
) -> BrowseMedia | None:
|
||||||
@ -61,7 +60,7 @@ async def async_play_media(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
cast_entity_id: str,
|
cast_entity_id: str,
|
||||||
chromecast: Chromecast,
|
chromecast: Chromecast,
|
||||||
media_type: str,
|
media_type: MediaType | str,
|
||||||
media_id: str,
|
media_id: str,
|
||||||
) -> bool:
|
) -> bool:
|
||||||
"""Play media."""
|
"""Play media."""
|
||||||
|
@ -203,7 +203,7 @@ _FUNCTION_MATCH: dict[str, list[TypeHintMatch]] = {
|
|||||||
function_name="async_browse_media",
|
function_name="async_browse_media",
|
||||||
arg_types={
|
arg_types={
|
||||||
0: "HomeAssistant",
|
0: "HomeAssistant",
|
||||||
1: "str",
|
1: "MediaType | str",
|
||||||
2: "str",
|
2: "str",
|
||||||
3: "str",
|
3: "str",
|
||||||
},
|
},
|
||||||
@ -215,7 +215,7 @@ _FUNCTION_MATCH: dict[str, list[TypeHintMatch]] = {
|
|||||||
0: "HomeAssistant",
|
0: "HomeAssistant",
|
||||||
1: "str",
|
1: "str",
|
||||||
2: "Chromecast",
|
2: "Chromecast",
|
||||||
3: "str",
|
3: "MediaType | str",
|
||||||
4: "str",
|
4: "str",
|
||||||
},
|
},
|
||||||
return_type="bool",
|
return_type="bool",
|
||||||
|
@ -5,6 +5,7 @@ from unittest.mock import patch
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from homeassistant.components.lovelace import cast as lovelace_cast
|
from homeassistant.components.lovelace import cast as lovelace_cast
|
||||||
|
from homeassistant.components.media_player import MediaClass
|
||||||
from homeassistant.config import async_process_ha_core_config
|
from homeassistant.config import async_process_ha_core_config
|
||||||
from homeassistant.exceptions import HomeAssistantError
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
@ -71,7 +72,7 @@ async def test_root_object(hass):
|
|||||||
assert len(root) == 1
|
assert len(root) == 1
|
||||||
item = root[0]
|
item = root[0]
|
||||||
assert item.title == "Dashboards"
|
assert item.title == "Dashboards"
|
||||||
assert item.media_class == lovelace_cast.MEDIA_CLASS_APP
|
assert item.media_class == MediaClass.APP
|
||||||
assert item.media_content_id == ""
|
assert item.media_content_id == ""
|
||||||
assert item.media_content_type == lovelace_cast.DOMAIN
|
assert item.media_content_type == lovelace_cast.DOMAIN
|
||||||
assert item.thumbnail == "https://brands.home-assistant.io/_/lovelace/logo.png"
|
assert item.thumbnail == "https://brands.home-assistant.io/_/lovelace/logo.png"
|
||||||
@ -106,7 +107,7 @@ async def test_browse_media(hass, mock_yaml_dashboard, mock_https_url):
|
|||||||
|
|
||||||
child_1 = top_level_items.children[0]
|
child_1 = top_level_items.children[0]
|
||||||
assert child_1.title == "Default"
|
assert child_1.title == "Default"
|
||||||
assert child_1.media_class == lovelace_cast.MEDIA_CLASS_APP
|
assert child_1.media_class == MediaClass.APP
|
||||||
assert child_1.media_content_id == lovelace_cast.DEFAULT_DASHBOARD
|
assert child_1.media_content_id == lovelace_cast.DEFAULT_DASHBOARD
|
||||||
assert child_1.media_content_type == lovelace_cast.DOMAIN
|
assert child_1.media_content_type == lovelace_cast.DOMAIN
|
||||||
assert child_1.thumbnail == "https://brands.home-assistant.io/_/lovelace/logo.png"
|
assert child_1.thumbnail == "https://brands.home-assistant.io/_/lovelace/logo.png"
|
||||||
@ -115,7 +116,7 @@ async def test_browse_media(hass, mock_yaml_dashboard, mock_https_url):
|
|||||||
|
|
||||||
child_2 = top_level_items.children[1]
|
child_2 = top_level_items.children[1]
|
||||||
assert child_2.title == "YAML Title"
|
assert child_2.title == "YAML Title"
|
||||||
assert child_2.media_class == lovelace_cast.MEDIA_CLASS_APP
|
assert child_2.media_class == MediaClass.APP
|
||||||
assert child_2.media_content_id == "yaml-with-views"
|
assert child_2.media_content_id == "yaml-with-views"
|
||||||
assert child_2.media_content_type == lovelace_cast.DOMAIN
|
assert child_2.media_content_type == lovelace_cast.DOMAIN
|
||||||
assert child_2.thumbnail == "https://brands.home-assistant.io/_/lovelace/logo.png"
|
assert child_2.thumbnail == "https://brands.home-assistant.io/_/lovelace/logo.png"
|
||||||
@ -130,7 +131,7 @@ async def test_browse_media(hass, mock_yaml_dashboard, mock_https_url):
|
|||||||
|
|
||||||
grandchild_1 = child_2.children[0]
|
grandchild_1 = child_2.children[0]
|
||||||
assert grandchild_1.title == "Hello"
|
assert grandchild_1.title == "Hello"
|
||||||
assert grandchild_1.media_class == lovelace_cast.MEDIA_CLASS_APP
|
assert grandchild_1.media_class == MediaClass.APP
|
||||||
assert grandchild_1.media_content_id == "yaml-with-views/0"
|
assert grandchild_1.media_content_id == "yaml-with-views/0"
|
||||||
assert grandchild_1.media_content_type == lovelace_cast.DOMAIN
|
assert grandchild_1.media_content_type == lovelace_cast.DOMAIN
|
||||||
assert (
|
assert (
|
||||||
@ -141,7 +142,7 @@ async def test_browse_media(hass, mock_yaml_dashboard, mock_https_url):
|
|||||||
|
|
||||||
grandchild_2 = child_2.children[1]
|
grandchild_2 = child_2.children[1]
|
||||||
assert grandchild_2.title == "second-view"
|
assert grandchild_2.title == "second-view"
|
||||||
assert grandchild_2.media_class == lovelace_cast.MEDIA_CLASS_APP
|
assert grandchild_2.media_class == MediaClass.APP
|
||||||
assert grandchild_2.media_content_id == "yaml-with-views/second-view"
|
assert grandchild_2.media_content_id == "yaml-with-views/second-view"
|
||||||
assert grandchild_2.media_content_type == lovelace_cast.DOMAIN
|
assert grandchild_2.media_content_type == lovelace_cast.DOMAIN
|
||||||
assert (
|
assert (
|
||||||
|
Loading…
x
Reference in New Issue
Block a user