mirror of
https://github.com/home-assistant/core.git
synced 2026-09-25 07:51:46 -05:00
Add Imou diagnostics for config entries (#181132)
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
"""Diagnostics support for Imou."""
|
||||
|
||||
from typing import Any
|
||||
|
||||
from pyimouapi.ha_device import ImouHaDevice
|
||||
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from .const import CONF_API_URL, CONF_APP_ID, imou_device_identifier
|
||||
from .coordinator import ImouConfigEntry
|
||||
|
||||
|
||||
def _serialize_device(device: ImouHaDevice) -> dict[str, Any]:
|
||||
"""Return a JSON-safe view of a discovered Imou device."""
|
||||
return {
|
||||
"identifier": imou_device_identifier(device),
|
||||
"device_id": device.device_id,
|
||||
"channel_id": device.channel_id,
|
||||
"model": device.model,
|
||||
"manufacturer": device.manufacturer,
|
||||
"sw_version": device.swversion,
|
||||
"product_id": device.product_id,
|
||||
"is_ipc": device.is_ipc,
|
||||
}
|
||||
|
||||
|
||||
async def async_get_config_entry_diagnostics(
|
||||
hass: HomeAssistant, entry: ImouConfigEntry
|
||||
) -> dict[str, Any]:
|
||||
"""Return diagnostics for a config entry."""
|
||||
coordinator = entry.runtime_data
|
||||
return {
|
||||
"entry": {
|
||||
CONF_API_URL: entry.data[CONF_API_URL],
|
||||
CONF_APP_ID: entry.data[CONF_APP_ID],
|
||||
},
|
||||
"coordinator": {
|
||||
"last_update_success": coordinator.last_update_success,
|
||||
},
|
||||
"devices": [
|
||||
_serialize_device(device)
|
||||
for device in sorted(coordinator.devices, key=imou_device_identifier)
|
||||
],
|
||||
}
|
||||
@@ -45,7 +45,7 @@ rules:
|
||||
|
||||
# Gold
|
||||
devices: done
|
||||
diagnostics: todo
|
||||
diagnostics: done
|
||||
discovery-update-info:
|
||||
status: exempt
|
||||
comment: Cloud hub; DHCP only surfaces the integration. Device IP is not stored or updated.
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
# serializer version: 1
|
||||
# name: test_config_entry_diagnostics
|
||||
dict({
|
||||
'coordinator': dict({
|
||||
'last_update_success': True,
|
||||
}),
|
||||
'devices': list([
|
||||
dict({
|
||||
'channel_id': None,
|
||||
'device_id': 'd1',
|
||||
'identifier': 'd1',
|
||||
'is_ipc': False,
|
||||
'manufacturer': 'Imou',
|
||||
'model': 'm1',
|
||||
'product_id': None,
|
||||
'sw_version': '1.0',
|
||||
}),
|
||||
]),
|
||||
'entry': dict({
|
||||
'api_url': 'sg',
|
||||
'app_id': 'test_app_id',
|
||||
}),
|
||||
})
|
||||
# ---
|
||||
@@ -0,0 +1,22 @@
|
||||
"""Tests for Imou diagnostics."""
|
||||
|
||||
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
|
||||
|
||||
|
||||
async def test_config_entry_diagnostics(
|
||||
hass: HomeAssistant,
|
||||
hass_client: ClientSessionGenerator,
|
||||
init_integration: MockConfigEntry,
|
||||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Diagnostics include the region, App ID, and current devices."""
|
||||
assert (
|
||||
await get_diagnostics_for_config_entry(hass, hass_client, init_integration)
|
||||
== snapshot
|
||||
)
|
||||
Reference in New Issue
Block a user