Add Support for SleepIQ Foot Warmers (#105931)
* Add foot warmer support * Add Tests for foot warmers * Move attr options out of constructor * Change options to lowercase * Update test and translations * Switch back to entity * Update homeassistant/components/sleepiq/strings.json --------- Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
This commit is contained in:
parent
51a50fc134
commit
615cd56f03
8 changed files with 271 additions and 11 deletions
|
@ -1,6 +1,8 @@
|
|||
"""Tests for the SleepIQ select platform."""
|
||||
from unittest.mock import MagicMock
|
||||
|
||||
from asyncsleepiq import FootWarmingTemps
|
||||
|
||||
from homeassistant.components.select import DOMAIN, SERVICE_SELECT_OPTION
|
||||
from homeassistant.const import (
|
||||
ATTR_ENTITY_ID,
|
||||
|
@ -15,8 +17,15 @@ from .conftest import (
|
|||
BED_ID,
|
||||
BED_NAME,
|
||||
BED_NAME_LOWER,
|
||||
FOOT_WARM_TIME,
|
||||
PRESET_L_STATE,
|
||||
PRESET_R_STATE,
|
||||
SLEEPER_L_ID,
|
||||
SLEEPER_L_NAME,
|
||||
SLEEPER_L_NAME_LOWER,
|
||||
SLEEPER_R_ID,
|
||||
SLEEPER_R_NAME,
|
||||
SLEEPER_R_NAME_LOWER,
|
||||
setup_platform,
|
||||
)
|
||||
|
||||
|
@ -115,3 +124,74 @@ async def test_single_foundation_preset(
|
|||
mock_asyncsleepiq_single_foundation.beds[BED_ID].foundation.presets[
|
||||
0
|
||||
].set_preset.assert_called_with("Zero G")
|
||||
|
||||
|
||||
async def test_foot_warmer(hass: HomeAssistant, mock_asyncsleepiq: MagicMock) -> None:
|
||||
"""Test the SleepIQ select entity for foot warmers."""
|
||||
entry = await setup_platform(hass, DOMAIN)
|
||||
entity_registry = er.async_get(hass)
|
||||
|
||||
state = hass.states.get(
|
||||
f"select.sleepnumber_{BED_NAME_LOWER}_{SLEEPER_L_NAME_LOWER}_foot_warmer"
|
||||
)
|
||||
assert state.state == FootWarmingTemps.MEDIUM.name.lower()
|
||||
assert state.attributes.get(ATTR_ICON) == "mdi:heat-wave"
|
||||
assert (
|
||||
state.attributes.get(ATTR_FRIENDLY_NAME)
|
||||
== f"SleepNumber {BED_NAME} {SLEEPER_L_NAME} Foot Warmer"
|
||||
)
|
||||
|
||||
entry = entity_registry.async_get(
|
||||
f"select.sleepnumber_{BED_NAME_LOWER}_{SLEEPER_L_NAME_LOWER}_foot_warmer"
|
||||
)
|
||||
assert entry
|
||||
assert entry.unique_id == f"{SLEEPER_L_ID}_foot_warmer"
|
||||
|
||||
await hass.services.async_call(
|
||||
DOMAIN,
|
||||
SERVICE_SELECT_OPTION,
|
||||
{
|
||||
ATTR_ENTITY_ID: f"select.sleepnumber_{BED_NAME_LOWER}_{SLEEPER_L_NAME_LOWER}_foot_warmer",
|
||||
ATTR_OPTION: "off",
|
||||
},
|
||||
blocking=True,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
mock_asyncsleepiq.beds[BED_ID].foundation.foot_warmers[
|
||||
0
|
||||
].turn_off.assert_called_once()
|
||||
|
||||
state = hass.states.get(
|
||||
f"select.sleepnumber_{BED_NAME_LOWER}_{SLEEPER_R_NAME_LOWER}_foot_warmer"
|
||||
)
|
||||
assert state.state == FootWarmingTemps.OFF.name.lower()
|
||||
assert state.attributes.get(ATTR_ICON) == "mdi:heat-wave"
|
||||
assert (
|
||||
state.attributes.get(ATTR_FRIENDLY_NAME)
|
||||
== f"SleepNumber {BED_NAME} {SLEEPER_R_NAME} Foot Warmer"
|
||||
)
|
||||
|
||||
entry = entity_registry.async_get(
|
||||
f"select.sleepnumber_{BED_NAME_LOWER}_{SLEEPER_R_NAME_LOWER}_foot_warmer"
|
||||
)
|
||||
assert entry
|
||||
assert entry.unique_id == f"{SLEEPER_R_ID}_foot_warmer"
|
||||
|
||||
await hass.services.async_call(
|
||||
DOMAIN,
|
||||
SERVICE_SELECT_OPTION,
|
||||
{
|
||||
ATTR_ENTITY_ID: f"select.sleepnumber_{BED_NAME_LOWER}_{SLEEPER_R_NAME_LOWER}_foot_warmer",
|
||||
ATTR_OPTION: "high",
|
||||
},
|
||||
blocking=True,
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
mock_asyncsleepiq.beds[BED_ID].foundation.foot_warmers[
|
||||
1
|
||||
].turn_on.assert_called_once()
|
||||
mock_asyncsleepiq.beds[BED_ID].foundation.foot_warmers[
|
||||
1
|
||||
].turn_on.assert_called_with(FootWarmingTemps.HIGH, FOOT_WARM_TIME)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue