Skip to content
This repository has been archived by the owner on Jun 29, 2020. It is now read-only.

Commit

Permalink
Stub GoogleCalendarClient (#1150)
Browse files Browse the repository at this point in the history
* Stub GoogleCalendarClient

* Surpress Google Calendar signal via fixture

* Add annotation

* Stub GoogleCalendar API request

* Fix reviewed points
  • Loading branch information
giginet authored Jun 20, 2017
1 parent a15a611 commit 8f9a850
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 25 deletions.
3 changes: 3 additions & 0 deletions src/lib/django-google-calendar/google_calendar/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ class GoogleCalendarBridge(models.Model):


def update_google_calendar(sender, instance, created, **kwargs):
# Ignore when events models are created by fixtures.
if kwargs.get('raw', False):
return
backend = get_backend()
send_notifications = getattr(settings, 'GOOGLE_CALENDER_ENABLE_NOTIFICATIONS', False)
backend.update(instance, sendNotifications=send_notifications)
Expand Down
70 changes: 45 additions & 25 deletions src/lib/django-google-calendar/google_calendar/tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import os
from django.test import TestCase
from unittest.mock import MagicMock
from unittest.mock import MagicMock, patch, PropertyMock
from ..conf import settings
from ..client import (require_enabled,
GoogleCalendarClient)
Expand Down Expand Up @@ -37,8 +37,10 @@ def test_require_enabled_do_not_call_method(self):


class GoogleCalendarClientTestCaseBase(TestCase):
def setUp(self):
@patch('google_calendar.models.GoogleCalendarBridge')
def setUp(self, GoogleCalendarBridge):
self.event = {
'id': 1000,
'summary': 'Appointment',
'location': 'Somewhere',
'start': {
Expand All @@ -48,43 +50,61 @@ def setUp(self):
'dateTime': '2014-12-03T10:25:00.000-07:00'
},
}
self.bridge = MagicMock()
GoogleCalendarBridge.objects.get_or_create.return_value = [
self.bridge
]
self.client = GoogleCalendarClient(
settings.GOOGLE_CALENDAR_CALENDAR_ID
)


if os.path.exists(settings.GOOGLE_CALENDAR_CREDENTIALS):
@patch.object(
GoogleCalendarClient,
'_client',
new_callable=PropertyMock
)
class GoogleCalendarClientTestCase(GoogleCalendarClientTestCaseBase):

def get_event_status(self, event):
e = self.client.get(event['id'])
return e['status']

def test_insert(self):
def test_insert(self, *args):
resource = MagicMock()
resource.execute.return_value = self.event
self.client._client.insert.return_value = resource
event = self.client.insert(self.event)

self.assertIsNotNone(event)
self.assertEqual(event['summary'], 'Appointment')

# the event entry exists on the web
self.assertEqual(self.get_event_status(event), 'confirmed')

# tearDown
self.client.delete(event['id'])

def test_patch(self):
event = self.client.insert(self.event)
event = self.client.patch(event['id'], {'summary': 'foobar'})
self.client._client.insert.assert_called_with(
calendarId=self.client.calendar_id,
body=self.event)

def test_patch(self, *args):
resource = MagicMock()
self.client._client.patch.return_value = resource
patched_event = dict(self.event)
patched_event['summary'] = 'foobar'
resource.execute.return_value = patched_event

event = self.client.patch(
patched_event['id'],
{'summary': 'foobar'})
self.assertEqual(event['summary'], 'foobar')

# tearDown
self.client.delete(event['id'])

def test_delete(self):
event = self.client.insert(self.event)
self.client._client.patch.assert_called_with(
calendarId=self.client.calendar_id,
eventId=patched_event['id'],
body={'summary': 'foobar'})

def test_delete(self, *args):
event = dict(self.event)
resource = MagicMock()
self.client._client.delete.return_value = resource
self.client.delete(event['id'])

# the event entry should not exists on the web
self.assertEqual(self.get_event_status(event), 'cancelled')
self.assertEqual(self.client._client.delete.called, 1)
self.client._client.delete.assert_called_with(
calendarId=self.client.calendar_id,
eventId=self.event['id'])
else:
class GoogleCalendarClientTestCase(GoogleCalendarClientTestCaseBase):
def setUp(self):
Expand Down

0 comments on commit 8f9a850

Please sign in to comment.