diff --git a/homeassistant/components/ecovacs/diagnostics.py b/homeassistant/components/ecovacs/diagnostics.py new file mode 100644 index 00000000000..fa7d85ed52a --- /dev/null +++ b/homeassistant/components/ecovacs/diagnostics.py @@ -0,0 +1,36 @@ +"""Ecovacs diagnostics.""" +from __future__ import annotations + +from typing import Any + +from homeassistant.components.diagnostics import async_redact_data +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import CONF_NAME, CONF_PASSWORD, CONF_USERNAME +from homeassistant.core import HomeAssistant + +from .const import DOMAIN +from .controller import EcovacsController + +REDACT_CONFIG = {CONF_USERNAME, CONF_PASSWORD, "title"} +REDACT_DEVICE = {"did", CONF_NAME, "homeId"} + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, config_entry: ConfigEntry +) -> dict[str, Any]: + """Return diagnostics for a config entry.""" + controller: EcovacsController = hass.data[DOMAIN][config_entry.entry_id] + diag: dict[str, Any] = { + "config": async_redact_data(config_entry.as_dict(), REDACT_CONFIG) + } + + diag["devices"] = [ + async_redact_data(device.device_info.api_device_info, REDACT_DEVICE) + for device in controller.devices + ] + diag["legacy_devices"] = [ + async_redact_data(device.vacuum, REDACT_DEVICE) + for device in controller.legacy_devices + ] + + return diag diff --git a/tests/components/ecovacs/snapshots/test_diagnostics.ambr b/tests/components/ecovacs/snapshots/test_diagnostics.ambr new file mode 100644 index 00000000000..9b27883745b --- /dev/null +++ b/tests/components/ecovacs/snapshots/test_diagnostics.ambr @@ -0,0 +1,50 @@ +# serializer version: 1 +# name: test_diagnostics + dict({ + 'config': dict({ + 'data': dict({ + 'country': 'IT', + 'password': '**REDACTED**', + 'username': '**REDACTED**', + }), + 'disabled_by': None, + 'domain': 'ecovacs', + 'minor_version': 1, + 'options': dict({ + }), + 'pref_disable_new_entities': False, + 'pref_disable_polling': False, + 'source': 'user', + 'title': '**REDACTED**', + 'unique_id': None, + 'version': 1, + }), + 'devices': list([ + dict({ + 'UILogicId': 'DX_9G', + 'class': 'yna5xi', + 'company': 'eco-ng', + 'deviceName': 'DEEBOT OZMO 950 Series', + 'did': '**REDACTED**', + 'homeSort': 9999, + 'icon': 'https://portal-ww.ecouser.net/api/pim/file/get/606278df4a84d700082b39f1', + 'materialNo': '110-1820-0101', + 'model': 'DX9G', + 'name': '**REDACTED**', + 'nick': 'Ozmo 950', + 'otaUpgrade': dict({ + }), + 'pid': '5c19a91ca1e6ee000178224a', + 'product_category': 'DEEBOT', + 'resource': 'upQ6', + 'service': dict({ + 'jmq': 'jmq-ngiot-eu.dc.ww.ecouser.net', + 'mqs': 'api-ngiot.dc-as.ww.ecouser.net', + }), + 'status': 1, + }), + ]), + 'legacy_devices': list([ + ]), + }) +# --- diff --git a/tests/components/ecovacs/test_diagnostics.py b/tests/components/ecovacs/test_diagnostics.py new file mode 100644 index 00000000000..8244efd7fec --- /dev/null +++ b/tests/components/ecovacs/test_diagnostics.py @@ -0,0 +1,22 @@ +"""Tests for diagnostics data.""" + +from syrupy.assertion import SnapshotAssertion +from syrupy.filters import props + +from homeassistant.core import HomeAssistant + +from tests.common import MockConfigEntry +from tests.components.diagnostics import get_diagnostics_for_config_entry +from tests.typing import ClientSessionGenerator + + +async def test_diagnostics( + hass: HomeAssistant, + hass_client: ClientSessionGenerator, + init_integration: MockConfigEntry, + snapshot: SnapshotAssertion, +) -> None: + """Test diagnostics.""" + assert await get_diagnostics_for_config_entry( + hass, hass_client, init_integration + ) == snapshot(exclude=props("entry_id"))