From 4ce9c1f304739861a4289f92d84172719ff3e69d Mon Sep 17 00:00:00 2001 From: mkmer Date: Thu, 7 Sep 2023 15:27:41 -0400 Subject: [PATCH] Add Diagnostic platform to Aladdin Connect (#99682) * Add diagnostics platform * Add diagnostic platform * Add raw data to diagnostics * Remove config data bump aioaladdinconnect, use new doors property for diag * remove unnecessary component config refactor diag output --- .../components/aladdin_connect/diagnostics.py | 29 ++++++++++++++ .../components/aladdin_connect/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/aladdin_connect/conftest.py | 6 ++- .../snapshots/test_diagnostics.ambr | 20 ++++++++++ .../aladdin_connect/test_diagnostics.py | 40 +++++++++++++++++++ 7 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 homeassistant/components/aladdin_connect/diagnostics.py create mode 100644 tests/components/aladdin_connect/snapshots/test_diagnostics.ambr create mode 100644 tests/components/aladdin_connect/test_diagnostics.py diff --git a/homeassistant/components/aladdin_connect/diagnostics.py b/homeassistant/components/aladdin_connect/diagnostics.py new file mode 100644 index 00000000000..c49d321631e --- /dev/null +++ b/homeassistant/components/aladdin_connect/diagnostics.py @@ -0,0 +1,29 @@ +"""Diagnostics support for Aladdin Connect.""" +from __future__ import annotations + +from typing import Any + +from AIOAladdinConnect import AladdinConnectClient + +from homeassistant.components.diagnostics import async_redact_data +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant + +from .const import DOMAIN + +TO_REDACT = {"serial", "device_id"} + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, + config_entry: ConfigEntry, +) -> dict[str, Any]: + """Return diagnostics for a config entry.""" + + acc: AladdinConnectClient = hass.data[DOMAIN][config_entry.entry_id] + + diagnostics_data = { + "doors": async_redact_data(acc.doors, TO_REDACT), + } + + return diagnostics_data diff --git a/homeassistant/components/aladdin_connect/manifest.json b/homeassistant/components/aladdin_connect/manifest.json index 3f31a833f1a..83f8e0167e8 100644 --- a/homeassistant/components/aladdin_connect/manifest.json +++ b/homeassistant/components/aladdin_connect/manifest.json @@ -6,5 +6,5 @@ "documentation": "https://www.home-assistant.io/integrations/aladdin_connect", "iot_class": "cloud_polling", "loggers": ["aladdin_connect"], - "requirements": ["AIOAladdinConnect==0.1.57"] + "requirements": ["AIOAladdinConnect==0.1.58"] } diff --git a/requirements_all.txt b/requirements_all.txt index db110087d19..024443e8cf5 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -5,7 +5,7 @@ AEMET-OpenData==0.4.4 # homeassistant.components.aladdin_connect -AIOAladdinConnect==0.1.57 +AIOAladdinConnect==0.1.58 # homeassistant.components.honeywell AIOSomecomfort==0.0.17 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 7817932dedf..4c468519570 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -7,7 +7,7 @@ AEMET-OpenData==0.4.4 # homeassistant.components.aladdin_connect -AIOAladdinConnect==0.1.57 +AIOAladdinConnect==0.1.58 # homeassistant.components.honeywell AIOSomecomfort==0.0.17 diff --git a/tests/components/aladdin_connect/conftest.py b/tests/components/aladdin_connect/conftest.py index 250548e7ef2..3f5fc4f8f97 100644 --- a/tests/components/aladdin_connect/conftest.py +++ b/tests/components/aladdin_connect/conftest.py @@ -12,6 +12,10 @@ DEVICE_CONFIG_OPEN = { "link_status": "Connected", "serial": "12345", "model": "02", + "rssi": -67, + "ble_strength": 0, + "vendor": "GENIE", + "battery_level": 0, } @@ -35,7 +39,7 @@ def fixture_mock_aladdinconnect_api(): mock_opener.async_get_ble_strength = AsyncMock(return_value="-45") mock_opener.get_ble_strength.return_value = "-45" mock_opener.get_doors = AsyncMock(return_value=[DEVICE_CONFIG_OPEN]) - + mock_opener.doors = [DEVICE_CONFIG_OPEN] mock_opener.register_callback = mock.Mock(return_value=True) mock_opener.open_door = AsyncMock(return_value=True) mock_opener.close_door = AsyncMock(return_value=True) diff --git a/tests/components/aladdin_connect/snapshots/test_diagnostics.ambr b/tests/components/aladdin_connect/snapshots/test_diagnostics.ambr new file mode 100644 index 00000000000..8f96567a49f --- /dev/null +++ b/tests/components/aladdin_connect/snapshots/test_diagnostics.ambr @@ -0,0 +1,20 @@ +# serializer version: 1 +# name: test_entry_diagnostics + dict({ + 'doors': list([ + dict({ + 'battery_level': 0, + 'ble_strength': 0, + 'device_id': '**REDACTED**', + 'door_number': 1, + 'link_status': 'Connected', + 'model': '02', + 'name': 'home', + 'rssi': -67, + 'serial': '**REDACTED**', + 'status': 'open', + 'vendor': 'GENIE', + }), + ]), + }) +# --- diff --git a/tests/components/aladdin_connect/test_diagnostics.py b/tests/components/aladdin_connect/test_diagnostics.py new file mode 100644 index 00000000000..4d5fe903798 --- /dev/null +++ b/tests/components/aladdin_connect/test_diagnostics.py @@ -0,0 +1,40 @@ +"""Test AccuWeather diagnostics.""" +from unittest.mock import MagicMock, patch + +from syrupy import SnapshotAssertion + +from homeassistant.components.aladdin_connect.const import DOMAIN +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 + +YAML_CONFIG = {"username": "test-user", "password": "test-password"} + + +async def test_entry_diagnostics( + hass: HomeAssistant, + hass_client: ClientSessionGenerator, + snapshot: SnapshotAssertion, + mock_aladdinconnect_api: MagicMock, +) -> None: + """Test config entry diagnostics.""" + + config_entry = MockConfigEntry( + domain=DOMAIN, + data=YAML_CONFIG, + unique_id="test-id", + ) + config_entry.add_to_hass(hass) + + with patch( + "homeassistant.components.aladdin_connect.AladdinConnectClient", + return_value=mock_aladdinconnect_api, + ): + await hass.config_entries.async_setup(config_entry.entry_id) + await hass.async_block_till_done() + + result = await get_diagnostics_for_config_entry(hass, hass_client, config_entry) + + assert result == snapshot