mirror of
https://github.com/home-assistant/core.git
synced 2025-12-24 21:06:19 +00:00
Add advanced Hyperion entities (#45410)
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
This commit is contained in:
140
tests/components/hyperion/test_switch.py
Normal file
140
tests/components/hyperion/test_switch.py
Normal file
@@ -0,0 +1,140 @@
|
||||
"""Tests for the Hyperion integration."""
|
||||
import logging
|
||||
from unittest.mock import AsyncMock, call, patch
|
||||
|
||||
from hyperion.const import (
|
||||
KEY_COMPONENT,
|
||||
KEY_COMPONENTID_ALL,
|
||||
KEY_COMPONENTID_BLACKBORDER,
|
||||
KEY_COMPONENTID_BOBLIGHTSERVER,
|
||||
KEY_COMPONENTID_FORWARDER,
|
||||
KEY_COMPONENTID_GRABBER,
|
||||
KEY_COMPONENTID_LEDDEVICE,
|
||||
KEY_COMPONENTID_SMOOTHING,
|
||||
KEY_COMPONENTID_V4L,
|
||||
KEY_COMPONENTSTATE,
|
||||
KEY_STATE,
|
||||
)
|
||||
|
||||
from homeassistant.components.hyperion.const import COMPONENT_TO_NAME
|
||||
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
|
||||
from homeassistant.const import ATTR_ENTITY_ID, SERVICE_TURN_OFF, SERVICE_TURN_ON
|
||||
from homeassistant.helpers.typing import HomeAssistantType
|
||||
from homeassistant.util import slugify
|
||||
|
||||
from . import call_registered_callback, create_mock_client, setup_test_config_entry
|
||||
|
||||
TEST_COMPONENTS = [
|
||||
{"enabled": True, "name": "ALL"},
|
||||
{"enabled": True, "name": "SMOOTHING"},
|
||||
{"enabled": True, "name": "BLACKBORDER"},
|
||||
{"enabled": False, "name": "FORWARDER"},
|
||||
{"enabled": False, "name": "BOBLIGHTSERVER"},
|
||||
{"enabled": False, "name": "GRABBER"},
|
||||
{"enabled": False, "name": "V4L"},
|
||||
{"enabled": True, "name": "LEDDEVICE"},
|
||||
]
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
TEST_SWITCH_COMPONENT_BASE_ENTITY_ID = "switch.test_instance_1_component"
|
||||
TEST_SWITCH_COMPONENT_ALL_ENTITY_ID = f"{TEST_SWITCH_COMPONENT_BASE_ENTITY_ID}_all"
|
||||
|
||||
|
||||
async def test_switch_turn_on_off(hass: HomeAssistantType) -> None:
|
||||
"""Test turning the light on."""
|
||||
client = create_mock_client()
|
||||
client.async_send_set_component = AsyncMock(return_value=True)
|
||||
client.components = TEST_COMPONENTS
|
||||
|
||||
# Setup component switch.
|
||||
with patch(
|
||||
"homeassistant.components.hyperion.switch.HyperionComponentSwitch.entity_registry_enabled_default"
|
||||
) as enabled_by_default_mock:
|
||||
enabled_by_default_mock.return_value = True
|
||||
await setup_test_config_entry(hass, hyperion_client=client)
|
||||
|
||||
# Verify switch is on (as per TEST_COMPONENTS above).
|
||||
entity_state = hass.states.get(TEST_SWITCH_COMPONENT_ALL_ENTITY_ID)
|
||||
assert entity_state
|
||||
assert entity_state.state == "on"
|
||||
|
||||
# Turn switch off.
|
||||
await hass.services.async_call(
|
||||
SWITCH_DOMAIN,
|
||||
SERVICE_TURN_OFF,
|
||||
{ATTR_ENTITY_ID: TEST_SWITCH_COMPONENT_ALL_ENTITY_ID},
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
# Verify correct parameters are passed to the library.
|
||||
assert client.async_send_set_component.call_args == call(
|
||||
**{KEY_COMPONENTSTATE: {KEY_COMPONENT: KEY_COMPONENTID_ALL, KEY_STATE: False}}
|
||||
)
|
||||
|
||||
client.components[0] = {
|
||||
"enabled": False,
|
||||
"name": "ALL",
|
||||
}
|
||||
call_registered_callback(client, "components-update")
|
||||
|
||||
# Verify the switch turns off.
|
||||
entity_state = hass.states.get(TEST_SWITCH_COMPONENT_ALL_ENTITY_ID)
|
||||
assert entity_state
|
||||
assert entity_state.state == "off"
|
||||
|
||||
# Turn switch on.
|
||||
await hass.services.async_call(
|
||||
SWITCH_DOMAIN,
|
||||
SERVICE_TURN_ON,
|
||||
{ATTR_ENTITY_ID: TEST_SWITCH_COMPONENT_ALL_ENTITY_ID},
|
||||
blocking=True,
|
||||
)
|
||||
|
||||
# Verify correct parameters are passed to the library.
|
||||
assert client.async_send_set_component.call_args == call(
|
||||
**{KEY_COMPONENTSTATE: {KEY_COMPONENT: KEY_COMPONENTID_ALL, KEY_STATE: True}}
|
||||
)
|
||||
|
||||
client.components[0] = {
|
||||
"enabled": True,
|
||||
"name": "ALL",
|
||||
}
|
||||
call_registered_callback(client, "components-update")
|
||||
|
||||
# Verify the switch turns on.
|
||||
entity_state = hass.states.get(TEST_SWITCH_COMPONENT_ALL_ENTITY_ID)
|
||||
assert entity_state
|
||||
assert entity_state.state == "on"
|
||||
|
||||
|
||||
async def test_switch_has_correct_entities(hass: HomeAssistantType) -> None:
|
||||
"""Test that the correct switch entities are created."""
|
||||
client = create_mock_client()
|
||||
client.components = TEST_COMPONENTS
|
||||
|
||||
# Setup component switch.
|
||||
with patch(
|
||||
"homeassistant.components.hyperion.switch.HyperionComponentSwitch.entity_registry_enabled_default"
|
||||
) as enabled_by_default_mock:
|
||||
enabled_by_default_mock.return_value = True
|
||||
await setup_test_config_entry(hass, hyperion_client=client)
|
||||
|
||||
entity_state = hass.states.get(TEST_SWITCH_COMPONENT_ALL_ENTITY_ID)
|
||||
|
||||
for component in (
|
||||
KEY_COMPONENTID_ALL,
|
||||
KEY_COMPONENTID_SMOOTHING,
|
||||
KEY_COMPONENTID_BLACKBORDER,
|
||||
KEY_COMPONENTID_FORWARDER,
|
||||
KEY_COMPONENTID_BOBLIGHTSERVER,
|
||||
KEY_COMPONENTID_GRABBER,
|
||||
KEY_COMPONENTID_LEDDEVICE,
|
||||
KEY_COMPONENTID_V4L,
|
||||
):
|
||||
entity_id = (
|
||||
TEST_SWITCH_COMPONENT_BASE_ENTITY_ID
|
||||
+ "_"
|
||||
+ slugify(COMPONENT_TO_NAME[component])
|
||||
)
|
||||
entity_state = hass.states.get(entity_id)
|
||||
assert entity_state, f"Couldn't find entity: {entity_id}"
|
||||
Reference in New Issue
Block a user