core/tests/components/emulated_roku/test_binding.py

69 lines
2.5 KiB
Python

"""Tests for emulated_roku library bindings."""
from unittest.mock import Mock, patch
from homeassistant.components.emulated_roku.binding import EmulatedRoku, \
EVENT_ROKU_COMMAND, \
ATTR_SOURCE_NAME, ATTR_COMMAND_TYPE, ATTR_KEY, ATTR_APP_ID, \
ROKU_COMMAND_KEYPRESS, ROKU_COMMAND_KEYDOWN, \
ROKU_COMMAND_KEYUP, ROKU_COMMAND_LAUNCH
from tests.common import mock_coro_func
async def test_events_fired_properly(hass):
"""Test that events are fired correctly."""
binding = EmulatedRoku(hass, 'Test Emulated Roku',
'1.2.3.4', 8060,
None, None, None)
events = []
roku_event_handler = None
def instantiate(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=mock_coro_func(), close=mock_coro_func())
def listener(event):
events.append(event)
with patch('emulated_roku.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('Test Emulated Roku', 'A')
roku_event_handler.on_keyup('Test Emulated Roku', 'A')
roku_event_handler.on_keypress('Test Emulated Roku', 'C')
roku_event_handler.launch('Test Emulated Roku', '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] == 'Test Emulated Roku'
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] == 'Test Emulated Roku'
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] == 'Test Emulated Roku'
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] == 'Test Emulated Roku'
assert events[3].data[ATTR_APP_ID] == '1'