From 2ed30ac36198f08d3ac830e3c6b33317362baf75 Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Sun, 23 Jan 2022 09:17:32 +0100 Subject: [PATCH] Add diagnostics to NAM (#64743) * Add diagnostics * Fix tests --- homeassistant/components/nam/diagnostics.py | 28 +++++++++++++++++++ .../nam/fixtures/diagnostics_data.json | 24 ++++++++++++++++ tests/components/nam/test_diagnostics.py | 18 ++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 homeassistant/components/nam/diagnostics.py create mode 100644 tests/components/nam/fixtures/diagnostics_data.json create mode 100644 tests/components/nam/test_diagnostics.py diff --git a/homeassistant/components/nam/diagnostics.py b/homeassistant/components/nam/diagnostics.py new file mode 100644 index 00000000000..759a3cf976b --- /dev/null +++ b/homeassistant/components/nam/diagnostics.py @@ -0,0 +1,28 @@ +"""Diagnostics support for NAM.""" +from __future__ import annotations + +from dataclasses import asdict + +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 . import NAMDataUpdateCoordinator +from .const import DOMAIN + +TO_REDACT = {CONF_PASSWORD, CONF_USERNAME} + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, config_entry: ConfigEntry +) -> dict: + """Return diagnostics for a config entry.""" + coordinator: NAMDataUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id] + + diagnostics_data = { + "info": async_redact_data(config_entry.data, TO_REDACT), + "data": asdict(coordinator.data), + } + + return diagnostics_data diff --git a/tests/components/nam/fixtures/diagnostics_data.json b/tests/components/nam/fixtures/diagnostics_data.json new file mode 100644 index 00000000000..d83e5cc9305 --- /dev/null +++ b/tests/components/nam/fixtures/diagnostics_data.json @@ -0,0 +1,24 @@ +{ + "bme280_humidity": 45.7, + "bme280_pressure": 1011, + "bme280_temperature": 7.6, + "bmp180_pressure": 1032, + "bmp180_temperature": 7.6, + "bmp280_pressure": 1022, + "bmp280_temperature": 5.6, + "dht22_humidity": 46.2, + "dht22_temperature": 6.3, + "heca_humidity": 50.0, + "heca_temperature": 8.0, + "mhz14a_carbon_dioxide": 865, + "sds011_p1": 19, + "sds011_p2": 11, + "sht3x_humidity": 34.7, + "sht3x_temperature": 6.3, + "signal": -72, + "sps30_p0": 31, + "sps30_p1": 21, + "sps30_p2": 34, + "sps30_p4": 25, + "uptime": 456987 +} diff --git a/tests/components/nam/test_diagnostics.py b/tests/components/nam/test_diagnostics.py new file mode 100644 index 00000000000..ce7b6d59e78 --- /dev/null +++ b/tests/components/nam/test_diagnostics.py @@ -0,0 +1,18 @@ +"""Test NAM diagnostics.""" +import json + +from tests.common import load_fixture +from tests.components.diagnostics import get_diagnostics_for_config_entry +from tests.components.nam import init_integration + + +async def test_entry_diagnostics(hass, hass_client): + """Test config entry diagnostics.""" + entry = await init_integration(hass) + + diagnostics_data = json.loads(load_fixture("diagnostics_data.json", "nam")) + + result = await get_diagnostics_for_config_entry(hass, hass_client, entry) + + assert result["info"] == {"host": "10.10.2.3"} + assert result["data"] == diagnostics_data