From d4e40ed73f5df1a698e2f0855aa2aed6978f22b6 Mon Sep 17 00:00:00 2001 From: Brett Adams Date: Sat, 1 Jul 2023 03:52:52 +1000 Subject: [PATCH] Fix Diagnostics in Advantage Air (#95608) * Fix diag paths * Fix key sand add redactions * Name things better. * Add super basic test * Rename docstring * Add snapshot --------- Co-authored-by: Paulus Schoutsen --- .../components/advantage_air/diagnostics.py | 19 +- .../snapshots/test_diagnostics.ambr | 292 ++++++++++++++++++ .../advantage_air/test_diagnostics.py | 32 ++ 3 files changed, 340 insertions(+), 3 deletions(-) create mode 100644 tests/components/advantage_air/snapshots/test_diagnostics.ambr create mode 100644 tests/components/advantage_air/test_diagnostics.py diff --git a/homeassistant/components/advantage_air/diagnostics.py b/homeassistant/components/advantage_air/diagnostics.py index 27eaef09b43..4c440610838 100644 --- a/homeassistant/components/advantage_air/diagnostics.py +++ b/homeassistant/components/advantage_air/diagnostics.py @@ -9,17 +9,30 @@ from homeassistant.core import HomeAssistant from .const import DOMAIN as ADVANTAGE_AIR_DOMAIN -TO_REDACT = ["dealerPhoneNumber", "latitude", "logoPIN", "longitude", "postCode"] +TO_REDACT = [ + "dealerPhoneNumber", + "latitude", + "logoPIN", + "longitude", + "postCode", + "rid", + "deviceNames", + "deviceIds", + "deviceIdsV2", + "backupId", +] async def async_get_config_entry_diagnostics( hass: HomeAssistant, config_entry: ConfigEntry ) -> dict[str, Any]: """Return diagnostics for a config entry.""" - data = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id]["coordinator"].data + data = hass.data[ADVANTAGE_AIR_DOMAIN][config_entry.entry_id].coordinator.data # Return only the relevant children return { - "aircons": data["aircons"], + "aircons": data.get("aircons"), + "myLights": data.get("myLights"), + "myThings": data.get("myThings"), "system": async_redact_data(data["system"], TO_REDACT), } diff --git a/tests/components/advantage_air/snapshots/test_diagnostics.ambr b/tests/components/advantage_air/snapshots/test_diagnostics.ambr new file mode 100644 index 00000000000..a472d4fa1fc --- /dev/null +++ b/tests/components/advantage_air/snapshots/test_diagnostics.ambr @@ -0,0 +1,292 @@ +# serializer version: 1 +# name: test_select_async_setup_entry + dict({ + 'aircons': dict({ + 'ac1': dict({ + 'info': dict({ + 'aaAutoFanModeEnabled': False, + 'climateControlModeEnabled': False, + 'climateControlModeIsRunning': False, + 'countDownToOff': 10, + 'countDownToOn': 0, + 'fan': 'high', + 'filterCleanStatus': 0, + 'freshAirStatus': 'off', + 'mode': 'vent', + 'myAutoModeEnabled': False, + 'myAutoModeIsRunning': False, + 'myZone': 1, + 'name': 'myzone', + 'setTemp': 24, + 'state': 'on', + }), + 'zones': dict({ + 'z01': dict({ + 'error': 0, + 'maxDamper': 100, + 'measuredTemp': 25, + 'minDamper': 0, + 'motion': 20, + 'motionConfig': 2, + 'name': 'Zone open with Sensor', + 'number': 1, + 'rssi': 40, + 'setTemp': 24, + 'state': 'open', + 'type': 1, + 'value': 100, + }), + 'z02': dict({ + 'error': 0, + 'maxDamper': 100, + 'measuredTemp': 25, + 'minDamper': 0, + 'motion': 21, + 'motionConfig': 2, + 'name': 'Zone closed with Sensor', + 'number': 2, + 'rssi': 10, + 'setTemp': 24, + 'state': 'close', + 'type': 1, + 'value': 0, + }), + 'z03': dict({ + 'error': 0, + 'maxDamper': 100, + 'measuredTemp': 25, + 'minDamper': 0, + 'motion': 22, + 'motionConfig': 2, + 'name': 'Zone 3', + 'number': 3, + 'rssi': 25, + 'setTemp': 24, + 'state': 'close', + 'type': 1, + 'value': 0, + }), + 'z04': dict({ + 'error': 0, + 'maxDamper': 100, + 'measuredTemp': 25, + 'minDamper': 0, + 'motion': 1, + 'motionConfig': 1, + 'name': 'Zone 4', + 'number': 4, + 'rssi': 75, + 'setTemp': 24, + 'state': 'close', + 'type': 1, + 'value': 0, + }), + 'z05': dict({ + 'error': 0, + 'maxDamper': 100, + 'measuredTemp': 25, + 'minDamper': 0, + 'motion': 5, + 'motionConfig': 1, + 'name': 'Zone 5', + 'number': 5, + 'rssi': 100, + 'setTemp': 24, + 'state': 'close', + 'type': 1, + 'value': 0, + }), + }), + }), + 'ac2': dict({ + 'info': dict({ + 'aaAutoFanModeEnabled': True, + 'climateControlModeEnabled': True, + 'climateControlModeIsRunning': False, + 'countDownToOff': 0, + 'countDownToOn': 20, + 'fan': 'autoAA', + 'filterCleanStatus': 1, + 'freshAirStatus': 'none', + 'mode': 'cool', + 'myAutoModeCurrentSetMode': 'cool', + 'myAutoModeEnabled': False, + 'myAutoModeIsRunning': False, + 'myZone': 1, + 'name': 'mytemp', + 'setTemp': 24, + 'state': 'off', + }), + 'zones': dict({ + 'z01': dict({ + 'error': 0, + 'maxDamper': 100, + 'measuredTemp': 25, + 'minDamper': 0, + 'motion': 20, + 'motionConfig': 2, + 'name': 'Zone A', + 'number': 1, + 'rssi': 40, + 'setTemp': 24, + 'state': 'open', + 'type': 1, + 'value': 100, + }), + 'z02': dict({ + 'error': 0, + 'maxDamper': 100, + 'measuredTemp': 26, + 'minDamper': 0, + 'motion': 21, + 'motionConfig': 2, + 'name': 'Zone B', + 'number': 2, + 'rssi': 10, + 'setTemp': 23, + 'state': 'open', + 'type': 1, + 'value': 50, + }), + }), + }), + 'ac3': dict({ + 'info': dict({ + 'aaAutoFanModeEnabled': True, + 'climateControlModeEnabled': False, + 'climateControlModeIsRunning': False, + 'countDownToOff': 0, + 'countDownToOn': 0, + 'fan': 'autoAA', + 'filterCleanStatus': 1, + 'freshAirStatus': 'none', + 'mode': 'myauto', + 'myAutoCoolTargetTemp': 24, + 'myAutoHeatTargetTemp': 20, + 'myAutoModeCurrentSetMode': 'cool', + 'myAutoModeEnabled': True, + 'myAutoModeIsRunning': True, + 'myZone': 0, + 'name': 'myauto', + 'setTemp': 24, + 'state': 'on', + }), + 'zones': dict({ + 'z01': dict({ + 'error': 0, + 'maxDamper': 100, + 'measuredTemp': 0, + 'minDamper': 0, + 'motion': 0, + 'motionConfig': 0, + 'name': 'Zone Y', + 'number': 1, + 'rssi': 0, + 'setTemp': 24, + 'state': 'open', + 'type': 0, + 'value': 100, + }), + 'z02': dict({ + 'error': 0, + 'maxDamper': 100, + 'measuredTemp': 0, + 'minDamper': 0, + 'motion': 0, + 'motionConfig': 0, + 'name': 'Zone Z', + 'number': 2, + 'rssi': 0, + 'setTemp': 24, + 'state': 'close', + 'type': 0, + 'value': 0, + }), + }), + }), + }), + 'myLights': dict({ + 'lights': dict({ + '100': dict({ + 'id': '100', + 'moduleType': 'RM2', + 'name': 'Light A', + 'relay': True, + 'state': 'off', + }), + '101': dict({ + 'id': '101', + 'name': 'Light B', + 'state': 'on', + 'value': 50, + }), + }), + }), + 'myThings': dict({ + 'things': dict({ + '200': dict({ + 'buttonType': 'upDown', + 'channelDipState': 1, + 'id': '200', + 'name': 'Blind 1', + 'value': 100, + }), + '201': dict({ + 'buttonType': 'upDown', + 'channelDipState': 2, + 'id': '201', + 'name': 'Blind 2', + 'value': 0, + }), + '202': dict({ + 'buttonType': 'openClose', + 'channelDipState': 3, + 'id': '202', + 'name': 'Garage', + 'value': 100, + }), + '203': dict({ + 'buttonType': 'onOff', + 'channelDipState': 4, + 'id': '203', + 'name': 'Thing Light', + 'value': 100, + }), + '204': dict({ + 'buttonType': 'upDown', + 'channelDipState': 5, + 'id': '204', + 'name': 'Thing Light Dimmable', + 'value': 100, + }), + '205': dict({ + 'buttonType': 'onOff', + 'channelDipState': 8, + 'id': '205', + 'name': 'Relay', + 'value': 100, + }), + '206': dict({ + 'buttonType': 'onOff', + 'channelDipState': 9, + 'id': '206', + 'name': 'Fan', + 'value': 100, + }), + }), + }), + 'system': dict({ + 'hasAircons': True, + 'hasLights': True, + 'hasSensors': False, + 'hasThings': True, + 'hasThingsBOG': False, + 'hasThingsLight': False, + 'myAppRev': '1.234', + 'name': 'testname', + 'needsUpdate': False, + 'rid': '**REDACTED**', + 'sysType': 'e-zone', + }), + }) +# --- diff --git a/tests/components/advantage_air/test_diagnostics.py b/tests/components/advantage_air/test_diagnostics.py new file mode 100644 index 00000000000..ebd026c6cc7 --- /dev/null +++ b/tests/components/advantage_air/test_diagnostics.py @@ -0,0 +1,32 @@ +"""Test the Advantage Air Diagnostics.""" +from syrupy.assertion import SnapshotAssertion + +from homeassistant.core import HomeAssistant + +from . import ( + TEST_SYSTEM_DATA, + TEST_SYSTEM_URL, + add_mock_config, +) + +from tests.components.diagnostics import get_diagnostics_for_config_entry +from tests.test_util.aiohttp import AiohttpClientMocker +from tests.typing import ClientSessionGenerator + + +async def test_select_async_setup_entry( + hass: HomeAssistant, + hass_client: ClientSessionGenerator, + aioclient_mock: AiohttpClientMocker, + snapshot: SnapshotAssertion, +) -> None: + """Test select platform.""" + + aioclient_mock.get( + TEST_SYSTEM_URL, + text=TEST_SYSTEM_DATA, + ) + + entry = await add_mock_config(hass) + diag = await get_diagnostics_for_config_entry(hass, hass_client, entry) + assert diag == snapshot