mirror of https://github.com/home-assistant/core
132 lines
4.0 KiB
Python
132 lines
4.0 KiB
Python
"""Tests for the DirecTV component."""
|
|
|
|
from http import HTTPStatus
|
|
|
|
from homeassistant.components import ssdp
|
|
from homeassistant.components.directv.const import CONF_RECEIVER_ID, DOMAIN
|
|
from homeassistant.const import CONF_HOST, CONTENT_TYPE_JSON
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from tests.common import MockConfigEntry, load_fixture
|
|
from tests.test_util.aiohttp import AiohttpClientMocker
|
|
|
|
HOST = "127.0.0.1"
|
|
RECEIVER_ID = "028877455858"
|
|
SSDP_LOCATION = "http://127.0.0.1/"
|
|
UPNP_SERIAL = "RID-028877455858"
|
|
|
|
MOCK_CONFIG = {DOMAIN: [{CONF_HOST: HOST}]}
|
|
MOCK_SSDP_DISCOVERY_INFO = ssdp.SsdpServiceInfo(
|
|
ssdp_usn="mock_usn",
|
|
ssdp_st="mock_st",
|
|
ssdp_location=SSDP_LOCATION,
|
|
upnp={},
|
|
)
|
|
MOCK_USER_INPUT = {CONF_HOST: HOST}
|
|
|
|
|
|
def mock_connection(aioclient_mock: AiohttpClientMocker) -> None:
|
|
"""Mock the DirecTV connection for Home Assistant."""
|
|
aioclient_mock.get(
|
|
f"http://{HOST}:8080/info/getVersion",
|
|
text=load_fixture("directv/info-get-version.json"),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}:8080/info/getLocations",
|
|
text=load_fixture("directv/info-get-locations.json"),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}:8080/info/mode",
|
|
params={"clientAddr": "B01234567890"},
|
|
text=load_fixture("directv/info-mode-standby.json"),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}:8080/info/mode",
|
|
params={"clientAddr": "9XXXXXXXXXX9"},
|
|
status=HTTPStatus.INTERNAL_SERVER_ERROR,
|
|
text=load_fixture("directv/info-mode-error.json"),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}:8080/info/mode",
|
|
text=load_fixture("directv/info-mode.json"),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}:8080/remote/processKey",
|
|
text=load_fixture("directv/remote-process-key.json"),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}:8080/tv/tune",
|
|
text=load_fixture("directv/tv-tune.json"),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}:8080/tv/getTuned",
|
|
params={"clientAddr": "2CA17D1CD30X"},
|
|
text=load_fixture("directv/tv-get-tuned.json"),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}:8080/tv/getTuned",
|
|
params={"clientAddr": "A01234567890"},
|
|
text=load_fixture("directv/tv-get-tuned-music.json"),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}:8080/tv/getTuned",
|
|
params={"clientAddr": "C01234567890"},
|
|
status=HTTPStatus.FORBIDDEN,
|
|
text=load_fixture("directv/tv-get-tuned-restricted.json"),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
aioclient_mock.get(
|
|
f"http://{HOST}:8080/tv/getTuned",
|
|
text=load_fixture("directv/tv-get-tuned-movie.json"),
|
|
headers={"Content-Type": CONTENT_TYPE_JSON},
|
|
)
|
|
|
|
|
|
async def setup_integration(
|
|
hass: HomeAssistant,
|
|
aioclient_mock: AiohttpClientMocker,
|
|
skip_entry_setup: bool = False,
|
|
setup_error: bool = False,
|
|
) -> MockConfigEntry:
|
|
"""Set up the DirecTV integration in Home Assistant."""
|
|
if setup_error:
|
|
aioclient_mock.get(
|
|
f"http://{HOST}:8080/info/getVersion",
|
|
status=HTTPStatus.INTERNAL_SERVER_ERROR,
|
|
)
|
|
else:
|
|
mock_connection(aioclient_mock)
|
|
|
|
entry = MockConfigEntry(
|
|
domain=DOMAIN,
|
|
unique_id=RECEIVER_ID,
|
|
data={CONF_HOST: HOST, CONF_RECEIVER_ID: RECEIVER_ID},
|
|
)
|
|
|
|
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
|