core/tests/components/deconz/test_scene.py

99 lines
2.8 KiB
Python

"""deCONZ scene platform tests."""
from collections.abc import Callable
from typing import Any
from unittest.mock import patch
import pytest
from syrupy import SnapshotAssertion
from homeassistant.components.scene import DOMAIN as SCENE_DOMAIN, SERVICE_TURN_ON
from homeassistant.const import ATTR_ENTITY_ID, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from .conftest import ConfigEntryFactoryType, WebsocketDataType
from tests.common import snapshot_platform
from tests.test_util.aiohttp import AiohttpClientMocker
TEST_DATA = [
( # Scene
{
"1": {
"id": "Light group id",
"name": "Light group",
"type": "LightGroup",
"state": {"all_on": False, "any_on": True},
"action": {},
"scenes": [{"id": "1", "name": "Scene"}],
"lights": [],
}
},
{
"entity_id": "scene.light_group_scene",
"request": "/groups/1/scenes/1/recall",
},
),
]
@pytest.mark.parametrize(("group_payload", "expected"), TEST_DATA)
async def test_scenes(
hass: HomeAssistant,
entity_registry: er.EntityRegistry,
config_entry_factory: ConfigEntryFactoryType,
mock_put_request: Callable[[str, str], AiohttpClientMocker],
expected: dict[str, Any],
snapshot: SnapshotAssertion,
) -> None:
"""Test successful creation of scene entities."""
with patch("homeassistant.components.deconz.PLATFORMS", [Platform.SCENE]):
config_entry = await config_entry_factory()
await snapshot_platform(hass, entity_registry, snapshot, config_entry.entry_id)
# Verify button press
aioclient_mock = mock_put_request(expected["request"])
await hass.services.async_call(
SCENE_DOMAIN,
SERVICE_TURN_ON,
{ATTR_ENTITY_ID: expected["entity_id"]},
blocking=True,
)
assert aioclient_mock.mock_calls[1][2] == {}
@pytest.mark.parametrize(
"group_payload",
[
{
"1": {
"id": "Light group id",
"name": "Light group",
"type": "LightGroup",
"state": {"all_on": False, "any_on": True},
"action": {},
"scenes": [{"id": "1", "name": "Scene"}],
"lights": [],
}
}
],
)
@pytest.mark.usefixtures("config_entry_setup")
async def test_only_new_scenes_are_created(
hass: HomeAssistant,
mock_websocket_data: WebsocketDataType,
) -> None:
"""Test that scenes works."""
assert len(hass.states.async_all()) == 2
event_changed_group = {
"r": "groups",
"id": "1",
"scenes": [{"id": "1", "name": "Scene"}],
}
await mock_websocket_data(event_changed_group)
assert len(hass.states.async_all()) == 2