mirror of https://github.com/home-assistant/core
151 lines
4.4 KiB
Python
151 lines
4.4 KiB
Python
"""Tests for the Devialet integration."""
|
|
|
|
from ipaddress import ip_address
|
|
|
|
from aiohttp import ClientError as ServerTimeoutError
|
|
from devialet.const import UrlSuffix
|
|
|
|
from homeassistant.components import zeroconf
|
|
from homeassistant.components.devialet.const import DOMAIN
|
|
from homeassistant.const import CONF_HOST, CONF_NAME, CONTENT_TYPE_JSON
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from tests.common import MockConfigEntry, load_fixture
|
|
from tests.test_util.aiohttp import AiohttpClientMocker
|
|
|
|
NAME = "Livingroom"
|
|
SERIAL = "L00P00000AB11"
|
|
HOST = "127.0.0.1"
|
|
CONF_INPUT = {CONF_HOST: HOST}
|
|
|
|
CONF_DATA = {
|
|
CONF_HOST: HOST,
|
|
CONF_NAME: NAME,
|
|
}
|
|
|
|
MOCK_CONFIG = {DOMAIN: [{CONF_HOST: HOST}]}
|
|
MOCK_USER_INPUT = {CONF_HOST: HOST}
|
|
MOCK_ZEROCONF_DATA = zeroconf.ZeroconfServiceInfo(
|
|
ip_address=ip_address(HOST),
|
|
ip_addresses=[ip_address(HOST)],
|
|
hostname="PhantomISilver-L00P00000AB11.local.",
|
|
type="_devialet-http._tcp.",
|
|
name="Livingroom",
|
|
port=80,
|
|
properties={
|
|
"_raw": {
|
|
"firmwareFamily": "DOS",
|
|
"firmwareVersion": "2.16.1.49152",
|
|
"ipControlVersion": "1",
|
|
"manufacturer": "Devialet",
|
|
"model": "Phantom I Silver",
|
|
"path": "/ipcontrol/v1",
|
|
"serialNumber": "L00P00000AB11",
|
|
},
|
|
"firmwareFamily": "DOS",
|
|
"firmwareVersion": "2.16.1.49152",
|
|
"ipControlVersion": "1",
|
|
"manufacturer": "Devialet",
|
|
"model": "Phantom I Silver",
|
|
"path": "/ipcontrol/v1",
|
|
"serialNumber": "L00P00000AB11",
|
|
},
|
|
)
|
|
|
|
|
|
def mock_unavailable(aioclient_mock: AiohttpClientMocker) -> None:
|
|
"""Mock the Devialet connection for Home Assistant."""
|
|
aioclient_mock.get(
|
|
f"http://{HOST}{UrlSuffix.GET_GENERAL_INFO}", exc=ServerTimeoutError
|
|
)
|
|
|
|
|
|
def mock_idle(aioclient_mock: AiohttpClientMocker) -> None:
|
|
"""Mock the Devialet connection for Home Assistant."""
|
|
aioclient_mock.get(
|
|
f"http://{HOST}{UrlSuffix.GET_GENERAL_INFO}",
|
|
text=load_fixture("general_info.json", DOMAIN),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}{UrlSuffix.GET_CURRENT_SOURCE}",
|
|
exc=ServerTimeoutError,
|
|
)
|
|
|
|
|
|
def mock_playing(aioclient_mock: AiohttpClientMocker) -> None:
|
|
"""Mock the Devialet connection for Home Assistant."""
|
|
aioclient_mock.get(
|
|
f"http://{HOST}{UrlSuffix.GET_GENERAL_INFO}",
|
|
text=load_fixture("general_info.json", DOMAIN),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}{UrlSuffix.GET_CURRENT_SOURCE}",
|
|
text=load_fixture("source_state.json", DOMAIN),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}{UrlSuffix.GET_SOURCES}",
|
|
text=load_fixture("sources.json", DOMAIN),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}{UrlSuffix.GET_VOLUME}",
|
|
text=load_fixture("volume.json", DOMAIN),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}{UrlSuffix.GET_NIGHT_MODE}",
|
|
text=load_fixture("night_mode.json", DOMAIN),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}{UrlSuffix.GET_EQUALIZER}",
|
|
text=load_fixture("equalizer.json", DOMAIN),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}{UrlSuffix.GET_CURRENT_POSITION}",
|
|
text=load_fixture("current_position.json", DOMAIN),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
|
|
async def setup_integration(
|
|
hass: HomeAssistant,
|
|
aioclient_mock: AiohttpClientMocker,
|
|
skip_entry_setup: bool = False,
|
|
state: str = "playing",
|
|
serial: str = SERIAL,
|
|
) -> MockConfigEntry:
|
|
"""Set up the Devialet integration in Home Assistant."""
|
|
|
|
if state == "playing":
|
|
mock_playing(aioclient_mock)
|
|
elif state == "unavailable":
|
|
mock_unavailable(aioclient_mock)
|
|
elif state == "idle":
|
|
mock_idle(aioclient_mock)
|
|
|
|
entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
unique_id=serial,
|
|
data=CONF_DATA,
|
|
)
|
|
|
|
entry.add_to_hass(hass)
|
|
|
|
if not skip_entry_setup:
|
|
await hass.config_entries.async_setup(entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
return entry
|