mirror of https://github.com/home-assistant/core
93 lines
3.0 KiB
Python
93 lines
3.0 KiB
Python
"""Test the init file for the Insteon component."""
|
|
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from homeassistant.components import insteon
|
|
from homeassistant.components.insteon.const import CONF_DEV_PATH, DOMAIN
|
|
from homeassistant.const import EVENT_HOMEASSISTANT_STOP
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
from .const import MOCK_USER_INPUT_PLM
|
|
from .mock_devices import MockDevices
|
|
|
|
from tests.common import MockConfigEntry
|
|
|
|
|
|
async def mock_successful_connection(*args, **kwargs):
|
|
"""Return a successful connection."""
|
|
return True
|
|
|
|
|
|
async def mock_failed_connection(*args, **kwargs):
|
|
"""Return a failed connection."""
|
|
raise ConnectionError("Connection failed")
|
|
|
|
|
|
async def test_setup_entry(hass: HomeAssistant) -> None:
|
|
"""Test setting up the entry."""
|
|
config_entry = MockConfigEntry(domain=DOMAIN, data=MOCK_USER_INPUT_PLM)
|
|
config_entry.add_to_hass(hass)
|
|
|
|
with (
|
|
patch.object(insteon, "async_connect", new=mock_successful_connection),
|
|
patch.object(insteon, "async_close") as mock_close,
|
|
patch.object(insteon, "devices", new=MockDevices()),
|
|
):
|
|
assert await async_setup_component(
|
|
hass,
|
|
insteon.DOMAIN,
|
|
{},
|
|
)
|
|
await hass.async_block_till_done()
|
|
hass.bus.async_fire(EVENT_HOMEASSISTANT_STOP)
|
|
await hass.async_block_till_done()
|
|
assert insteon.devices.async_save.call_count == 1
|
|
assert mock_close.called
|
|
|
|
|
|
async def test_setup_entry_failed_connection(
|
|
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
|
|
) -> None:
|
|
"""Test setting up the entry with a failed connection."""
|
|
config_entry = MockConfigEntry(domain=DOMAIN, data=MOCK_USER_INPUT_PLM)
|
|
config_entry.add_to_hass(hass)
|
|
|
|
with (
|
|
patch.object(insteon, "async_connect", new=mock_failed_connection),
|
|
patch.object(insteon, "devices", new=MockDevices(connected=False)),
|
|
):
|
|
assert await async_setup_component(
|
|
hass,
|
|
insteon.DOMAIN,
|
|
{},
|
|
)
|
|
assert "Could not connect to Insteon modem" in caplog.text
|
|
|
|
|
|
async def test_import_frontend_dev_url(hass: HomeAssistant) -> None:
|
|
"""Test importing a dev_url config entry."""
|
|
config_entry = MockConfigEntry(
|
|
domain=DOMAIN, data=MOCK_USER_INPUT_PLM, options={CONF_DEV_PATH: "/some/path"}
|
|
)
|
|
config_entry.add_to_hass(hass)
|
|
|
|
with (
|
|
patch.object(insteon, "async_connect", new=mock_successful_connection),
|
|
patch.object(insteon, "async_close") as mock_close,
|
|
patch.object(insteon, "devices", new=MockDevices()),
|
|
):
|
|
assert await async_setup_component(
|
|
hass,
|
|
insteon.DOMAIN,
|
|
{},
|
|
)
|
|
await hass.async_block_till_done()
|
|
assert hass.data[DOMAIN][CONF_DEV_PATH] == "/some/path"
|
|
hass.bus.async_fire(EVENT_HOMEASSISTANT_STOP)
|
|
await hass.async_block_till_done()
|
|
assert insteon.devices.async_save.call_count == 1
|
|
assert mock_close.called
|