diff --git a/tests/components/zwave_js/test_fan.py b/tests/components/zwave_js/test_fan.py index bd2dd0cccd6..ad98552b737 100644 --- a/tests/components/zwave_js/test_fan.py +++ b/tests/components/zwave_js/test_fan.py @@ -1,8 +1,15 @@ """Test the Z-Wave JS fan platform.""" +import math + import pytest from zwave_js_server.event import Event -from homeassistant.components.fan import ATTR_SPEED, SPEED_MEDIUM +from homeassistant.components.fan import ( + ATTR_PERCENTAGE, + ATTR_PERCENTAGE_STEP, + ATTR_SPEED, + SPEED_MEDIUM, +) STANDARD_FAN_ENTITY = "fan.in_wall_smart_fan_control" HS_FAN_ENTITY = "fan.scene_capable_fan_control_switch" @@ -176,7 +183,7 @@ async def test_standard_fan(hass, client, in_wall_smart_fan_control, integration async def test_hs_fan(hass, client, hs_fc200, integration): """Test a fan entity with configurable speeds.""" - async def assert_speed_translation(percentage, zwave_speed): + async def assert_percentage_to_zwave_speed(percentage, zwave_speed): """Assert that a percentage input is translated to a specific Zwave speed.""" await hass.services.async_call( "fan", @@ -193,15 +200,51 @@ async def test_hs_fan(hass, client, hs_fc200, integration): client.async_send_command.reset_mock() - await assert_speed_translation(0, 0) - await assert_speed_translation(1, 33) - await assert_speed_translation(31, 33) - await assert_speed_translation(32, 33) - await assert_speed_translation(33, 33) - await assert_speed_translation(34, 66) - await assert_speed_translation(65, 66) - await assert_speed_translation(66, 66) - await assert_speed_translation(67, 99) - await assert_speed_translation(68, 99) - await assert_speed_translation(99, 99) - await assert_speed_translation(100, 99) + await assert_percentage_to_zwave_speed(0, 0) + await assert_percentage_to_zwave_speed(1, 33) + await assert_percentage_to_zwave_speed(31, 33) + await assert_percentage_to_zwave_speed(32, 33) + await assert_percentage_to_zwave_speed(33, 33) + await assert_percentage_to_zwave_speed(34, 66) + await assert_percentage_to_zwave_speed(65, 66) + await assert_percentage_to_zwave_speed(66, 66) + await assert_percentage_to_zwave_speed(67, 99) + await assert_percentage_to_zwave_speed(68, 99) + await assert_percentage_to_zwave_speed(99, 99) + await assert_percentage_to_zwave_speed(100, 99) + + async def assert_zwave_speed_to_percentage(zwave_speed, percentage): + """Assert that a ZWave speed is translated to a specific percentage.""" + event = Event( + type="value updated", + data={ + "source": "node", + "event": "value updated", + "nodeId": 39, + "args": { + "commandClassName": "Multilevel Switch", + "commandClass": 38, + "endpoint": 0, + "property": "currentValue", + "newValue": zwave_speed, + "prevValue": 0, + "propertyName": "currentValue", + }, + }, + ) + hs_fc200.receive_event(event) + + state = hass.states.get(HS_FAN_ENTITY) + assert state.attributes[ATTR_PERCENTAGE] == percentage + + await assert_zwave_speed_to_percentage(0, 0) + await assert_zwave_speed_to_percentage(1, 33) + await assert_zwave_speed_to_percentage(32, 33) + await assert_zwave_speed_to_percentage(33, 33) + await assert_zwave_speed_to_percentage(34, 67) + await assert_zwave_speed_to_percentage(66, 67) + await assert_zwave_speed_to_percentage(67, 100) + await assert_zwave_speed_to_percentage(99, 100) + + state = hass.states.get(HS_FAN_ENTITY) + assert math.isclose(state.attributes[ATTR_PERCENTAGE_STEP], 33.3333, rel_tol=1e-3)