87 lines
2.7 KiB
Python
87 lines
2.7 KiB
Python
"""Tests for emulated_roku library bindings."""
|
|
|
|
from unittest.mock import AsyncMock, Mock, patch
|
|
from uuid import uuid4
|
|
|
|
from homeassistant.components.emulated_roku.binding import (
|
|
ATTR_APP_ID,
|
|
ATTR_COMMAND_TYPE,
|
|
ATTR_KEY,
|
|
ATTR_SOURCE_NAME,
|
|
EVENT_ROKU_COMMAND,
|
|
ROKU_COMMAND_KEYDOWN,
|
|
ROKU_COMMAND_KEYPRESS,
|
|
ROKU_COMMAND_KEYUP,
|
|
ROKU_COMMAND_LAUNCH,
|
|
EmulatedRoku,
|
|
)
|
|
from homeassistant.core import Event, HomeAssistant
|
|
|
|
|
|
async def test_events_fired_properly(hass: HomeAssistant) -> None:
|
|
"""Test that events are fired correctly."""
|
|
random_name = uuid4().hex
|
|
# Note that this test is accessing the internal EmulatedRoku class
|
|
# and should be refactored in the future not to do so.
|
|
binding = EmulatedRoku(hass, "x", random_name, "1.2.3.4", 8060, None, None, None)
|
|
|
|
events = []
|
|
roku_event_handler = None
|
|
|
|
def instantiate(
|
|
event_loop,
|
|
handler,
|
|
roku_usn,
|
|
host_ip,
|
|
listen_port,
|
|
advertise_ip=None,
|
|
advertise_port=None,
|
|
bind_multicast=None,
|
|
):
|
|
nonlocal roku_event_handler
|
|
roku_event_handler = handler
|
|
|
|
return Mock(start=AsyncMock(), close=AsyncMock())
|
|
|
|
def listener(event: Event) -> None:
|
|
if event.data[ATTR_SOURCE_NAME] == random_name:
|
|
events.append(event)
|
|
|
|
with patch(
|
|
"homeassistant.components.emulated_roku.binding.EmulatedRokuServer", instantiate
|
|
):
|
|
hass.bus.async_listen(EVENT_ROKU_COMMAND, listener)
|
|
|
|
assert await binding.setup() is True
|
|
|
|
assert roku_event_handler is not None
|
|
|
|
roku_event_handler.on_keydown(random_name, "A")
|
|
roku_event_handler.on_keyup(random_name, "A")
|
|
roku_event_handler.on_keypress(random_name, "C")
|
|
roku_event_handler.launch(random_name, "1")
|
|
|
|
await hass.async_block_till_done()
|
|
|
|
assert len(events) == 4
|
|
|
|
assert events[0].event_type == EVENT_ROKU_COMMAND
|
|
assert events[0].data[ATTR_COMMAND_TYPE] == ROKU_COMMAND_KEYDOWN
|
|
assert events[0].data[ATTR_SOURCE_NAME] == random_name
|
|
assert events[0].data[ATTR_KEY] == "A"
|
|
|
|
assert events[1].event_type == EVENT_ROKU_COMMAND
|
|
assert events[1].data[ATTR_COMMAND_TYPE] == ROKU_COMMAND_KEYUP
|
|
assert events[1].data[ATTR_SOURCE_NAME] == random_name
|
|
assert events[1].data[ATTR_KEY] == "A"
|
|
|
|
assert events[2].event_type == EVENT_ROKU_COMMAND
|
|
assert events[2].data[ATTR_COMMAND_TYPE] == ROKU_COMMAND_KEYPRESS
|
|
assert events[2].data[ATTR_SOURCE_NAME] == random_name
|
|
assert events[2].data[ATTR_KEY] == "C"
|
|
|
|
assert events[3].event_type == EVENT_ROKU_COMMAND
|
|
assert events[3].data[ATTR_COMMAND_TYPE] == ROKU_COMMAND_LAUNCH
|
|
assert events[3].data[ATTR_SOURCE_NAME] == random_name
|
|
assert events[3].data[ATTR_APP_ID] == "1"
|