From 33c2fc008ad2fb7841bbb87d552ffd5b363f74a4 Mon Sep 17 00:00:00 2001 From: Joost Lekkerkerker Date: Fri, 21 Jul 2023 11:58:49 +0200 Subject: [PATCH] Add diagnostics to YouTube (#96975) --- .../components/youtube/diagnostics.py | 24 +++++++++++++++++++ .../youtube/snapshots/test_diagnostics.ambr | 17 +++++++++++++ tests/components/youtube/test_diagnostics.py | 23 ++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 homeassistant/components/youtube/diagnostics.py create mode 100644 tests/components/youtube/snapshots/test_diagnostics.ambr create mode 100644 tests/components/youtube/test_diagnostics.py diff --git a/homeassistant/components/youtube/diagnostics.py b/homeassistant/components/youtube/diagnostics.py new file mode 100644 index 00000000000..380033e450a --- /dev/null +++ b/homeassistant/components/youtube/diagnostics.py @@ -0,0 +1,24 @@ +"""Diagnostics support for YouTube.""" +from __future__ import annotations + +from typing import Any + +from homeassistant.config_entries import ConfigEntry +from homeassistant.core import HomeAssistant + +from .const import ATTR_DESCRIPTION, ATTR_LATEST_VIDEO, COORDINATOR, DOMAIN +from .coordinator import YouTubeDataUpdateCoordinator + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, entry: ConfigEntry +) -> dict[str, Any]: + """Return diagnostics for a config entry.""" + coordinator: YouTubeDataUpdateCoordinator = hass.data[DOMAIN][entry.entry_id][ + COORDINATOR + ] + sensor_data = {} + for channel_id, channel_data in coordinator.data.items(): + channel_data.get(ATTR_LATEST_VIDEO, {}).pop(ATTR_DESCRIPTION) + sensor_data[channel_id] = channel_data + return sensor_data diff --git a/tests/components/youtube/snapshots/test_diagnostics.ambr b/tests/components/youtube/snapshots/test_diagnostics.ambr new file mode 100644 index 00000000000..6a41465ac92 --- /dev/null +++ b/tests/components/youtube/snapshots/test_diagnostics.ambr @@ -0,0 +1,17 @@ +# serializer version: 1 +# name: test_diagnostics + dict({ + 'UC_x5XG1OV2P6uZZ5FSM9Ttw': dict({ + 'icon': 'https://yt3.ggpht.com/fca_HuJ99xUxflWdex0XViC3NfctBFreIl8y4i9z411asnGTWY-Ql3MeH_ybA4kNaOjY7kyA=s800-c-k-c0x00ffffff-no-rj', + 'id': 'UC_x5XG1OV2P6uZZ5FSM9Ttw', + 'latest_video': dict({ + 'published_at': '2023-05-11T00:20:46Z', + 'thumbnail': 'https://i.ytimg.com/vi/wysukDrMdqU/sddefault.jpg', + 'title': "What's new in Google Home in less than 1 minute", + 'video_id': 'wysukDrMdqU', + }), + 'subscriber_count': 2290000, + 'title': 'Google for Developers', + }), + }) +# --- diff --git a/tests/components/youtube/test_diagnostics.py b/tests/components/youtube/test_diagnostics.py new file mode 100644 index 00000000000..4fe16c3a8b6 --- /dev/null +++ b/tests/components/youtube/test_diagnostics.py @@ -0,0 +1,23 @@ +"""Tests for the diagnostics data provided by the YouTube integration.""" +from syrupy import SnapshotAssertion + +from homeassistant.components.youtube.const import DOMAIN +from homeassistant.core import HomeAssistant + +from .conftest import ComponentSetup + +from tests.components.diagnostics import get_diagnostics_for_config_entry +from tests.typing import ClientSessionGenerator + + +async def test_diagnostics( + hass: HomeAssistant, + hass_client: ClientSessionGenerator, + setup_integration: ComponentSetup, + snapshot: SnapshotAssertion, +) -> None: + """Test diagnostics.""" + await setup_integration() + entry = hass.config_entries.async_entries(DOMAIN)[0] + + assert await get_diagnostics_for_config_entry(hass, hass_client, entry) == snapshot