From f45c3efcb928169d3d59b50d6beac4424a89f27a Mon Sep 17 00:00:00 2001 From: Manu Date: Fri, 2 Oct 2026 23:20:33 +0200 Subject: [PATCH] Add diagnostics platform to SMTP (#184091) --- homeassistant/components/smtp/diagnostics.py | 38 +++++++++++++++++++ .../smtp/snapshots/test_diagnostics.ambr | 21 ++++++++++ tests/components/smtp/test_diagnostics.py | 28 ++++++++++++++ 3 files changed, 87 insertions(+) create mode 100644 homeassistant/components/smtp/diagnostics.py create mode 100644 tests/components/smtp/snapshots/test_diagnostics.ambr create mode 100644 tests/components/smtp/test_diagnostics.py diff --git a/homeassistant/components/smtp/diagnostics.py b/homeassistant/components/smtp/diagnostics.py new file mode 100644 index 000000000000..db119e220691 --- /dev/null +++ b/homeassistant/components/smtp/diagnostics.py @@ -0,0 +1,38 @@ +"""Diagnostics platform for SMTP integration.""" + +from typing import Any + +from homeassistant.components.diagnostics import async_redact_data +from homeassistant.const import ( + CONF_PASSWORD, + CONF_RECIPIENT, + CONF_SENDER, + CONF_USERNAME, +) +from homeassistant.core import HomeAssistant + +from . import SmtpConfigEntry +from .const import CONF_REPLY_TO, CONF_REPLY_TO_NAME, CONF_SENDER_NAME, CONF_SERVER + +TO_REDACT = { + CONF_PASSWORD, + CONF_USERNAME, + CONF_SENDER, + CONF_SENDER_NAME, + CONF_REPLY_TO, + CONF_REPLY_TO_NAME, + CONF_SERVER, + CONF_RECIPIENT, +} + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, config_entry: SmtpConfigEntry +) -> dict[str, Any]: + """Return diagnostics for a config entry.""" + + return { + "data": async_redact_data(data=config_entry.data, to_redact=TO_REDACT), + "options": async_redact_data(data=config_entry.options, to_redact=TO_REDACT), + "subentries": len(config_entry.subentries), + } diff --git a/tests/components/smtp/snapshots/test_diagnostics.ambr b/tests/components/smtp/snapshots/test_diagnostics.ambr new file mode 100644 index 000000000000..866fd8343358 --- /dev/null +++ b/tests/components/smtp/snapshots/test_diagnostics.ambr @@ -0,0 +1,21 @@ +# serializer version: 1 +# name: test_diagnostics + dict({ + 'data': dict({ + 'encryption': 'starttls', + 'password': '**REDACTED**', + 'port': 587, + 'sender': '**REDACTED**', + 'sender_name': '**REDACTED**', + 'server': '**REDACTED**', + 'username': '**REDACTED**', + 'verify_ssl': True, + }), + 'options': dict({ + 'reply_to': '**REDACTED**', + 'reply_to_name': '**REDACTED**', + 'timeout': 1312, + }), + 'subentries': 1, + }) +# --- diff --git a/tests/components/smtp/test_diagnostics.py b/tests/components/smtp/test_diagnostics.py new file mode 100644 index 000000000000..79128e588082 --- /dev/null +++ b/tests/components/smtp/test_diagnostics.py @@ -0,0 +1,28 @@ +"""Tests for SMTP diagnostics.""" + +import pytest +from syrupy.assertion import SnapshotAssertion + +from homeassistant.core import HomeAssistant + +from tests.common import MockConfigEntry +from tests.components.diagnostics import get_diagnostics_for_config_entry +from tests.typing import ClientSessionGenerator + + +@pytest.mark.usefixtures("smtp", "aiosmtplib") +async def test_diagnostics( + hass: HomeAssistant, + hass_client: ClientSessionGenerator, + config_entry: MockConfigEntry, + snapshot: SnapshotAssertion, +) -> None: + """Test diagnostics.""" + + config_entry.add_to_hass(hass) + await hass.config_entries.async_setup(config_entry.entry_id) + await hass.async_block_till_done() + assert ( + await get_diagnostics_for_config_entry(hass, hass_client, config_entry) + == snapshot + )