Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions homeassistant/components/data_grand_lyon/diagnostics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
"""Diagnostics support for the Data Grand Lyon integration."""

from dataclasses import asdict
from typing import Any

from homeassistant.components.diagnostics import async_redact_data
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant

from .coordinator import DataGrandLyonConfigEntry

TO_REDACT = {CONF_USERNAME, CONF_PASSWORD}
Comment thread
balloob marked this conversation as resolved.


async def async_get_config_entry_diagnostics(
hass: HomeAssistant, entry: DataGrandLyonConfigEntry
) -> dict[str, Any]:
"""Return diagnostics for a config entry."""
coordinator = entry.runtime_data

return {
"config_entry": async_redact_data(entry.as_dict(), TO_REDACT),
"coordinator_data": {
subentry_id: [asdict(passage) for passage in passages]
for subentry_id, passages in coordinator.data.items()
},
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ rules:

# Gold
devices: done
diagnostics: todo
diagnostics: done
discovery-update-info:
status: exempt
comment: This is a service integration; there are no discoverable devices.
Expand Down
59 changes: 59 additions & 0 deletions tests/components/data_grand_lyon/snapshots/test_diagnostics.ambr
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# serializer version: 1
# name: test_config_entry_diagnostics
dict({
'config_entry': dict({
'data': dict({
'password': '**REDACTED**',
'username': '**REDACTED**',
}),
'disabled_by': None,
'discovery_keys': dict({
}),
'domain': 'data_grand_lyon',
'minor_version': 1,
'options': dict({
}),
'pref_disable_new_entities': False,
'pref_disable_polling': False,
'source': 'user',
'subentries': list([
dict({
'data': dict({
'line': 'C3',
'stop_id': 100,
}),
'subentry_type': 'stop',
'title': 'C3 - Stop 100',
'unique_id': 'C3_100',
}),
]),
'title': 'Data Grand Lyon',
'unique_id': None,
'version': 1,
}),
'coordinator_data': dict({
'stop_1': list([
dict({
'course_theorique': 'A',
'delai_passage': '3 min',
'direction': 'Gare Part-Dieu',
'heure_passage': '2026-04-10T14:03:00',
'id': 100,
'id_tarret_destination': 0,
'ligne': 'C3',
'type': 'E',
}),
dict({
'course_theorique': 'B',
'delai_passage': '8 min',
'direction': 'Gare St-Paul',
'heure_passage': '2026-04-10T14:08:00',
'id': 100,
'id_tarret_destination': 0,
'ligne': 'C3',
'type': 'T',
}),
]),
}),
})
# ---
29 changes: 29 additions & 0 deletions tests/components/data_grand_lyon/test_diagnostics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
"""Tests for the Data Grand Lyon diagnostics."""

from unittest.mock import AsyncMock

from syrupy.assertion import SnapshotAssertion
from syrupy.filters import props

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


async def test_config_entry_diagnostics(
hass: HomeAssistant,
hass_client: ClientSessionGenerator,
mock_config_entry: MockConfigEntry,
mock_tcl_client: AsyncMock,
snapshot: SnapshotAssertion,
) -> None:
"""Test config entry diagnostics."""
mock_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()

assert await get_diagnostics_for_config_entry(
hass, hass_client, mock_config_entry
) == snapshot(exclude=props("created_at", "modified_at", "entry_id", "subentry_id"))