core/tests/components/shelly/test_event.py

130 lines
3.9 KiB
Python

"""Tests for Shelly button platform."""
from unittest.mock import Mock
from aioshelly.const import MODEL_I3
import pytest
from pytest_unordered import unordered
from homeassistant.components.event import (
ATTR_EVENT_TYPE,
ATTR_EVENT_TYPES,
DOMAIN as EVENT_DOMAIN,
EventDeviceClass,
)
from homeassistant.const import ATTR_DEVICE_CLASS, STATE_UNKNOWN
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_registry import EntityRegistry
from . import init_integration, inject_rpc_device_event, register_entity
DEVICE_BLOCK_ID = 4
async def test_rpc_button(
hass: HomeAssistant,
mock_rpc_device: Mock,
entity_registry: EntityRegistry,
monkeypatch: pytest.MonkeyPatch,
) -> None:
"""Test RPC device event."""
await init_integration(hass, 2)
entity_id = "event.test_name_input_0"
state = hass.states.get(entity_id)
assert state
assert state.state == STATE_UNKNOWN
assert state.attributes.get(ATTR_EVENT_TYPES) == unordered(
["btn_down", "btn_up", "double_push", "long_push", "single_push", "triple_push"]
)
assert state.attributes.get(ATTR_EVENT_TYPE) is None
assert state.attributes.get(ATTR_DEVICE_CLASS) == EventDeviceClass.BUTTON
entry = entity_registry.async_get(entity_id)
assert entry
assert entry.unique_id == "123456789ABC-input:0"
inject_rpc_device_event(
monkeypatch,
mock_rpc_device,
{
"events": [
{
"event": "single_push",
"id": 0,
"ts": 1668522399.2,
}
],
"ts": 1668522399.2,
},
)
await hass.async_block_till_done()
state = hass.states.get(entity_id)
assert state.attributes.get(ATTR_EVENT_TYPE) == "single_push"
async def test_rpc_event_removal(
hass: HomeAssistant,
mock_rpc_device: Mock,
entity_registry: EntityRegistry,
monkeypatch: pytest.MonkeyPatch,
) -> None:
"""Test RPC event entity is removed due to removal_condition."""
entity_id = register_entity(hass, EVENT_DOMAIN, "test_name_input_0", "input:0")
assert entity_registry.async_get(entity_id) is not None
monkeypatch.setitem(mock_rpc_device.config, "input:0", {"id": 0, "type": "switch"})
await init_integration(hass, 2)
assert entity_registry.async_get(entity_id) is None
async def test_block_event(
hass: HomeAssistant,
monkeypatch: pytest.MonkeyPatch,
mock_block_device: Mock,
entity_registry: EntityRegistry,
) -> None:
"""Test block device event."""
await init_integration(hass, 1)
entity_id = "event.test_name_channel_1"
state = hass.states.get(entity_id)
assert state
assert state.state == STATE_UNKNOWN
assert state.attributes.get(ATTR_EVENT_TYPES) == unordered(["single", "long"])
assert state.attributes.get(ATTR_EVENT_TYPE) is None
assert state.attributes.get(ATTR_DEVICE_CLASS) == EventDeviceClass.BUTTON
entry = entity_registry.async_get(entity_id)
assert entry
assert entry.unique_id == "123456789ABC-relay_0-1"
monkeypatch.setattr(
mock_block_device.blocks[DEVICE_BLOCK_ID],
"sensor_ids",
{"inputEvent": "L", "inputEventCnt": 0},
)
monkeypatch.setattr(mock_block_device.blocks[DEVICE_BLOCK_ID], "inputEvent", "L")
mock_block_device.mock_update()
await hass.async_block_till_done()
state = hass.states.get(entity_id)
assert state.attributes.get(ATTR_EVENT_TYPE) == "long"
async def test_block_event_shix3_1(
hass: HomeAssistant, mock_block_device: Mock
) -> None:
"""Test block device event for SHIX3-1."""
await init_integration(hass, 1, model=MODEL_I3)
entity_id = "event.test_name_channel_1"
state = hass.states.get(entity_id)
assert state
assert state.attributes.get(ATTR_EVENT_TYPES) == unordered(
["double", "long", "long_single", "single", "single_long", "triple"]
)