diff --git a/homeassistant/components/ntfy/diagnostics.py b/homeassistant/components/ntfy/diagnostics.py new file mode 100644 index 00000000000..5be239dfef6 --- /dev/null +++ b/homeassistant/components/ntfy/diagnostics.py @@ -0,0 +1,29 @@ +"""Diagnostics platform for ntfy integration.""" + +from __future__ import annotations + +from typing import Any + +from yarl import URL + +from homeassistant.components.diagnostics import REDACTED +from homeassistant.const import CONF_URL +from homeassistant.core import HomeAssistant + +from . import NtfyConfigEntry + + +async def async_get_config_entry_diagnostics( + hass: HomeAssistant, config_entry: NtfyConfigEntry +) -> dict[str, Any]: + """Return diagnostics for a config entry.""" + + url = URL(config_entry.data[CONF_URL]) + return { + CONF_URL: ( + url.human_repr() + if url.host == "ntfy.sh" + else url.with_host(REDACTED).human_repr() + ), + "topics": dict(config_entry.subentries), + } diff --git a/homeassistant/components/ntfy/quality_scale.yaml b/homeassistant/components/ntfy/quality_scale.yaml index 84ec1d82b7c..0d075f0014b 100644 --- a/homeassistant/components/ntfy/quality_scale.yaml +++ b/homeassistant/components/ntfy/quality_scale.yaml @@ -49,7 +49,7 @@ rules: # Gold devices: done - diagnostics: todo + diagnostics: done discovery-update-info: todo discovery: todo docs-data-update: todo diff --git a/tests/components/ntfy/snapshots/test_diagnostics.ambr b/tests/components/ntfy/snapshots/test_diagnostics.ambr new file mode 100644 index 00000000000..3dd464f8670 --- /dev/null +++ b/tests/components/ntfy/snapshots/test_diagnostics.ambr @@ -0,0 +1,24 @@ +# serializer version: 1 +# name: test_diagnostics + dict({ + 'topics': dict({ + 'ABCDEF': dict({ + 'data': dict({ + 'topic': 'mytopic', + }), + 'subentry_id': 'ABCDEF', + 'subentry_type': 'topic', + 'title': 'mytopic', + 'unique_id': 'mytopic', + }), + }), + 'url': 'https://ntfy.sh/', + }) +# --- +# name: test_diagnostics_redacted_url + dict({ + 'topics': dict({ + }), + 'url': 'http://**redacted**/', + }) +# --- diff --git a/tests/components/ntfy/test_diagnostics.py b/tests/components/ntfy/test_diagnostics.py new file mode 100644 index 00000000000..a4aa3ee6aa7 --- /dev/null +++ b/tests/components/ntfy/test_diagnostics.py @@ -0,0 +1,55 @@ +"""Tests for ntfy diagnostics.""" + +import pytest +from syrupy.assertion import SnapshotAssertion + +from homeassistant.components.ntfy.const import DOMAIN +from homeassistant.const import CONF_URL +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("mock_aiontfy") +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 + ) + + +@pytest.mark.usefixtures("mock_aiontfy") +async def test_diagnostics_redacted_url( + hass: HomeAssistant, + hass_client: ClientSessionGenerator, + snapshot: SnapshotAssertion, +) -> None: + """Test diagnostics redacted URL.""" + config_entry = MockConfigEntry( + domain=DOMAIN, + title="mydomain", + data={ + CONF_URL: "http://mydomain/", + }, + entry_id="123456789", + subentries_data=[], + ) + 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 + )