mirror of
https://github.com/esphome/esphome.git
synced 2026-06-24 12:17:23 +00:00
[light] Replace initial_state storage with flash-resident callback (#15133)
This commit is contained in:
39
tests/integration/fixtures/light_initial_state.yaml
Normal file
39
tests/integration/fixtures/light_initial_state.yaml
Normal file
@@ -0,0 +1,39 @@
|
||||
esphome:
|
||||
name: light-initial-state-test
|
||||
host:
|
||||
api: # Port will be automatically injected
|
||||
logger:
|
||||
level: DEBUG
|
||||
|
||||
output:
|
||||
- platform: template
|
||||
id: test_red
|
||||
type: float
|
||||
write_action:
|
||||
- lambda: ""
|
||||
- platform: template
|
||||
id: test_green
|
||||
type: float
|
||||
write_action:
|
||||
- lambda: ""
|
||||
- platform: template
|
||||
id: test_blue
|
||||
type: float
|
||||
write_action:
|
||||
- lambda: ""
|
||||
|
||||
light:
|
||||
- platform: rgb
|
||||
name: "Test Light"
|
||||
id: test_light
|
||||
red: test_red
|
||||
green: test_green
|
||||
blue: test_blue
|
||||
restore_mode: ALWAYS_OFF
|
||||
initial_state:
|
||||
color_mode: RGB
|
||||
state: true
|
||||
brightness: 0.75
|
||||
red: 1.0
|
||||
green: 0.5
|
||||
blue: 0.0
|
||||
38
tests/integration/test_light_initial_state.py
Normal file
38
tests/integration/test_light_initial_state.py
Normal file
@@ -0,0 +1,38 @@
|
||||
"""Integration test for light initial_state configuration.
|
||||
|
||||
Tests that the initial_state values are correctly applied at boot when
|
||||
no saved preferences exist. The initial_state callback populates defaults
|
||||
that the restore logic uses as a fallback.
|
||||
"""
|
||||
|
||||
import pytest
|
||||
|
||||
from .state_utils import InitialStateHelper, require_entity
|
||||
from .types import APIClientConnectedFactory, RunCompiledFunction
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_light_initial_state(
|
||||
yaml_config: str,
|
||||
run_compiled: RunCompiledFunction,
|
||||
api_client_connected: APIClientConnectedFactory,
|
||||
) -> None:
|
||||
"""Test that initial_state values are applied at boot."""
|
||||
async with run_compiled(yaml_config), api_client_connected() as client:
|
||||
entities, _ = await client.list_entities_services()
|
||||
light = require_entity(entities, "test_light")
|
||||
|
||||
helper = InitialStateHelper(entities)
|
||||
client.subscribe_states(helper.on_state_wrapper(lambda s: None))
|
||||
await helper.wait_for_initial_states()
|
||||
|
||||
state = helper.initial_states[light.key]
|
||||
|
||||
# restore_mode: ALWAYS_OFF overrides state to false
|
||||
assert state.state is False
|
||||
|
||||
# But the color values from initial_state should be applied
|
||||
assert state.brightness == pytest.approx(0.75, abs=0.05)
|
||||
assert state.red == pytest.approx(1.0, abs=0.01)
|
||||
assert state.green == pytest.approx(0.5, abs=0.01)
|
||||
assert state.blue == pytest.approx(0.0, abs=0.01)
|
||||
Reference in New Issue
Block a user