Don't allow google calendar create/delete for yaml/search calendars (#83604)

* Update tests/components/google/test_calendar.py

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

* Don't allow google calendar create/delete for yaml/search calendars

* Revert incorrect docstring update

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
Allen Porter 2022-12-21 07:36:37 -08:00 committed by GitHub
parent 4e1b399efd
commit d41fe01736
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 54 additions and 1 deletions

View file

@ -212,6 +212,7 @@ async def async_setup_entry(
# Prefer calendar sync down of resources when possible. However, sync does not work
# for search. Also free-busy calendars denormalize recurring events as individual
# events which is not efficient for sync
support_write = calendar_item.access_role.is_writer
if (
search := data.get(CONF_SEARCH)
or calendar_item.access_role == AccessRole.FREE_BUSY_READER
@ -223,6 +224,7 @@ async def async_setup_entry(
calendar_id,
search,
)
support_write = False
else:
request_template = SyncEventsRequest(
calendar_id=calendar_id,
@ -246,7 +248,7 @@ async def async_setup_entry(
generate_entity_id(ENTITY_ID_FORMAT, entity_name, hass=hass),
unique_id,
entity_enabled,
calendar_item.access_role.is_writer,
support_write,
)
)

View file

@ -1091,6 +1091,57 @@ async def test_readonly_websocket_create(
assert result["error"].get("code") == "not_supported"
@pytest.mark.parametrize(
"calendars_config",
[
[
{
"cal_id": CALENDAR_ID,
"entities": [
{
"device_id": "backyard_light",
"name": "Backyard Light",
"search": "#Backyard",
},
],
}
],
],
)
async def test_readonly_search_calendar(
hass: HomeAssistant,
component_setup: ComponentSetup,
mock_calendars_yaml,
mock_insert_event: Callable[[str, dict[str, Any]], None],
mock_events_list: ApiResult,
aioclient_mock: AiohttpClientMocker,
ws_client: ClientFixture,
) -> None:
"""Test calendar configured with yaml/search does not support mutation."""
mock_events_list({})
assert await component_setup()
aioclient_mock.clear_requests()
mock_insert_event(
calendar_id=CALENDAR_ID,
)
client = await ws_client()
result = await client.cmd(
"create",
{
"entity_id": TEST_YAML_ENTITY,
"event": {
"summary": "Bastille Day Party",
"dtstart": "1997-07-14T17:00:00+00:00",
"dtend": "1997-07-15T04:00:00+00:00",
},
},
)
assert result.get("error")
assert result["error"].get("code") == "not_supported"
@pytest.mark.parametrize("calendar_access_role", ["reader", "freeBusyReader"])
async def test_all_day_reader_access(hass, mock_events_list_items, component_setup):
"""Test that reader / freebusy reader access can load properly."""