Refactoring, added tests
###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
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user