mirror of
https://github.com/home-assistant/core.git
synced 2025-08-03 04:35:11 +02:00
back to 100% coverage
This commit is contained in:
@@ -617,14 +617,12 @@ def async_track_utc_time_change(
|
|||||||
nonlocal next_time, last_now, cancel_callback
|
nonlocal next_time, last_now, cancel_callback
|
||||||
|
|
||||||
now = pattern_utc_now()
|
now = pattern_utc_now()
|
||||||
|
hass.async_run_job(action, dt_util.as_local(now) if local else now)
|
||||||
if now < last_now:
|
|
||||||
# Time rolled back
|
|
||||||
calculate_next(now)
|
|
||||||
|
|
||||||
if next_time <= now:
|
if next_time <= now:
|
||||||
hass.async_run_job(action, dt_util.as_local(now) if local else now)
|
|
||||||
calculate_next(now + timedelta(seconds=1))
|
calculate_next(now + timedelta(seconds=1))
|
||||||
|
else:
|
||||||
|
calculate_next(now)
|
||||||
|
|
||||||
last_now = now
|
last_now = now
|
||||||
|
|
||||||
|
@@ -285,7 +285,7 @@ fire_mqtt_message = threadsafe_callback_factory(async_fire_mqtt_message)
|
|||||||
|
|
||||||
|
|
||||||
@ha.callback
|
@ha.callback
|
||||||
def async_fire_time_changed(hass, datetime_):
|
def async_fire_time_changed(hass, datetime_, fire_all=False):
|
||||||
"""Fire a time changes event."""
|
"""Fire a time changes event."""
|
||||||
hass.bus.async_fire(EVENT_TIME_CHANGED, {"now": date_util.as_utc(datetime_)})
|
hass.bus.async_fire(EVENT_TIME_CHANGED, {"now": date_util.as_utc(datetime_)})
|
||||||
|
|
||||||
@@ -298,7 +298,7 @@ def async_fire_time_changed(hass, datetime_):
|
|||||||
future_seconds = task.when() - hass.loop.time()
|
future_seconds = task.when() - hass.loop.time()
|
||||||
mock_seconds_into_future = datetime_.timestamp() - time.time()
|
mock_seconds_into_future = datetime_.timestamp() - time.time()
|
||||||
|
|
||||||
if mock_seconds_into_future >= future_seconds:
|
if fire_all or mock_seconds_into_future >= future_seconds:
|
||||||
with patch(
|
with patch(
|
||||||
"homeassistant.helpers.event.pattern_utc_now",
|
"homeassistant.helpers.event.pattern_utc_now",
|
||||||
return_value=date_util.as_utc(datetime_),
|
return_value=date_util.as_utc(datetime_),
|
||||||
|
@@ -879,25 +879,25 @@ async def test_periodic_task_clock_rollback(hass):
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert len(specific_runs) == 1
|
assert len(specific_runs) == 1
|
||||||
|
|
||||||
# The event loop uses monotonic clocks to track time so it can't
|
async_fire_time_changed(
|
||||||
# move backwards, only utcnow can
|
hass, datetime(now.year + 1, 5, 24, 22, 0, 0), fire_all=True
|
||||||
async_fire_time_changed(hass, datetime(now.year + 1, 5, 24, 22, 0, 0))
|
)
|
||||||
await hass.async_block_till_done()
|
|
||||||
assert len(specific_runs) == 1
|
|
||||||
|
|
||||||
async_fire_time_changed(hass, datetime(now.year + 1, 5, 24, 0, 0, 0))
|
|
||||||
await hass.async_block_till_done()
|
|
||||||
assert len(specific_runs) == 1
|
|
||||||
|
|
||||||
async_fire_time_changed(hass, datetime(now.year + 1, 5, 25, 2, 0, 0))
|
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert len(specific_runs) == 2
|
assert len(specific_runs) == 2
|
||||||
|
|
||||||
|
async_fire_time_changed(hass, datetime(now.year + 1, 5, 24, 0, 0, 0), fire_all=True)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert len(specific_runs) == 3
|
||||||
|
|
||||||
|
async_fire_time_changed(hass, datetime(now.year + 1, 5, 25, 2, 0, 0), fire_all=True)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert len(specific_runs) == 4
|
||||||
|
|
||||||
unsub()
|
unsub()
|
||||||
|
|
||||||
async_fire_time_changed(hass, datetime(now.year + 1, 5, 25, 2, 0, 0))
|
async_fire_time_changed(hass, datetime(now.year + 1, 5, 25, 2, 0, 0), fire_all=True)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert len(specific_runs) == 2
|
assert len(specific_runs) == 4
|
||||||
|
|
||||||
|
|
||||||
async def test_periodic_task_duplicate_time(hass):
|
async def test_periodic_task_duplicate_time(hass):
|
||||||
@@ -1003,13 +1003,7 @@ async def test_periodic_task_leaving_dst(hass):
|
|||||||
assert len(specific_runs) == 1
|
assert len(specific_runs) == 1
|
||||||
|
|
||||||
async_fire_time_changed(
|
async_fire_time_changed(
|
||||||
hass, timezone.localize(datetime(now.year + 2, 10, 28, 1, 5, 0), is_dst=True)
|
hass, timezone.localize(datetime(now.year + 2, 10, 28, 2, 45, 0), is_dst=True)
|
||||||
)
|
|
||||||
await hass.async_block_till_done()
|
|
||||||
assert len(specific_runs) == 2
|
|
||||||
|
|
||||||
async_fire_time_changed(
|
|
||||||
hass, timezone.localize(datetime(now.year + 2, 10, 28, 1, 55, 0), is_dst=True)
|
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert len(specific_runs) == 2
|
assert len(specific_runs) == 2
|
||||||
@@ -1018,7 +1012,13 @@ async def test_periodic_task_leaving_dst(hass):
|
|||||||
hass, timezone.localize(datetime(now.year + 2, 10, 28, 2, 55, 0), is_dst=True)
|
hass, timezone.localize(datetime(now.year + 2, 10, 28, 2, 55, 0), is_dst=True)
|
||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert len(specific_runs) == 3
|
assert len(specific_runs) == 2
|
||||||
|
|
||||||
|
async_fire_time_changed(
|
||||||
|
hass, timezone.localize(datetime(now.year + 2, 10, 28, 2, 55, 0), is_dst=True)
|
||||||
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert len(specific_runs) == 2
|
||||||
|
|
||||||
unsub()
|
unsub()
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user