Skip to content

Commit

Permalink
Add diagnostics for Cookidoo integration (#136770)
Browse files Browse the repository at this point in the history
Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
  • Loading branch information
miaucl and joostlek authored Jan 29, 2025
1 parent ce43255 commit 04d1d80
Show file tree
Hide file tree
Showing 7 changed files with 113 additions and 2 deletions.
3 changes: 3 additions & 0 deletions homeassistant/components/cookidoo/coordinator.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
CookidooIngredientItem,
CookidooRequestException,
CookidooSubscription,
CookidooUserInfo,
)

from homeassistant.config_entries import ConfigEntry
Expand Down Expand Up @@ -42,6 +43,7 @@ class CookidooDataUpdateCoordinator(DataUpdateCoordinator[CookidooData]):
"""A Cookidoo Data Update Coordinator."""

config_entry: CookidooConfigEntry
user: CookidooUserInfo

def __init__(
self, hass: HomeAssistant, cookidoo: Cookidoo, entry: CookidooConfigEntry
Expand All @@ -59,6 +61,7 @@ def __init__(
async def _async_setup(self) -> None:
try:
await self.cookidoo.login()
self.user = await self.cookidoo.get_user_info()
except CookidooRequestException as e:
raise UpdateFailed(
translation_domain=DOMAIN,
Expand Down
26 changes: 26 additions & 0 deletions homeassistant/components/cookidoo/diagnostics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
"""Diagnostics for the Cookidoo integration."""

from dataclasses import asdict
from typing import Any

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

from .coordinator import CookidooConfigEntry

TO_REDACT = [
CONF_PASSWORD,
]


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

return {
"entry_data": async_redact_data(entry.data, TO_REDACT),
"data": asdict(entry.runtime_data.data),
"user": asdict(entry.runtime_data.user),
}
2 changes: 1 addition & 1 deletion homeassistant/components/cookidoo/quality_scale.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ rules:
stale-devices:
status: exempt
comment: No stale entities possible
diagnostics: todo
diagnostics: done
exception-translations: done
icon-translations: done
reconfiguration-flow: done
Expand Down
5 changes: 4 additions & 1 deletion tests/components/cookidoo/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
CookidooAuthResponse,
CookidooIngredientItem,
CookidooSubscription,
CookidooUserInfo,
)
import pytest

Expand Down Expand Up @@ -58,7 +59,9 @@ def mock_cookidoo_client() -> Generator[AsyncMock]:
client.get_active_subscription.return_value = CookidooSubscription(
**load_json_object_fixture("subscriptions.json", DOMAIN)["data"]
)

client.get_user_info.return_value = CookidooUserInfo(
**load_json_object_fixture("user_info.json", DOMAIN)["data"]
)
client.login.return_value = CookidooAuthResponse(
**load_json_object_fixture("login.json", DOMAIN)
)
Expand Down
7 changes: 7 additions & 0 deletions tests/components/cookidoo/fixtures/user_info.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"data": {
"username": "username_1234",
"description": null,
"picture": null
}
}
43 changes: 43 additions & 0 deletions tests/components/cookidoo/snapshots/test_diagnostics.ambr
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# serializer version: 1
# name: test_diagnostics
dict({
'data': dict({
'additional_items': list([
dict({
'id': 'unique_id_tomaten',
'is_owned': False,
'name': 'Tomaten',
}),
]),
'ingredient_items': list([
dict({
'description': '200 g',
'id': 'unique_id_mehl',
'is_owned': False,
'name': 'Mehl',
}),
]),
'subscription': dict({
'active': True,
'expires': '2025-12-16T23:59:00Z',
'extended_type': 'REGULAR',
'start_date': '2024-12-16T00:00:00Z',
'status': 'ACTIVE',
'subscription_level': 'FULL',
'subscription_source': 'COMMERCE',
'type': 'REGULAR',
}),
}),
'entry_data': dict({
'country': 'CH',
'email': 'test-email',
'language': 'de-CH',
'password': '**REDACTED**',
}),
'user': dict({
'description': None,
'picture': None,
'username': 'username_1234',
}),
})
# ---
29 changes: 29 additions & 0 deletions tests/components/cookidoo/test_diagnostics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
"""Tests for the diagnostics data provided by the Cookidoo integration."""

from unittest.mock import AsyncMock

from syrupy import SnapshotAssertion

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_cookidoo_client: AsyncMock,
cookidoo_config_entry: MockConfigEntry,
snapshot: SnapshotAssertion,
) -> None:
"""Test diagnostics."""
await setup_integration(hass, cookidoo_config_entry)

assert (
await get_diagnostics_for_config_entry(hass, hass_client, cookidoo_config_entry)
== snapshot
)

0 comments on commit 04d1d80

Please sign in to comment.