from __future__ import annotations import pytest from ha_deconz_bridge.backends.deconz import DeconzBackend from ha_deconz_bridge.color import Color from ha_deconz_bridge.lights import ChannelSpec, ControllerModeSpec, ControllerSpec, VirtualLightSpec def test_virtual_light_rejects_color_temp_without_native_ct_emitters() -> None: with pytest.raises(ValueError): VirtualLightSpec( name="bad", supported_color_modes=("color_temp",), controllers={ "1": ControllerSpec( zigbee_id="1", name="RGB only", modes={ "rgb": ControllerModeSpec( name="rgb", channels={ "r": ChannelSpec("r", Color.from_rgb((1.0, 0.0, 0.0))), "g": ChannelSpec("g", Color.from_rgb((0.0, 1.0, 0.0))), "b": ChannelSpec("b", Color.from_rgb((0.0, 0.0, 1.0))), }, ) }, ) }, ) def test_controller_mode_rejects_invalid_role() -> None: with pytest.raises(ValueError): ControllerModeSpec( name="rgb", channels={"ww": ChannelSpec("ww", Color.from_rgb((1.0, 1.0, 1.0)))}, ) def test_deconz_invalid_ct_range_is_rejected() -> None: resource = { "state": {"on": True, "reachable": True, "bri": 254, "ct": 400, "colormode": "ct"}, "ctmin": 65279, "ctmax": 0, } assert DeconzBackend.extract_mireds(resource) is None