95 lines
3.0 KiB
Python
95 lines
3.0 KiB
Python
"Test SMLIGHT SLZB device integration initialization."
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
from freezegun.api import FrozenDateTimeFactory
|
|
from pysmlight.exceptions import SmlightAuthError, SmlightConnectionError
|
|
import pytest
|
|
from syrupy.assertion import SnapshotAssertion
|
|
|
|
from homeassistant.components.smlight.const import SCAN_INTERVAL
|
|
from homeassistant.config_entries import ConfigEntryState
|
|
from homeassistant.const import STATE_UNAVAILABLE
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers import device_registry as dr
|
|
|
|
from .conftest import setup_integration
|
|
|
|
from tests.common import MockConfigEntry, async_fire_time_changed
|
|
|
|
pytestmark = [
|
|
pytest.mark.usefixtures(
|
|
"mock_smlight_client",
|
|
)
|
|
]
|
|
|
|
|
|
async def test_async_setup_entry(
|
|
hass: HomeAssistant, mock_config_entry: MockConfigEntry
|
|
) -> None:
|
|
"""Test async_setup_entry."""
|
|
entry = await setup_integration(hass, mock_config_entry)
|
|
|
|
assert entry.state is ConfigEntryState.LOADED
|
|
assert entry.unique_id == "aa:bb:cc:dd:ee:ff"
|
|
|
|
assert await hass.config_entries.async_unload(entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
assert entry.state is ConfigEntryState.NOT_LOADED
|
|
|
|
|
|
async def test_async_setup_auth_failed(
|
|
hass: HomeAssistant,
|
|
mock_config_entry: MockConfigEntry,
|
|
mock_smlight_client: MagicMock,
|
|
) -> None:
|
|
"""Test async_setup_entry when authentication fails."""
|
|
mock_smlight_client.check_auth_needed.return_value = True
|
|
mock_smlight_client.authenticate.side_effect = SmlightAuthError
|
|
entry = await setup_integration(hass, mock_config_entry)
|
|
|
|
assert entry.state is ConfigEntryState.SETUP_ERROR
|
|
|
|
assert await hass.config_entries.async_unload(entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
assert entry.state is ConfigEntryState.NOT_LOADED
|
|
|
|
|
|
async def test_update_failed(
|
|
hass: HomeAssistant,
|
|
mock_config_entry: MockConfigEntry,
|
|
mock_smlight_client: MagicMock,
|
|
freezer: FrozenDateTimeFactory,
|
|
) -> None:
|
|
"""Test update failed due to connection error."""
|
|
|
|
await setup_integration(hass, mock_config_entry)
|
|
entity = hass.states.get("sensor.mock_title_core_chip_temp")
|
|
assert entity.state is not STATE_UNAVAILABLE
|
|
|
|
mock_smlight_client.get_info.side_effect = SmlightConnectionError
|
|
|
|
freezer.tick(SCAN_INTERVAL)
|
|
async_fire_time_changed(hass)
|
|
await hass.async_block_till_done()
|
|
|
|
entity = hass.states.get("sensor.mock_title_core_chip_temp")
|
|
assert entity is not None
|
|
assert entity.state == STATE_UNAVAILABLE
|
|
|
|
|
|
async def test_device_info(
|
|
hass: HomeAssistant,
|
|
snapshot: SnapshotAssertion,
|
|
mock_config_entry: MockConfigEntry,
|
|
device_registry: dr.DeviceRegistry,
|
|
) -> None:
|
|
"""Test device registry information."""
|
|
entry = await setup_integration(hass, mock_config_entry)
|
|
|
|
device_entry = device_registry.async_get_device(
|
|
connections={(dr.CONNECTION_NETWORK_MAC, entry.unique_id)}
|
|
)
|
|
assert device_entry is not None
|
|
assert device_entry == snapshot
|