Compare commits

...

2 Commits

Author SHA1 Message Date
Erik
5cca680706 Allow passing trigger options to parametrize_trigger_states 2026-01-02 10:20:41 +01:00
Maikel Punie
0423639833 Bump velbusaio to 2026.1.1 (#160116) 2026-01-02 09:16:27 +01:00
19 changed files with 155 additions and 168 deletions

View File

@@ -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
View File

@@ -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

View File

@@ -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

View File

@@ -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."""

View File

@@ -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."""

View File

@@ -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."""

View File

@@ -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."""

View File

@@ -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})],

View File

@@ -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."""

View File

@@ -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."""

View File

@@ -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})],

View File

@@ -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."""

View File

@@ -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."""

View File

@@ -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."""

View File

@@ -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."""

View File

@@ -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."""

View File

@@ -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."""

View File

@@ -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."""

View File

@@ -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."""