59 lines
3.2 KiB
Python
59 lines
3.2 KiB
Python
"""Validate actual HA form schemas, options and entry migration."""
|
|
from homeassistant.config_entries import SOURCE_USER
|
|
from homeassistant.data_entry_flow import FlowResultType
|
|
from pytest_homeassistant_custom_component.common import MockConfigEntry
|
|
|
|
from custom_components.heating_mpc.const import DOMAIN
|
|
|
|
|
|
async def test_config_flow(hass, inputs):
|
|
result = await hass.config_entries.flow.async_init(DOMAIN, context={"source": SOURCE_USER})
|
|
assert result["type"] is FlowResultType.FORM
|
|
main = {"climate_entity": "climate.reference", "heater_entity": "switch.boiler",
|
|
"room_entities": ["sensor.room"]}
|
|
validated = result["data_schema"](main)
|
|
assert validated["room_max_age_minutes"] == 30
|
|
assert validated["weather_max_age_minutes"] == 120
|
|
result = await hass.config_entries.flow.async_configure(result["flow_id"], validated)
|
|
assert result["step_id"] == "weather"
|
|
result = await hass.config_entries.flow.async_configure(
|
|
result["flow_id"], result["data_schema"]({"outside_temperature_sources": ["sensor.outside"]}))
|
|
assert result["step_id"] == "weather_extra"
|
|
result = await hass.config_entries.flow.async_configure(result["flow_id"], result["data_schema"]({}))
|
|
assert result["step_id"] == "weights"
|
|
result = await hass.config_entries.flow.async_configure(result["flow_id"], {"weight__sensor.room": 2})
|
|
assert result["type"] is FlowResultType.CREATE_ENTRY
|
|
assert result["data"]["weights"] == {"sensor.room": 2}
|
|
await hass.async_block_till_done()
|
|
|
|
|
|
async def test_options_flow_keeps_settings(hass, entry, inputs):
|
|
entry.add_to_hass(hass)
|
|
assert await hass.config_entries.async_setup(entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
result = await hass.config_entries.options.async_init(entry.entry_id)
|
|
main = result["data_schema"]({"climate_entity": "climate.reference",
|
|
"heater_entity": "switch.boiler", "room_entities": ["sensor.room"],
|
|
"room_max_age_minutes": 45})
|
|
result = await hass.config_entries.options.async_configure(result["flow_id"], main)
|
|
result = await hass.config_entries.options.async_configure(
|
|
result["flow_id"], result["data_schema"]({"outside_temperature_sources": ["sensor.outside"]}))
|
|
result = await hass.config_entries.options.async_configure(result["flow_id"], result["data_schema"]({}))
|
|
result = await hass.config_entries.options.async_configure(result["flow_id"], {"weight__sensor.room": 3})
|
|
assert result["type"] is FlowResultType.CREATE_ENTRY
|
|
await hass.async_block_till_done()
|
|
assert entry.options["room_max_age_minutes"] == 45
|
|
assert hass.data[DOMAIN][entry.entry_id].config["room_max_age_minutes"] == 45
|
|
|
|
|
|
async def test_v1_entry_migrates_on_setup(hass, inputs):
|
|
entry = MockConfigEntry(domain=DOMAIN, version=1, data={
|
|
"climate_entity": "climate.reference", "heater_entity": "switch.boiler",
|
|
"room_entities": ["sensor.room"], "outside_entity": "sensor.outside"})
|
|
entry.add_to_hass(hass)
|
|
assert await hass.config_entries.async_setup(entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
assert entry.version == 2
|
|
assert entry.data["outside_temperature_sources"] == ["sensor.outside"]
|
|
assert "outside_entity" not in entry.data
|