Review AndroidTV tests (#69048)

pull/70616/head
ollo69 2022-04-27 08:26:22 +02:00 committed by GitHub
parent 25779a49a4
commit 21f9b19fad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 43 deletions

View File

@ -73,7 +73,8 @@ SERVICE_DOWNLOAD = "download"
SERVICE_LEARN_SENDEVENT = "learn_sendevent"
SERVICE_UPLOAD = "upload"
DEFAULT_NAME = "Android TV"
PREFIX_ANDROIDTV = "Android TV"
PREFIX_FIRETV = "Fire TV"
# Translate from `AndroidTV` / `FireTV` reported state to HA state.
ANDROIDTV_STATES = {
@ -93,7 +94,9 @@ async def async_setup_entry(
"""Set up the Android TV entity."""
aftv = hass.data[DOMAIN][entry.entry_id][ANDROID_DEV]
device_class = aftv.DEVICE_CLASS
device_type = "Android TV" if device_class == DEVICE_ANDROIDTV else "Fire TV"
device_type = (
PREFIX_ANDROIDTV if device_class == DEVICE_ANDROIDTV else PREFIX_FIRETV
)
# CONF_NAME may be present in entry.data for configuration imported from YAML
device_name = entry.data.get(CONF_NAME) or f"{device_type} {entry.data[CONF_HOST]}"

View File

@ -28,6 +28,7 @@ from homeassistant.components.androidtv.const import (
CONF_TURN_ON_COMMAND,
DEFAULT_ADB_SERVER_PORT,
DEFAULT_PORT,
DEVICE_ANDROIDTV,
DOMAIN,
PROP_ETHMAC,
PROP_WIFIMAC,
@ -35,8 +36,9 @@ from homeassistant.components.androidtv.const import (
from homeassistant.config_entries import SOURCE_USER
from homeassistant.const import CONF_DEVICE_CLASS, CONF_HOST, CONF_PORT
from .patchers import isfile
from tests.common import MockConfigEntry
from tests.components.androidtv.patchers import isfile
ADBKEY = "adbkey"
ETH_MAC = "a1:b1:c1:d1:e1:f1"
@ -49,14 +51,14 @@ VALID_DETECT_RULE = [{"paused": {"media_session_state": 3}}]
CONFIG_PYTHON_ADB = {
CONF_HOST: HOST,
CONF_PORT: DEFAULT_PORT,
CONF_DEVICE_CLASS: "androidtv",
CONF_DEVICE_CLASS: DEVICE_ANDROIDTV,
}
# Android TV device with ADB server
CONFIG_ADB_SERVER = {
CONF_HOST: HOST,
CONF_PORT: DEFAULT_PORT,
CONF_DEVICE_CLASS: "androidtv",
CONF_DEVICE_CLASS: DEVICE_ANDROIDTV,
CONF_ADB_SERVER_IP: "127.0.0.1",
CONF_ADB_SERVER_PORT: DEFAULT_ADB_SERVER_PORT,
}
@ -133,7 +135,7 @@ async def test_user_adbkey(hass):
with patch(
CONNECT_METHOD,
return_value=(MockConfigDevice(), None),
), PATCH_SETUP_ENTRY as mock_setup_entry, PATCH_ISFILE, PATCH_ACCESS:
), PATCH_ISFILE, PATCH_ACCESS, PATCH_SETUP_ENTRY as mock_setup_entry:
result = await hass.config_entries.flow.async_init(
DOMAIN,

View File

@ -18,11 +18,15 @@ from homeassistant.components.androidtv.const import (
CONF_TURN_ON_COMMAND,
DEFAULT_ADB_SERVER_PORT,
DEFAULT_PORT,
DEVICE_ANDROIDTV,
DEVICE_FIRETV,
DOMAIN,
)
from homeassistant.components.androidtv.media_player import (
ATTR_DEVICE_PATH,
ATTR_LOCAL_PATH,
PREFIX_ANDROIDTV,
PREFIX_FIRETV,
SERVICE_ADB_COMMAND,
SERVICE_DOWNLOAD,
SERVICE_LEARN_SENDEVENT,
@ -64,10 +68,13 @@ from homeassistant.const import (
from homeassistant.helpers.entity_component import async_update_entity
from homeassistant.util import slugify
from . import patchers
from tests.common import MockConfigEntry
from tests.components.androidtv import patchers
CONF_OPTIONS = "options"
HOST = "127.0.0.1"
TEST_ENTITY_NAME = "entity_name"
PATCH_ACCESS = patch("homeassistant.components.androidtv.os.access", return_value=True)
PATCH_ISFILE = patch(
@ -79,72 +86,62 @@ SHELL_RESPONSE_STANDBY = "1"
# Android TV device with Python ADB implementation
CONFIG_ANDROIDTV_PYTHON_ADB = {
TEST_ENTITY_NAME: f"{PREFIX_ANDROIDTV} {HOST}",
DOMAIN: {
CONF_HOST: "127.0.0.1",
CONF_HOST: HOST,
CONF_PORT: DEFAULT_PORT,
CONF_DEVICE_CLASS: "androidtv",
CONF_ADB_SERVER_PORT: DEFAULT_ADB_SERVER_PORT,
}
CONF_DEVICE_CLASS: DEVICE_ANDROIDTV,
},
}
# Android TV device with Python ADB implementation imported from YAML
CONFIG_ANDROIDTV_PYTHON_ADB_YAML = {
TEST_ENTITY_NAME: "ADB yaml import",
DOMAIN: {
CONF_NAME: "ADB yaml import",
**CONFIG_ANDROIDTV_PYTHON_ADB[DOMAIN],
}
},
}
# Android TV device with ADB server
CONFIG_ANDROIDTV_ADB_SERVER = {
TEST_ENTITY_NAME: f"{PREFIX_ANDROIDTV} {HOST}",
DOMAIN: {
CONF_HOST: "127.0.0.1",
CONF_HOST: HOST,
CONF_PORT: DEFAULT_PORT,
CONF_DEVICE_CLASS: "androidtv",
CONF_ADB_SERVER_IP: "127.0.0.1",
CONF_DEVICE_CLASS: DEVICE_ANDROIDTV,
CONF_ADB_SERVER_IP: HOST,
CONF_ADB_SERVER_PORT: DEFAULT_ADB_SERVER_PORT,
}
},
}
# Fire TV device with Python ADB implementation
CONFIG_FIRETV_PYTHON_ADB = {
TEST_ENTITY_NAME: f"{PREFIX_FIRETV} {HOST}",
DOMAIN: {
CONF_HOST: "127.0.0.1",
CONF_HOST: HOST,
CONF_PORT: DEFAULT_PORT,
CONF_DEVICE_CLASS: "firetv",
CONF_ADB_SERVER_PORT: DEFAULT_ADB_SERVER_PORT,
}
CONF_DEVICE_CLASS: DEVICE_FIRETV,
},
}
# Fire TV device with ADB server
CONFIG_FIRETV_ADB_SERVER = {
TEST_ENTITY_NAME: f"{PREFIX_FIRETV} {HOST}",
DOMAIN: {
CONF_HOST: "127.0.0.1",
CONF_HOST: HOST,
CONF_PORT: DEFAULT_PORT,
CONF_DEVICE_CLASS: "firetv",
CONF_ADB_SERVER_IP: "127.0.0.1",
CONF_DEVICE_CLASS: DEVICE_FIRETV,
CONF_ADB_SERVER_IP: HOST,
CONF_ADB_SERVER_PORT: DEFAULT_ADB_SERVER_PORT,
}
},
}
def _setup(config):
"""Perform common setup tasks for the tests."""
if CONF_ADB_SERVER_IP not in config[DOMAIN]:
patch_key = "python"
else:
patch_key = "server"
host = config[DOMAIN][CONF_HOST]
# CONF_NAME available for configuration imported from YAML
if conf_name := config[DOMAIN].get(CONF_NAME):
entity_id = slugify(conf_name)
elif config[DOMAIN].get(CONF_DEVICE_CLASS) != "firetv":
entity_id = slugify(f"Android TV {host}")
else:
entity_id = slugify(f"Fire TV {host}")
entity_id = f"{MP_DOMAIN}.{entity_id}"
patch_key = "server" if CONF_ADB_SERVER_IP in config[DOMAIN] else "python"
entity_id = f"{MP_DOMAIN}.{slugify(config[TEST_ENTITY_NAME])}"
config_entry = MockConfigEntry(
domain=DOMAIN,
data=config[DOMAIN],
@ -320,7 +317,7 @@ async def test_sources(hass, config0):
assert state is not None
assert state.state == STATE_OFF
if config[DOMAIN].get(CONF_DEVICE_CLASS) != "firetv":
if config[DOMAIN].get(CONF_DEVICE_CLASS) != DEVICE_FIRETV:
patch_update = patchers.patch_androidtv_update(
"playing",
"com.app.test1",
@ -346,7 +343,7 @@ async def test_sources(hass, config0):
assert state.attributes["source"] == "TEST 1"
assert sorted(state.attributes["source_list"]) == ["TEST 1", "com.app.test2"]
if config[DOMAIN].get(CONF_DEVICE_CLASS) != "firetv":
if config[DOMAIN].get(CONF_DEVICE_CLASS) != DEVICE_FIRETV:
patch_update = patchers.patch_androidtv_update(
"playing",
"com.app.test2",
@ -399,7 +396,7 @@ async def _test_exclude_sources(hass, config0, expected_sources):
assert state is not None
assert state.state == STATE_OFF
if config[DOMAIN].get(CONF_DEVICE_CLASS) != "firetv":
if config[DOMAIN].get(CONF_DEVICE_CLASS) != DEVICE_FIRETV:
patch_update = patchers.patch_androidtv_update(
"playing",
"com.app.test1",
@ -1189,7 +1186,7 @@ async def test_volume_mute(hass):
async def test_connection_closed_on_ha_stop(hass):
"""Test that the ADB socket connection is closed when HA stops."""
patch_key, entity_id, config_entry = _setup(CONFIG_ANDROIDTV_ADB_SERVER)
patch_key, _, config_entry = _setup(CONFIG_ANDROIDTV_ADB_SERVER)
config_entry.add_to_hass(hass)
with patchers.PATCH_ADB_DEVICE_TCP, patchers.patch_connect(True)[