Skip to content

Commit 593d33c

Browse files
authored
Fix quirk ID test ignoring custom clusters in v2 quirks (#264)
* Also loop over custom clusters from v2 quirks * Rename `all_quirk_ids` to `cluster_quirk_id_map` * Add typing to `cluster_quirk_id_map` dict
1 parent 922f266 commit 593d33c

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

tests/test_cluster_handlers.py

+21-7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
# pylint:disable=redefined-outer-name,too-many-lines
44

5+
from __future__ import annotations
6+
57
import logging
68
import math
79
from typing import TYPE_CHECKING, Any
@@ -563,9 +565,21 @@ def test_cluster_handler_registry() -> None:
563565
"""Test ZIGBEE cluster handler Registry."""
564566

565567
# get all quirk ID from zigpy quirks registry
566-
all_quirk_ids = {}
568+
cluster_quirk_id_map: dict[int, set[str | None]] = {}
567569
for cluster_id in CLUSTERS_BY_ID:
568-
all_quirk_ids[cluster_id] = {None}
570+
cluster_quirk_id_map[cluster_id] = {None}
571+
572+
# loop over custom clusters in v2 quirks registry
573+
for quirks in _DEVICE_REGISTRY._registry_v2.values():
574+
for quirk_reg_entry in quirks:
575+
# get standalone adds_metadata and adds_metadata from replaces_metadata
576+
all_metadata = set(quirk_reg_entry.adds_metadata) | {
577+
rm.add for rm in quirk_reg_entry.replaces_metadata
578+
}
579+
for metadata in all_metadata:
580+
cluster_quirk_id_map[metadata.cluster.cluster_id] = {None}
581+
582+
# loop over custom clusters in v1 quirks registry
569583
for manufacturer in _DEVICE_REGISTRY.registry.values():
570584
for model_quirk_list in manufacturer.values():
571585
for quirk in model_quirk_list:
@@ -583,22 +597,22 @@ def test_cluster_handler_registry() -> None:
583597
for cluster_id in cluster_ids:
584598
if not isinstance(cluster_id, int):
585599
cluster_id = cluster_id.cluster_id
586-
if cluster_id not in all_quirk_ids:
587-
all_quirk_ids[cluster_id] = {None}
588-
all_quirk_ids[cluster_id].add(quirk_id)
600+
if cluster_id not in cluster_quirk_id_map:
601+
cluster_quirk_id_map[cluster_id] = {None}
602+
cluster_quirk_id_map[cluster_id].add(quirk_id)
589603

590604
for (
591605
cluster_id,
592606
cluster_handler_classes,
593607
) in CLUSTER_HANDLER_REGISTRY.items():
594608
assert isinstance(cluster_id, int)
595609
assert 0 <= cluster_id <= 0xFFFF
596-
assert cluster_id in all_quirk_ids
610+
assert cluster_id in cluster_quirk_id_map
597611
assert isinstance(cluster_handler_classes, dict)
598612
for quirk_id, cluster_handler in cluster_handler_classes.items():
599613
assert quirk_id is None or isinstance(quirk_id, str)
600614
assert issubclass(cluster_handler, ClusterHandler)
601-
assert quirk_id in all_quirk_ids[cluster_id]
615+
assert quirk_id in cluster_quirk_id_map[cluster_id]
602616

603617

604618
def test_epch_unclaimed_cluster_handlers(cluster_handler) -> None:

0 commit comments

Comments
 (0)