mirror of
https://github.com/home-assistant/core.git
synced 2025-11-09 02:49:40 +00:00
222 lines
5.9 KiB
Python
222 lines
5.9 KiB
Python
"""Test for the switchbot_cloud humidifiers."""
|
|
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
import switchbot_api
|
|
from switchbot_api import Device
|
|
from syrupy.assertion import SnapshotAssertion
|
|
|
|
from homeassistant.components.humidifier import DOMAIN as HUMIDIFIER_DOMAIN
|
|
from homeassistant.components.switchbot_cloud import SwitchBotAPI
|
|
from homeassistant.components.switchbot_cloud.const import DOMAIN
|
|
from homeassistant.const import ATTR_ENTITY_ID, Platform
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers import entity_registry as er
|
|
|
|
from . import HUMIDIFIER2_INFO, HUMIDIFIER_INFO, configure_integration
|
|
|
|
from tests.common import async_load_json_array_fixture, snapshot_platform
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("device_info", "index"),
|
|
[
|
|
(HUMIDIFIER_INFO, 6),
|
|
(HUMIDIFIER2_INFO, 7),
|
|
],
|
|
)
|
|
async def test_humidifier(
|
|
hass: HomeAssistant,
|
|
entity_registry: er.EntityRegistry,
|
|
snapshot: SnapshotAssertion,
|
|
mock_list_devices,
|
|
mock_get_status,
|
|
device_info: Device,
|
|
index: int,
|
|
) -> None:
|
|
"""Test humidifier sensors."""
|
|
|
|
mock_list_devices.return_value = [device_info]
|
|
json_data = await async_load_json_array_fixture(hass, "status.json", DOMAIN)
|
|
mock_get_status.return_value = json_data[index]
|
|
|
|
with patch(
|
|
"homeassistant.components.switchbot_cloud.PLATFORMS", [Platform.HUMIDIFIER]
|
|
):
|
|
entry = await configure_integration(hass)
|
|
|
|
await snapshot_platform(hass, entity_registry, snapshot, entry.entry_id)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("service", "service_data", "expected_call_args"),
|
|
[
|
|
(
|
|
"turn_on",
|
|
{},
|
|
(
|
|
"humidifier-id-1",
|
|
switchbot_api.CommonCommands.ON,
|
|
"command",
|
|
"default",
|
|
),
|
|
),
|
|
(
|
|
"turn_off",
|
|
{},
|
|
(
|
|
"humidifier-id-1",
|
|
switchbot_api.CommonCommands.OFF,
|
|
"command",
|
|
"default",
|
|
),
|
|
),
|
|
(
|
|
"set_humidity",
|
|
{"humidity": 15},
|
|
(
|
|
"humidifier-id-1",
|
|
switchbot_api.HumidifierCommands.SET_MODE,
|
|
"command",
|
|
"101",
|
|
),
|
|
),
|
|
(
|
|
"set_humidity",
|
|
{"humidity": 60},
|
|
(
|
|
"humidifier-id-1",
|
|
switchbot_api.HumidifierCommands.SET_MODE,
|
|
"command",
|
|
"102",
|
|
),
|
|
),
|
|
(
|
|
"set_humidity",
|
|
{"humidity": 80},
|
|
(
|
|
"humidifier-id-1",
|
|
switchbot_api.HumidifierCommands.SET_MODE,
|
|
"command",
|
|
"103",
|
|
),
|
|
),
|
|
(
|
|
"set_mode",
|
|
{"mode": "auto"},
|
|
(
|
|
"humidifier-id-1",
|
|
switchbot_api.HumidifierCommands.SET_MODE,
|
|
"command",
|
|
"auto",
|
|
),
|
|
),
|
|
(
|
|
"set_mode",
|
|
{"mode": "normal"},
|
|
(
|
|
"humidifier-id-1",
|
|
switchbot_api.HumidifierCommands.SET_MODE,
|
|
"command",
|
|
"102",
|
|
),
|
|
),
|
|
],
|
|
)
|
|
async def test_humidifier_controller(
|
|
hass: HomeAssistant,
|
|
mock_list_devices,
|
|
mock_get_status,
|
|
service: str,
|
|
service_data: dict,
|
|
expected_call_args: tuple,
|
|
) -> None:
|
|
"""Test controlling the humidifier with mocked delay."""
|
|
mock_list_devices.return_value = [HUMIDIFIER_INFO]
|
|
mock_get_status.return_value = {"power": "OFF", "mode": 2}
|
|
|
|
await configure_integration(hass)
|
|
humidifier_id = "humidifier.humidifier_1"
|
|
|
|
with patch.object(SwitchBotAPI, "send_command") as mocked_send_command:
|
|
await hass.services.async_call(
|
|
HUMIDIFIER_DOMAIN,
|
|
service,
|
|
{**service_data, ATTR_ENTITY_ID: humidifier_id},
|
|
blocking=True,
|
|
)
|
|
|
|
mocked_send_command.assert_awaited_once_with(*expected_call_args)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("service", "service_data", "expected_call_args"),
|
|
[
|
|
(
|
|
"turn_on",
|
|
{},
|
|
(
|
|
"humidifier2-id-1",
|
|
switchbot_api.CommonCommands.ON,
|
|
"command",
|
|
"default",
|
|
),
|
|
),
|
|
(
|
|
"turn_off",
|
|
{},
|
|
(
|
|
"humidifier2-id-1",
|
|
switchbot_api.CommonCommands.OFF,
|
|
"command",
|
|
"default",
|
|
),
|
|
),
|
|
(
|
|
"set_humidity",
|
|
{"humidity": 50},
|
|
(
|
|
"humidifier2-id-1",
|
|
switchbot_api.HumidifierV2Commands.SET_MODE,
|
|
"command",
|
|
{"mode": 2, "humidity": 50},
|
|
),
|
|
),
|
|
(
|
|
"set_mode",
|
|
{"mode": "auto"},
|
|
(
|
|
"humidifier2-id-1",
|
|
switchbot_api.HumidifierV2Commands.SET_MODE,
|
|
"command",
|
|
{"mode": 7},
|
|
),
|
|
),
|
|
],
|
|
)
|
|
async def test_humidifier2_controller(
|
|
hass: HomeAssistant,
|
|
mock_list_devices,
|
|
mock_get_status,
|
|
service: str,
|
|
service_data: dict,
|
|
expected_call_args: tuple,
|
|
) -> None:
|
|
"""Test controlling the humidifier2 with mocked delay."""
|
|
mock_list_devices.return_value = [HUMIDIFIER2_INFO]
|
|
mock_get_status.return_value = {"power": "off", "mode": 2}
|
|
|
|
await configure_integration(hass)
|
|
humidifier_id = "humidifier.humidifier2_1"
|
|
|
|
with patch.object(SwitchBotAPI, "send_command") as mocked_send_command:
|
|
await hass.services.async_call(
|
|
HUMIDIFIER_DOMAIN,
|
|
service,
|
|
{**service_data, ATTR_ENTITY_ID: humidifier_id},
|
|
blocking=True,
|
|
)
|
|
|
|
mocked_send_command.assert_awaited_once_with(*expected_call_args)
|