Fix SleepIQ firmness number step and min values (#69757)

* fix sleepiq firmness number step and min values

* add asserts for min/max/step attributes
This commit is contained in:
Mike Fugate 2022-04-09 15:46:58 -04:00 committed by GitHub
parent fe6a4bfb1d
commit 836b051be9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 4 deletions

View File

@ -130,6 +130,7 @@ async def async_setup_entry(
class SleepIQNumberEntity(SleepIQBedEntity, NumberEntity): class SleepIQNumberEntity(SleepIQBedEntity, NumberEntity):
"""Representation of a SleepIQ number entity.""" """Representation of a SleepIQ number entity."""
entity_description: SleepIQNumberEntityDescription
_attr_icon = "mdi:bed" _attr_icon = "mdi:bed"
def __init__( def __init__(
@ -140,7 +141,7 @@ class SleepIQNumberEntity(SleepIQBedEntity, NumberEntity):
description: SleepIQNumberEntityDescription, description: SleepIQNumberEntityDescription,
) -> None: ) -> None:
"""Initialize the number.""" """Initialize the number."""
self.description = description self.entity_description = description
self.device = device self.device = device
self._attr_name = description.get_name_fn(bed, device) self._attr_name = description.get_name_fn(bed, device)
@ -151,10 +152,10 @@ class SleepIQNumberEntity(SleepIQBedEntity, NumberEntity):
@callback @callback
def _async_update_attrs(self) -> None: def _async_update_attrs(self) -> None:
"""Update number attributes.""" """Update number attributes."""
self._attr_value = float(self.description.value_fn(self.device)) self._attr_value = float(self.entity_description.value_fn(self.device))
async def async_set_value(self, value: float) -> None: async def async_set_value(self, value: float) -> None:
"""Set the number value.""" """Set the number value."""
await self.description.set_value_fn(self.device, int(value)) await self.entity_description.set_value_fn(self.device, int(value))
self._attr_value = value self._attr_value = value
self.async_write_ha_state() self.async_write_ha_state()

View File

@ -1,6 +1,12 @@
"""The tests for SleepIQ number platform.""" """The tests for SleepIQ number platform."""
from homeassistant.components.number import DOMAIN from homeassistant.components.number import DOMAIN
from homeassistant.components.number.const import ATTR_VALUE, SERVICE_SET_VALUE from homeassistant.components.number.const import (
ATTR_MAX,
ATTR_MIN,
ATTR_STEP,
ATTR_VALUE,
SERVICE_SET_VALUE,
)
from homeassistant.const import ATTR_ENTITY_ID, ATTR_FRIENDLY_NAME, ATTR_ICON from homeassistant.const import ATTR_ENTITY_ID, ATTR_FRIENDLY_NAME, ATTR_ICON
from homeassistant.helpers import entity_registry as er from homeassistant.helpers import entity_registry as er
@ -28,6 +34,9 @@ async def test_firmness(hass, mock_asyncsleepiq):
) )
assert state.state == "40.0" assert state.state == "40.0"
assert state.attributes.get(ATTR_ICON) == "mdi:bed" assert state.attributes.get(ATTR_ICON) == "mdi:bed"
assert state.attributes.get(ATTR_MIN) == 5
assert state.attributes.get(ATTR_MAX) == 100
assert state.attributes.get(ATTR_STEP) == 5
assert ( assert (
state.attributes.get(ATTR_FRIENDLY_NAME) state.attributes.get(ATTR_FRIENDLY_NAME)
== f"SleepNumber {BED_NAME} {SLEEPER_L_NAME} Firmness" == f"SleepNumber {BED_NAME} {SLEEPER_L_NAME} Firmness"
@ -44,6 +53,9 @@ async def test_firmness(hass, mock_asyncsleepiq):
) )
assert state.state == "80.0" assert state.state == "80.0"
assert state.attributes.get(ATTR_ICON) == "mdi:bed" assert state.attributes.get(ATTR_ICON) == "mdi:bed"
assert state.attributes.get(ATTR_MIN) == 5
assert state.attributes.get(ATTR_MAX) == 100
assert state.attributes.get(ATTR_STEP) == 5
assert ( assert (
state.attributes.get(ATTR_FRIENDLY_NAME) state.attributes.get(ATTR_FRIENDLY_NAME)
== f"SleepNumber {BED_NAME} {SLEEPER_R_NAME} Firmness" == f"SleepNumber {BED_NAME} {SLEEPER_R_NAME} Firmness"
@ -78,6 +90,9 @@ async def test_actuators(hass, mock_asyncsleepiq):
state = hass.states.get(f"number.sleepnumber_{BED_NAME_LOWER}_right_head_position") state = hass.states.get(f"number.sleepnumber_{BED_NAME_LOWER}_right_head_position")
assert state.state == "60.0" assert state.state == "60.0"
assert state.attributes.get(ATTR_ICON) == "mdi:bed" assert state.attributes.get(ATTR_ICON) == "mdi:bed"
assert state.attributes.get(ATTR_MIN) == 0
assert state.attributes.get(ATTR_MAX) == 100
assert state.attributes.get(ATTR_STEP) == 1
assert ( assert (
state.attributes.get(ATTR_FRIENDLY_NAME) state.attributes.get(ATTR_FRIENDLY_NAME)
== f"SleepNumber {BED_NAME} Right Head Position" == f"SleepNumber {BED_NAME} Right Head Position"
@ -92,6 +107,9 @@ async def test_actuators(hass, mock_asyncsleepiq):
state = hass.states.get(f"number.sleepnumber_{BED_NAME_LOWER}_left_head_position") state = hass.states.get(f"number.sleepnumber_{BED_NAME_LOWER}_left_head_position")
assert state.state == "50.0" assert state.state == "50.0"
assert state.attributes.get(ATTR_ICON) == "mdi:bed" assert state.attributes.get(ATTR_ICON) == "mdi:bed"
assert state.attributes.get(ATTR_MIN) == 0
assert state.attributes.get(ATTR_MAX) == 100
assert state.attributes.get(ATTR_STEP) == 1
assert ( assert (
state.attributes.get(ATTR_FRIENDLY_NAME) state.attributes.get(ATTR_FRIENDLY_NAME)
== f"SleepNumber {BED_NAME} Left Head Position" == f"SleepNumber {BED_NAME} Left Head Position"
@ -106,6 +124,9 @@ async def test_actuators(hass, mock_asyncsleepiq):
state = hass.states.get(f"number.sleepnumber_{BED_NAME_LOWER}_foot_position") state = hass.states.get(f"number.sleepnumber_{BED_NAME_LOWER}_foot_position")
assert state.state == "10.0" assert state.state == "10.0"
assert state.attributes.get(ATTR_ICON) == "mdi:bed" assert state.attributes.get(ATTR_ICON) == "mdi:bed"
assert state.attributes.get(ATTR_MIN) == 0
assert state.attributes.get(ATTR_MAX) == 100
assert state.attributes.get(ATTR_STEP) == 1
assert ( assert (
state.attributes.get(ATTR_FRIENDLY_NAME) state.attributes.get(ATTR_FRIENDLY_NAME)
== f"SleepNumber {BED_NAME} Foot Position" == f"SleepNumber {BED_NAME} Foot Position"