Add Motionblinds Bluetooth diagnostics (#121899)
* Add diagnostics platform * Add diagnostics test * Remove comments * Exclude created_at and modified_at from snapshot * Fix entry_id in mock_config_entry * Add repr to excluded props from snapshot * Improve diagnostics * Use function name instead of number for callback diagnostics * Remove info from diagnostics * Reformat
This commit is contained in:
parent
38a1c97a51
commit
fb5afff9d5
4 changed files with 115 additions and 0 deletions
53
homeassistant/components/motionblinds_ble/diagnostics.py
Normal file
53
homeassistant/components/motionblinds_ble/diagnostics.py
Normal file
|
@ -0,0 +1,53 @@
|
|||
"""Diagnostics support for Motionblinds Bluetooth."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Iterable
|
||||
from typing import Any
|
||||
|
||||
from motionblindsble.device import MotionDevice
|
||||
|
||||
from homeassistant.components.diagnostics import async_redact_data
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_UNIQUE_ID
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from .const import DOMAIN
|
||||
|
||||
CONF_TITLE = "title"
|
||||
|
||||
TO_REDACT: Iterable[Any] = {
|
||||
# Config entry title and unique ID may contain sensitive data:
|
||||
CONF_TITLE,
|
||||
CONF_UNIQUE_ID,
|
||||
}
|
||||
|
||||
|
||||
async def async_get_config_entry_diagnostics(
|
||||
hass: HomeAssistant, entry: ConfigEntry
|
||||
) -> dict[str, Any]:
|
||||
"""Return diagnostics for a config entry."""
|
||||
device: MotionDevice = hass.data[DOMAIN][entry.entry_id]
|
||||
|
||||
return async_redact_data(
|
||||
{
|
||||
"entry": entry.as_dict(),
|
||||
"device": {
|
||||
"blind_type": device.blind_type.value,
|
||||
"timezone": device.timezone,
|
||||
"position": device._position, # noqa: SLF001
|
||||
"tilt": device._tilt, # noqa: SLF001
|
||||
"calibration_type": device._calibration_type.value # noqa: SLF001
|
||||
if device._calibration_type # noqa: SLF001
|
||||
else None,
|
||||
"connection_type": device._connection_type.value, # noqa: SLF001
|
||||
"end_position_info": None
|
||||
if not device._end_position_info # noqa: SLF001
|
||||
else {
|
||||
"end_positions": device._end_position_info.end_positions.value, # noqa: SLF001
|
||||
"favorite": device._end_position_info.favorite_position, # noqa: SLF001
|
||||
},
|
||||
},
|
||||
},
|
||||
TO_REDACT,
|
||||
)
|
|
@ -109,6 +109,7 @@ def mock_config_entry(
|
|||
return MockConfigEntry(
|
||||
title="mock_title",
|
||||
domain=DOMAIN,
|
||||
entry_id="mock_entry_id",
|
||||
unique_id=address,
|
||||
data={
|
||||
CONF_ADDRESS: address,
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
# serializer version: 1
|
||||
# name: test_diagnostics
|
||||
dict({
|
||||
'device': dict({
|
||||
'blind_type': 'Roller blind',
|
||||
'calibration_type': None,
|
||||
'connection_type': 'disconnected',
|
||||
'end_position_info': None,
|
||||
'position': None,
|
||||
'tilt': None,
|
||||
'timezone': None,
|
||||
}),
|
||||
'entry': dict({
|
||||
'data': dict({
|
||||
'address': 'cc:cc:cc:cc:cc:cc',
|
||||
'blind_type': 'roller',
|
||||
'local_name': 'Motionblind CCCC',
|
||||
'mac_code': 'CCCC',
|
||||
}),
|
||||
'disabled_by': None,
|
||||
'domain': 'motionblinds_ble',
|
||||
'entry_id': 'mock_entry_id',
|
||||
'minor_version': 1,
|
||||
'options': dict({
|
||||
}),
|
||||
'pref_disable_new_entities': False,
|
||||
'pref_disable_polling': False,
|
||||
'source': 'user',
|
||||
'title': '**REDACTED**',
|
||||
'unique_id': '**REDACTED**',
|
||||
'version': 1,
|
||||
}),
|
||||
})
|
||||
# ---
|
27
tests/components/motionblinds_ble/test_diagnostics.py
Normal file
27
tests/components/motionblinds_ble/test_diagnostics.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
"""Test Motionblinds Bluetooth diagnostics."""
|
||||
|
||||
from syrupy import SnapshotAssertion
|
||||
from syrupy.filters import props
|
||||
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from . import setup_integration
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
from tests.components.diagnostics import get_diagnostics_for_config_entry
|
||||
from tests.typing import ClientSessionGenerator
|
||||
|
||||
|
||||
async def test_diagnostics(
|
||||
hass: HomeAssistant,
|
||||
hass_client: ClientSessionGenerator,
|
||||
mock_config_entry: MockConfigEntry,
|
||||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Test diagnostics."""
|
||||
|
||||
await setup_integration(hass, mock_config_entry)
|
||||
|
||||
assert await get_diagnostics_for_config_entry(
|
||||
hass, hass_client, mock_config_entry
|
||||
) == snapshot(exclude=props("created_at", "modified_at", "repr"))
|
Loading…
Add table
Reference in a new issue