diff --git a/homeassistant/components/light/__init__.py b/homeassistant/components/light/__init__.py index a4693857178..ce86ae4e257 100644 --- a/homeassistant/components/light/__init__.py +++ b/homeassistant/components/light/__init__.py @@ -92,7 +92,7 @@ def valid_supported_color_modes(color_modes: Iterable[str]) -> set[str]: or COLOR_MODE_UNKNOWN in color_modes or (COLOR_MODE_BRIGHTNESS in color_modes and len(color_modes) > 1) or (COLOR_MODE_ONOFF in color_modes and len(color_modes) > 1) - or (COLOR_MODE_WHITE in color_modes and len(color_modes) == 1) + or (COLOR_MODE_WHITE in color_modes and not color_supported(color_modes)) ): raise vol.Error(f"Invalid supported_color_modes {sorted(color_modes)}") return color_modes diff --git a/tests/components/light/test_init.py b/tests/components/light/test_init.py index b3682cbdd2c..d9394ae946e 100644 --- a/tests/components/light/test_init.py +++ b/tests/components/light/test_init.py @@ -1943,3 +1943,42 @@ async def test_services_filter_parameters( _, data = ent1.last_call("turn_off") assert data == {} + + +def test_valid_supported_color_modes(): + """Test valid_supported_color_modes.""" + supported = {light.COLOR_MODE_HS} + assert light.valid_supported_color_modes(supported) == supported + + # Supported color modes must not be empty + supported = set() + with pytest.raises(vol.Error): + light.valid_supported_color_modes(supported) + + # COLOR_MODE_WHITE must be combined with a color mode supporting color + supported = {light.COLOR_MODE_WHITE} + with pytest.raises(vol.Error): + light.valid_supported_color_modes(supported) + + supported = {light.COLOR_MODE_WHITE, light.COLOR_MODE_COLOR_TEMP} + with pytest.raises(vol.Error): + light.valid_supported_color_modes(supported) + + supported = {light.COLOR_MODE_WHITE, light.COLOR_MODE_HS} + assert light.valid_supported_color_modes(supported) == supported + + # COLOR_MODE_ONOFF must be the only supported mode + supported = {light.COLOR_MODE_ONOFF} + assert light.valid_supported_color_modes(supported) == supported + + supported = {light.COLOR_MODE_ONOFF, light.COLOR_MODE_COLOR_TEMP} + with pytest.raises(vol.Error): + light.valid_supported_color_modes(supported) + + # COLOR_MODE_BRIGHTNESS must be the only supported mode + supported = {light.COLOR_MODE_BRIGHTNESS} + assert light.valid_supported_color_modes(supported) == supported + + supported = {light.COLOR_MODE_BRIGHTNESS, light.COLOR_MODE_COLOR_TEMP} + with pytest.raises(vol.Error): + light.valid_supported_color_modes(supported)