mirror of
https://github.com/home-assistant/core.git
synced 2025-08-06 06:05:10 +02:00
fix more tests
This commit is contained in:
@@ -260,49 +260,49 @@ async def _test_self_reset(hass, config, start_time, expect_reset=True):
|
|||||||
assert state.state == "5"
|
assert state.state == "5"
|
||||||
|
|
||||||
|
|
||||||
async def test_self_reset_hourly(hass):
|
async def test_self_reset_hourly(hass, legacy_patchable_time):
|
||||||
"""Test hourly reset of meter."""
|
"""Test hourly reset of meter."""
|
||||||
await _test_self_reset(
|
await _test_self_reset(
|
||||||
hass, gen_config("hourly"), "2017-12-31T23:59:00.000000+00:00"
|
hass, gen_config("hourly"), "2017-12-31T23:59:00.000000+00:00"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_self_reset_daily(hass):
|
async def test_self_reset_daily(hass, legacy_patchable_time):
|
||||||
"""Test daily reset of meter."""
|
"""Test daily reset of meter."""
|
||||||
await _test_self_reset(
|
await _test_self_reset(
|
||||||
hass, gen_config("daily"), "2017-12-31T23:59:00.000000+00:00"
|
hass, gen_config("daily"), "2017-12-31T23:59:00.000000+00:00"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_self_reset_weekly(hass):
|
async def test_self_reset_weekly(hass, legacy_patchable_time):
|
||||||
"""Test weekly reset of meter."""
|
"""Test weekly reset of meter."""
|
||||||
await _test_self_reset(
|
await _test_self_reset(
|
||||||
hass, gen_config("weekly"), "2017-12-31T23:59:00.000000+00:00"
|
hass, gen_config("weekly"), "2017-12-31T23:59:00.000000+00:00"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_self_reset_monthly(hass):
|
async def test_self_reset_monthly(hass, legacy_patchable_time):
|
||||||
"""Test monthly reset of meter."""
|
"""Test monthly reset of meter."""
|
||||||
await _test_self_reset(
|
await _test_self_reset(
|
||||||
hass, gen_config("monthly"), "2017-12-31T23:59:00.000000+00:00"
|
hass, gen_config("monthly"), "2017-12-31T23:59:00.000000+00:00"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_self_reset_quarterly(hass):
|
async def test_self_reset_quarterly(hass, legacy_patchable_time):
|
||||||
"""Test quarterly reset of meter."""
|
"""Test quarterly reset of meter."""
|
||||||
await _test_self_reset(
|
await _test_self_reset(
|
||||||
hass, gen_config("quarterly"), "2017-03-31T23:59:00.000000+00:00"
|
hass, gen_config("quarterly"), "2017-03-31T23:59:00.000000+00:00"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_self_reset_yearly(hass):
|
async def test_self_reset_yearly(hass, legacy_patchable_time):
|
||||||
"""Test yearly reset of meter."""
|
"""Test yearly reset of meter."""
|
||||||
await _test_self_reset(
|
await _test_self_reset(
|
||||||
hass, gen_config("yearly"), "2017-12-31T23:59:00.000000+00:00"
|
hass, gen_config("yearly"), "2017-12-31T23:59:00.000000+00:00"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_self_no_reset_yearly(hass):
|
async def test_self_no_reset_yearly(hass, legacy_patchable_time):
|
||||||
"""Test yearly reset of meter does not occur after 1st January."""
|
"""Test yearly reset of meter does not occur after 1st January."""
|
||||||
await _test_self_reset(
|
await _test_self_reset(
|
||||||
hass,
|
hass,
|
||||||
@@ -312,7 +312,7 @@ async def test_self_no_reset_yearly(hass):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_reset_yearly_offset(hass):
|
async def test_reset_yearly_offset(hass, legacy_patchable_time):
|
||||||
"""Test yearly reset of meter."""
|
"""Test yearly reset of meter."""
|
||||||
await _test_self_reset(
|
await _test_self_reset(
|
||||||
hass,
|
hass,
|
||||||
@@ -321,7 +321,7 @@ async def test_reset_yearly_offset(hass):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_no_reset_yearly_offset(hass):
|
async def test_no_reset_yearly_offset(hass, legacy_patchable_time):
|
||||||
"""Test yearly reset of meter."""
|
"""Test yearly reset of meter."""
|
||||||
await _test_self_reset(
|
await _test_self_reset(
|
||||||
hass,
|
hass,
|
||||||
|
@@ -119,7 +119,7 @@ async def test_erronous_network_key_fails_validation(hass, mock_openzwave):
|
|||||||
zwave.CONFIG_SCHEMA({"zwave": {"network_key": value}})
|
zwave.CONFIG_SCHEMA({"zwave": {"network_key": value}})
|
||||||
|
|
||||||
|
|
||||||
async def test_auto_heal_midnight(hass, mock_openzwave):
|
async def test_auto_heal_midnight(hass, mock_openzwave, legacy_patchable_time):
|
||||||
"""Test network auto-heal at midnight."""
|
"""Test network auto-heal at midnight."""
|
||||||
await async_setup_component(hass, "zwave", {"zwave": {"autoheal": True}})
|
await async_setup_component(hass, "zwave", {"zwave": {"autoheal": True}})
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
"""Set up some common test helper things."""
|
"""Set up some common test helper things."""
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import datetime
|
||||||
import functools
|
import functools
|
||||||
import logging
|
import logging
|
||||||
import threading
|
import threading
|
||||||
@@ -387,8 +388,71 @@ def legacy_patchable_time():
|
|||||||
|
|
||||||
return async_unsub
|
return async_unsub
|
||||||
|
|
||||||
|
@ha.callback
|
||||||
|
@loader.bind_hass
|
||||||
|
def async_track_utc_time_change(
|
||||||
|
hass, action, hour=None, minute=None, second=None, local=False
|
||||||
|
):
|
||||||
|
"""Add a listener that will fire if time matches a pattern."""
|
||||||
|
# We do not have to wrap the function with time pattern matching logic
|
||||||
|
# if no pattern given
|
||||||
|
if all(val is None for val in (hour, minute, second)):
|
||||||
|
|
||||||
|
@ha.callback
|
||||||
|
def time_change_listener(ev) -> None:
|
||||||
|
"""Fire every time event that comes in."""
|
||||||
|
hass.async_run_job(action, ev.data[ATTR_NOW])
|
||||||
|
|
||||||
|
return hass.bus.async_listen(EVENT_TIME_CHANGED, time_change_listener)
|
||||||
|
|
||||||
|
matching_seconds = event.dt_util.parse_time_expression(second, 0, 59)
|
||||||
|
matching_minutes = event.dt_util.parse_time_expression(minute, 0, 59)
|
||||||
|
matching_hours = event.dt_util.parse_time_expression(hour, 0, 23)
|
||||||
|
|
||||||
|
next_time = None
|
||||||
|
|
||||||
|
def calculate_next(now) -> None:
|
||||||
|
"""Calculate and set the next time the trigger should fire."""
|
||||||
|
nonlocal next_time
|
||||||
|
|
||||||
|
localized_now = event.dt_util.as_local(now) if local else now
|
||||||
|
next_time = event.dt_util.find_next_time_expression_time(
|
||||||
|
localized_now, matching_seconds, matching_minutes, matching_hours
|
||||||
|
)
|
||||||
|
|
||||||
|
# Make sure rolling back the clock doesn't prevent the timer from
|
||||||
|
# triggering.
|
||||||
|
last_now = None
|
||||||
|
|
||||||
|
@ha.callback
|
||||||
|
def pattern_time_change_listener(ev) -> None:
|
||||||
|
"""Listen for matching time_changed events."""
|
||||||
|
nonlocal next_time, last_now
|
||||||
|
|
||||||
|
now = ev.data[ATTR_NOW]
|
||||||
|
|
||||||
|
if last_now is None or now < last_now:
|
||||||
|
# Time rolled back or next time not yet calculated
|
||||||
|
calculate_next(now)
|
||||||
|
|
||||||
|
last_now = now
|
||||||
|
|
||||||
|
if next_time <= now:
|
||||||
|
hass.async_run_job(
|
||||||
|
action, event.dt_util.as_local(now) if local else now
|
||||||
|
)
|
||||||
|
calculate_next(now + datetime.timedelta(seconds=1))
|
||||||
|
|
||||||
|
# We can't use async_track_point_in_utc_time here because it would
|
||||||
|
# break in the case that the system time abruptly jumps backwards.
|
||||||
|
# Our custom last_now logic takes care of resolving that scenario.
|
||||||
|
return hass.bus.async_listen(EVENT_TIME_CHANGED, pattern_time_change_listener)
|
||||||
|
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.helpers.event.async_track_point_in_utc_time",
|
"homeassistant.helpers.event.async_track_point_in_utc_time",
|
||||||
async_track_point_in_utc_time,
|
async_track_point_in_utc_time,
|
||||||
|
), patch(
|
||||||
|
"homeassistant.helpers.event.async_track_utc_time_change",
|
||||||
|
async_track_utc_time_change,
|
||||||
):
|
):
|
||||||
yield
|
yield
|
||||||
|
Reference in New Issue
Block a user