"""Test Z-Wave Locks.""" from .common import setup_ozw async def test_lock(hass, lock_data, sent_messages, lock_msg, caplog): """Test lock.""" receive_message = await setup_ozw(hass, fixture=lock_data) # Test loaded state = hass.states.get("lock.danalock_v3_btze_locked") assert state is not None assert state.state == "unlocked" # Test locking await hass.services.async_call( "lock", "lock", {"entity_id": "lock.danalock_v3_btze_locked"}, blocking=True ) assert len(sent_messages) == 1 msg = sent_messages[0] assert msg["topic"] == "OpenZWave/1/command/setvalue/" assert msg["payload"] == {"Value": True, "ValueIDKey": 173572112} # Feedback on state lock_msg.decode() lock_msg.payload["Value"] = True lock_msg.encode() receive_message(lock_msg) await hass.async_block_till_done() state = hass.states.get("lock.danalock_v3_btze_locked") assert state is not None assert state.state == "locked" # Test unlocking await hass.services.async_call( "lock", "unlock", {"entity_id": "lock.danalock_v3_btze_locked"}, blocking=True ) assert len(sent_messages) == 2 msg = sent_messages[1] assert msg["topic"] == "OpenZWave/1/command/setvalue/" assert msg["payload"] == {"Value": False, "ValueIDKey": 173572112} # Test set_usercode await hass.services.async_call( "ozw", "set_usercode", { "entity_id": "lock.danalock_v3_btze_locked", "usercode": 123456, "code_slot": 1, }, blocking=True, ) assert len(sent_messages) == 3 msg = sent_messages[2] assert msg["topic"] == "OpenZWave/1/command/setvalue/" assert msg["payload"] == {"Value": "123456", "ValueIDKey": 281475150299159} # Test clear_usercode await hass.services.async_call( "ozw", "clear_usercode", {"entity_id": "lock.danalock_v3_btze_locked", "code_slot": 1}, blocking=True, ) assert len(sent_messages) == 5 msg = sent_messages[4] assert msg["topic"] == "OpenZWave/1/command/setvalue/" assert msg["payload"] == {"Value": 1, "ValueIDKey": 72057594219905046} # Test set_usercode invalid length await hass.services.async_call( "ozw", "set_usercode", { "entity_id": "lock.danalock_v3_btze_locked", "usercode": "123", "code_slot": 1, }, blocking=True, ) assert len(sent_messages) == 5 assert ( "Invalid code provided: (123) user code must be at least 4 digits" in caplog.text )