26f81c14bf
###Fix # In light of submitting this as a pull request to the core of HA there have been some refactoring changes to comply with HA's style requirements #Sensor names now moved to strings file to allow for translations #Coordinator now properly handles multiple devices #Spelling of signal strength sensor corrected ###Feature #Tests added
137 lines
4.1 KiB
Python
137 lines
4.1 KiB
Python
"""Test Owlet init."""
|
|
from __future__ import annotations
|
|
|
|
from unittest.mock import patch
|
|
|
|
from pyowletapi.exceptions import (
|
|
OwletAuthenticationError,
|
|
OwletConnectionError,
|
|
OwletDevicesError,
|
|
OwletError,
|
|
)
|
|
|
|
from homeassistant.components.owlet.const import (
|
|
CONF_OWLET_EXPIRY,
|
|
CONF_OWLET_REFRESH,
|
|
DOMAIN,
|
|
)
|
|
from homeassistant.config_entries import ConfigEntryState
|
|
from homeassistant.const import CONF_API_TOKEN, CONF_REGION, CONF_USERNAME, Platform
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers import device_registry as dr, entity_registry as er
|
|
|
|
from . import async_init_integration
|
|
|
|
PLATFORMS: list[Platform] = [Platform.BINARY_SENSOR, Platform.SENSOR]
|
|
|
|
|
|
async def test_async_setup_entry(hass: HomeAssistant) -> None:
|
|
"""Test setting up entry."""
|
|
entry = await async_init_integration(hass)
|
|
|
|
assert entry.state == ConfigEntryState.LOADED
|
|
|
|
device_registry = dr.async_get(hass)
|
|
|
|
device_entry = device_registry.async_get_or_create(
|
|
config_entry_id=entry.entry_id, identifiers={(DOMAIN, "SERIAL_NUMBER")}
|
|
)
|
|
|
|
assert device_entry.name == "Owlet Baby Care Sock"
|
|
|
|
entity_registry = er.async_get(hass)
|
|
|
|
entities = er.async_entries_for_device(entity_registry, device_entry.id)
|
|
|
|
assert len(entities) == 8
|
|
|
|
await entry.async_unload(hass)
|
|
|
|
assert entry.state == ConfigEntryState.NOT_LOADED
|
|
|
|
|
|
async def test_async_setup_entry_new_tokens(hass: HomeAssistant) -> None:
|
|
"""Test setting up entry and getting new tokens."""
|
|
entry = await async_init_integration(
|
|
hass, devices_fixture="get_devices_with_tokens.json"
|
|
)
|
|
|
|
assert entry.data == {
|
|
CONF_REGION: "europe",
|
|
CONF_USERNAME: "sample@gmail.com",
|
|
CONF_API_TOKEN: "new_api_token",
|
|
CONF_OWLET_EXPIRY: 200,
|
|
CONF_OWLET_REFRESH: "new_refresh_token",
|
|
}
|
|
|
|
assert entry.state == ConfigEntryState.LOADED
|
|
|
|
await entry.async_unload(hass)
|
|
|
|
assert entry.state == ConfigEntryState.NOT_LOADED
|
|
|
|
|
|
async def test_async_setup_entry_auth_error(hass: HomeAssistant) -> None:
|
|
"""Test setting up entry with auth error."""
|
|
entry = await async_init_integration(hass, skip_setup=True)
|
|
|
|
with patch(
|
|
"homeassistant.components.owlet.OwletAPI.authenticate",
|
|
side_effect=OwletAuthenticationError(),
|
|
):
|
|
await hass.config_entries.async_setup(entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
assert entry.state == ConfigEntryState.SETUP_ERROR
|
|
|
|
await entry.async_unload(hass)
|
|
|
|
|
|
async def test_async_setup_entry_connection_error(hass: HomeAssistant) -> None:
|
|
"""Test setting up entry with connection error."""
|
|
entry = await async_init_integration(hass, skip_setup=True)
|
|
|
|
with patch(
|
|
"homeassistant.components.owlet.OwletAPI.authenticate",
|
|
side_effect=OwletConnectionError(),
|
|
):
|
|
await hass.config_entries.async_setup(entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
assert entry.state == ConfigEntryState.SETUP_RETRY
|
|
|
|
await entry.async_unload(hass)
|
|
|
|
|
|
async def test_async_setup_entry_devices_error(hass: HomeAssistant) -> None:
|
|
"""Test setting up entry with device error."""
|
|
entry = await async_init_integration(hass, skip_setup=True)
|
|
|
|
with patch(
|
|
"homeassistant.components.owlet.OwletAPI.authenticate", return_value=None
|
|
), patch(
|
|
"homeassistant.components.owlet.OwletAPI.get_devices",
|
|
side_effect=OwletDevicesError(),
|
|
):
|
|
await hass.config_entries.async_setup(entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
assert entry.state == ConfigEntryState.SETUP_ERROR
|
|
await entry.async_unload(hass)
|
|
|
|
|
|
async def test_async_setup_entry_error(hass: HomeAssistant) -> None:
|
|
"""Test setting up entry with unknown error."""
|
|
entry = await async_init_integration(hass, skip_setup=True)
|
|
|
|
with patch(
|
|
"homeassistant.components.owlet.OwletAPI.authenticate",
|
|
side_effect=OwletError(),
|
|
):
|
|
await hass.config_entries.async_setup(entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
assert entry.state == ConfigEntryState.SETUP_ERROR
|
|
|
|
await entry.async_unload(hass)
|