89 lines
2.3 KiB
Python
89 lines
2.3 KiB
Python
"""Test configuration and mocks for the google integration."""
|
|
from collections.abc import Callable
|
|
from typing import Any, Generator, TypeVar
|
|
from unittest.mock import Mock, patch
|
|
|
|
import pytest
|
|
|
|
from homeassistant.components.google import GoogleCalendarService
|
|
|
|
ApiResult = Callable[[dict[str, Any]], None]
|
|
T = TypeVar("T")
|
|
YieldFixture = Generator[T, None, None]
|
|
|
|
|
|
CALENDAR_ID = "qwertyuiopasdfghjklzxcvbnm@import.calendar.google.com"
|
|
TEST_CALENDAR = {
|
|
"id": CALENDAR_ID,
|
|
"etag": '"3584134138943410"',
|
|
"timeZone": "UTC",
|
|
"accessRole": "reader",
|
|
"foregroundColor": "#000000",
|
|
"selected": True,
|
|
"kind": "calendar#calendarListEntry",
|
|
"backgroundColor": "#16a765",
|
|
"description": "Test Calendar",
|
|
"summary": "We are, we are, a... Test Calendar",
|
|
"colorId": "8",
|
|
"defaultReminders": [],
|
|
"track": True,
|
|
}
|
|
|
|
|
|
@pytest.fixture
|
|
def test_calendar():
|
|
"""Return a test calendar."""
|
|
return TEST_CALENDAR
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_next_event():
|
|
"""Mock the google calendar data."""
|
|
patch_google_cal = patch(
|
|
"homeassistant.components.google.calendar.GoogleCalendarData"
|
|
)
|
|
with patch_google_cal as google_cal_data:
|
|
yield google_cal_data
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_events_list(
|
|
google_service: GoogleCalendarService,
|
|
) -> Callable[[dict[str, Any]], None]:
|
|
"""Fixture to construct a fake event list API response."""
|
|
|
|
def _put_result(response: dict[str, Any]) -> None:
|
|
google_service.return_value.get.return_value.events.return_value.list.return_value.execute.return_value = (
|
|
response
|
|
)
|
|
return
|
|
|
|
return _put_result
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_calendars_list(
|
|
google_service: GoogleCalendarService,
|
|
) -> ApiResult:
|
|
"""Fixture to construct a fake calendar list API response."""
|
|
|
|
def _put_result(response: dict[str, Any]) -> None:
|
|
google_service.return_value.get.return_value.calendarList.return_value.list.return_value.execute.return_value = (
|
|
response
|
|
)
|
|
return
|
|
|
|
return _put_result
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_insert_event(
|
|
google_service: GoogleCalendarService,
|
|
) -> Mock:
|
|
"""Fixture to create a mock to capture new events added to the API."""
|
|
insert_mock = Mock()
|
|
google_service.return_value.get.return_value.events.return_value.insert = (
|
|
insert_mock
|
|
)
|
|
return insert_mock
|