Skip to content

Commit

Permalink
Fully test the config schema changes
Browse files Browse the repository at this point in the history
  • Loading branch information
puddly committed Nov 30, 2021
1 parent 585aeb7 commit 41931c4
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 33 deletions.
71 changes: 62 additions & 9 deletions tests/test_config.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,75 @@
import enum

from zigpy_znp.config import EnumValue
import pytest
from voluptuous import Invalid

import zigpy_znp.config as conf


def test_EnumValue():
class TestEnum(enum.Enum):
foo = 123
BAR = 456

assert EnumValue(TestEnum)("foo") == TestEnum.foo
assert EnumValue(TestEnum)("BAR") == TestEnum.BAR
assert conf.EnumValue(TestEnum)("foo") == TestEnum.foo
assert conf.EnumValue(TestEnum)("BAR") == TestEnum.BAR

assert conf.EnumValue(TestEnum, transformer=str.lower)("FOO") == TestEnum.foo
assert conf.EnumValue(TestEnum, transformer=str.upper)("bar") == TestEnum.BAR

assert conf.EnumValue(TestEnum)(TestEnum.foo) == TestEnum.foo
assert conf.EnumValue(TestEnum)(TestEnum.BAR) == TestEnum.BAR


assert (
EnumValue(TestEnum, transformer=lambda s: str(s).lower())("FOO") == TestEnum.foo
def test_pin_states_same_lengths():
# Bare schema works
conf.CONFIG_SCHEMA(
{
conf.CONF_DEVICE: {conf.CONF_DEVICE_PATH: "/dev/null"},
conf.CONF_ZNP_CONFIG: {},
}
)
assert (
EnumValue(TestEnum, transformer=lambda s: str(s).upper())("bar") == TestEnum.BAR

# So does one with explicitly specified pin states
config = conf.CONFIG_SCHEMA(
{
conf.CONF_DEVICE: {conf.CONF_DEVICE_PATH: "/dev/null"},
conf.CONF_ZNP_CONFIG: {
conf.CONF_CONNECT_RTS_STATES: ["on", True, 0, 0, 0, 1, 1],
conf.CONF_CONNECT_DTR_STATES: ["off", False, 1, 0, 0, 1, 1],
},
}
)

assert EnumValue(TestEnum)(TestEnum.foo) == TestEnum.foo
assert EnumValue(TestEnum)(TestEnum.BAR) == TestEnum.BAR
assert config[conf.CONF_ZNP_CONFIG][conf.CONF_CONNECT_RTS_STATES] == [
True,
True,
False,
False,
False,
True,
True,
]
assert config[conf.CONF_ZNP_CONFIG][conf.CONF_CONNECT_DTR_STATES] == [
False,
False,
True,
False,
False,
True,
True,
]


def test_pin_states_different_lengths():
# They must be the same length
with pytest.raises(Invalid):
conf.CONFIG_SCHEMA(
{
conf.CONF_DEVICE: {conf.CONF_DEVICE_PATH: "/dev/null"},
conf.CONF_ZNP_CONFIG: {
conf.CONF_CONNECT_RTS_STATES: [1, 1, 0],
conf.CONF_CONNECT_DTR_STATES: [1, 1],
},
}
)
50 changes: 26 additions & 24 deletions zigpy_znp/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,30 +77,32 @@ def validator(config):
{
vol.Required(CONF_DEVICE): SCHEMA_DEVICE,
vol.Optional(CONF_ZNP_CONFIG, default={}): vol.Schema(
{
vol.Optional(CONF_TX_POWER, default=None): vol.Any(
None, vol.All(int, vol.Range(min=-22, max=22))
),
vol.Optional(CONF_SREQ_TIMEOUT, default=15): VolPositiveNumber,
vol.Optional(CONF_ARSP_TIMEOUT, default=30): VolPositiveNumber,
vol.Optional(
CONF_AUTO_RECONNECT_RETRY_DELAY, default=5
): VolPositiveNumber,
vol.Optional(CONF_SKIP_BOOTLOADER, default=True): cv_boolean,
vol.Optional(CONF_LED_MODE, default=LEDMode.OFF): vol.Any(
None, EnumValue(LEDMode, lambda v: str(v).upper())
),
vol.Optional(CONF_MAX_CONCURRENT_REQUESTS, default="auto"): vol.Any(
"auto", VolPositiveNumber
),
vol.Optional(
CONF_CONNECT_RTS_STATES, default=[False, True, False]
): vol.Schema([cv_boolean]),
vol.Optional(
CONF_CONNECT_DTR_STATES, default=[False, False, False]
): vol.Schema([cv_boolean]),
},
keys_have_same_length(CONF_CONNECT_RTS_STATES, CONF_CONNECT_DTR_STATES),
vol.All(
{
vol.Optional(CONF_TX_POWER, default=None): vol.Any(
None, vol.All(int, vol.Range(min=-22, max=22))
),
vol.Optional(CONF_SREQ_TIMEOUT, default=15): VolPositiveNumber,
vol.Optional(CONF_ARSP_TIMEOUT, default=30): VolPositiveNumber,
vol.Optional(
CONF_AUTO_RECONNECT_RETRY_DELAY, default=5
): VolPositiveNumber,
vol.Optional(CONF_SKIP_BOOTLOADER, default=True): cv_boolean,
vol.Optional(CONF_LED_MODE, default=LEDMode.OFF): vol.Any(
None, EnumValue(LEDMode, lambda v: str(v).upper())
),
vol.Optional(CONF_MAX_CONCURRENT_REQUESTS, default="auto"): vol.Any(
"auto", VolPositiveNumber
),
vol.Optional(
CONF_CONNECT_RTS_STATES, default=[False, True, False]
): vol.Schema([cv_boolean]),
vol.Optional(
CONF_CONNECT_DTR_STATES, default=[False, False, False]
): vol.Schema([cv_boolean]),
},
keys_have_same_length(CONF_CONNECT_RTS_STATES, CONF_CONNECT_DTR_STATES),
)
),
}
)

0 comments on commit 41931c4

Please sign in to comment.