From 42003ae5acc299aa608e022c93f9e70f6a90a70a Mon Sep 17 00:00:00 2001
From: Marcel van der Veldt <m.vanderveldt@outlook.com>
Date: Wed, 10 Jul 2024 11:20:26 +0200
Subject: [PATCH] Matter lock state follow-up (#121669)

---
 homeassistant/components/matter/lock.py               |  6 +++---
 tests/components/matter/fixtures/nodes/door-lock.json |  2 +-
 tests/components/matter/test_door_lock.py             | 11 ++++++++---
 3 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/homeassistant/components/matter/lock.py b/homeassistant/components/matter/lock.py
index 66b5040184c..ae01faa3bc7 100644
--- a/homeassistant/components/matter/lock.py
+++ b/homeassistant/components/matter/lock.py
@@ -99,7 +99,7 @@ class MatterLock(MatterEntity, LockEntity):
             # the lock should acknowledge the command with an attribute update
             # but bad things may happen, so guard against it with a timer.
             self._optimistic_timer = self.hass.loop.call_later(
-                5, self._reset_optimistic_state
+                30, self._reset_optimistic_state
             )
         code: str | None = kwargs.get(ATTR_CODE)
         code_bytes = code.encode() if code else None
@@ -116,7 +116,7 @@ class MatterLock(MatterEntity, LockEntity):
             # the lock should acknowledge the command with an attribute update
             # but bad things may happen, so guard against it with a timer.
             self._optimistic_timer = self.hass.loop.call_later(
-                5, self._reset_optimistic_state
+                30, self._reset_optimistic_state
             )
         code: str | None = kwargs.get(ATTR_CODE)
         code_bytes = code.encode() if code else None
@@ -140,7 +140,7 @@ class MatterLock(MatterEntity, LockEntity):
         # the lock should acknowledge the command with an attribute update
         # but bad things may happen, so guard against it with a timer.
         self._optimistic_timer = self.hass.loop.call_later(
-            5, self._reset_optimistic_state
+            30 if self._attr_is_locked else 5, self._reset_optimistic_state
         )
         code: str | None = kwargs.get(ATTR_CODE)
         code_bytes = code.encode() if code else None
diff --git a/tests/components/matter/fixtures/nodes/door-lock.json b/tests/components/matter/fixtures/nodes/door-lock.json
index 8a3f0fd68dd..b6231e04af4 100644
--- a/tests/components/matter/fixtures/nodes/door-lock.json
+++ b/tests/components/matter/fixtures/nodes/door-lock.json
@@ -469,7 +469,7 @@
     "1/47/65531": [
       0, 1, 2, 14, 15, 16, 19, 65528, 65529, 65530, 65531, 65532, 65533
     ],
-    "1/257/0": 1,
+    "1/257/0": 0,
     "1/257/1": 0,
     "1/257/2": true,
     "1/257/3": 1,
diff --git a/tests/components/matter/test_door_lock.py b/tests/components/matter/test_door_lock.py
index 84f0e58a647..461cc1b7f3d 100644
--- a/tests/components/matter/test_door_lock.py
+++ b/tests/components/matter/test_door_lock.py
@@ -8,11 +8,10 @@ import pytest
 
 from homeassistant.components.lock import (
     STATE_LOCKED,
-    STATE_OPEN,
     STATE_UNLOCKED,
     LockEntityFeature,
 )
-from homeassistant.const import ATTR_CODE, STATE_LOCKING, STATE_UNKNOWN
+from homeassistant.const import ATTR_CODE, STATE_LOCKING, STATE_OPENING, STATE_UNKNOWN
 from homeassistant.core import HomeAssistant
 from homeassistant.exceptions import ServiceValidationError
 import homeassistant.helpers.entity_registry as er
@@ -64,6 +63,7 @@ async def test_lock(
     )
     matter_client.send_device_command.reset_mock()
 
+    await hass.async_block_till_done()
     state = hass.states.get("lock.mock_door_lock_lock")
     assert state
     assert state.state == STATE_LOCKING
@@ -208,9 +208,14 @@ async def test_lock_with_unbolt(
         timed_request_timeout_ms=1000,
     )
 
+    await hass.async_block_till_done()
+    state = hass.states.get("lock.mock_door_lock_lock")
+    assert state
+    assert state.state == STATE_OPENING
+
     set_node_attribute(door_lock_with_unbolt, 1, 257, 3, 0)
     await trigger_subscription_callback(hass, matter_client)
 
     state = hass.states.get("lock.mock_door_lock_lock")
     assert state
-    assert state.state == STATE_OPEN
+    assert state.state == STATE_LOCKED
-- 
GitLab