mirror of
https://github.com/home-assistant/core.git
synced 2026-01-02 13:18:10 +00:00
Compare commits
2 Commits
tibber_dat
...
parametriz
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5cca680706 | ||
|
|
0423639833 |
@@ -14,7 +14,7 @@
|
||||
"velbus-protocol"
|
||||
],
|
||||
"quality_scale": "bronze",
|
||||
"requirements": ["velbus-aio==2026.1.0"],
|
||||
"requirements": ["velbus-aio==2026.1.1"],
|
||||
"usb": [
|
||||
{
|
||||
"pid": "0B1B",
|
||||
|
||||
2
requirements_all.txt
generated
2
requirements_all.txt
generated
@@ -3122,7 +3122,7 @@ vegehub==0.1.26
|
||||
vehicle==2.2.2
|
||||
|
||||
# homeassistant.components.velbus
|
||||
velbus-aio==2026.1.0
|
||||
velbus-aio==2026.1.1
|
||||
|
||||
# homeassistant.components.venstar
|
||||
venstarcolortouch==0.21
|
||||
|
||||
2
requirements_test_all.txt
generated
2
requirements_test_all.txt
generated
@@ -2607,7 +2607,7 @@ vegehub==0.1.26
|
||||
vehicle==2.2.2
|
||||
|
||||
# homeassistant.components.velbus
|
||||
velbus-aio==2026.1.0
|
||||
velbus-aio==2026.1.1
|
||||
|
||||
# homeassistant.components.venstar
|
||||
venstarcolortouch==0.21
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
from collections.abc import Iterable
|
||||
from enum import StrEnum
|
||||
import itertools
|
||||
from typing import TypedDict
|
||||
from typing import Any, TypedDict
|
||||
|
||||
from homeassistant.const import (
|
||||
ATTR_AREA_ID,
|
||||
@@ -167,12 +167,13 @@ class StateDescription(TypedDict):
|
||||
def parametrize_trigger_states(
|
||||
*,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any] | None = None,
|
||||
target_states: list[str | None | tuple[str | None, dict]],
|
||||
other_states: list[str | None | tuple[str | None, dict]],
|
||||
additional_attributes: dict | None = None,
|
||||
trigger_from_none: bool = True,
|
||||
retrigger_on_target_state: bool = False,
|
||||
) -> list[tuple[str, list[StateDescription]]]:
|
||||
) -> list[tuple[str, dict[str, Any], list[StateDescription]]]:
|
||||
"""Parametrize states and expected service call counts.
|
||||
|
||||
The target_states and other_states iterables are either iterables of
|
||||
@@ -189,6 +190,7 @@ def parametrize_trigger_states(
|
||||
"""
|
||||
|
||||
additional_attributes = additional_attributes or {}
|
||||
trigger_options = trigger_options or {}
|
||||
|
||||
def state_with_attributes(
|
||||
state: str | None | tuple[str | None, dict], count: int
|
||||
@@ -222,6 +224,7 @@ def parametrize_trigger_states(
|
||||
# Initial state None
|
||||
(
|
||||
trigger,
|
||||
trigger_options,
|
||||
list(
|
||||
itertools.chain.from_iterable(
|
||||
(
|
||||
@@ -240,6 +243,7 @@ def parametrize_trigger_states(
|
||||
# Initial state different from target state
|
||||
(
|
||||
trigger,
|
||||
trigger_options,
|
||||
# other_state,
|
||||
list(
|
||||
itertools.chain.from_iterable(
|
||||
@@ -257,6 +261,7 @@ def parametrize_trigger_states(
|
||||
# Initial state same as target state
|
||||
(
|
||||
trigger,
|
||||
trigger_options,
|
||||
list(
|
||||
itertools.chain.from_iterable(
|
||||
(
|
||||
@@ -276,6 +281,7 @@ def parametrize_trigger_states(
|
||||
# Initial state unavailable / unknown
|
||||
(
|
||||
trigger,
|
||||
trigger_options,
|
||||
list(
|
||||
itertools.chain.from_iterable(
|
||||
(
|
||||
@@ -291,6 +297,7 @@ def parametrize_trigger_states(
|
||||
),
|
||||
(
|
||||
trigger,
|
||||
trigger_options,
|
||||
list(
|
||||
itertools.chain.from_iterable(
|
||||
(
|
||||
@@ -311,6 +318,7 @@ def parametrize_trigger_states(
|
||||
tests.append(
|
||||
(
|
||||
trigger,
|
||||
trigger_options,
|
||||
list(
|
||||
itertools.chain.from_iterable(
|
||||
(
|
||||
@@ -338,7 +346,7 @@ def parametrize_trigger_states(
|
||||
async def arm_trigger(
|
||||
hass: HomeAssistant,
|
||||
trigger: str,
|
||||
trigger_options: dict | None,
|
||||
trigger_options: dict[str, Any] | None,
|
||||
trigger_target: dict,
|
||||
) -> None:
|
||||
"""Arm the specified trigger, call service test.automation when it triggers."""
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Test alarm control panel triggers."""
|
||||
|
||||
from collections.abc import Generator
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
@@ -75,7 +76,7 @@ async def test_alarm_control_panel_triggers_gated_by_labs_flag(
|
||||
parametrize_target_entities("alarm_control_panel"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="alarm_control_panel.armed",
|
||||
@@ -150,6 +151,7 @@ async def test_alarm_control_panel_state_trigger_behavior_any(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the alarm control panel state trigger fires when any alarm control panel state changes to a specific state."""
|
||||
@@ -185,7 +187,7 @@ async def test_alarm_control_panel_state_trigger_behavior_any(
|
||||
parametrize_target_entities("alarm_control_panel"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="alarm_control_panel.armed",
|
||||
@@ -260,6 +262,7 @@ async def test_alarm_control_panel_state_trigger_behavior_first(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the alarm control panel state trigger fires when the first alarm control panel changes to a specific state."""
|
||||
@@ -294,7 +297,7 @@ async def test_alarm_control_panel_state_trigger_behavior_first(
|
||||
parametrize_target_entities("alarm_control_panel"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="alarm_control_panel.armed",
|
||||
@@ -369,6 +372,7 @@ async def test_alarm_control_panel_state_trigger_behavior_last(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the alarm_control_panel state trigger fires when the last alarm_control_panel changes to a specific state."""
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Test assist satellite triggers."""
|
||||
|
||||
from collections.abc import Generator
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
@@ -69,7 +70,7 @@ async def test_assist_satellite_triggers_gated_by_labs_flag(
|
||||
parametrize_target_entities("assist_satellite"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="assist_satellite.idle",
|
||||
@@ -101,6 +102,7 @@ async def test_assist_satellite_state_trigger_behavior_any(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the assist satellite state trigger fires when any assist satellite state changes to a specific state."""
|
||||
@@ -136,7 +138,7 @@ async def test_assist_satellite_state_trigger_behavior_any(
|
||||
parametrize_target_entities("assist_satellite"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="assist_satellite.idle",
|
||||
@@ -168,6 +170,7 @@ async def test_assist_satellite_state_trigger_behavior_first(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the assist satellite state trigger fires when the first assist satellite changes to a specific state."""
|
||||
@@ -202,7 +205,7 @@ async def test_assist_satellite_state_trigger_behavior_first(
|
||||
parametrize_target_entities("assist_satellite"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="assist_satellite.idle",
|
||||
@@ -234,6 +237,7 @@ async def test_assist_satellite_state_trigger_behavior_last(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the assist_satellite state trigger fires when the last assist_satellite changes to a specific state."""
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Test binary sensor trigger."""
|
||||
|
||||
from collections.abc import Generator
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
@@ -71,7 +72,7 @@ async def test_binary_sensor_triggers_gated_by_labs_flag(
|
||||
parametrize_target_entities("binary_sensor"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="binary_sensor.occupancy_detected",
|
||||
@@ -97,6 +98,7 @@ async def test_binary_sensor_state_attribute_trigger_behavior_any(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the binary sensor state trigger fires when any binary sensor state changes to a specific state."""
|
||||
@@ -140,7 +142,7 @@ async def test_binary_sensor_state_attribute_trigger_behavior_any(
|
||||
parametrize_target_entities("binary_sensor"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="binary_sensor.occupancy_detected",
|
||||
@@ -166,6 +168,7 @@ async def test_binary_sensor_state_attribute_trigger_behavior_first(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the binary sensor state trigger fires when the first binary sensor state changes to a specific state."""
|
||||
@@ -208,7 +211,7 @@ async def test_binary_sensor_state_attribute_trigger_behavior_first(
|
||||
parametrize_target_entities("binary_sensor"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="binary_sensor.occupancy_detected",
|
||||
@@ -234,6 +237,7 @@ async def test_binary_sensor_state_attribute_trigger_behavior_last(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the binary sensor state trigger fires when the last binary sensor state changes to a specific state."""
|
||||
|
||||
@@ -153,37 +153,12 @@ async def test_climate_trigger_validation(
|
||||
)
|
||||
|
||||
|
||||
def parametrize_climate_trigger_states(
|
||||
*,
|
||||
trigger: str,
|
||||
trigger_options: dict | None = None,
|
||||
target_states: list[str | None | tuple[str | None, dict]],
|
||||
other_states: list[str | None | tuple[str | None, dict]],
|
||||
additional_attributes: dict | None = None,
|
||||
trigger_from_none: bool = True,
|
||||
retrigger_on_target_state: bool = False,
|
||||
) -> list[tuple[str, dict[str, Any], list[StateDescription]]]:
|
||||
"""Parametrize states and expected service call counts."""
|
||||
trigger_options = trigger_options or {}
|
||||
return [
|
||||
(s[0], trigger_options, *s[1:])
|
||||
for s in parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
target_states=target_states,
|
||||
other_states=other_states,
|
||||
additional_attributes=additional_attributes,
|
||||
trigger_from_none=trigger_from_none,
|
||||
retrigger_on_target_state=retrigger_on_target_state,
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
def parametrize_xxx_changed_trigger_states(
|
||||
trigger: str, attribute: str
|
||||
) -> list[tuple[str, dict[str, Any], list[StateDescription]]]:
|
||||
"""Parametrize states and expected service call counts for xxx_changed triggers."""
|
||||
return [
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={},
|
||||
target_states=[
|
||||
@@ -194,7 +169,7 @@ def parametrize_xxx_changed_trigger_states(
|
||||
other_states=[(HVACMode.AUTO, {attribute: None})],
|
||||
retrigger_on_target_state=True,
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={CONF_ABOVE: 10},
|
||||
target_states=[
|
||||
@@ -207,7 +182,7 @@ def parametrize_xxx_changed_trigger_states(
|
||||
],
|
||||
retrigger_on_target_state=True,
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={CONF_BELOW: 90},
|
||||
target_states=[
|
||||
@@ -228,7 +203,7 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
) -> list[tuple[str, dict[str, Any], list[StateDescription]]]:
|
||||
"""Parametrize states and expected service call counts for xxx_crossed_threshold triggers."""
|
||||
return [
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={
|
||||
CONF_THRESHOLD_TYPE: ThresholdType.BETWEEN,
|
||||
@@ -245,7 +220,7 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
(HVACMode.AUTO, {attribute: 100}),
|
||||
],
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={
|
||||
CONF_THRESHOLD_TYPE: ThresholdType.OUTSIDE,
|
||||
@@ -262,7 +237,7 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
(HVACMode.AUTO, {attribute: 60}),
|
||||
],
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={
|
||||
CONF_THRESHOLD_TYPE: ThresholdType.ABOVE,
|
||||
@@ -277,7 +252,7 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
(HVACMode.AUTO, {attribute: 0}),
|
||||
],
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={
|
||||
CONF_THRESHOLD_TYPE: ThresholdType.BELOW,
|
||||
@@ -303,18 +278,18 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.hvac_mode_changed",
|
||||
trigger_options={CONF_HVAC_MODE: [HVACMode.HEAT, HVACMode.COOL]},
|
||||
target_states=[HVACMode.HEAT, HVACMode.COOL],
|
||||
other_states=other_states([HVACMode.HEAT, HVACMode.COOL]),
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.turned_off",
|
||||
target_states=[HVACMode.OFF],
|
||||
other_states=other_states(HVACMode.OFF),
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.turned_on",
|
||||
target_states=[
|
||||
HVACMode.AUTO,
|
||||
@@ -400,17 +375,17 @@ async def test_climate_state_trigger_behavior_any(
|
||||
*parametrize_xxx_crossed_threshold_trigger_states(
|
||||
"climate.target_temperature_crossed_threshold", ATTR_TEMPERATURE
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.started_cooling",
|
||||
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.COOLING})],
|
||||
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.started_drying",
|
||||
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.DRYING})],
|
||||
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.started_heating",
|
||||
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.HEATING})],
|
||||
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
|
||||
@@ -463,18 +438,18 @@ async def test_climate_state_attribute_trigger_behavior_any(
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.hvac_mode_changed",
|
||||
trigger_options={CONF_HVAC_MODE: [HVACMode.HEAT, HVACMode.COOL]},
|
||||
target_states=[HVACMode.HEAT, HVACMode.COOL],
|
||||
other_states=other_states([HVACMode.HEAT, HVACMode.COOL]),
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.turned_off",
|
||||
target_states=[HVACMode.OFF],
|
||||
other_states=other_states(HVACMode.OFF),
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.turned_on",
|
||||
target_states=[
|
||||
HVACMode.AUTO,
|
||||
@@ -549,17 +524,17 @@ async def test_climate_state_trigger_behavior_first(
|
||||
*parametrize_xxx_crossed_threshold_trigger_states(
|
||||
"climate.target_temperature_crossed_threshold", ATTR_TEMPERATURE
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.started_cooling",
|
||||
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.COOLING})],
|
||||
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.started_drying",
|
||||
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.DRYING})],
|
||||
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.started_heating",
|
||||
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.HEATING})],
|
||||
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
|
||||
@@ -613,18 +588,18 @@ async def test_climate_state_attribute_trigger_behavior_first(
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.hvac_mode_changed",
|
||||
trigger_options={CONF_HVAC_MODE: [HVACMode.HEAT, HVACMode.COOL]},
|
||||
target_states=[HVACMode.HEAT, HVACMode.COOL],
|
||||
other_states=other_states([HVACMode.HEAT, HVACMode.COOL]),
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.turned_off",
|
||||
target_states=[HVACMode.OFF],
|
||||
other_states=other_states(HVACMode.OFF),
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.turned_on",
|
||||
target_states=[
|
||||
HVACMode.AUTO,
|
||||
@@ -698,17 +673,17 @@ async def test_climate_state_trigger_behavior_last(
|
||||
*parametrize_xxx_crossed_threshold_trigger_states(
|
||||
"climate.target_temperature_crossed_threshold", ATTR_TEMPERATURE
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.started_cooling",
|
||||
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.COOLING})],
|
||||
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.started_drying",
|
||||
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.DRYING})],
|
||||
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
|
||||
),
|
||||
*parametrize_climate_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="climate.started_heating",
|
||||
target_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.HEATING})],
|
||||
other_states=[(HVACMode.AUTO, {ATTR_HVAC_ACTION: HVACAction.IDLE})],
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Test device_tracker trigger."""
|
||||
|
||||
from collections.abc import Generator
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
@@ -69,7 +70,7 @@ async def test_device_tracker_triggers_gated_by_labs_flag(
|
||||
parametrize_target_entities("device_tracker"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="device_tracker.entered_home",
|
||||
@@ -91,6 +92,7 @@ async def test_device_tracker_home_trigger_behavior_any(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the device_tracker home triggers when any device_tracker changes to a specific state."""
|
||||
@@ -126,7 +128,7 @@ async def test_device_tracker_home_trigger_behavior_any(
|
||||
parametrize_target_entities("device_tracker"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="device_tracker.entered_home",
|
||||
@@ -148,6 +150,7 @@ async def test_device_tracker_state_trigger_behavior_first(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the device_tracker home triggers when the first device_tracker changes to a specific state."""
|
||||
@@ -182,7 +185,7 @@ async def test_device_tracker_state_trigger_behavior_first(
|
||||
parametrize_target_entities("device_tracker"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="device_tracker.entered_home",
|
||||
@@ -204,6 +207,7 @@ async def test_device_tracker_state_trigger_behavior_last(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the device_tracker home triggers when the last device_tracker changes to a specific state."""
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Test fan trigger."""
|
||||
|
||||
from collections.abc import Generator
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
@@ -65,7 +66,7 @@ async def test_fan_triggers_gated_by_labs_flag(
|
||||
parametrize_target_entities("fan"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="fan.turned_on",
|
||||
@@ -87,6 +88,7 @@ async def test_fan_state_trigger_behavior_any(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the fan state trigger fires when any fan state changes to a specific state."""
|
||||
@@ -122,7 +124,7 @@ async def test_fan_state_trigger_behavior_any(
|
||||
parametrize_target_entities("fan"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="fan.turned_on",
|
||||
@@ -144,6 +146,7 @@ async def test_fan_state_trigger_behavior_first(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the fan state trigger fires when the first fan changes to a specific state."""
|
||||
@@ -178,7 +181,7 @@ async def test_fan_state_trigger_behavior_first(
|
||||
parametrize_target_entities("fan"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="fan.turned_on",
|
||||
@@ -200,6 +203,7 @@ async def test_fan_state_trigger_behavior_last(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the fan state trigger fires when the last fan changes to a specific state."""
|
||||
|
||||
@@ -82,37 +82,12 @@ async def test_humidifier_triggers_gated_by_labs_flag(
|
||||
) in caplog.text
|
||||
|
||||
|
||||
def parametrize_humidifier_trigger_states(
|
||||
*,
|
||||
trigger: str,
|
||||
trigger_options: dict | None = None,
|
||||
target_states: list[str | None | tuple[str | None, dict]],
|
||||
other_states: list[str | None | tuple[str | None, dict]],
|
||||
additional_attributes: dict | None = None,
|
||||
trigger_from_none: bool = True,
|
||||
retrigger_on_target_state: bool = False,
|
||||
) -> list[tuple[str, dict[str, Any], list[StateDescription]]]:
|
||||
"""Parametrize states and expected service call counts."""
|
||||
trigger_options = trigger_options or {}
|
||||
return [
|
||||
(s[0], trigger_options, *s[1:])
|
||||
for s in parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
target_states=target_states,
|
||||
other_states=other_states,
|
||||
additional_attributes=additional_attributes,
|
||||
trigger_from_none=trigger_from_none,
|
||||
retrigger_on_target_state=retrigger_on_target_state,
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
def parametrize_xxx_changed_trigger_states(
|
||||
trigger: str, attribute: str
|
||||
) -> list[tuple[str, dict[str, Any], list[StateDescription]]]:
|
||||
"""Parametrize states and expected service call counts for xxx_changed triggers."""
|
||||
return [
|
||||
*parametrize_humidifier_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={},
|
||||
target_states=[
|
||||
@@ -123,7 +98,7 @@ def parametrize_xxx_changed_trigger_states(
|
||||
other_states=[(STATE_ON, {attribute: None})],
|
||||
retrigger_on_target_state=True,
|
||||
),
|
||||
*parametrize_humidifier_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={CONF_ABOVE: 10},
|
||||
target_states=[
|
||||
@@ -136,7 +111,7 @@ def parametrize_xxx_changed_trigger_states(
|
||||
],
|
||||
retrigger_on_target_state=True,
|
||||
),
|
||||
*parametrize_humidifier_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={CONF_BELOW: 90},
|
||||
target_states=[
|
||||
@@ -157,7 +132,7 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
) -> list[tuple[str, dict[str, Any], list[StateDescription]]]:
|
||||
"""Parametrize states and expected service call counts for xxx_crossed_threshold triggers."""
|
||||
return [
|
||||
*parametrize_humidifier_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={
|
||||
CONF_THRESHOLD_TYPE: ThresholdType.BETWEEN,
|
||||
@@ -174,7 +149,7 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
(STATE_ON, {attribute: 100}),
|
||||
],
|
||||
),
|
||||
*parametrize_humidifier_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={
|
||||
CONF_THRESHOLD_TYPE: ThresholdType.OUTSIDE,
|
||||
@@ -191,7 +166,7 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
(STATE_ON, {attribute: 60}),
|
||||
],
|
||||
),
|
||||
*parametrize_humidifier_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={
|
||||
CONF_THRESHOLD_TYPE: ThresholdType.ABOVE,
|
||||
@@ -206,7 +181,7 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
(STATE_ON, {attribute: 0}),
|
||||
],
|
||||
),
|
||||
*parametrize_humidifier_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={
|
||||
CONF_THRESHOLD_TYPE: ThresholdType.BELOW,
|
||||
@@ -230,7 +205,7 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
parametrize_target_entities("humidifier"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="humidifier.turned_on",
|
||||
@@ -252,6 +227,7 @@ async def test_humidifier_state_trigger_behavior_any(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the humidifier state trigger fires when any humidifier state changes to a specific state."""
|
||||
@@ -295,12 +271,12 @@ async def test_humidifier_state_trigger_behavior_any(
|
||||
*parametrize_xxx_crossed_threshold_trigger_states(
|
||||
"humidifier.current_humidity_crossed_threshold", ATTR_CURRENT_HUMIDITY
|
||||
),
|
||||
*parametrize_humidifier_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="humidifier.started_drying",
|
||||
target_states=[(STATE_ON, {ATTR_ACTION: HumidifierAction.DRYING})],
|
||||
other_states=[(STATE_ON, {ATTR_ACTION: HumidifierAction.IDLE})],
|
||||
),
|
||||
*parametrize_humidifier_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="humidifier.started_humidifying",
|
||||
target_states=[(STATE_ON, {ATTR_ACTION: HumidifierAction.HUMIDIFYING})],
|
||||
other_states=[(STATE_ON, {ATTR_ACTION: HumidifierAction.IDLE})],
|
||||
@@ -351,7 +327,7 @@ async def test_humidifier_state_attribute_trigger_behavior_any(
|
||||
parametrize_target_entities("humidifier"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="humidifier.turned_on",
|
||||
@@ -373,6 +349,7 @@ async def test_humidifier_state_trigger_behavior_first(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the humidifier state trigger fires when the first humidifier changes to a specific state."""
|
||||
@@ -412,12 +389,12 @@ async def test_humidifier_state_trigger_behavior_first(
|
||||
*parametrize_xxx_crossed_threshold_trigger_states(
|
||||
"humidifier.current_humidity_crossed_threshold", ATTR_CURRENT_HUMIDITY
|
||||
),
|
||||
*parametrize_humidifier_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="humidifier.started_drying",
|
||||
target_states=[(STATE_ON, {ATTR_ACTION: HumidifierAction.DRYING})],
|
||||
other_states=[(STATE_ON, {ATTR_ACTION: HumidifierAction.IDLE})],
|
||||
),
|
||||
*parametrize_humidifier_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="humidifier.started_humidifying",
|
||||
target_states=[(STATE_ON, {ATTR_ACTION: HumidifierAction.HUMIDIFYING})],
|
||||
other_states=[(STATE_ON, {ATTR_ACTION: HumidifierAction.IDLE})],
|
||||
@@ -469,7 +446,7 @@ async def test_humidifier_state_attribute_trigger_behavior_first(
|
||||
parametrize_target_entities("humidifier"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="humidifier.turned_on",
|
||||
@@ -491,6 +468,7 @@ async def test_humidifier_state_trigger_behavior_last(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the humidifier state trigger fires when the last humidifier changes to a specific state."""
|
||||
@@ -529,12 +507,12 @@ async def test_humidifier_state_trigger_behavior_last(
|
||||
*parametrize_xxx_crossed_threshold_trigger_states(
|
||||
"humidifier.current_humidity_crossed_threshold", ATTR_CURRENT_HUMIDITY
|
||||
),
|
||||
*parametrize_humidifier_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="humidifier.started_drying",
|
||||
target_states=[(STATE_ON, {ATTR_ACTION: HumidifierAction.DRYING})],
|
||||
other_states=[(STATE_ON, {ATTR_ACTION: HumidifierAction.IDLE})],
|
||||
),
|
||||
*parametrize_humidifier_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger="humidifier.started_humidifying",
|
||||
target_states=[(STATE_ON, {ATTR_ACTION: HumidifierAction.HUMIDIFYING})],
|
||||
other_states=[(STATE_ON, {ATTR_ACTION: HumidifierAction.IDLE})],
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Test lawn mower triggers."""
|
||||
|
||||
from collections.abc import Generator
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
@@ -69,7 +70,7 @@ async def test_lawn_mower_triggers_gated_by_labs_flag(
|
||||
parametrize_target_entities("lawn_mower"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="lawn_mower.docked",
|
||||
@@ -101,6 +102,7 @@ async def test_lawn_mower_state_trigger_behavior_any(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the lawn mower state trigger fires when any lawn mower state changes to a specific state."""
|
||||
@@ -136,7 +138,7 @@ async def test_lawn_mower_state_trigger_behavior_any(
|
||||
parametrize_target_entities("lawn_mower"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="lawn_mower.docked",
|
||||
@@ -168,6 +170,7 @@ async def test_lawn_mower_state_trigger_behavior_first(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the lawn mower state trigger fires when the first lawn mower changes to a specific state."""
|
||||
@@ -202,7 +205,7 @@ async def test_lawn_mower_state_trigger_behavior_first(
|
||||
parametrize_target_entities("lawn_mower"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="lawn_mower.docked",
|
||||
@@ -234,6 +237,7 @@ async def test_lawn_mower_state_trigger_behavior_last(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the lawn_mower state trigger fires when the last lawn_mower changes to a specific state."""
|
||||
|
||||
@@ -76,37 +76,12 @@ async def test_light_triggers_gated_by_labs_flag(
|
||||
) in caplog.text
|
||||
|
||||
|
||||
def parametrize_light_trigger_states(
|
||||
*,
|
||||
trigger: str,
|
||||
trigger_options: dict | None = None,
|
||||
target_states: list[str | None | tuple[str | None, dict]],
|
||||
other_states: list[str | None | tuple[str | None, dict]],
|
||||
additional_attributes: dict | None = None,
|
||||
trigger_from_none: bool = True,
|
||||
retrigger_on_target_state: bool = False,
|
||||
) -> list[tuple[str, dict[str, Any], list[StateDescription]]]:
|
||||
"""Parametrize states and expected service call counts."""
|
||||
trigger_options = trigger_options or {}
|
||||
return [
|
||||
(s[0], trigger_options, *s[1:])
|
||||
for s in parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
target_states=target_states,
|
||||
other_states=other_states,
|
||||
additional_attributes=additional_attributes,
|
||||
trigger_from_none=trigger_from_none,
|
||||
retrigger_on_target_state=retrigger_on_target_state,
|
||||
)
|
||||
]
|
||||
|
||||
|
||||
def parametrize_xxx_changed_trigger_states(
|
||||
trigger: str, attribute: str
|
||||
) -> list[tuple[str, dict[str, Any], list[StateDescription]]]:
|
||||
"""Parametrize states and expected service call counts for xxx_changed triggers."""
|
||||
return [
|
||||
*parametrize_light_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
target_states=[
|
||||
(STATE_ON, {attribute: 0}),
|
||||
@@ -116,7 +91,7 @@ def parametrize_xxx_changed_trigger_states(
|
||||
other_states=[(STATE_ON, {attribute: None})],
|
||||
retrigger_on_target_state=True,
|
||||
),
|
||||
*parametrize_light_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={CONF_ABOVE: 10},
|
||||
target_states=[
|
||||
@@ -129,7 +104,7 @@ def parametrize_xxx_changed_trigger_states(
|
||||
],
|
||||
retrigger_on_target_state=True,
|
||||
),
|
||||
*parametrize_light_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={CONF_BELOW: 90},
|
||||
target_states=[
|
||||
@@ -150,7 +125,7 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
) -> list[tuple[str, dict[str, Any], list[StateDescription]]]:
|
||||
"""Parametrize states and expected service call counts for xxx_crossed_threshold triggers."""
|
||||
return [
|
||||
*parametrize_light_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={
|
||||
CONF_THRESHOLD_TYPE: ThresholdType.BETWEEN,
|
||||
@@ -167,7 +142,7 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
(STATE_ON, {attribute: 100}),
|
||||
],
|
||||
),
|
||||
*parametrize_light_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={
|
||||
CONF_THRESHOLD_TYPE: ThresholdType.OUTSIDE,
|
||||
@@ -184,7 +159,7 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
(STATE_ON, {attribute: 60}),
|
||||
],
|
||||
),
|
||||
*parametrize_light_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={
|
||||
CONF_THRESHOLD_TYPE: ThresholdType.ABOVE,
|
||||
@@ -199,7 +174,7 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
(STATE_ON, {attribute: 0}),
|
||||
],
|
||||
),
|
||||
*parametrize_light_trigger_states(
|
||||
*parametrize_trigger_states(
|
||||
trigger=trigger,
|
||||
trigger_options={
|
||||
CONF_THRESHOLD_TYPE: ThresholdType.BELOW,
|
||||
@@ -223,7 +198,7 @@ def parametrize_xxx_crossed_threshold_trigger_states(
|
||||
parametrize_target_entities("light"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="light.turned_on",
|
||||
@@ -245,6 +220,7 @@ async def test_light_state_trigger_behavior_any(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the light state trigger fires when any light state changes to a specific state."""
|
||||
@@ -334,7 +310,7 @@ async def test_light_state_attribute_trigger_behavior_any(
|
||||
parametrize_target_entities("light"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="light.turned_on",
|
||||
@@ -356,6 +332,7 @@ async def test_light_state_trigger_behavior_first(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the light state trigger fires when the first light changes to a specific state."""
|
||||
@@ -442,7 +419,7 @@ async def test_light_state_attribute_trigger_behavior_first(
|
||||
parametrize_target_entities("light"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="light.turned_on",
|
||||
@@ -464,6 +441,7 @@ async def test_light_state_trigger_behavior_last(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the light state trigger fires when the last light changes to a specific state."""
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Test lock triggers."""
|
||||
|
||||
from collections.abc import Generator
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
@@ -69,7 +70,7 @@ async def test_lock_triggers_gated_by_labs_flag(
|
||||
parametrize_target_entities(DOMAIN),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="lock.jammed",
|
||||
@@ -101,6 +102,7 @@ async def test_lock_state_trigger_behavior_any(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the lock state trigger fires when any lock state changes to a specific state."""
|
||||
@@ -136,7 +138,7 @@ async def test_lock_state_trigger_behavior_any(
|
||||
parametrize_target_entities(DOMAIN),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="lock.jammed",
|
||||
@@ -168,6 +170,7 @@ async def test_lock_state_trigger_behavior_first(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the lock state trigger fires when the first lock changes to a specific state."""
|
||||
@@ -202,7 +205,7 @@ async def test_lock_state_trigger_behavior_first(
|
||||
parametrize_target_entities(DOMAIN),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="lock.jammed",
|
||||
@@ -234,6 +237,7 @@ async def test_lock_state_trigger_behavior_last(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the lock state trigger fires when the last lock changes to a specific state."""
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Test media player trigger."""
|
||||
|
||||
from collections.abc import Generator
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
@@ -65,7 +66,7 @@ async def test_media_player_triggers_gated_by_labs_flag(
|
||||
parametrize_target_entities("media_player"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="media_player.stopped_playing",
|
||||
@@ -90,6 +91,7 @@ async def test_media_player_state_trigger_behavior_any(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the media player state trigger fires when any media player state changes to a specific state."""
|
||||
@@ -125,7 +127,7 @@ async def test_media_player_state_trigger_behavior_any(
|
||||
parametrize_target_entities("media_player"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="media_player.stopped_playing",
|
||||
@@ -150,6 +152,7 @@ async def test_media_player_state_trigger_behavior_first(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the media player state trigger fires when the first media player changes to a specific state."""
|
||||
@@ -184,7 +187,7 @@ async def test_media_player_state_trigger_behavior_first(
|
||||
parametrize_target_entities("media_player"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="media_player.stopped_playing",
|
||||
@@ -209,6 +212,7 @@ async def test_media_player_state_trigger_behavior_last(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the media player state trigger fires when the last media player changes to a specific state."""
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Test siren triggers."""
|
||||
|
||||
from collections.abc import Generator
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
@@ -66,7 +67,7 @@ async def test_siren_triggers_gated_by_labs_flag(
|
||||
parametrize_target_entities(DOMAIN),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="siren.turned_off",
|
||||
@@ -88,6 +89,7 @@ async def test_siren_state_trigger_behavior_any(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the siren state trigger fires when any siren state changes to a specific state."""
|
||||
@@ -123,7 +125,7 @@ async def test_siren_state_trigger_behavior_any(
|
||||
parametrize_target_entities(DOMAIN),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="siren.turned_off",
|
||||
@@ -145,6 +147,7 @@ async def test_siren_state_trigger_behavior_first(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the siren state trigger fires when the first siren changes to a specific state."""
|
||||
@@ -179,7 +182,7 @@ async def test_siren_state_trigger_behavior_first(
|
||||
parametrize_target_entities(DOMAIN),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="siren.turned_off",
|
||||
@@ -201,6 +204,7 @@ async def test_siren_state_trigger_behavior_last(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the siren state trigger fires when the last siren changes to a specific state."""
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Test switch triggers."""
|
||||
|
||||
from collections.abc import Generator
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
@@ -66,7 +67,7 @@ async def test_switch_triggers_gated_by_labs_flag(
|
||||
parametrize_target_entities(DOMAIN),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="switch.turned_off",
|
||||
@@ -88,6 +89,7 @@ async def test_switch_state_trigger_behavior_any(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the switch state trigger fires when any switch state changes to a specific state."""
|
||||
@@ -123,7 +125,7 @@ async def test_switch_state_trigger_behavior_any(
|
||||
parametrize_target_entities(DOMAIN),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="switch.turned_off",
|
||||
@@ -145,6 +147,7 @@ async def test_switch_state_trigger_behavior_first(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the switch state trigger fires when the first switch changes to a specific state."""
|
||||
@@ -179,7 +182,7 @@ async def test_switch_state_trigger_behavior_first(
|
||||
parametrize_target_entities(DOMAIN),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="switch.turned_off",
|
||||
@@ -201,6 +204,7 @@ async def test_switch_state_trigger_behavior_last(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the switch state trigger fires when the last switch changes to a specific state."""
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Test update triggers."""
|
||||
|
||||
from collections.abc import Generator
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
@@ -65,7 +66,7 @@ async def test_update_triggers_gated_by_labs_flag(
|
||||
parametrize_target_entities(DOMAIN),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="update.update_became_available",
|
||||
@@ -82,6 +83,7 @@ async def test_update_state_trigger_behavior_any(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the update state trigger fires when any update state changes to a specific state."""
|
||||
@@ -117,7 +119,7 @@ async def test_update_state_trigger_behavior_any(
|
||||
parametrize_target_entities(DOMAIN),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="update.update_became_available",
|
||||
@@ -134,6 +136,7 @@ async def test_update_state_trigger_behavior_first(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the update state trigger fires when the first update changes to a specific state."""
|
||||
@@ -168,7 +171,7 @@ async def test_update_state_trigger_behavior_first(
|
||||
parametrize_target_entities(DOMAIN),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="update.update_became_available",
|
||||
@@ -185,6 +188,7 @@ async def test_update_state_trigger_behavior_last(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the update state trigger fires when the last update changes to a specific state."""
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"""Test vacuum triggers."""
|
||||
|
||||
from collections.abc import Generator
|
||||
from typing import Any
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
@@ -69,7 +70,7 @@ async def test_vacuum_triggers_gated_by_labs_flag(
|
||||
parametrize_target_entities("vacuum"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="vacuum.docked",
|
||||
@@ -101,6 +102,7 @@ async def test_vacuum_state_trigger_behavior_any(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the vacuum state trigger fires when any vacuum state changes to a specific state."""
|
||||
@@ -136,7 +138,7 @@ async def test_vacuum_state_trigger_behavior_any(
|
||||
parametrize_target_entities("vacuum"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="vacuum.docked",
|
||||
@@ -168,6 +170,7 @@ async def test_vacuum_state_trigger_behavior_first(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the vacuum state trigger fires when the first vacuum changes to a specific state."""
|
||||
@@ -202,7 +205,7 @@ async def test_vacuum_state_trigger_behavior_first(
|
||||
parametrize_target_entities("vacuum"),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
("trigger", "states"),
|
||||
("trigger", "trigger_options", "states"),
|
||||
[
|
||||
*parametrize_trigger_states(
|
||||
trigger="vacuum.docked",
|
||||
@@ -234,6 +237,7 @@ async def test_vacuum_state_trigger_behavior_last(
|
||||
entity_id: str,
|
||||
entities_in_target: int,
|
||||
trigger: str,
|
||||
trigger_options: dict[str, Any],
|
||||
states: list[StateDescription],
|
||||
) -> None:
|
||||
"""Test that the vacuum state trigger fires when the last vacuum changes to a specific state."""
|
||||
|
||||
Reference in New Issue
Block a user