mirror of
https://github.com/home-assistant/core.git
synced 2026-05-09 01:59:54 +01:00
5a9bb972d0
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
109 lines
3.0 KiB
Python
109 lines
3.0 KiB
Python
"""Test for the switchbot_cloud lock."""
|
|
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
from switchbot_api import Device
|
|
|
|
from homeassistant.components.lock import DOMAIN as LOCK_DOMAIN, LockState
|
|
from homeassistant.components.switchbot_cloud import SwitchBotAPI
|
|
from homeassistant.config_entries import ConfigEntryState
|
|
from homeassistant.const import (
|
|
ATTR_ENTITY_ID,
|
|
SERVICE_LOCK,
|
|
SERVICE_OPEN,
|
|
SERVICE_UNLOCK,
|
|
)
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from . import configure_integration
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("device_info", "test_index"),
|
|
[
|
|
("Smart Lock", 0),
|
|
("Smart Lock Lite", 1),
|
|
("Smart Lock Pro", 2),
|
|
("Smart Lock Ultra", 3),
|
|
("Lock Vision", 4),
|
|
("Lock Vision Pro", 5),
|
|
("Smart Lock Pro Wifi", 6),
|
|
],
|
|
)
|
|
async def test_lock(
|
|
hass: HomeAssistant, mock_list_devices, mock_get_status, device_info, test_index
|
|
) -> None:
|
|
"""Test locking and unlocking."""
|
|
mock_list_devices.return_value = [
|
|
Device(
|
|
version="V1.0",
|
|
deviceId="lock-id-1",
|
|
deviceName="lock-1",
|
|
deviceType=device_info,
|
|
hubDeviceId="test-hub-id",
|
|
),
|
|
]
|
|
|
|
mock_get_status.return_value = {"lockState": "locked"}
|
|
|
|
entry = await configure_integration(hass)
|
|
|
|
assert entry.state is ConfigEntryState.LOADED
|
|
|
|
lock_id = "lock.lock_1"
|
|
assert hass.states.get(lock_id).state == LockState.LOCKED
|
|
|
|
with patch.object(SwitchBotAPI, "send_command"):
|
|
await hass.services.async_call(
|
|
LOCK_DOMAIN, SERVICE_UNLOCK, {ATTR_ENTITY_ID: lock_id}, blocking=True
|
|
)
|
|
assert hass.states.get(lock_id).state == LockState.UNLOCKED
|
|
|
|
with patch.object(SwitchBotAPI, "send_command"):
|
|
await hass.services.async_call(
|
|
LOCK_DOMAIN, SERVICE_LOCK, {ATTR_ENTITY_ID: lock_id}, blocking=True
|
|
)
|
|
assert hass.states.get(lock_id).state == LockState.LOCKED
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("device_info", "test_index"),
|
|
[
|
|
("Smart Lock", 0),
|
|
("Smart Lock Pro", 1),
|
|
("Smart Lock Ultra", 2),
|
|
("Lock Vision", 3),
|
|
("Lock Vision Pro", 4),
|
|
("Smart Lock Pro Wifi", 5),
|
|
],
|
|
)
|
|
async def test_lock_open(
|
|
hass: HomeAssistant, mock_list_devices, mock_get_status, device_info, test_index
|
|
) -> None:
|
|
"""Test locking and unlocking."""
|
|
mock_list_devices.return_value = [
|
|
Device(
|
|
version="V1.0",
|
|
deviceId="lock-id-1",
|
|
deviceName="lock-1",
|
|
deviceType=device_info,
|
|
hubDeviceId="test-hub-id",
|
|
),
|
|
]
|
|
|
|
mock_get_status.return_value = {"lockState": "locked"}
|
|
|
|
entry = await configure_integration(hass)
|
|
|
|
assert entry.state is ConfigEntryState.LOADED
|
|
|
|
lock_id = "lock.lock_1"
|
|
assert hass.states.get(lock_id).state == LockState.LOCKED
|
|
|
|
with patch.object(SwitchBotAPI, "send_command"):
|
|
await hass.services.async_call(
|
|
LOCK_DOMAIN, SERVICE_OPEN, {ATTR_ENTITY_ID: lock_id}, blocking=True
|
|
)
|
|
assert hass.states.get(lock_id).state == LockState.UNLOCKED
|