Initial public release
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from ha_deconz_bridge.groups import GroupMemberSpec, GroupSpec, derive_group_modes
|
||||
|
||||
|
||||
def test_group_modes_are_member_union(rgb_light_spec, ct_light_spec) -> None:
|
||||
group = GroupSpec(
|
||||
name="mixed",
|
||||
members=(rgb_light_spec.name, ct_light_spec.name),
|
||||
)
|
||||
|
||||
modes = derive_group_modes(
|
||||
group,
|
||||
{
|
||||
rgb_light_spec.name: rgb_light_spec,
|
||||
ct_light_spec.name: ct_light_spec,
|
||||
},
|
||||
)
|
||||
|
||||
assert modes == ("rgb", "color_temp")
|
||||
|
||||
|
||||
def test_fixed_color_member_acts_as_brightness_mode(ct_light_spec) -> None:
|
||||
group = GroupSpec(
|
||||
name="fixed",
|
||||
members=(GroupMemberSpec(ct_light_spec.name, fixed_color=500),),
|
||||
)
|
||||
|
||||
assert derive_group_modes(group, {ct_light_spec.name: ct_light_spec}) == ("brightness",)
|
||||
|
||||
|
||||
def test_fixed_brightness_member_acts_as_onoff_mode(ct_light_spec) -> None:
|
||||
group = GroupSpec(
|
||||
name="fixed",
|
||||
members=(GroupMemberSpec(ct_light_spec.name, fixed_color=500, fixed_brightness=0.5),),
|
||||
)
|
||||
|
||||
assert derive_group_modes(group, {ct_light_spec.name: ct_light_spec}) == ("onoff",)
|
||||
|
||||
|
||||
def test_fixed_color_normalizes_mired_kelvin_rgb_and_xy() -> None:
|
||||
mired_member = GroupMemberSpec("a", fixed_color=500)
|
||||
kelvin_member = GroupMemberSpec("a", fixed_color=4000)
|
||||
rgb_member = GroupMemberSpec("a", fixed_color=(255, 128, 0))
|
||||
xy_member = GroupMemberSpec("a", fixed_color=(0.31, 0.32))
|
||||
|
||||
assert mired_member.fixed_color is not None
|
||||
assert mired_member.fixed_color.kind == "color_temp"
|
||||
assert mired_member.fixed_color.color_temp == 500
|
||||
assert kelvin_member.fixed_color is not None
|
||||
assert kelvin_member.fixed_color.color_temp == 250
|
||||
assert rgb_member.fixed_color is not None
|
||||
assert rgb_member.fixed_color.kind == "rgb"
|
||||
assert max(rgb_member.fixed_color.rgb255) == 255
|
||||
assert xy_member.fixed_color is not None
|
||||
assert xy_member.fixed_color.kind == "xy"
|
||||
|
||||
|
||||
def test_fixed_brightness_requires_fixed_color() -> None:
|
||||
with pytest.raises(ValueError, match="fixed_brightness requires fixed_color"):
|
||||
GroupMemberSpec("a", fixed_brightness=128)
|
||||
|
||||
|
||||
def test_fixed_brightness_normalizes_relative_and_ha_values() -> None:
|
||||
relative = GroupMemberSpec("a", fixed_color=500, fixed_brightness=0.5)
|
||||
ha_value = GroupMemberSpec("a", fixed_color=500, fixed_brightness=127)
|
||||
|
||||
assert relative.fixed_brightness == 128
|
||||
assert ha_value.fixed_brightness == 127
|
||||
|
||||
|
||||
def test_example_groups_reference_existing_lights() -> None:
|
||||
from configs.example_groups import GROUPS
|
||||
from configs.example_lights import LIGHTS
|
||||
|
||||
missing = {
|
||||
group_name: [
|
||||
member.light_name
|
||||
for member in group.member_specs()
|
||||
if member.light_name not in LIGHTS
|
||||
]
|
||||
for group_name, group in GROUPS.items()
|
||||
}
|
||||
|
||||
assert {name: names for name, names in missing.items() if names} == {}
|
||||
Reference in New Issue
Block a user