Add diagnostics platform to AVM Fritz!Smarthome (#64657)

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
This commit is contained in:
Michael 2022-01-21 20:25:19 +01:00 committed by GitHub
parent a827d91e3a
commit e0e6853968
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 66 additions and 0 deletions

View File

@ -0,0 +1,33 @@
"""Diagnostics support for AVM Fritz!Smarthome."""
from __future__ import annotations
from homeassistant.components.diagnostics import async_redact_data
from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant
from .const import CONF_COORDINATOR, DOMAIN
from .coordinator import FritzboxDataUpdateCoordinator
TO_REDACT = {CONF_USERNAME, CONF_PASSWORD}
async def async_get_config_entry_diagnostics(
hass: HomeAssistant, entry: ConfigEntry
) -> dict:
"""Return diagnostics for a config entry."""
data: dict = hass.data[DOMAIN][entry.entry_id]
coordinator: FritzboxDataUpdateCoordinator = data[CONF_COORDINATOR]
diag_data = {
"entry": async_redact_data(entry.as_dict(), TO_REDACT),
"data": {},
}
if not isinstance(coordinator.data, dict):
return diag_data
diag_data["data"] = {
ain: {k: v for k, v in vars(dev).items() if not k.startswith("_")}
for ain, dev in coordinator.data.items()
}
return diag_data

View File

@ -0,0 +1,33 @@
"""Tests for the AVM Fritz!Box integration."""
from __future__ import annotations
from unittest.mock import Mock
from aiohttp import ClientSession
from homeassistant.components.diagnostics import REDACTED
from homeassistant.components.fritzbox.const import DOMAIN as FB_DOMAIN
from homeassistant.components.fritzbox.diagnostics import TO_REDACT
from homeassistant.const import CONF_DEVICES
from homeassistant.core import HomeAssistant
from . import setup_config_entry
from .const import MOCK_CONFIG
from tests.components.diagnostics import get_diagnostics_for_config_entry
async def test_entry_diagnostics(
hass: HomeAssistant, hass_client: ClientSession, fritz: Mock
):
"""Test config entry diagnostics."""
assert await setup_config_entry(hass, MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0])
entries = hass.config_entries.async_entries(FB_DOMAIN)
entry_dict = entries[0].as_dict()
for key in TO_REDACT:
entry_dict["data"][key] = REDACTED
result = await get_diagnostics_for_config_entry(hass, hass_client, entries[0])
assert result == {"entry": entry_dict, "data": {}}