diff --git a/homeassistant/components/telegram_bot/diagnostics.py b/homeassistant/components/telegram_bot/diagnostics.py new file mode 100644 index 00000000000..0cf2fb76bcc --- /dev/null +++ b/homeassistant/components/telegram_bot/diagnostics.py @@ -0,0 +1,33 @@ +"""Diagnostics platform for Telegram bot integration.""" + +from __future__ import annotations + +from typing import Any + +from yarl import URL + +from homeassistant.components.diagnostics import REDACTED, async_redact_data +from homeassistant.const import CONF_API_KEY, CONF_URL +from homeassistant.core import HomeAssistant + +from . import TelegramBotConfigEntry +from .const import CONF_CHAT_ID + +TO_REDACT = [CONF_API_KEY, CONF_CHAT_ID] + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, config_entry: TelegramBotConfigEntry +) -> dict[str, Any]: + """Return diagnostics for a config entry.""" + + data = async_redact_data(config_entry.data, TO_REDACT) + if config_entry.data.get(CONF_URL): + url = URL(config_entry.data[CONF_URL]) + data[CONF_URL] = url.with_host(REDACTED).human_repr() + + return { + "data": data, + "options": async_redact_data(config_entry.options, TO_REDACT), + "subentries_count": len(config_entry.subentries.values()), + } diff --git a/homeassistant/components/telegram_bot/quality_scale.yaml b/homeassistant/components/telegram_bot/quality_scale.yaml index 495da7d0e80..cdd14554937 100644 --- a/homeassistant/components/telegram_bot/quality_scale.yaml +++ b/homeassistant/components/telegram_bot/quality_scale.yaml @@ -45,7 +45,7 @@ rules: # Gold devices: todo - diagnostics: todo + diagnostics: done discovery-update-info: todo discovery: todo docs-data-update: todo diff --git a/tests/components/telegram_bot/snapshots/test_diagnostics.ambr b/tests/components/telegram_bot/snapshots/test_diagnostics.ambr new file mode 100644 index 00000000000..b5be94f1c7a --- /dev/null +++ b/tests/components/telegram_bot/snapshots/test_diagnostics.ambr @@ -0,0 +1,18 @@ +# serializer version: 1 +# name: test_diagnostics + dict({ + 'data': dict({ + 'api_key': '**REDACTED**', + 'platform': 'webhooks', + 'proxy_url': None, + 'trusted_networks': list([ + '127.0.0.1/32', + ]), + 'url': 'https://**redacted**/', + }), + 'options': dict({ + 'parse_mode': 'markdown', + }), + 'subentries_count': 2, + }) +# --- diff --git a/tests/components/telegram_bot/test_diagnostics.py b/tests/components/telegram_bot/test_diagnostics.py new file mode 100644 index 00000000000..e0b782c955a --- /dev/null +++ b/tests/components/telegram_bot/test_diagnostics.py @@ -0,0 +1,27 @@ +"""Tests for Telegram bot diagnostics.""" + +from syrupy.assertion import SnapshotAssertion + +from homeassistant.components.telegram_bot.const import DOMAIN +from homeassistant.core import HomeAssistant + +from tests.components.diagnostics import get_diagnostics_for_config_entry +from tests.typing import ClientSessionGenerator + + +async def test_diagnostics( + hass: HomeAssistant, + hass_client: ClientSessionGenerator, + webhook_platform, + mock_external_calls: None, + mock_generate_secret_token, + snapshot: SnapshotAssertion, +) -> None: + """Test diagnostics.""" + + config_entry = hass.config_entries.async_entries(DOMAIN)[0] + + diagnostics = await get_diagnostics_for_config_entry( + hass, hass_client, config_entry + ) + assert diagnostics == snapshot