core/tests/components/freebox/test_init.py

122 lines
4.1 KiB
Python

"""Tests for the Freebox init."""
from unittest.mock import ANY, Mock, patch
from pytest_unordered import unordered
from homeassistant.components.device_tracker import DOMAIN as DT_DOMAIN
from homeassistant.components.freebox.const import DOMAIN, SERVICE_REBOOT
from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import CONF_HOST, CONF_PORT, STATE_UNAVAILABLE
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
from .const import MOCK_HOST, MOCK_PORT
from tests.common import MockConfigEntry
async def test_setup(hass: HomeAssistant, router: Mock) -> None:
"""Test setup of integration."""
entry = MockConfigEntry(
domain=DOMAIN,
data={CONF_HOST: MOCK_HOST, CONF_PORT: MOCK_PORT},
unique_id=MOCK_HOST,
)
entry.add_to_hass(hass)
assert await async_setup_component(hass, DOMAIN, {})
await hass.async_block_till_done()
assert hass.config_entries.async_entries() == unordered([entry, ANY])
assert router.call_count == 1
assert router().open.call_count == 1
assert hass.services.has_service(DOMAIN, SERVICE_REBOOT)
with patch(
"homeassistant.components.freebox.router.FreeboxRouter.reboot"
) as mock_service:
await hass.services.async_call(
DOMAIN,
SERVICE_REBOOT,
blocking=True,
)
await hass.async_block_till_done()
mock_service.assert_called_once()
async def test_setup_import(hass: HomeAssistant, router: Mock) -> None:
"""Test setup of integration from import."""
entry = MockConfigEntry(
domain=DOMAIN,
data={CONF_HOST: MOCK_HOST, CONF_PORT: MOCK_PORT},
unique_id=MOCK_HOST,
)
entry.add_to_hass(hass)
assert await async_setup_component(
hass, DOMAIN, {DOMAIN: {CONF_HOST: MOCK_HOST, CONF_PORT: MOCK_PORT}}
)
await hass.async_block_till_done()
assert hass.config_entries.async_entries() == unordered([entry, ANY])
assert router.call_count == 1
assert router().open.call_count == 1
assert hass.services.has_service(DOMAIN, SERVICE_REBOOT)
async def test_unload_remove(hass: HomeAssistant, router: Mock) -> None:
"""Test unload and remove of integration."""
entity_id_dt = f"{DT_DOMAIN}.freebox_server_r2"
entity_id_sensor = f"{SENSOR_DOMAIN}.freebox_download_speed"
entity_id_switch = f"{SWITCH_DOMAIN}.freebox_wifi"
entry = MockConfigEntry(
domain=DOMAIN,
data={CONF_HOST: MOCK_HOST, CONF_PORT: MOCK_PORT},
)
entry.add_to_hass(hass)
config_entries = hass.config_entries.async_entries(DOMAIN)
assert len(config_entries) == 1
assert entry is config_entries[0]
assert await async_setup_component(hass, DOMAIN, {}) is True
await hass.async_block_till_done()
assert entry.state is ConfigEntryState.LOADED
state_dt = hass.states.get(entity_id_dt)
assert state_dt
state_sensor = hass.states.get(entity_id_sensor)
assert state_sensor
state_switch = hass.states.get(entity_id_switch)
assert state_switch
await hass.config_entries.async_unload(entry.entry_id)
assert entry.state is ConfigEntryState.NOT_LOADED
state_dt = hass.states.get(entity_id_dt)
assert state_dt.state == STATE_UNAVAILABLE
state_sensor = hass.states.get(entity_id_sensor)
assert state_sensor.state == STATE_UNAVAILABLE
state_switch = hass.states.get(entity_id_switch)
assert state_switch.state == STATE_UNAVAILABLE
assert router().close.call_count == 1
assert not hass.services.has_service(DOMAIN, SERVICE_REBOOT)
await hass.config_entries.async_remove(entry.entry_id)
await hass.async_block_till_done()
assert router().close.call_count == 1
assert entry.state is ConfigEntryState.NOT_LOADED
state_dt = hass.states.get(entity_id_dt)
assert state_dt is None
state_sensor = hass.states.get(entity_id_sensor)
assert state_sensor is None
state_switch = hass.states.get(entity_id_switch)
assert state_switch is None