mirror of
https://github.com/esphome/esphome.git
synced 2026-09-28 15:30:21 +00:00
Co-authored-by: clydebarrow <2366188+clydebarrow@users.noreply.github.com>
50 lines
1.9 KiB
Python
50 lines
1.9 KiB
Python
"""Integration test for the template time platform."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import asyncio
|
|
|
|
from aioesphomeapi import EntityState, TextSensorState
|
|
import pytest
|
|
|
|
from .state_utils import InitialStateHelper, build_key_to_entity_mapping
|
|
from .types import APIClientConnectedFactory, RunCompiledFunction
|
|
|
|
# Timestamps are exposed as text sensors (rather than 32-bit float sensor states,
|
|
# which cannot represent a UNIX epoch exactly) so the exact value can be checked.
|
|
EXPECTED_STATES = {
|
|
"fixed_timestamp": "1700000000",
|
|
"offset_timestamp": "1700003600",
|
|
"empty_time_valid": "invalid",
|
|
}
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_template_time(
|
|
yaml_config: str,
|
|
run_compiled: RunCompiledFunction,
|
|
api_client_connected: APIClientConnectedFactory,
|
|
) -> None:
|
|
"""Verify the template time platform evaluates its lambda on demand."""
|
|
async with run_compiled(yaml_config), api_client_connected() as client:
|
|
entities, _ = await client.list_entities_services()
|
|
|
|
key_to_name = build_key_to_entity_mapping(entities, list(EXPECTED_STATES))
|
|
events = {name: asyncio.Event() for name in EXPECTED_STATES}
|
|
|
|
def on_state(state: EntityState) -> None:
|
|
if isinstance(state, TextSensorState) and not state.missing_state:
|
|
name = key_to_name.get(state.key)
|
|
if name is not None and state.state == EXPECTED_STATES[name]:
|
|
events[name].set()
|
|
|
|
initial_state_helper = InitialStateHelper(entities)
|
|
client.subscribe_states(initial_state_helper.on_state_wrapper(on_state))
|
|
await initial_state_helper.wait_for_initial_states()
|
|
|
|
for name, event in events.items():
|
|
try:
|
|
await asyncio.wait_for(event.wait(), timeout=3.0)
|
|
except TimeoutError:
|
|
pytest.fail(f"Timeout waiting for {name} to report its expected value")
|