Files
ha-deconz-bridge/tests/test_groups.py
T

88 lines
2.8 KiB
Python

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 groups import GROUPS
from 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} == {}