From c1586f97db125a7421f6513e127d28a8d85b00ec Mon Sep 17 00:00:00 2001 From: Pieter Mulder Date: Fri, 29 Jan 2021 15:25:01 +0100 Subject: [PATCH] Only show matching caldav events in calendar (#45701) --- homeassistant/components/caldav/calendar.py | 2 ++ tests/components/caldav/test_calendar.py | 29 +++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/homeassistant/components/caldav/calendar.py b/homeassistant/components/caldav/calendar.py index 7abb0ad8444..66b3c974306 100644 --- a/homeassistant/components/caldav/calendar.py +++ b/homeassistant/components/caldav/calendar.py @@ -173,6 +173,8 @@ class WebDavCalendarData: event_list = [] for event in vevent_list: vevent = event.instance.vevent + if not self.is_matching(vevent, self.search): + continue uid = None if hasattr(vevent, "uid"): uid = vevent.uid.value diff --git a/tests/components/caldav/test_calendar.py b/tests/components/caldav/test_calendar.py index 3e380b44de4..d8c6a44a3ea 100644 --- a/tests/components/caldav/test_calendar.py +++ b/tests/components/caldav/test_calendar.py @@ -774,3 +774,32 @@ async def test_event_rrule_hourly_ended(mock_now, hass, calendar): state = hass.states.get("calendar.private") assert state.name == calendar.name assert state.state == STATE_OFF + + +async def test_get_events(hass, calendar): + """Test that all events are returned on API.""" + assert await async_setup_component(hass, "calendar", {"calendar": CALDAV_CONFIG}) + await hass.async_block_till_done() + entity = hass.data["calendar"].get_entity("calendar.private") + events = await entity.async_get_events( + hass, datetime.date(2015, 11, 27), datetime.date(2015, 11, 28) + ) + assert len(events) == 14 + + +async def test_get_events_custom_calendars(hass, calendar): + """Test that only searched events are returned on API.""" + config = dict(CALDAV_CONFIG) + config["custom_calendars"] = [ + {"name": "Private", "calendar": "Private", "search": "This is a normal event"} + ] + + assert await async_setup_component(hass, "calendar", {"calendar": config}) + await hass.async_block_till_done() + + entity = hass.data["calendar"].get_entity("calendar.private_private") + events = await entity.async_get_events( + hass, datetime.date(2015, 11, 27), datetime.date(2015, 11, 28) + ) + assert len(events) == 1 + assert events[0]["summary"] == "This is a normal event"