Add local calendar diagnostics platform (#89776)
* Add local calendar diagnostics platform * Use redaction from ical * Update diagnostics for new ical version * Apply suggestions from code review Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Use snapshot tests for local calendar diagnostics * Setup diagnostics directly in tests rather than via dependencies --------- Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>pull/89839/head^2
parent
ae127e7687
commit
04a99fdbfc
|
@ -0,0 +1,27 @@
|
|||
"""Provides diagnostics for local calendar."""
|
||||
|
||||
import datetime
|
||||
from typing import Any
|
||||
|
||||
from ical.diagnostics import redact_ics
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.util import dt as dt_util
|
||||
|
||||
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."""
|
||||
payload: dict[str, Any] = {
|
||||
"now": dt_util.now().isoformat(),
|
||||
"timezone": str(dt_util.DEFAULT_TIME_ZONE),
|
||||
"system_timezone": str(datetime.datetime.utcnow().astimezone().tzinfo),
|
||||
}
|
||||
store = hass.data[DOMAIN][config_entry.entry_id]
|
||||
ics = await store.async_load()
|
||||
payload["ics"] = "\n".join(redact_ics(ics))
|
||||
return payload
|
|
@ -0,0 +1,32 @@
|
|||
# serializer version: 1
|
||||
# name: test_api_date_time_event
|
||||
dict({
|
||||
'ics': '''
|
||||
BEGIN:VCALENDAR
|
||||
PRODID:-//github.com/allenporter/ical//4.5.0//EN
|
||||
VERSION:***
|
||||
BEGIN:VEVENT
|
||||
DTSTAMP:20230313T190500
|
||||
UID:***
|
||||
DTSTART:19970714T110000
|
||||
DTEND:19970714T220000
|
||||
SUMMARY:***
|
||||
CREATED:20230313T190500
|
||||
RRULE:FREQ=DAILY
|
||||
SEQUENCE:***
|
||||
END:VEVENT
|
||||
END:VCALENDAR
|
||||
''',
|
||||
'now': '2023-03-13T13:05:00-06:00',
|
||||
'system_timezone': 'tzlocal()',
|
||||
'timezone': 'America/Regina',
|
||||
})
|
||||
# ---
|
||||
# name: test_empty_calendar
|
||||
dict({
|
||||
'ics': '',
|
||||
'now': '2023-03-13T13:05:00-06:00',
|
||||
'system_timezone': 'tzlocal()',
|
||||
'timezone': 'America/Regina',
|
||||
})
|
||||
# ---
|
|
@ -0,0 +1,62 @@
|
|||
"""Tests for diagnostics platform of local calendar."""
|
||||
|
||||
from freezegun import freeze_time
|
||||
import pytest
|
||||
from syrupy.assertion import SnapshotAssertion
|
||||
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.setup import async_setup_component
|
||||
|
||||
from .conftest import TEST_ENTITY, ClientFixture
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
from tests.components.diagnostics import get_diagnostics_for_config_entry
|
||||
from tests.typing import ClientSessionGenerator
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
async def setup_diag(hass):
|
||||
"""Set up diagnostics platform."""
|
||||
assert await async_setup_component(hass, "diagnostics", {})
|
||||
|
||||
|
||||
@freeze_time("2023-03-13 12:05:00-07:00")
|
||||
async def test_empty_calendar(
|
||||
hass: HomeAssistant,
|
||||
setup_integration: None,
|
||||
hass_client: ClientSessionGenerator,
|
||||
config_entry: MockConfigEntry,
|
||||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Test diagnostics against an empty calendar."""
|
||||
data = await get_diagnostics_for_config_entry(hass, hass_client, config_entry)
|
||||
assert data == snapshot
|
||||
|
||||
|
||||
@freeze_time("2023-03-13 12:05:00-07:00")
|
||||
async def test_api_date_time_event(
|
||||
hass: HomeAssistant,
|
||||
setup_integration: None,
|
||||
config_entry: MockConfigEntry,
|
||||
hass_client: ClientSessionGenerator,
|
||||
ws_client: ClientFixture,
|
||||
snapshot: SnapshotAssertion,
|
||||
) -> None:
|
||||
"""Test an event with a start/end date time."""
|
||||
|
||||
client = await ws_client()
|
||||
await client.cmd_result(
|
||||
"create",
|
||||
{
|
||||
"entity_id": TEST_ENTITY,
|
||||
"event": {
|
||||
"summary": "Bastille Day Party",
|
||||
"dtstart": "1997-07-14T17:00:00+00:00",
|
||||
"dtend": "1997-07-15T04:00:00+00:00",
|
||||
"rrule": "FREQ=DAILY",
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
data = await get_diagnostics_for_config_entry(hass, hass_client, config_entry)
|
||||
assert data == snapshot
|
Loading…
Reference in New Issue