Use supported_color_modes in alexa (#49174)

This commit is contained in:
Erik Montnemery 2021-04-14 09:18:49 +02:00 committed by GitHub
parent e0ac12bd56
commit 1230c46e1e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 41 additions and 15 deletions

View File

@ -504,12 +504,12 @@ class LightCapabilities(AlexaEntity):
"""Yield the supported interfaces.""" """Yield the supported interfaces."""
yield AlexaPowerController(self.entity) yield AlexaPowerController(self.entity)
supported = self.entity.attributes.get(ATTR_SUPPORTED_FEATURES, 0) color_modes = self.entity.attributes.get(light.ATTR_SUPPORTED_COLOR_MODES, [])
if supported & light.SUPPORT_BRIGHTNESS: if any(mode in color_modes for mode in light.COLOR_MODES_BRIGHTNESS):
yield AlexaBrightnessController(self.entity) yield AlexaBrightnessController(self.entity)
if supported & light.SUPPORT_COLOR: if any(mode in color_modes for mode in light.COLOR_MODES_COLOR):
yield AlexaColorController(self.entity) yield AlexaColorController(self.entity)
if supported & light.SUPPORT_COLOR_TEMP: if light.COLOR_MODE_COLOR_TEMP in color_modes:
yield AlexaColorTemperatureController(self.entity) yield AlexaColorTemperatureController(self.entity)
yield AlexaEndpointHealth(self.hass, self.entity) yield AlexaEndpointHealth(self.hass, self.entity)

View File

@ -239,17 +239,27 @@ async def test_report_lock_state(hass):
properties.assert_equal("Alexa.LockController", "lockState", "JAMMED") properties.assert_equal("Alexa.LockController", "lockState", "JAMMED")
async def test_report_dimmable_light_state(hass): @pytest.mark.parametrize(
"supported_color_modes", [["brightness"], ["hs"], ["color_temp"]]
)
async def test_report_dimmable_light_state(hass, supported_color_modes):
"""Test BrightnessController reports brightness correctly.""" """Test BrightnessController reports brightness correctly."""
hass.states.async_set( hass.states.async_set(
"light.test_on", "light.test_on",
"on", "on",
{"friendly_name": "Test light On", "brightness": 128, "supported_features": 1}, {
"friendly_name": "Test light On",
"brightness": 128,
"supported_color_modes": supported_color_modes,
},
) )
hass.states.async_set( hass.states.async_set(
"light.test_off", "light.test_off",
"off", "off",
{"friendly_name": "Test light Off", "supported_features": 1}, {
"friendly_name": "Test light Off",
"supported_color_modes": supported_color_modes,
},
) )
properties = await reported_properties(hass, "light.test_on") properties = await reported_properties(hass, "light.test_on")
@ -259,7 +269,8 @@ async def test_report_dimmable_light_state(hass):
properties.assert_equal("Alexa.BrightnessController", "brightness", 0) properties.assert_equal("Alexa.BrightnessController", "brightness", 0)
async def test_report_colored_light_state(hass): @pytest.mark.parametrize("supported_color_modes", [["hs"], ["rgb"], ["xy"]])
async def test_report_colored_light_state(hass, supported_color_modes):
"""Test ColorController reports color correctly.""" """Test ColorController reports color correctly."""
hass.states.async_set( hass.states.async_set(
"light.test_on", "light.test_on",
@ -268,13 +279,16 @@ async def test_report_colored_light_state(hass):
"friendly_name": "Test light On", "friendly_name": "Test light On",
"hs_color": (180, 75), "hs_color": (180, 75),
"brightness": 128, "brightness": 128,
"supported_features": 17, "supported_color_modes": supported_color_modes,
}, },
) )
hass.states.async_set( hass.states.async_set(
"light.test_off", "light.test_off",
"off", "off",
{"friendly_name": "Test light Off", "supported_features": 17}, {
"friendly_name": "Test light Off",
"supported_color_modes": supported_color_modes,
},
) )
properties = await reported_properties(hass, "light.test_on") properties = await reported_properties(hass, "light.test_on")
@ -295,12 +309,16 @@ async def test_report_colored_temp_light_state(hass):
hass.states.async_set( hass.states.async_set(
"light.test_on", "light.test_on",
"on", "on",
{"friendly_name": "Test light On", "color_temp": 240, "supported_features": 2}, {
"friendly_name": "Test light On",
"color_temp": 240,
"supported_color_modes": ["color_temp"],
},
) )
hass.states.async_set( hass.states.async_set(
"light.test_off", "light.test_off",
"off", "off",
{"friendly_name": "Test light Off", "supported_features": 2}, {"friendly_name": "Test light Off", "supported_color_modes": ["color_temp"]},
) )
properties = await reported_properties(hass, "light.test_on") properties = await reported_properties(hass, "light.test_on")

View File

@ -231,7 +231,11 @@ async def test_dimmable_light(hass):
device = ( device = (
"light.test_2", "light.test_2",
"on", "on",
{"brightness": 128, "friendly_name": "Test light 2", "supported_features": 1}, {
"brightness": 128,
"friendly_name": "Test light 2",
"supported_color_modes": ["brightness"],
},
) )
appliance = await discovery_test(device, hass) appliance = await discovery_test(device, hass)
@ -262,14 +266,18 @@ async def test_dimmable_light(hass):
assert call.data["brightness_pct"] == 50 assert call.data["brightness_pct"] == 50
async def test_color_light(hass): @pytest.mark.parametrize(
"supported_color_modes",
[["color_temp", "hs"], ["color_temp", "rgb"], ["color_temp", "xy"]],
)
async def test_color_light(hass, supported_color_modes):
"""Test color light discovery.""" """Test color light discovery."""
device = ( device = (
"light.test_3", "light.test_3",
"on", "on",
{ {
"friendly_name": "Test light 3", "friendly_name": "Test light 3",
"supported_features": 19, "supported_color_modes": supported_color_modes,
"min_mireds": 142, "min_mireds": 142,
"color_temp": "333", "color_temp": "333",
}, },