From 94916ebbd184fe77e7efa6915a5ab28000047fb9 Mon Sep 17 00:00:00 2001 From: Noah Husby <32528627+noahhusby@users.noreply.github.com> Date: Fri, 13 Sep 2024 15:45:05 -0400 Subject: [PATCH] Add diagnostics platform to Cambridge Audio (#125910) * Add diagnostics platform to Cambridge Audio * Remove exclusions from Cambridge diagnostics * Remove function call from snapshot Co-authored-by: Jan-Philipp Benecke --------- Co-authored-by: Jan-Philipp Benecke --- .../components/cambridge_audio/diagnostics.py | 21 ++++++++ .../snapshots/test_diagnostics.ambr | 51 +++++++++++++++++++ .../cambridge_audio/test_diagnostics.py | 29 +++++++++++ 3 files changed, 101 insertions(+) create mode 100644 homeassistant/components/cambridge_audio/diagnostics.py create mode 100644 tests/components/cambridge_audio/snapshots/test_diagnostics.ambr create mode 100644 tests/components/cambridge_audio/test_diagnostics.py diff --git a/homeassistant/components/cambridge_audio/diagnostics.py b/homeassistant/components/cambridge_audio/diagnostics.py new file mode 100644 index 00000000000..b4295e7c885 --- /dev/null +++ b/homeassistant/components/cambridge_audio/diagnostics.py @@ -0,0 +1,21 @@ +"""Diagnostics platform for Cambridge Audio.""" + +from typing import Any + +from homeassistant.const import CONF_HOST +from homeassistant.core import HomeAssistant +from homeassistant.helpers.redact import async_redact_data + +from . import CambridgeAudioConfigEntry + +TO_REDACT = {CONF_HOST} + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, entry: CambridgeAudioConfigEntry +) -> dict[str, Any]: + """Return diagnostics for the provided config entry.""" + client = entry.runtime_data + return async_redact_data( + {"info": client.info, "sources": client.sources}, TO_REDACT + ) diff --git a/tests/components/cambridge_audio/snapshots/test_diagnostics.ambr b/tests/components/cambridge_audio/snapshots/test_diagnostics.ambr new file mode 100644 index 00000000000..c554785006e --- /dev/null +++ b/tests/components/cambridge_audio/snapshots/test_diagnostics.ambr @@ -0,0 +1,51 @@ +# serializer version: 1 +# name: test_entry_diagnostics + dict({ + 'info': dict({ + '__type': "", + 'repr': "Info(name='Cambridge Audio CXNv2', model='CXNv2', timezone='America/Chicago', locale='en_GB', udn='02680b5c-1320-4d54-9f7c-3cfe915ad4c3', unit_id='0020c2d8', api_version='1.8')", + }), + 'sources': list([ + dict({ + '__type': "", + 'repr': "Source(id='IR', name='Internet Radio', default_name='Internet Radio', nameable=False, ui_selectable=False, description='Internet Radio', description_locale='Internet Radio', preferred_order=9)", + }), + dict({ + '__type': "", + 'repr': "Source(id='USB_AUDIO', name='USB Audio', default_name='USB Audio', nameable=True, ui_selectable=True, description='USB Audio', description_locale='USB Audio', preferred_order=1)", + }), + dict({ + '__type': "", + 'repr': "Source(id='SPDIF_COAX', name='D2', default_name='D2', nameable=True, ui_selectable=False, description='Digital Co-axial', description_locale='Digital Co-axial', preferred_order=3)", + }), + dict({ + '__type': "", + 'repr': "Source(id='SPDIF_TOSLINK', name='D1', default_name='D1', nameable=True, ui_selectable=False, description='Digital Optical', description_locale='Digital Optical', preferred_order=2)", + }), + dict({ + '__type': "", + 'repr': "Source(id='MEDIA_PLAYER', name='Media Library', default_name='Media Library', nameable=False, ui_selectable=True, description='Media Player', description_locale='Media Player', preferred_order=10)", + }), + dict({ + '__type': "", + 'repr': "Source(id='AIRPLAY', name='AirPlay', default_name='AirPlay', nameable=False, ui_selectable=True, description='AirPlay', description_locale='AirPlay', preferred_order=11)", + }), + dict({ + '__type': "", + 'repr': "Source(id='SPOTIFY', name='Spotify', default_name='Spotify', nameable=False, ui_selectable=True, description='Spotify', description_locale='Spotify', preferred_order=6)", + }), + dict({ + '__type': "", + 'repr': "Source(id='CAST', name='Chromecast built-in', default_name='Chromecast built-in', nameable=False, ui_selectable=True, description='Chromecast built-in', description_locale='Chromecast built-in', preferred_order=8)", + }), + dict({ + '__type': "", + 'repr': "Source(id='ROON', name='Roon Ready', default_name='Roon Ready', nameable=False, ui_selectable=False, description='Roon Ready', description_locale='Roon Ready', preferred_order=5)", + }), + dict({ + '__type': "", + 'repr': "Source(id='TIDAL', name='TIDAL Connect', default_name='TIDAL Connect', nameable=False, ui_selectable=False, description='TIDAL', description_locale='TIDAL', preferred_order=7)", + }), + ]), + }) +# --- diff --git a/tests/components/cambridge_audio/test_diagnostics.py b/tests/components/cambridge_audio/test_diagnostics.py new file mode 100644 index 00000000000..9c1a09c6318 --- /dev/null +++ b/tests/components/cambridge_audio/test_diagnostics.py @@ -0,0 +1,29 @@ +"""Tests for the diagnostics data provided by the Cambridge Audio integration.""" + +from unittest.mock import AsyncMock + +from syrupy import SnapshotAssertion + +from homeassistant.core import HomeAssistant + +from . import setup_integration + +from tests.common import MockConfigEntry +from tests.components.diagnostics import get_diagnostics_for_config_entry +from tests.typing import ClientSessionGenerator + + +async def test_entry_diagnostics( + hass: HomeAssistant, + mock_config_entry: MockConfigEntry, + mock_stream_magic_client: AsyncMock, + hass_client: ClientSessionGenerator, + snapshot: SnapshotAssertion, +) -> None: + """Test config entry diagnostics.""" + await setup_integration(hass, mock_config_entry) + + result = await get_diagnostics_for_config_entry( + hass, hass_client, mock_config_entry + ) + assert result == snapshot