From 66d24b38aac6acbdf812e4ec9414b594f8b6452f Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Wed, 13 Dec 2023 08:18:50 +0100 Subject: [PATCH] Add diagnostics platform to BraviaTV (#105603) * Add diagnostics platform * Add test * Improve test * Use consts * Fix test * Patch methods * Patch methods --- .../components/braviatv/diagnostics.py | 28 ++++++++ .../braviatv/snapshots/test_diagnostics.ambr | 37 ++++++++++ tests/components/braviatv/test_diagnostics.py | 72 +++++++++++++++++++ 3 files changed, 137 insertions(+) create mode 100644 homeassistant/components/braviatv/diagnostics.py create mode 100644 tests/components/braviatv/snapshots/test_diagnostics.ambr create mode 100644 tests/components/braviatv/test_diagnostics.py diff --git a/homeassistant/components/braviatv/diagnostics.py b/homeassistant/components/braviatv/diagnostics.py new file mode 100644 index 00000000000..f1822b545e9 --- /dev/null +++ b/homeassistant/components/braviatv/diagnostics.py @@ -0,0 +1,28 @@ +"""Diagnostics support for BraviaTV.""" +from typing import Any + +from homeassistant.components.diagnostics import async_redact_data +from homeassistant.config_entries import ConfigEntry +from homeassistant.const import CONF_MAC, CONF_PIN +from homeassistant.core import HomeAssistant + +from .const import DOMAIN +from .coordinator import BraviaTVCoordinator + +TO_REDACT = {CONF_MAC, CONF_PIN, "macAddr"} + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, config_entry: ConfigEntry +) -> dict[str, Any]: + """Return diagnostics for a config entry.""" + coordinator: BraviaTVCoordinator = hass.data[DOMAIN][config_entry.entry_id] + + device_info = await coordinator.client.get_system_info() + + diagnostics_data = { + "config_entry": async_redact_data(config_entry.as_dict(), TO_REDACT), + "device_info": async_redact_data(device_info, TO_REDACT), + } + + return diagnostics_data diff --git a/tests/components/braviatv/snapshots/test_diagnostics.ambr b/tests/components/braviatv/snapshots/test_diagnostics.ambr new file mode 100644 index 00000000000..2fd515b24e5 --- /dev/null +++ b/tests/components/braviatv/snapshots/test_diagnostics.ambr @@ -0,0 +1,37 @@ +# serializer version: 1 +# name: test_entry_diagnostics + dict({ + 'config_entry': dict({ + 'data': dict({ + 'host': 'localhost', + 'mac': '**REDACTED**', + 'pin': '**REDACTED**', + 'use_psk': True, + }), + 'disabled_by': None, + 'domain': 'braviatv', + 'entry_id': '3bd2acb0e4f0476d40865546d0d91921', + 'minor_version': 1, + 'options': dict({ + }), + 'pref_disable_new_entities': False, + 'pref_disable_polling': False, + 'source': 'user', + 'title': 'Mock Title', + 'unique_id': 'very_unique_string', + 'version': 1, + }), + 'device_info': dict({ + 'area': 'POL', + 'cid': 'very_unique_string', + 'generation': '5.2.0', + 'language': 'pol', + 'macAddr': '**REDACTED**', + 'model': 'TV-Model', + 'name': 'BRAVIA', + 'product': 'TV', + 'region': 'XEU', + 'serial': 'serial_number', + }), + }) +# --- diff --git a/tests/components/braviatv/test_diagnostics.py b/tests/components/braviatv/test_diagnostics.py new file mode 100644 index 00000000000..d0974774e7b --- /dev/null +++ b/tests/components/braviatv/test_diagnostics.py @@ -0,0 +1,72 @@ +"""Test the BraviaTV diagnostics.""" +from unittest.mock import patch + +from syrupy import SnapshotAssertion + +from homeassistant.components.braviatv.const import CONF_USE_PSK, DOMAIN +from homeassistant.const import CONF_HOST, CONF_MAC, CONF_PIN +from homeassistant.core import HomeAssistant +from homeassistant.setup import async_setup_component + +from tests.common import MockConfigEntry +from tests.components.diagnostics import get_diagnostics_for_config_entry +from tests.typing import ClientSessionGenerator + +BRAVIA_SYSTEM_INFO = { + "product": "TV", + "region": "XEU", + "language": "pol", + "model": "TV-Model", + "serial": "serial_number", + "macAddr": "AA:BB:CC:DD:EE:FF", + "name": "BRAVIA", + "generation": "5.2.0", + "area": "POL", + "cid": "very_unique_string", +} +INPUTS = [ + { + "uri": "extInput:hdmi?port=1", + "title": "HDMI 1", + "connection": False, + "label": "", + "icon": "meta:hdmi", + } +] + + +async def test_entry_diagnostics( + hass: HomeAssistant, + hass_client: ClientSessionGenerator, + snapshot: SnapshotAssertion, +) -> None: + """Test config entry diagnostics.""" + + config_entry = MockConfigEntry( + domain=DOMAIN, + data={ + CONF_HOST: "localhost", + CONF_MAC: "AA:BB:CC:DD:EE:FF", + CONF_USE_PSK: True, + CONF_PIN: "12345qwerty", + }, + unique_id="very_unique_string", + entry_id="3bd2acb0e4f0476d40865546d0d91921", + ) + + config_entry.add_to_hass(hass) + with patch("pybravia.BraviaClient.connect"), patch( + "pybravia.BraviaClient.pair" + ), patch("pybravia.BraviaClient.set_wol_mode"), patch( + "pybravia.BraviaClient.get_system_info", return_value=BRAVIA_SYSTEM_INFO + ), patch("pybravia.BraviaClient.get_power_status", return_value="active"), patch( + "pybravia.BraviaClient.get_external_status", return_value=INPUTS + ), patch("pybravia.BraviaClient.get_volume_info", return_value={}), patch( + "pybravia.BraviaClient.get_playing_info", return_value={} + ), patch("pybravia.BraviaClient.get_app_list", return_value=[]), patch( + "pybravia.BraviaClient.get_content_list_all", return_value=[] + ): + assert await async_setup_component(hass, DOMAIN, {}) + result = await get_diagnostics_for_config_entry(hass, hass_client, config_entry) + + assert result == snapshot