Add Dexcom Integration (#33852)
* Initial commit for Dexcom integration * Dexcom config flow testing * Clarify errors during setup * Resolve minor test issues * Update sensor availability, resolve linting issues * Add sensor tests * Remove title due to 0.109, add abort * >94.97% codecov/patch * Move .translations/ to translations/ * Add constants for servers and unit of measurements * Bump pydexcom version * Updated domain schema, Dexcom creation * Support for different units of measurement * Update tests * Remove empty items from manifest Co-authored-by: Martin Hjelmare <marhje52@gmail.com> * Raise UpdateFailed if fetching new session fails * Switch everything over to required * Simplify state information * Simplify async_on_remove * Pydexcom package now handles fetching new session * Only allow config flow * Remove ternary operator * Bump version, pydexcom handling session refresh * Using common strings * Import from test.async_mock * Shorten variable names * Resolve tests after removing yaml support * Return false if credentials are invalid * Available seems to handle if data is empty * Now using option flow, remove handling import * Add fixture for JSON returned from API * Overhaul testing * Revise update options * Bump pydexcom version * Combat listener repetition * Undo update listener using callback * Change sensor availability to use last_update_success * Update sensor availability and tests * Rename test Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
parent
3498882fe1
commit
bcabf6da91
16 changed files with 792 additions and 0 deletions
114
tests/components/dexcom/test_sensor.py
Normal file
114
tests/components/dexcom/test_sensor.py
Normal file
|
@ -0,0 +1,114 @@
|
|||
"""The sensor tests for the griddy platform."""
|
||||
|
||||
from pydexcom import SessionError
|
||||
|
||||
from homeassistant.components.dexcom.const import MMOL_L
|
||||
from homeassistant.const import (
|
||||
CONF_UNIT_OF_MEASUREMENT,
|
||||
STATE_UNAVAILABLE,
|
||||
STATE_UNKNOWN,
|
||||
)
|
||||
|
||||
from tests.async_mock import patch
|
||||
from tests.components.dexcom import GLUCOSE_READING, init_integration
|
||||
|
||||
|
||||
async def test_sensors(hass):
|
||||
"""Test we get sensor data."""
|
||||
await init_integration(hass)
|
||||
|
||||
test_username_glucose_value = hass.states.get(
|
||||
"sensor.dexcom_test_username_glucose_value"
|
||||
)
|
||||
assert test_username_glucose_value.state == str(GLUCOSE_READING.value)
|
||||
test_username_glucose_trend = hass.states.get(
|
||||
"sensor.dexcom_test_username_glucose_trend"
|
||||
)
|
||||
assert test_username_glucose_trend.state == GLUCOSE_READING.trend_description
|
||||
|
||||
|
||||
async def test_sensors_unknown(hass):
|
||||
"""Test we handle sensor state unknown."""
|
||||
await init_integration(hass)
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.dexcom.Dexcom.get_current_glucose_reading",
|
||||
return_value=None,
|
||||
):
|
||||
await hass.helpers.entity_component.async_update_entity(
|
||||
"sensor.dexcom_test_username_glucose_value"
|
||||
)
|
||||
await hass.helpers.entity_component.async_update_entity(
|
||||
"sensor.dexcom_test_username_glucose_trend"
|
||||
)
|
||||
|
||||
test_username_glucose_value = hass.states.get(
|
||||
"sensor.dexcom_test_username_glucose_value"
|
||||
)
|
||||
assert test_username_glucose_value.state == STATE_UNKNOWN
|
||||
test_username_glucose_trend = hass.states.get(
|
||||
"sensor.dexcom_test_username_glucose_trend"
|
||||
)
|
||||
assert test_username_glucose_trend.state == STATE_UNKNOWN
|
||||
|
||||
|
||||
async def test_sensors_update_failed(hass):
|
||||
"""Test we handle sensor update failed."""
|
||||
await init_integration(hass)
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.dexcom.Dexcom.get_current_glucose_reading",
|
||||
side_effect=SessionError,
|
||||
):
|
||||
await hass.helpers.entity_component.async_update_entity(
|
||||
"sensor.dexcom_test_username_glucose_value"
|
||||
)
|
||||
await hass.helpers.entity_component.async_update_entity(
|
||||
"sensor.dexcom_test_username_glucose_trend"
|
||||
)
|
||||
|
||||
test_username_glucose_value = hass.states.get(
|
||||
"sensor.dexcom_test_username_glucose_value"
|
||||
)
|
||||
assert test_username_glucose_value.state == STATE_UNAVAILABLE
|
||||
test_username_glucose_trend = hass.states.get(
|
||||
"sensor.dexcom_test_username_glucose_trend"
|
||||
)
|
||||
assert test_username_glucose_trend.state == STATE_UNAVAILABLE
|
||||
|
||||
|
||||
async def test_sensors_options_changed(hass):
|
||||
"""Test we handle sensor unavailable."""
|
||||
entry = await init_integration(hass)
|
||||
|
||||
test_username_glucose_value = hass.states.get(
|
||||
"sensor.dexcom_test_username_glucose_value"
|
||||
)
|
||||
assert test_username_glucose_value.state == str(GLUCOSE_READING.value)
|
||||
test_username_glucose_trend = hass.states.get(
|
||||
"sensor.dexcom_test_username_glucose_trend"
|
||||
)
|
||||
assert test_username_glucose_trend.state == GLUCOSE_READING.trend_description
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.dexcom.Dexcom.get_current_glucose_reading",
|
||||
return_value=GLUCOSE_READING,
|
||||
), patch(
|
||||
"homeassistant.components.dexcom.Dexcom.create_session",
|
||||
return_value="test_session_id",
|
||||
):
|
||||
hass.config_entries.async_update_entry(
|
||||
entry=entry, options={CONF_UNIT_OF_MEASUREMENT: MMOL_L},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert entry.options == {CONF_UNIT_OF_MEASUREMENT: MMOL_L}
|
||||
|
||||
test_username_glucose_value = hass.states.get(
|
||||
"sensor.dexcom_test_username_glucose_value"
|
||||
)
|
||||
assert test_username_glucose_value.state == str(GLUCOSE_READING.mmol_l)
|
||||
test_username_glucose_trend = hass.states.get(
|
||||
"sensor.dexcom_test_username_glucose_trend"
|
||||
)
|
||||
assert test_username_glucose_trend.state == GLUCOSE_READING.trend_description
|
Loading…
Add table
Add a link
Reference in a new issue