Files
petr.polezhaev 43d3ff7dea ha(H4): исправления по ревью — маскировка ключа в дампе, reload-repair, reconfigure сохраняет поля
- major: diagnostics больше не содержит полный lanip_key (esp_home —
  маска, entry_data redacted); ключ для ESPHome — через reconfigure/CLI;
  план §3 синхронизирован; дамп при незагруженной записи не падает
- reconfigure: сохраняет listen_port/keepalive_ms и текущие overrides/
  temp_step; превью-дефолты подхватывают значения записи
- repair fix-flow: подтверждение перезагружает запись (issue снимается
  только когда сессия вышла из key_error; иначе создаётся заново)
- key_issue_id helper, использование async_remove_issue (мёртвый код),
  CONF_EMAIL/PASSWORD в TO_REDACT, placeholders в fix_flow, тест
  плейсхолдеров ru
- тесты обновлены (47 components)
2026-09-29 14:29:36 +03:00

60 lines
2.1 KiB
Python

"""Диагностика: параметры для ESPHome и маскировка ключа."""
from __future__ import annotations
import asyncio
import time
from helpers import DSN, LANIP_KEY
from homeassistant.core import HomeAssistant
from test_entities import MOCK_SETTINGS, _setup_entry
from custom_components.fglair.diagnostics import (
async_get_config_entry_diagnostics,
)
from pyfglair import Prop, State
async def _wait_for(predicate, timeout: float = 20.0):
deadline = time.monotonic() + timeout
while time.monotonic() < deadline:
result = predicate()
if result:
return result
await asyncio.sleep(0.1)
raise AssertionError("условие не выполнено за отведённое время")
async def test_diagnostics(hass: HomeAssistant, mock_ac, socket_enabled):
proc = mock_ac(MOCK_SETTINGS)
entry = await _setup_entry(hass, proc.port)
runtime = entry.runtime_data
await _wait_for(
lambda: runtime.client.state == State.ONLINE
and runtime.client.cached(Prop.OPERATION_MODE) is not None
and runtime.client.cached(Prop.DISPLAY_TEMPERATURE) is not None
)
diag = await async_get_config_entry_diagnostics(hass, entry)
assert diag["config"]["dsn"] == DSN
assert diag["config"]["host"] == "127.0.0.1"
assert diag["config"]["template"] == "A"
assert diag["esp_home"]["lanip_key"] != LANIP_KEY
assert "REDACTED" in diag["esp_home"]["lanip_key"]
assert diag["esp_home"]["lanip_key_id"] == 64201
assert diag["entry_data"]["lanip_key"] == "**REDACTED**"
assert diag["runtime"]["state"] == "online"
assert diag["runtime"]["events_dropped"] == 0
assert diag["runtime"]["values"]["operation_mode"]["raw"] == 6
assert diag["runtime"]["values"]["operation_mode"]["display"] == 6
assert (
diag["runtime"]["values"]["display_temperature"]["display"] == 200
)
assert await hass.config_entries.async_unload(entry.entry_id)
unloaded = await async_get_config_entry_diagnostics(hass, entry)
assert unloaded["runtime"]["loaded"] is False
assert unloaded["config"]["dsn"] == DSN