Make location optional in google calendar create service (#91061)
This commit is contained in:
parent
5f0d983df1
commit
23af02b941
4 changed files with 62 additions and 22 deletions
|
@ -285,17 +285,18 @@ async def async_setup_add_event_service(
|
|||
raise ValueError(
|
||||
"Missing required fields to set start or end date/datetime"
|
||||
)
|
||||
|
||||
event = Event(
|
||||
summary=call.data[EVENT_SUMMARY],
|
||||
description=call.data[EVENT_DESCRIPTION],
|
||||
start=start,
|
||||
end=end,
|
||||
)
|
||||
if location := call.data.get(EVENT_LOCATION):
|
||||
event.location = location
|
||||
try:
|
||||
await calendar_service.async_create_event(
|
||||
call.data[EVENT_CALENDAR_ID],
|
||||
Event(
|
||||
summary=call.data[EVENT_SUMMARY],
|
||||
description=call.data[EVENT_DESCRIPTION],
|
||||
location=call.data[EVENT_LOCATION],
|
||||
start=start,
|
||||
end=end,
|
||||
),
|
||||
event,
|
||||
)
|
||||
except ApiException as err:
|
||||
raise HomeAssistantError(str(err)) from err
|
||||
|
|
|
@ -508,9 +508,10 @@ class GoogleCalendarEntity(
|
|||
"start": start,
|
||||
"end": end,
|
||||
EVENT_DESCRIPTION: kwargs.get(EVENT_DESCRIPTION),
|
||||
EVENT_LOCATION: kwargs.get(EVENT_LOCATION),
|
||||
}
|
||||
)
|
||||
if location := kwargs.get(EVENT_LOCATION):
|
||||
event.location = location
|
||||
if rrule := kwargs.get(EVENT_RRULE):
|
||||
event.recurrence = [f"{RRULE_PREFIX}{rrule}"]
|
||||
|
||||
|
@ -597,18 +598,20 @@ async def async_create_event(entity: GoogleCalendarEntity, call: ServiceCall) ->
|
|||
if start is None or end is None:
|
||||
raise ValueError("Missing required fields to set start or end date/datetime")
|
||||
|
||||
event = Event(
|
||||
summary=call.data[EVENT_SUMMARY],
|
||||
description=call.data[EVENT_DESCRIPTION],
|
||||
start=start,
|
||||
end=end,
|
||||
)
|
||||
if location := call.data.get(EVENT_LOCATION):
|
||||
event.location = location
|
||||
try:
|
||||
await cast(
|
||||
CalendarSyncUpdateCoordinator, entity.coordinator
|
||||
).sync.api.async_create_event(
|
||||
entity.calendar_id,
|
||||
Event(
|
||||
summary=call.data[EVENT_SUMMARY],
|
||||
description=call.data[EVENT_DESCRIPTION],
|
||||
location=call.data[EVENT_LOCATION],
|
||||
start=start,
|
||||
end=end,
|
||||
),
|
||||
event,
|
||||
)
|
||||
except ApiException as err:
|
||||
raise HomeAssistantError(str(err)) from err
|
||||
|
|
|
@ -888,7 +888,6 @@ async def test_websocket_create(
|
|||
assert aioclient_mock.mock_calls[0][2] == {
|
||||
"summary": "Bastille Day Party",
|
||||
"description": None,
|
||||
"location": None,
|
||||
"start": {
|
||||
"dateTime": "1997-07-14T11:00:00-06:00",
|
||||
"timeZone": "America/Regina",
|
||||
|
@ -932,7 +931,6 @@ async def test_websocket_create_all_day(
|
|||
assert aioclient_mock.mock_calls[0][2] == {
|
||||
"summary": "Bastille Day Party",
|
||||
"description": None,
|
||||
"location": None,
|
||||
"start": {
|
||||
"date": "1997-07-14",
|
||||
},
|
||||
|
|
|
@ -94,7 +94,6 @@ def add_event_call_service(
|
|||
**params,
|
||||
"summary": TEST_EVENT_SUMMARY,
|
||||
"description": TEST_EVENT_DESCRIPTION,
|
||||
"location": TEST_EVENT_LOCATION,
|
||||
},
|
||||
target=target,
|
||||
blocking=True,
|
||||
|
@ -486,7 +485,6 @@ async def test_add_event_date_in_x(
|
|||
assert aioclient_mock.mock_calls[0][2] == {
|
||||
"summary": TEST_EVENT_SUMMARY,
|
||||
"description": TEST_EVENT_DESCRIPTION,
|
||||
"location": TEST_EVENT_LOCATION,
|
||||
"start": {"date": start_date.date().isoformat()},
|
||||
"end": {"date": end_date.date().isoformat()},
|
||||
}
|
||||
|
@ -527,7 +525,6 @@ async def test_add_event_date(
|
|||
assert aioclient_mock.mock_calls[0][2] == {
|
||||
"summary": TEST_EVENT_SUMMARY,
|
||||
"description": TEST_EVENT_DESCRIPTION,
|
||||
"location": TEST_EVENT_LOCATION,
|
||||
"start": {"date": today.isoformat()},
|
||||
"end": {"date": end_date.isoformat()},
|
||||
}
|
||||
|
@ -568,7 +565,6 @@ async def test_add_event_date_time(
|
|||
assert aioclient_mock.mock_calls[0][2] == {
|
||||
"summary": TEST_EVENT_SUMMARY,
|
||||
"description": TEST_EVENT_DESCRIPTION,
|
||||
"location": TEST_EVENT_LOCATION,
|
||||
"start": {
|
||||
"dateTime": start_datetime.isoformat(timespec="seconds"),
|
||||
"timeZone": "America/Regina",
|
||||
|
@ -606,6 +602,48 @@ async def test_add_event_failure(
|
|||
)
|
||||
|
||||
|
||||
async def test_add_event_location(
|
||||
hass: HomeAssistant,
|
||||
component_setup: ComponentSetup,
|
||||
mock_calendars_list: ApiResult,
|
||||
test_api_calendar: dict[str, Any],
|
||||
mock_insert_event: Callable[[str, dict[str, Any]], None],
|
||||
mock_events_list: ApiResult,
|
||||
aioclient_mock: AiohttpClientMocker,
|
||||
add_event_call_service: Callable[dict[str, Any], Awaitable[None]],
|
||||
) -> None:
|
||||
"""Test service call that sets a location field."""
|
||||
|
||||
mock_calendars_list({"items": [test_api_calendar]})
|
||||
mock_events_list({})
|
||||
assert await component_setup()
|
||||
|
||||
now = utcnow()
|
||||
today = now.date()
|
||||
end_date = today + datetime.timedelta(days=2)
|
||||
|
||||
aioclient_mock.clear_requests()
|
||||
mock_insert_event(
|
||||
calendar_id=CALENDAR_ID,
|
||||
)
|
||||
|
||||
await add_event_call_service(
|
||||
{
|
||||
"start_date": today.isoformat(),
|
||||
"end_date": end_date.isoformat(),
|
||||
"location": TEST_EVENT_LOCATION,
|
||||
},
|
||||
)
|
||||
assert len(aioclient_mock.mock_calls) == 1
|
||||
assert aioclient_mock.mock_calls[0][2] == {
|
||||
"summary": TEST_EVENT_SUMMARY,
|
||||
"description": TEST_EVENT_DESCRIPTION,
|
||||
"location": TEST_EVENT_LOCATION,
|
||||
"start": {"date": today.isoformat()},
|
||||
"end": {"date": end_date.isoformat()},
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"config_entry_token_expiry", [datetime.datetime.max.timestamp() + 1]
|
||||
)
|
||||
|
|
Loading…
Add table
Reference in a new issue