Fix Blebox light scenes (#75106)
* Bug fix for light platform, when async_turn_on recieves multiple keys. * Changes according to @MartinHjelmare suggestion. * Moved effect set call in BleBoxLightEntity.async_turn_on method. * Added tests for effect in light platform. Added ValueError raise if effect not in effect list. * Removed duplicated line from test as @MartinHjelmare suggested.
This commit is contained in:
parent
c9df5888c2
commit
169264db66
2 changed files with 56 additions and 5 deletions
|
@ -159,15 +159,20 @@ class BleBoxLightEntity(BleBoxEntity, LightEntity):
|
||||||
else:
|
else:
|
||||||
value = feature.apply_brightness(value, brightness)
|
value = feature.apply_brightness(value, brightness)
|
||||||
|
|
||||||
|
try:
|
||||||
|
await self._feature.async_on(value)
|
||||||
|
except ValueError as exc:
|
||||||
|
raise ValueError(
|
||||||
|
f"Turning on '{self.name}' failed: Bad value {value}"
|
||||||
|
) from exc
|
||||||
|
|
||||||
if effect is not None:
|
if effect is not None:
|
||||||
effect_value = self.effect_list.index(effect)
|
|
||||||
await self._feature.async_api_command("effect", effect_value)
|
|
||||||
else:
|
|
||||||
try:
|
try:
|
||||||
await self._feature.async_on(value)
|
effect_value = self.effect_list.index(effect)
|
||||||
|
await self._feature.async_api_command("effect", effect_value)
|
||||||
except ValueError as exc:
|
except ValueError as exc:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
f"Turning on '{self.name}' failed: Bad value {value}"
|
f"Turning on with effect '{self.name}' failed: {effect} not in effect list."
|
||||||
) from exc
|
) from exc
|
||||||
|
|
||||||
async def async_turn_off(self, **kwargs):
|
async def async_turn_off(self, **kwargs):
|
||||||
|
|
|
@ -7,6 +7,7 @@ import pytest
|
||||||
|
|
||||||
from homeassistant.components.light import (
|
from homeassistant.components.light import (
|
||||||
ATTR_BRIGHTNESS,
|
ATTR_BRIGHTNESS,
|
||||||
|
ATTR_EFFECT,
|
||||||
ATTR_RGBW_COLOR,
|
ATTR_RGBW_COLOR,
|
||||||
ATTR_SUPPORTED_COLOR_MODES,
|
ATTR_SUPPORTED_COLOR_MODES,
|
||||||
ColorMode,
|
ColorMode,
|
||||||
|
@ -524,3 +525,48 @@ async def test_turn_on_failure(feature, hass, config, caplog):
|
||||||
assert f"Turning on '{feature_mock.full_name}' failed: Bad value 123" in str(
|
assert f"Turning on '{feature_mock.full_name}' failed: Bad value 123" in str(
|
||||||
info.value
|
info.value
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_wlightbox_on_effect(wlightbox, hass, config):
|
||||||
|
"""Test light on."""
|
||||||
|
|
||||||
|
feature_mock, entity_id = wlightbox
|
||||||
|
|
||||||
|
def initial_update():
|
||||||
|
feature_mock.is_on = False
|
||||||
|
|
||||||
|
feature_mock.async_update = AsyncMock(side_effect=initial_update)
|
||||||
|
await async_setup_entity(hass, config, entity_id)
|
||||||
|
feature_mock.async_update = AsyncMock()
|
||||||
|
|
||||||
|
state = hass.states.get(entity_id)
|
||||||
|
assert state.state == STATE_OFF
|
||||||
|
|
||||||
|
def turn_on(value):
|
||||||
|
feature_mock.is_on = True
|
||||||
|
feature_mock.effect = "POLICE"
|
||||||
|
|
||||||
|
feature_mock.async_on = AsyncMock(side_effect=turn_on)
|
||||||
|
|
||||||
|
with pytest.raises(ValueError) as info:
|
||||||
|
await hass.services.async_call(
|
||||||
|
"light",
|
||||||
|
SERVICE_TURN_ON,
|
||||||
|
{"entity_id": entity_id, ATTR_EFFECT: "NOT IN LIST"},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert (
|
||||||
|
f"Turning on with effect '{feature_mock.full_name}' failed: NOT IN LIST not in effect list."
|
||||||
|
in str(info.value)
|
||||||
|
)
|
||||||
|
|
||||||
|
await hass.services.async_call(
|
||||||
|
"light",
|
||||||
|
SERVICE_TURN_ON,
|
||||||
|
{"entity_id": entity_id, ATTR_EFFECT: "POLICE"},
|
||||||
|
blocking=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
state = hass.states.get(entity_id)
|
||||||
|
assert state.attributes[ATTR_EFFECT] == "POLICE"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue