210 lines
6.7 KiB
Python
210 lines
6.7 KiB
Python
"""Test ZHA registries."""
|
|
from unittest import mock
|
|
|
|
import pytest
|
|
|
|
import homeassistant.components.zha.core.registries as registries
|
|
|
|
MANUFACTURER = "mock manufacturer"
|
|
MODEL = "mock model"
|
|
|
|
|
|
@pytest.fixture
|
|
def zha_device():
|
|
"""Return a mock of ZHA device."""
|
|
dev = mock.MagicMock()
|
|
dev.manufacturer = MANUFACTURER
|
|
dev.model = MODEL
|
|
return dev
|
|
|
|
|
|
@pytest.fixture
|
|
def channels():
|
|
"""Return a mock of channels."""
|
|
|
|
def channel(name, chan_id):
|
|
ch = mock.MagicMock()
|
|
ch.name = name
|
|
ch.generic_id = chan_id
|
|
return ch
|
|
|
|
return [channel("level", "channel_0x0008"), channel("on_off", "channel_0x0006")]
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"rule, matched",
|
|
[
|
|
(registries.MatchRule(), False),
|
|
(registries.MatchRule(channel_names={"level"}), True),
|
|
(registries.MatchRule(channel_names={"level", "no match"}), False),
|
|
(registries.MatchRule(channel_names={"on_off"}), True),
|
|
(registries.MatchRule(channel_names={"on_off", "no match"}), False),
|
|
(registries.MatchRule(channel_names={"on_off", "level"}), True),
|
|
(registries.MatchRule(channel_names={"on_off", "level", "no match"}), False),
|
|
# test generic_id matching
|
|
(registries.MatchRule(generic_ids={"channel_0x0006"}), True),
|
|
(registries.MatchRule(generic_ids={"channel_0x0008"}), True),
|
|
(registries.MatchRule(generic_ids={"channel_0x0006", "channel_0x0008"}), True),
|
|
(
|
|
registries.MatchRule(
|
|
generic_ids={"channel_0x0006", "channel_0x0008", "channel_0x0009"}
|
|
),
|
|
False,
|
|
),
|
|
(
|
|
registries.MatchRule(
|
|
generic_ids={"channel_0x0006", "channel_0x0008"},
|
|
channel_names={"on_off", "level"},
|
|
),
|
|
True,
|
|
),
|
|
# manufacturer matching
|
|
(registries.MatchRule(manufacturers="no match"), False),
|
|
(registries.MatchRule(manufacturers=MANUFACTURER), True),
|
|
(registries.MatchRule(models=MODEL), True),
|
|
(registries.MatchRule(models="no match"), False),
|
|
# match everything
|
|
(
|
|
registries.MatchRule(
|
|
generic_ids={"channel_0x0006", "channel_0x0008"},
|
|
channel_names={"on_off", "level"},
|
|
manufacturers=MANUFACTURER,
|
|
models=MODEL,
|
|
),
|
|
True,
|
|
),
|
|
(
|
|
registries.MatchRule(
|
|
channel_names="on_off", manufacturers={"random manuf", MANUFACTURER}
|
|
),
|
|
True,
|
|
),
|
|
(
|
|
registries.MatchRule(
|
|
channel_names="on_off", manufacturers={"random manuf", "Another manuf"}
|
|
),
|
|
False,
|
|
),
|
|
(
|
|
registries.MatchRule(
|
|
channel_names="on_off", manufacturers=lambda x: x == MANUFACTURER
|
|
),
|
|
True,
|
|
),
|
|
(
|
|
registries.MatchRule(
|
|
channel_names="on_off", manufacturers=lambda x: x != MANUFACTURER
|
|
),
|
|
False,
|
|
),
|
|
(
|
|
registries.MatchRule(
|
|
channel_names="on_off", models={"random model", MODEL}
|
|
),
|
|
True,
|
|
),
|
|
(
|
|
registries.MatchRule(
|
|
channel_names="on_off", models={"random model", "Another model"}
|
|
),
|
|
False,
|
|
),
|
|
(
|
|
registries.MatchRule(channel_names="on_off", models=lambda x: x == MODEL),
|
|
True,
|
|
),
|
|
(
|
|
registries.MatchRule(channel_names="on_off", models=lambda x: x != MODEL),
|
|
False,
|
|
),
|
|
],
|
|
)
|
|
def test_registry_matching(rule, matched, zha_device, channels):
|
|
"""Test strict rule matching."""
|
|
reg = registries.ZHAEntityRegistry()
|
|
assert reg._strict_matched(zha_device, channels, rule) is matched
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"rule, matched",
|
|
[
|
|
(registries.MatchRule(), False),
|
|
(registries.MatchRule(channel_names={"level"}), True),
|
|
(registries.MatchRule(channel_names={"level", "no match"}), False),
|
|
(registries.MatchRule(channel_names={"on_off"}), True),
|
|
(registries.MatchRule(channel_names={"on_off", "no match"}), False),
|
|
(registries.MatchRule(channel_names={"on_off", "level"}), True),
|
|
(registries.MatchRule(channel_names={"on_off", "level", "no match"}), False),
|
|
(
|
|
registries.MatchRule(channel_names={"on_off", "level"}, models="no match"),
|
|
True,
|
|
),
|
|
(
|
|
registries.MatchRule(
|
|
channel_names={"on_off", "level"},
|
|
models="no match",
|
|
manufacturers="no match",
|
|
),
|
|
True,
|
|
),
|
|
(
|
|
registries.MatchRule(
|
|
channel_names={"on_off", "level"},
|
|
models="no match",
|
|
manufacturers=MANUFACTURER,
|
|
),
|
|
True,
|
|
),
|
|
# test generic_id matching
|
|
(registries.MatchRule(generic_ids={"channel_0x0006"}), True),
|
|
(registries.MatchRule(generic_ids={"channel_0x0008"}), True),
|
|
(registries.MatchRule(generic_ids={"channel_0x0006", "channel_0x0008"}), True),
|
|
(
|
|
registries.MatchRule(
|
|
generic_ids={"channel_0x0006", "channel_0x0008", "channel_0x0009"}
|
|
),
|
|
False,
|
|
),
|
|
(
|
|
registries.MatchRule(
|
|
generic_ids={"channel_0x0006", "channel_0x0008", "channel_0x0009"},
|
|
models="mo match",
|
|
),
|
|
False,
|
|
),
|
|
(
|
|
registries.MatchRule(
|
|
generic_ids={"channel_0x0006", "channel_0x0008", "channel_0x0009"},
|
|
models=MODEL,
|
|
),
|
|
True,
|
|
),
|
|
(
|
|
registries.MatchRule(
|
|
generic_ids={"channel_0x0006", "channel_0x0008"},
|
|
channel_names={"on_off", "level"},
|
|
),
|
|
True,
|
|
),
|
|
# manufacturer matching
|
|
(registries.MatchRule(manufacturers="no match"), False),
|
|
(registries.MatchRule(manufacturers=MANUFACTURER), True),
|
|
(registries.MatchRule(models=MODEL), True),
|
|
(registries.MatchRule(models="no match"), False),
|
|
# match everything
|
|
(
|
|
registries.MatchRule(
|
|
generic_ids={"channel_0x0006", "channel_0x0008"},
|
|
channel_names={"on_off", "level"},
|
|
manufacturers=MANUFACTURER,
|
|
models=MODEL,
|
|
),
|
|
True,
|
|
),
|
|
],
|
|
)
|
|
def test_registry_loose_matching(rule, matched, zha_device, channels):
|
|
"""Test loose rule matching."""
|
|
reg = registries.ZHAEntityRegistry()
|
|
assert reg._loose_matched(zha_device, channels, rule) is matched
|