From 633ffad4438fd415e4a8272c9797793b98b6c5a8 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Fri, 7 Oct 2022 08:07:59 +0200 Subject: [PATCH] Add diagnostics to LaMetric (#79757) * Add diagnostics to LaMetric * Add return value typing Co-authored-by: Martin Hjelmare --- .../components/lametric/diagnostics.py | 29 ++++++++++ tests/components/lametric/test_diagnostics.py | 57 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 homeassistant/components/lametric/diagnostics.py create mode 100644 tests/components/lametric/test_diagnostics.py diff --git a/homeassistant/components/lametric/diagnostics.py b/homeassistant/components/lametric/diagnostics.py new file mode 100644 index 00000000000..256f5f06e91 --- /dev/null +++ b/homeassistant/components/lametric/diagnostics.py @@ -0,0 +1,29 @@ +"""Diagnostics support for LaMetric.""" +from __future__ import annotations + +import json +from typing import Any + +from homeassistant.components.diagnostics import async_redact_data +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant + +from .const import DOMAIN +from .coordinator import LaMetricDataUpdateCoordinator + +TO_REDACT = { + "device_id", + "name", + "serial_number", + "ssid", +} + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, entry: ConfigEntry +) -> dict[str, Any]: + """Return diagnostics for a config entry.""" + coordinator: LaMetricDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id] + # Round-trip via JSON to trigger serialization + data = json.loads(coordinator.data.json()) + return async_redact_data(data, TO_REDACT) diff --git a/tests/components/lametric/test_diagnostics.py b/tests/components/lametric/test_diagnostics.py new file mode 100644 index 00000000000..27c031d19e4 --- /dev/null +++ b/tests/components/lametric/test_diagnostics.py @@ -0,0 +1,57 @@ +"""Tests for the diagnostics data provided by the LaMetric integration.""" +from aiohttp import ClientSession + +from homeassistant.components.diagnostics import REDACTED +from homeassistant.core import HomeAssistant + +from tests.common import MockConfigEntry +from tests.components.diagnostics import get_diagnostics_for_config_entry + + +async def test_diagnostics( + hass: HomeAssistant, + hass_client: ClientSession, + init_integration: MockConfigEntry, +) -> None: + """Test diagnostics.""" + assert await get_diagnostics_for_config_entry( + hass, hass_client, init_integration + ) == { + "device_id": REDACTED, + "name": REDACTED, + "serial_number": REDACTED, + "os_version": "2.2.2", + "mode": "auto", + "model": "LM 37X8", + "audio": { + "volume": 100, + "volume_range": {"range_min": 0, "range_max": 100}, + "volume_limit": {"range_min": 0, "range_max": 100}, + }, + "bluetooth": { + "available": True, + "name": REDACTED, + "active": False, + "discoverable": True, + "pairable": True, + "address": "AA:BB:CC:DD:EE:FF", + }, + "display": { + "brightness": 100, + "brightness_mode": "auto", + "width": 37, + "height": 8, + "display_type": "mixed", + }, + "wifi": { + "active": True, + "mac": "AA:BB:CC:DD:EE:FF", + "available": True, + "encryption": "WPA", + "ssid": REDACTED, + "ip": "127.0.0.1", + "mode": "dhcp", + "netmask": "255.255.255.0", + "rssi": 21, + }, + }