Files
core/tests/components/led_infrared/test_light.py
T

650 lines
20 KiB
Python

"""Tests for the LED Infrared light platform."""
from collections.abc import Generator
from unittest.mock import patch
from infrared_protocols.codes.generic.led import (
Generic13KeyCode,
Generic24KeyCode,
Generic40KeyCode,
Generic44KeyCode,
)
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.led_infrared.const import (
CONF_DEVICE_TYPE,
CONF_INFRARED_ENTITY_ID,
DOMAIN,
LEDIrDeviceType,
)
from homeassistant.components.light import (
ATTR_EFFECT,
DOMAIN as LIGHT_DOMAIN,
SERVICE_TURN_OFF,
SERVICE_TURN_ON,
)
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import ATTR_ENTITY_ID, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from tests.common import MockConfigEntry, snapshot_platform
from tests.components.infrared import EMITTER_ENTITY_ID
from tests.components.infrared.common import MockInfraredEmitterEntity
@pytest.fixture(autouse=True)
def light_only() -> Generator[None]:
"""Enable only the light platform."""
with patch(
"homeassistant.components.led_infrared.PLATFORMS",
[Platform.LIGHT],
):
yield
@pytest.mark.parametrize(
"config_entry",
[
LEDIrDeviceType.GENERIC_13_KEY,
LEDIrDeviceType.GENERIC_24_KEY,
LEDIrDeviceType.GENERIC_40_KEY,
LEDIrDeviceType.GENERIC_44_KEY,
],
indirect=True,
)
@pytest.mark.usefixtures("mock_infrared_emitter_entity")
async def test_setup(
hass: HomeAssistant,
config_entry: MockConfigEntry,
snapshot: SnapshotAssertion,
entity_registry: er.EntityRegistry,
) -> None:
"""Snapshot test states of light platform."""
config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
assert config_entry.state is ConfigEntryState.LOADED
await snapshot_platform(hass, entity_registry, snapshot, config_entry.entry_id)
@pytest.mark.parametrize(
("device_type", "service", "service_data", "expected_codes"),
[
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{},
[Generic24KeyCode.ON],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "flash"},
[Generic24KeyCode.ON, Generic24KeyCode.FLASH],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "strobe"},
[Generic24KeyCode.ON, Generic24KeyCode.STROBE],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "fade"},
[Generic24KeyCode.ON, Generic24KeyCode.FADE],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "smooth"},
[Generic24KeyCode.ON, Generic24KeyCode.SMOOTH],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "red"},
[Generic24KeyCode.ON, Generic24KeyCode.RED],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "green"},
[Generic24KeyCode.ON, Generic24KeyCode.GREEN],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "blue"},
[Generic24KeyCode.ON, Generic24KeyCode.BLUE],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "white"},
[Generic24KeyCode.ON, Generic24KeyCode.WHITE],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "orange_red"},
[Generic24KeyCode.ON, Generic24KeyCode.ORANGE_RED],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "tomato"},
[Generic24KeyCode.ON, Generic24KeyCode.TOMATO],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "light_green"},
[Generic24KeyCode.ON, Generic24KeyCode.LIGHT_GREEN],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "sky_blue"},
[Generic24KeyCode.ON, Generic24KeyCode.SKY_BLUE],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "cyan"},
[Generic24KeyCode.ON, Generic24KeyCode.CYAN],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "rebecca_purple"},
[Generic24KeyCode.ON, Generic24KeyCode.REBECCA_PURPLE],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "orange"},
[Generic24KeyCode.ON, Generic24KeyCode.ORANGE],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "turquoise"},
[Generic24KeyCode.ON, Generic24KeyCode.TURQUOISE],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "purple"},
[Generic24KeyCode.ON, Generic24KeyCode.PURPLE],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "yellow"},
[Generic24KeyCode.ON, Generic24KeyCode.YELLOW],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "dark_cyan"},
[Generic24KeyCode.ON, Generic24KeyCode.DARK_CYAN],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "plum"},
[Generic24KeyCode.ON, Generic24KeyCode.PLUM],
),
(
LEDIrDeviceType.GENERIC_24_KEY,
SERVICE_TURN_OFF,
{},
[Generic24KeyCode.OFF],
),
(LEDIrDeviceType.GENERIC_13_KEY, SERVICE_TURN_ON, {}, [Generic13KeyCode.ON]),
(LEDIrDeviceType.GENERIC_13_KEY, SERVICE_TURN_OFF, {}, [Generic13KeyCode.OFF]),
(
LEDIrDeviceType.GENERIC_13_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "mode_1"},
[Generic13KeyCode.ON, Generic13KeyCode.MODE_1],
),
(
LEDIrDeviceType.GENERIC_13_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "mode_2"},
[Generic13KeyCode.ON, Generic13KeyCode.MODE_2],
),
(
LEDIrDeviceType.GENERIC_13_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "mode_3"},
[Generic13KeyCode.ON, Generic13KeyCode.MODE_3],
),
(
LEDIrDeviceType.GENERIC_13_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "mode_4"},
[Generic13KeyCode.ON, Generic13KeyCode.MODE_4],
),
(
LEDIrDeviceType.GENERIC_13_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "mode_5"},
[Generic13KeyCode.ON, Generic13KeyCode.MODE_5],
),
(
LEDIrDeviceType.GENERIC_13_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "mode_6"},
[Generic13KeyCode.ON, Generic13KeyCode.MODE_6],
),
(
LEDIrDeviceType.GENERIC_13_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "mode_7"},
[Generic13KeyCode.ON, Generic13KeyCode.MODE_7],
),
(
LEDIrDeviceType.GENERIC_13_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "mode_8"},
[Generic13KeyCode.ON, Generic13KeyCode.MODE_8],
),
(LEDIrDeviceType.GENERIC_40_KEY, SERVICE_TURN_ON, {}, [Generic40KeyCode.ON]),
(LEDIrDeviceType.GENERIC_40_KEY, SERVICE_TURN_OFF, {}, [Generic40KeyCode.OFF]),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "auto"},
[Generic40KeyCode.ON, Generic40KeyCode.AUTO],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "fade3"},
[Generic40KeyCode.ON, Generic40KeyCode.FADE3],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "fade7"},
[Generic40KeyCode.ON, Generic40KeyCode.FADE7],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "flash"},
[Generic40KeyCode.ON, Generic40KeyCode.FLASH],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "jump3"},
[Generic40KeyCode.ON, Generic40KeyCode.JUMP3],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "jump7"},
[Generic40KeyCode.ON, Generic40KeyCode.JUMP7],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "red"},
[Generic40KeyCode.ON, Generic40KeyCode.RED],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "green"},
[Generic40KeyCode.ON, Generic40KeyCode.GREEN],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "blue"},
[Generic40KeyCode.ON, Generic40KeyCode.BLUE],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "white"},
[Generic40KeyCode.ON, Generic40KeyCode.WHITE],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "tomato"},
[Generic40KeyCode.ON, Generic40KeyCode.TOMATO],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "light_green"},
[Generic40KeyCode.ON, Generic40KeyCode.LIGHT_GREEN],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "deep_blue"},
[Generic40KeyCode.ON, Generic40KeyCode.DEEP_BLUE],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "floral_white"},
[Generic40KeyCode.ON, Generic40KeyCode.FLORAL_WHITE],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "orange"},
[Generic40KeyCode.ON, Generic40KeyCode.ORANGE],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "turquoise"},
[Generic40KeyCode.ON, Generic40KeyCode.TURQUOISE],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "purple"},
[Generic40KeyCode.ON, Generic40KeyCode.PURPLE],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "lavender_blush"},
[Generic40KeyCode.ON, Generic40KeyCode.LAVENDER_BLUSH],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "yellowish"},
[Generic40KeyCode.ON, Generic40KeyCode.YELLOWISH],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "cyan"},
[Generic40KeyCode.ON, Generic40KeyCode.CYAN],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "magenta"},
[Generic40KeyCode.ON, Generic40KeyCode.MAGENTA],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "ghost_white"},
[Generic40KeyCode.ON, Generic40KeyCode.GHOST_WHITE],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "yellow"},
[Generic40KeyCode.ON, Generic40KeyCode.YELLOW],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "aqua"},
[Generic40KeyCode.ON, Generic40KeyCode.AQUA],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "pink"},
[Generic40KeyCode.ON, Generic40KeyCode.PINK],
),
(
LEDIrDeviceType.GENERIC_40_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "light_cyan"},
[Generic40KeyCode.ON, Generic40KeyCode.LIGHT_CYAN],
),
(LEDIrDeviceType.GENERIC_44_KEY, SERVICE_TURN_ON, {}, [Generic44KeyCode.ON]),
(LEDIrDeviceType.GENERIC_44_KEY, SERVICE_TURN_OFF, {}, [Generic44KeyCode.OFF]),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "auto"},
[Generic44KeyCode.ON, Generic44KeyCode.AUTO],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "fade3"},
[Generic44KeyCode.ON, Generic44KeyCode.FADE3],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "fade7"},
[Generic44KeyCode.ON, Generic44KeyCode.FADE7],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "flash"},
[Generic44KeyCode.ON, Generic44KeyCode.FLASH],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "jump3"},
[Generic44KeyCode.ON, Generic44KeyCode.JUMP3],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "jump7"},
[Generic44KeyCode.ON, Generic44KeyCode.JUMP7],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "diy1"},
[Generic44KeyCode.ON, Generic44KeyCode.DIY1],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "diy2"},
[Generic44KeyCode.ON, Generic44KeyCode.DIY2],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "diy3"},
[Generic44KeyCode.ON, Generic44KeyCode.DIY3],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "diy4"},
[Generic44KeyCode.ON, Generic44KeyCode.DIY4],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "diy5"},
[Generic44KeyCode.ON, Generic44KeyCode.DIY5],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "diy6"},
[Generic44KeyCode.ON, Generic44KeyCode.DIY6],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "red"},
[Generic44KeyCode.ON, Generic44KeyCode.RED],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "green"},
[Generic44KeyCode.ON, Generic44KeyCode.GREEN],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "blue"},
[Generic44KeyCode.ON, Generic44KeyCode.BLUE],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "white"},
[Generic44KeyCode.ON, Generic44KeyCode.WHITE],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "tomato"},
[Generic44KeyCode.ON, Generic44KeyCode.TOMATO],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "light_green"},
[Generic44KeyCode.ON, Generic44KeyCode.LIGHT_GREEN],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "deep_blue"},
[Generic44KeyCode.ON, Generic44KeyCode.DEEP_BLUE],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "floral_white"},
[Generic44KeyCode.ON, Generic44KeyCode.FLORAL_WHITE],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "orange"},
[Generic44KeyCode.ON, Generic44KeyCode.ORANGE],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "turquoise"},
[Generic44KeyCode.ON, Generic44KeyCode.TURQUOISE],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "purple"},
[Generic44KeyCode.ON, Generic44KeyCode.PURPLE],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "lavender_blush"},
[Generic44KeyCode.ON, Generic44KeyCode.LAVENDER_BLUSH],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "yellowish"},
[Generic44KeyCode.ON, Generic44KeyCode.YELLOWISH],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "cyan"},
[Generic44KeyCode.ON, Generic44KeyCode.CYAN],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "magenta"},
[Generic44KeyCode.ON, Generic44KeyCode.MAGENTA],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "ghost_white"},
[Generic44KeyCode.ON, Generic44KeyCode.GHOST_WHITE],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "yellow"},
[Generic44KeyCode.ON, Generic44KeyCode.YELLOW],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "aqua"},
[Generic44KeyCode.ON, Generic44KeyCode.AQUA],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "pink"},
[Generic44KeyCode.ON, Generic44KeyCode.PINK],
),
(
LEDIrDeviceType.GENERIC_44_KEY,
SERVICE_TURN_ON,
{ATTR_EFFECT: "light_cyan"},
[Generic44KeyCode.ON, Generic44KeyCode.LIGHT_CYAN],
),
],
)
@pytest.mark.usefixtures("infrared_codes")
async def test_light_actions(
hass: HomeAssistant,
mock_infrared_emitter_entity: MockInfraredEmitterEntity,
device_type: LEDIrDeviceType,
service: str,
service_data: dict[str, str],
expected_codes: list[
Generic13KeyCode | Generic24KeyCode | Generic40KeyCode | Generic44KeyCode
],
) -> None:
"""Test light actions."""
config_entry = MockConfigEntry(
domain=DOMAIN,
title="LED Infrared via Test IR emitter",
entry_id="1234567890",
data={
CONF_DEVICE_TYPE: device_type,
CONF_INFRARED_ENTITY_ID: EMITTER_ENTITY_ID,
},
)
config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()
assert config_entry.state is ConfigEntryState.LOADED
await hass.services.async_call(
LIGHT_DOMAIN,
service,
{ATTR_ENTITY_ID: "light.led_infrared_via_test_ir_emitter", **service_data},
blocking=True,
)
assert len(mock_infrared_emitter_entity.send_command_calls) == len(expected_codes)
assert mock_infrared_emitter_entity.send_command_calls == expected_codes