core/tests/components/emulated_roku/test_init.py

92 lines
3.5 KiB
Python

"""Test emulated_roku component setup process."""
from unittest.mock import Mock, patch
from homeassistant.setup import async_setup_component
from homeassistant.components import emulated_roku
from tests.common import mock_coro_func
async def test_config_required_fields(hass):
"""Test that configuration is successful with required fields."""
with patch.object(emulated_roku, 'configured_servers', return_value=[]), \
patch('emulated_roku.EmulatedRokuServer',
return_value=Mock(start=mock_coro_func(),
close=mock_coro_func())):
assert await async_setup_component(hass, emulated_roku.DOMAIN, {
emulated_roku.DOMAIN: {
emulated_roku.CONF_SERVERS: [{
emulated_roku.CONF_NAME: 'Emulated Roku Test',
emulated_roku.CONF_LISTEN_PORT: 8060
}]
}
}) is True
async def test_config_already_registered_not_configured(hass):
"""Test that an already registered name causes the entry to be ignored."""
with patch('emulated_roku.EmulatedRokuServer',
return_value=Mock(start=mock_coro_func(),
close=mock_coro_func())) as instantiate, \
patch.object(emulated_roku, 'configured_servers',
return_value=['Emulated Roku Test']):
assert await async_setup_component(hass, emulated_roku.DOMAIN, {
emulated_roku.DOMAIN: {
emulated_roku.CONF_SERVERS: [{
emulated_roku.CONF_NAME: 'Emulated Roku Test',
emulated_roku.CONF_LISTEN_PORT: 8060
}]
}
}) is True
assert len(instantiate.mock_calls) == 0
async def test_setup_entry_successful(hass):
"""Test setup entry is successful."""
entry = Mock()
entry.data = {
emulated_roku.CONF_NAME: 'Emulated Roku Test',
emulated_roku.CONF_LISTEN_PORT: 8060,
emulated_roku.CONF_HOST_IP: '1.2.3.5',
emulated_roku.CONF_ADVERTISE_IP: '1.2.3.4',
emulated_roku.CONF_ADVERTISE_PORT: 8071,
emulated_roku.CONF_UPNP_BIND_MULTICAST: False
}
with patch('emulated_roku.EmulatedRokuServer',
return_value=Mock(start=mock_coro_func(),
close=mock_coro_func())) as instantiate:
assert await emulated_roku.async_setup_entry(hass, entry) is True
assert len(instantiate.mock_calls) == 1
assert hass.data[emulated_roku.DOMAIN]
roku_instance = hass.data[emulated_roku.DOMAIN]['Emulated Roku Test']
assert roku_instance.roku_usn == 'Emulated Roku Test'
assert roku_instance.host_ip == '1.2.3.5'
assert roku_instance.listen_port == 8060
assert roku_instance.advertise_ip == '1.2.3.4'
assert roku_instance.advertise_port == 8071
assert roku_instance.bind_multicast is False
async def test_unload_entry(hass):
"""Test being able to unload an entry."""
entry = Mock()
entry.data = {'name': 'Emulated Roku Test', 'listen_port': 8060}
with patch('emulated_roku.EmulatedRokuServer',
return_value=Mock(start=mock_coro_func(),
close=mock_coro_func())):
assert await emulated_roku.async_setup_entry(hass, entry) is True
assert emulated_roku.DOMAIN in hass.data
await hass.async_block_till_done()
assert await emulated_roku.async_unload_entry(hass, entry)
assert len(hass.data[emulated_roku.DOMAIN]) == 0