Add diagnostics to Mazda integration (#64606)
parent
6874b49a39
commit
b03ae66254
|
@ -0,0 +1,57 @@
|
|||
"""Diagnostics support for the Mazda integration."""
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from homeassistant.components.diagnostics.util import async_redact_data
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_EMAIL, CONF_PASSWORD
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
from homeassistant.helpers.device_registry import DeviceEntry
|
||||
|
||||
from .const import DATA_COORDINATOR, DOMAIN
|
||||
|
||||
TO_REDACT_INFO = [CONF_EMAIL, CONF_PASSWORD]
|
||||
TO_REDACT_DATA = ["vin", "id", "latitude", "longitude"]
|
||||
|
||||
|
||||
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][DATA_COORDINATOR]
|
||||
|
||||
diagnostics_data = {
|
||||
"info": async_redact_data(config_entry.data, TO_REDACT_INFO),
|
||||
"data": [
|
||||
async_redact_data(vehicle, TO_REDACT_DATA) for vehicle in coordinator.data
|
||||
],
|
||||
}
|
||||
|
||||
return diagnostics_data
|
||||
|
||||
|
||||
async def async_get_device_diagnostics(
|
||||
hass: HomeAssistant, config_entry: ConfigEntry, device: DeviceEntry
|
||||
) -> dict[str, Any]:
|
||||
"""Return diagnostics for a device."""
|
||||
coordinator = hass.data[DOMAIN][config_entry.entry_id][DATA_COORDINATOR]
|
||||
|
||||
vin = next(iter(device.identifiers))[1]
|
||||
|
||||
target_vehicle = None
|
||||
for vehicle in coordinator.data:
|
||||
if vehicle["vin"] == vin:
|
||||
target_vehicle = vehicle
|
||||
break
|
||||
|
||||
if target_vehicle is None:
|
||||
raise HomeAssistantError("Vehicle not found")
|
||||
|
||||
diagnostics_data = {
|
||||
"info": async_redact_data(config_entry.data, TO_REDACT_INFO),
|
||||
"data": async_redact_data(target_vehicle, TO_REDACT_DATA),
|
||||
}
|
||||
|
||||
return diagnostics_data
|
|
@ -0,0 +1,62 @@
|
|||
{
|
||||
"info": {
|
||||
"email": "**REDACTED**",
|
||||
"password": "**REDACTED**",
|
||||
"region": "MNAO"
|
||||
},
|
||||
"data": [
|
||||
{
|
||||
"vin": "**REDACTED**",
|
||||
"id": "**REDACTED**",
|
||||
"nickname": "My Mazda3",
|
||||
"carlineCode": "M3S",
|
||||
"carlineName": "MAZDA3 2.5 S SE AWD",
|
||||
"modelYear": "2021",
|
||||
"modelCode": "M3S SE XA",
|
||||
"modelName": "W/ SELECT PKG AWD SDN",
|
||||
"automaticTransmission": true,
|
||||
"interiorColorCode": "BY3",
|
||||
"interiorColorName": "BLACK",
|
||||
"exteriorColorCode": "42M",
|
||||
"exteriorColorName": "DEEP CRYSTAL BLUE MICA",
|
||||
"isElectric": false,
|
||||
"status": {
|
||||
"lastUpdatedTimestamp": "20210123143809",
|
||||
"latitude": "**REDACTED**",
|
||||
"longitude": "**REDACTED**",
|
||||
"positionTimestamp": "20210123143808",
|
||||
"fuelRemainingPercent": 87.0,
|
||||
"fuelDistanceRemainingKm": 380.8,
|
||||
"odometerKm": 2795.8,
|
||||
"doors": {
|
||||
"driverDoorOpen": false,
|
||||
"passengerDoorOpen": false,
|
||||
"rearLeftDoorOpen": false,
|
||||
"rearRightDoorOpen": false,
|
||||
"trunkOpen": false,
|
||||
"hoodOpen": false,
|
||||
"fuelLidOpen": false
|
||||
},
|
||||
"doorLocks": {
|
||||
"driverDoorUnlocked": false,
|
||||
"passengerDoorUnlocked": false,
|
||||
"rearLeftDoorUnlocked": false,
|
||||
"rearRightDoorUnlocked": false
|
||||
},
|
||||
"windows": {
|
||||
"driverWindowOpen": false,
|
||||
"passengerWindowOpen": false,
|
||||
"rearLeftWindowOpen": false,
|
||||
"rearRightWindowOpen": false
|
||||
},
|
||||
"hazardLightsOn": false,
|
||||
"tirePressure": {
|
||||
"frontLeftTirePressurePsi": 35.0,
|
||||
"frontRightTirePressurePsi": 35.0,
|
||||
"rearLeftTirePressurePsi": 33.0,
|
||||
"rearRightTirePressurePsi": 33.0
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
{
|
||||
"info": {
|
||||
"email": "**REDACTED**",
|
||||
"password": "**REDACTED**",
|
||||
"region": "MNAO"
|
||||
},
|
||||
"data": {
|
||||
"vin": "**REDACTED**",
|
||||
"id": "**REDACTED**",
|
||||
"nickname": "My Mazda3",
|
||||
"carlineCode": "M3S",
|
||||
"carlineName": "MAZDA3 2.5 S SE AWD",
|
||||
"modelYear": "2021",
|
||||
"modelCode": "M3S SE XA",
|
||||
"modelName": "W/ SELECT PKG AWD SDN",
|
||||
"automaticTransmission": true,
|
||||
"interiorColorCode": "BY3",
|
||||
"interiorColorName": "BLACK",
|
||||
"exteriorColorCode": "42M",
|
||||
"exteriorColorName": "DEEP CRYSTAL BLUE MICA",
|
||||
"isElectric": false,
|
||||
"status": {
|
||||
"lastUpdatedTimestamp": "20210123143809",
|
||||
"latitude": "**REDACTED**",
|
||||
"longitude": "**REDACTED**",
|
||||
"positionTimestamp": "20210123143808",
|
||||
"fuelRemainingPercent": 87.0,
|
||||
"fuelDistanceRemainingKm": 380.8,
|
||||
"odometerKm": 2795.8,
|
||||
"doors": {
|
||||
"driverDoorOpen": false,
|
||||
"passengerDoorOpen": false,
|
||||
"rearLeftDoorOpen": false,
|
||||
"rearRightDoorOpen": false,
|
||||
"trunkOpen": false,
|
||||
"hoodOpen": false,
|
||||
"fuelLidOpen": false
|
||||
},
|
||||
"doorLocks": {
|
||||
"driverDoorUnlocked": false,
|
||||
"passengerDoorUnlocked": false,
|
||||
"rearLeftDoorUnlocked": false,
|
||||
"rearRightDoorUnlocked": false
|
||||
},
|
||||
"windows": {
|
||||
"driverWindowOpen": false,
|
||||
"passengerWindowOpen": false,
|
||||
"rearLeftWindowOpen": false,
|
||||
"rearRightWindowOpen": false
|
||||
},
|
||||
"hazardLightsOn": false,
|
||||
"tirePressure": {
|
||||
"frontLeftTirePressurePsi": 35.0,
|
||||
"frontRightTirePressurePsi": 35.0,
|
||||
"rearLeftTirePressurePsi": 33.0,
|
||||
"rearRightTirePressurePsi": 33.0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,75 @@
|
|||
"""Test Mazda diagnostics."""
|
||||
|
||||
import json
|
||||
|
||||
import pytest
|
||||
|
||||
from homeassistant.components.mazda.const import DATA_COORDINATOR, DOMAIN
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import device_registry as dr
|
||||
|
||||
from . import init_integration
|
||||
|
||||
from tests.common import load_fixture
|
||||
from tests.components.diagnostics import (
|
||||
get_diagnostics_for_config_entry,
|
||||
get_diagnostics_for_device,
|
||||
)
|
||||
|
||||
|
||||
async def test_config_entry_diagnostics(hass: HomeAssistant, hass_client):
|
||||
"""Test config entry diagnostics."""
|
||||
await init_integration(hass)
|
||||
assert hass.data[DOMAIN]
|
||||
|
||||
config_entry = hass.config_entries.async_entries(DOMAIN)[0]
|
||||
|
||||
diagnostics_fixture = json.loads(
|
||||
load_fixture("mazda/diagnostics_config_entry.json")
|
||||
)
|
||||
|
||||
assert (
|
||||
await get_diagnostics_for_config_entry(hass, hass_client, config_entry)
|
||||
== diagnostics_fixture
|
||||
)
|
||||
|
||||
|
||||
async def test_device_diagnostics(hass: HomeAssistant, hass_client):
|
||||
"""Test device diagnostics."""
|
||||
await init_integration(hass)
|
||||
assert hass.data[DOMAIN]
|
||||
|
||||
config_entry = hass.config_entries.async_entries(DOMAIN)[0]
|
||||
|
||||
device_registry = dr.async_get(hass)
|
||||
reg_device = device_registry.async_get_device(
|
||||
identifiers={(DOMAIN, "JM000000000000000")},
|
||||
)
|
||||
assert reg_device is not None
|
||||
|
||||
diagnostics_fixture = json.loads(load_fixture("mazda/diagnostics_device.json"))
|
||||
|
||||
assert (
|
||||
await get_diagnostics_for_device(hass, hass_client, config_entry, reg_device)
|
||||
== diagnostics_fixture
|
||||
)
|
||||
|
||||
|
||||
async def test_device_diagnostics_vehicle_not_found(hass: HomeAssistant, hass_client):
|
||||
"""Test device diagnostics when the vehicle cannot be found."""
|
||||
await init_integration(hass)
|
||||
assert hass.data[DOMAIN]
|
||||
|
||||
config_entry = hass.config_entries.async_entries(DOMAIN)[0]
|
||||
|
||||
device_registry = dr.async_get(hass)
|
||||
reg_device = device_registry.async_get_device(
|
||||
identifiers={(DOMAIN, "JM000000000000000")},
|
||||
)
|
||||
assert reg_device is not None
|
||||
|
||||
# Remove vehicle info from hass.data so that vehicle will not be found
|
||||
hass.data[DOMAIN][config_entry.entry_id][DATA_COORDINATOR].data = []
|
||||
|
||||
with pytest.raises(AssertionError):
|
||||
await get_diagnostics_for_device(hass, hass_client, config_entry, reg_device)
|
Loading…
Reference in New Issue