diff --git a/homeassistant/components/google_assistant/trait.py b/homeassistant/components/google_assistant/trait.py index defc5b0cc89..4f2971c01fa 100644 --- a/homeassistant/components/google_assistant/trait.py +++ b/homeassistant/components/google_assistant/trait.py @@ -1397,7 +1397,9 @@ class FanSpeedTrait(_Trait): if state.domain == fan.DOMAIN: speed_count = min( FAN_SPEED_MAX_SPEED_COUNT, - round(100 / self.state.attributes.get(fan.ATTR_PERCENTAGE_STEP) or 1.0), + round( + 100 / (self.state.attributes.get(fan.ATTR_PERCENTAGE_STEP) or 1.0) + ), ) self._ordered_speed = [ f"{speed}/{speed_count}" for speed in range(1, speed_count + 1) diff --git a/tests/components/google_assistant/test_trait.py b/tests/components/google_assistant/test_trait.py index a3024c184d6..bd12fdab61a 100644 --- a/tests/components/google_assistant/test_trait.py +++ b/tests/components/google_assistant/test_trait.py @@ -1618,6 +1618,32 @@ async def test_fan_speed(hass): assert calls[0].data == {"entity_id": "fan.living_room_fan", "percentage": 10} +async def test_fan_speed_without_percentage_step(hass): + """Test FanSpeed trait speed control percentage step for fan domain.""" + assert helpers.get_google_type(fan.DOMAIN, None) is not None + assert trait.FanSpeedTrait.supported(fan.DOMAIN, fan.SUPPORT_SET_SPEED, None, None) + + trt = trait.FanSpeedTrait( + hass, + State( + "fan.living_room_fan", + STATE_ON, + ), + BASIC_CONFIG, + ) + + assert trt.sync_attributes() == { + "reversible": False, + "supportsFanSpeedPercent": True, + "availableFanSpeeds": ANY, + } + # If a fan state has (temporary) no percentage_step attribute return 1 available + assert trt.query_attributes() == { + "currentFanSpeedPercent": 0, + "currentFanSpeedSetting": "1/5", + } + + @pytest.mark.parametrize( "percentage,percentage_step, speed, speeds, percentage_result", [