mirror of
https://github.com/home-assistant/core.git
synced 2025-07-26 22:57:17 +00:00
Fix flapping event template test (#42614)
This commit is contained in:
parent
a396f8f76f
commit
8eb89cdb46
@ -2123,68 +2123,73 @@ async def test_track_template_with_time_default(hass):
|
|||||||
|
|
||||||
async def test_track_template_with_time_that_leaves_scope(hass):
|
async def test_track_template_with_time_that_leaves_scope(hass):
|
||||||
"""Test tracking template with time."""
|
"""Test tracking template with time."""
|
||||||
|
now = dt_util.utcnow()
|
||||||
|
test_time = datetime(now.year + 1, 5, 24, 11, 59, 1, 500000, tzinfo=dt_util.UTC)
|
||||||
|
|
||||||
hass.states.async_set("binary_sensor.washing_machine", "on")
|
with patch("homeassistant.util.dt.utcnow", return_value=test_time):
|
||||||
specific_runs = []
|
hass.states.async_set("binary_sensor.washing_machine", "on")
|
||||||
template_complex = Template(
|
specific_runs = []
|
||||||
"""
|
template_complex = Template(
|
||||||
{% if states.binary_sensor.washing_machine.state == "on" %}
|
"""
|
||||||
{{ now() }}
|
{% if states.binary_sensor.washing_machine.state == "on" %}
|
||||||
{% else %}
|
{{ now() }}
|
||||||
{{ states.binary_sensor.washing_machine.last_updated }}
|
{% else %}
|
||||||
{% endif %}
|
{{ states.binary_sensor.washing_machine.last_updated }}
|
||||||
""",
|
{% endif %}
|
||||||
hass,
|
""",
|
||||||
)
|
hass,
|
||||||
|
)
|
||||||
|
|
||||||
def specific_run_callback(event, updates):
|
def specific_run_callback(event, updates):
|
||||||
specific_runs.append(updates.pop().result)
|
specific_runs.append(updates.pop().result)
|
||||||
|
|
||||||
info = async_track_template_result(
|
info = async_track_template_result(
|
||||||
hass, [TrackTemplate(template_complex, None)], specific_run_callback
|
hass, [TrackTemplate(template_complex, None)], specific_run_callback
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert info.listeners == {
|
assert info.listeners == {
|
||||||
"all": False,
|
"all": False,
|
||||||
"domains": set(),
|
"domains": set(),
|
||||||
"entities": {"binary_sensor.washing_machine"},
|
"entities": {"binary_sensor.washing_machine"},
|
||||||
"time": True,
|
"time": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
hass.states.async_set("binary_sensor.washing_machine", "off")
|
hass.states.async_set("binary_sensor.washing_machine", "off")
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert info.listeners == {
|
assert info.listeners == {
|
||||||
"all": False,
|
"all": False,
|
||||||
"domains": set(),
|
"domains": set(),
|
||||||
"entities": {"binary_sensor.washing_machine"},
|
"entities": {"binary_sensor.washing_machine"},
|
||||||
"time": False,
|
"time": False,
|
||||||
}
|
}
|
||||||
|
|
||||||
hass.states.async_set("binary_sensor.washing_machine", "on")
|
hass.states.async_set("binary_sensor.washing_machine", "on")
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
assert info.listeners == {
|
assert info.listeners == {
|
||||||
"all": False,
|
"all": False,
|
||||||
"domains": set(),
|
"domains": set(),
|
||||||
"entities": {"binary_sensor.washing_machine"},
|
"entities": {"binary_sensor.washing_machine"},
|
||||||
"time": True,
|
"time": True,
|
||||||
}
|
}
|
||||||
|
|
||||||
# Verify we do not update before the minute rolls over
|
# Verify we do not update before the minute rolls over
|
||||||
callback_count_before_time_change = len(specific_runs)
|
callback_count_before_time_change = len(specific_runs)
|
||||||
test_time = dt_util.utcnow().replace(second=1)
|
async_fire_time_changed(hass, test_time)
|
||||||
async_fire_time_changed(hass, test_time)
|
await hass.async_block_till_done()
|
||||||
await hass.async_block_till_done()
|
assert len(specific_runs) == callback_count_before_time_change
|
||||||
async_fire_time_changed(hass, test_time + timedelta(seconds=58))
|
|
||||||
await hass.async_block_till_done()
|
|
||||||
assert len(specific_runs) == callback_count_before_time_change
|
|
||||||
|
|
||||||
# Verify we do update on the next change of minute
|
async_fire_time_changed(hass, test_time + timedelta(seconds=58))
|
||||||
async_fire_time_changed(hass, test_time + timedelta(seconds=59))
|
await hass.async_block_till_done()
|
||||||
await hass.async_block_till_done()
|
assert len(specific_runs) == callback_count_before_time_change
|
||||||
assert len(specific_runs) == callback_count_before_time_change + 1
|
|
||||||
|
# Verify we do update on the next change of minute
|
||||||
|
async_fire_time_changed(hass, test_time + timedelta(seconds=59))
|
||||||
|
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert len(specific_runs) == callback_count_before_time_change + 1
|
||||||
|
|
||||||
info.async_remove()
|
info.async_remove()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user