50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
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
|
|
|