Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions custom_components/keymaster/providers/zwave_js.py
Original file line number Diff line number Diff line change
Expand Up @@ -554,8 +554,11 @@ async def async_clear_usercode(self, slot_num: int) -> bool:
# Verify the code was cleared
try:
usercode = get_usercode(self._node, slot_num)
# Treat both "" and "0000" as cleared (Schlage BE469 firmware bug workaround)
if usercode[ZWAVEJS_ATTR_USERCODE] not in ("", "0000"):
# Treat both "" and full string of "0" as cleared (Schlage BE469 firmware bug workaround)
if not (
usercode[ZWAVEJS_ATTR_USERCODE] == ""
or all(char == "0" for char in usercode[ZWAVEJS_ATTR_USERCODE])
):
_LOGGER.debug(
"[ZWaveJSProvider] Slot %s not yet cleared, will retry",
slot_num,
Expand Down
36 changes: 36 additions & 0 deletions tests/providers/test_zwave_js.py
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,42 @@ async def test_clear_usercode_error(self, zwave_provider, mock_zwave_node):

assert result is False

async def test_clear_usercode_schlage_bug_length_4(self, zwave_provider, mock_zwave_node):
"""Test clear_usercode returns True when the returned value is 0000. Tests Schlage Bug."""
zwave_provider._node = mock_zwave_node

with (
patch(
"custom_components.keymaster.providers.zwave_js.clear_usercode",
new_callable=AsyncMock,
),
patch(
"custom_components.keymaster.providers.zwave_js.get_usercode",
return_value={"usercode": "0000"},
),
):
result = await zwave_provider.async_clear_usercode(1)

assert result is True

async def test_clear_usercode_schlage_bug_length_6(self, zwave_provider, mock_zwave_node):
"""Test clear_usercode returns True when the returned value is 000000. Tests Schlage Bug."""
zwave_provider._node = mock_zwave_node

with (
patch(
"custom_components.keymaster.providers.zwave_js.clear_usercode",
new_callable=AsyncMock,
),
patch(
"custom_components.keymaster.providers.zwave_js.get_usercode",
return_value={"usercode": "000000"},
),
):
result = await zwave_provider.async_clear_usercode(1)

assert result is True


class TestZWaveJSLockProviderEventSubscription:
"""Test ZWaveJSLockProvider event subscription."""
Expand Down