mirror of
https://github.com/home-assistant/core.git
synced 2025-04-23 08:47:57 +00:00
Add diagnostics to Version integration (#65999)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
parent
e226cfaeb2
commit
b1015296d9
56
homeassistant/components/version/diagnostics.py
Normal file
56
homeassistant/components/version/diagnostics.py
Normal file
@ -0,0 +1,56 @@
|
||||
"""Provides diagnostics for Version."""
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from attr import asdict
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import device_registry as dr, entity_registry as er
|
||||
|
||||
from .const import DOMAIN
|
||||
|
||||
|
||||
async def async_get_config_entry_diagnostics(
|
||||
hass: HomeAssistant,
|
||||
config_entry: ConfigEntry,
|
||||
) -> dict[str, Any]:
|
||||
"""Return diagnostics for a config entry."""
|
||||
coordinator = hass.data[DOMAIN][config_entry.entry_id]
|
||||
device_registry = dr.async_get(hass)
|
||||
entity_registry = er.async_get(hass)
|
||||
|
||||
devices = []
|
||||
|
||||
registry_devices = dr.async_entries_for_config_entry(
|
||||
device_registry, config_entry.entry_id
|
||||
)
|
||||
|
||||
for device in registry_devices:
|
||||
entities = []
|
||||
|
||||
registry_entities = er.async_entries_for_device(
|
||||
entity_registry,
|
||||
device_id=device.id,
|
||||
include_disabled_entities=True,
|
||||
)
|
||||
|
||||
for entity in registry_entities:
|
||||
state_dict = None
|
||||
if state := hass.states.get(entity.entity_id):
|
||||
state_dict = dict(state.as_dict())
|
||||
state_dict.pop("context", None)
|
||||
|
||||
entities.append({"entry": asdict(entity), "state": state_dict})
|
||||
|
||||
devices.append({"device": asdict(device), "entities": entities})
|
||||
|
||||
return {
|
||||
"entry": config_entry.as_dict(),
|
||||
"coordinator_data": {
|
||||
"version": coordinator.version,
|
||||
"version_data": coordinator.version_data,
|
||||
},
|
||||
"devices": devices,
|
||||
}
|
36
tests/components/version/test_diagnostics.py
Normal file
36
tests/components/version/test_diagnostics.py
Normal file
@ -0,0 +1,36 @@
|
||||
"""Test version diagnostics."""
|
||||
|
||||
|
||||
from aioaseko import ClientSession
|
||||
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from .common import MOCK_VERSION, setup_version_integration
|
||||
|
||||
from tests.components.diagnostics import get_diagnostics_for_config_entry
|
||||
|
||||
|
||||
async def test_diagnostics(
|
||||
hass: HomeAssistant,
|
||||
hass_client: ClientSession,
|
||||
) -> None:
|
||||
"""Test diagnostic information."""
|
||||
config_entry = await setup_version_integration(hass)
|
||||
|
||||
diagnostics = await get_diagnostics_for_config_entry(
|
||||
hass, hass_client, config_entry
|
||||
)
|
||||
assert diagnostics["entry"]["data"] == {
|
||||
"name": "",
|
||||
"channel": "stable",
|
||||
"image": "default",
|
||||
"board": "OVA",
|
||||
"version_source": "Local installation",
|
||||
"source": "local",
|
||||
}
|
||||
|
||||
assert diagnostics["coordinator_data"] == {
|
||||
"version": MOCK_VERSION,
|
||||
"version_data": None,
|
||||
}
|
||||
assert len(diagnostics["devices"]) == 1
|
Loading…
x
Reference in New Issue
Block a user