Fix bond fans without defined max_speed (#38382)

This commit is contained in:
Eugene Prystupa 2020-07-30 08:44:26 -04:00 committed by GitHub
parent 00a4bcff3d
commit a00aa6740e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 4 deletions

View File

@ -75,7 +75,7 @@ class BondFan(BondEntity, FanEntity):
return None return None
# map 1..max_speed Bond speed to 1..3 HA speed # map 1..max_speed Bond speed to 1..3 HA speed
max_speed = self._device.props.get("max_speed", 3) max_speed = max(self._device.props.get("max_speed", 3), self._speed)
ha_speed = math.ceil(self._speed * (len(self.speed_list) - 1) / max_speed) ha_speed = math.ceil(self._speed * (len(self.speed_list) - 1) / max_speed)
return self.speed_list[ha_speed] return self.speed_list[ha_speed]

View File

@ -49,9 +49,11 @@ async def setup_platform(
hass: core.HomeAssistant, hass: core.HomeAssistant,
platform: str, platform: str,
discovered_device: Dict[str, Any], discovered_device: Dict[str, Any],
*,
bond_device_id: str = "bond-device-id", bond_device_id: str = "bond-device-id",
props: Dict[str, Any] = None,
bond_version: Dict[str, Any] = None, bond_version: Dict[str, Any] = None,
props: Dict[str, Any] = None,
state: Dict[str, Any] = None,
): ):
"""Set up the specified Bond platform.""" """Set up the specified Bond platform."""
mock_entry = MockConfigEntry( mock_entry = MockConfigEntry(
@ -65,9 +67,11 @@ async def setup_platform(
return_value=[bond_device_id] return_value=[bond_device_id]
), patch_bond_device( ), patch_bond_device(
return_value=discovered_device return_value=discovered_device
), patch_bond_device_state(), patch_bond_device_properties( ), patch_bond_device_properties(
return_value=props return_value=props
), patch_bond_device_state(): ), patch_bond_device_state(
return_value=state
):
assert await async_setup_component(hass, BOND_DOMAIN, {}) assert await async_setup_component(hass, BOND_DOMAIN, {})
await hass.async_block_till_done() await hass.async_block_till_done()

View File

@ -96,6 +96,20 @@ async def test_non_standard_speed_list(hass: core.HomeAssistant):
) )
async def test_fan_speed_with_no_max_seed(hass: core.HomeAssistant):
"""Tests that fans without max speed (increase/decrease controls) map speed to HA standard."""
await setup_platform(
hass,
FAN_DOMAIN,
ceiling_fan("name-1"),
bond_device_id="test-device-id",
props={"no": "max_speed"},
state={"power": 1, "speed": 14},
)
assert hass.states.get("fan.name_1").attributes["speed"] == fan.SPEED_HIGH
async def test_turn_on_fan_with_speed(hass: core.HomeAssistant): async def test_turn_on_fan_with_speed(hass: core.HomeAssistant):
"""Tests that turn on command delegates to set speed API.""" """Tests that turn on command delegates to set speed API."""
await setup_platform( await setup_platform(