from unittest import TestCase from gcsa.calendar import Calendar, CalendarListEntry, NotificationType, AccessRoles from gcsa.conference import SolutionType from gcsa.reminders import EmailReminder, PopupReminder from gcsa.serializers.calendar_serializer import CalendarSerializer, CalendarListEntrySerializer TEST_TIMEZONE = 'Pacific/Fiji' TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES = [SolutionType.HANGOUT, SolutionType.NAMED_HANGOUT] TEST_NOTIFICATION_TYPES = [NotificationType.EVENT_CREATION, NotificationType.EVENT_CHANGE] TEST_ACCESS_ROLE = AccessRoles.OWNER class TestCalendar(TestCase): def test_init(self): c = Calendar( summary='Summary', calendar_id='Calendar id', description='Description', location='Fiji', timezone=TEST_TIMEZONE, allowed_conference_solution_types=TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES ) self.assertEqual(c.summary, 'Summary') self.assertEqual(c.calendar_id, 'Calendar id') self.assertEqual(c.id, 'Calendar id') self.assertEqual(c.description, 'Description') self.assertEqual(c.location, 'Fiji') self.assertEqual(c.timezone, TEST_TIMEZONE) self.assertListEqual(c.allowed_conference_solution_types, TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES) def test_to_calendar_list_entry(self): c = Calendar( summary='Summary', calendar_id='Calendar id', description='Description', location='Fiji', timezone=TEST_TIMEZONE, allowed_conference_solution_types=TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES ) cle = c.to_calendar_list_entry( summary_override='Summary override', color_id='1', background_color='#123123', foreground_color='#234234', hidden=False, selected=True, default_reminders=[EmailReminder(60), PopupReminder(15)], notification_types=TEST_NOTIFICATION_TYPES ) self.assertIsInstance(cle, CalendarListEntry) self.assertEqual(cle.summary_override, 'Summary override') self.assertEqual(cle.color_id, '1') self.assertEqual(cle.background_color, '#123123') self.assertEqual(cle.foreground_color, '#234234') self.assertFalse(cle.hidden) self.assertTrue(cle.selected) self.assertEqual(cle.default_reminders, [EmailReminder(60), PopupReminder(15)]) self.assertEqual(cle.notification_types, TEST_NOTIFICATION_TYPES) c_without_id = Calendar( summary='Summary', ) with self.assertRaises(ValueError): c_without_id.to_calendar_list_entry() def test_repr_str(self): c = Calendar( summary='Summary', calendar_id='Calendar id', description='Description' ) self.assertEqual(str(c), 'Summary - Description') self.assertEqual(repr(c), '') def test_eq(self): c1 = Calendar( summary='Summary', calendar_id='Calendar id', description='Description', location='Fiji', timezone=TEST_TIMEZONE, allowed_conference_solution_types=TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES ) c2 = Calendar( summary='Summary2', calendar_id='Calendar id2', description='Description2', location='Fiji', timezone=TEST_TIMEZONE, allowed_conference_solution_types=TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES ) self.assertEqual(c1, c1) self.assertNotEqual(c1, c2) self.assertNotEqual(c1, 'Calendar') class TestCalendarSerializer(TestCase): def test_to_json(self): c = Calendar( summary='Summary', calendar_id='Calendar id', description='Description', location='Fiji', timezone=TEST_TIMEZONE, allowed_conference_solution_types=TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES ) expected_calendar_json = { "id": 'Calendar id', "summary": 'Summary', "description": 'Description', "location": 'Fiji', "timeZone": TEST_TIMEZONE, "conferenceProperties": { "allowedConferenceSolutionTypes": TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES } } self.assertDictEqual(CalendarSerializer.to_json(c), expected_calendar_json) c = Calendar( summary='Summary', description='Description', timezone=TEST_TIMEZONE ) expected_calendar_json = { "summary": 'Summary', "description": 'Description', "timeZone": TEST_TIMEZONE } self.assertDictEqual(CalendarSerializer.to_json(c), expected_calendar_json) def test_to_object(self): calendar_json = { "id": 'Calendar id', "summary": 'Summary', "description": 'Description', "location": 'Fiji', "timeZone": TEST_TIMEZONE, "conferenceProperties": { "allowedConferenceSolutionTypes": TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES } } serializer = CalendarSerializer(calendar_json) c = serializer.get_object() self.assertEqual(c.summary, 'Summary') self.assertEqual(c.calendar_id, 'Calendar id') self.assertEqual(c.description, 'Description') self.assertEqual(c.location, 'Fiji') self.assertEqual(c.timezone, TEST_TIMEZONE) self.assertListEqual(c.allowed_conference_solution_types, TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES) calendar_json = """{ "id": "Calendar id", "summary": "Summary", "location": "Fiji" }""" serializer = CalendarSerializer(calendar_json) c = serializer.get_object() self.assertEqual(c.summary, 'Summary') self.assertEqual(c.calendar_id, 'Calendar id') self.assertIsNone(c.description) self.assertEqual(c.location, 'Fiji') self.assertIsNone(c.timezone) self.assertIsNone(c.allowed_conference_solution_types) class TestCalendarListEntry(TestCase): def test_init(self): c = CalendarListEntry( summary_override='Summary override', color_id='1', background_color='#123123', foreground_color='#234234', hidden=False, selected=True, default_reminders=[EmailReminder(60), PopupReminder(15)], notification_types=TEST_NOTIFICATION_TYPES, _access_role=TEST_ACCESS_ROLE, _primary=True, _deleted=False, _summary='Summary', calendar_id='Calendar id', _description='Description', _location='Fiji', _timezone=TEST_TIMEZONE, _allowed_conference_solution_types=TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES ) self.assertEqual(c.summary_override, 'Summary override') self.assertEqual(c.color_id, '1') self.assertEqual(c.background_color, '#123123') self.assertEqual(c.foreground_color, '#234234') self.assertFalse(c.hidden) self.assertTrue(c.selected) self.assertEqual(c.default_reminders, [EmailReminder(60), PopupReminder(15)]) self.assertEqual(c.notification_types, TEST_NOTIFICATION_TYPES) self.assertEqual(c.access_role, TEST_ACCESS_ROLE) self.assertTrue(c.primary) self.assertFalse(c.deleted) self.assertEqual(c.summary, 'Summary') self.assertEqual(c.calendar_id, 'Calendar id') self.assertEqual(c.description, 'Description') self.assertEqual(c.location, 'Fiji') self.assertEqual(c.timezone, TEST_TIMEZONE) self.assertListEqual(c.allowed_conference_solution_types, TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES) c.color_id = '2' self.assertEqual(c.color_id, '2') self.assertIsNone(c.background_color) self.assertIsNone(c.foreground_color) def test_repr_str(self): c = CalendarListEntry( calendar_id='Calendar id', summary_override='Summary override', _summary='Summary', ) self.assertEqual(str(c), 'Summary override - (Summary)') self.assertEqual(repr(c), '') def test_eq(self): c1 = CalendarListEntry( calendar_id='Calendar id', summary_override='Summary override', _summary='Summary', ) c2 = CalendarListEntry( calendar_id='Calendar id2', summary_override='Summary override2', _summary='Summary2', ) self.assertEqual(c1, c1) self.assertNotEqual(c1, c2) self.assertNotEqual(c1, 'Calendar') class TestCalendarListEntrySerializer(TestCase): def test_to_json(self): c = CalendarListEntry( summary_override='Summary override', color_id='1', background_color='#123123', foreground_color='#234234', hidden=False, selected=True, default_reminders=[EmailReminder(60), PopupReminder(15)], notification_types=TEST_NOTIFICATION_TYPES, _access_role=TEST_ACCESS_ROLE, _primary=True, _deleted=False, _summary='Summary', calendar_id='Calendar id', _description='Description', _location='Fiji', _timezone=TEST_TIMEZONE, _allowed_conference_solution_types=TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES ) expected_calendar_json = { 'id': 'Calendar id', 'summaryOverride': 'Summary override', 'colorId': '1', 'backgroundColor': '#123123', 'foregroundColor': '#234234', 'hidden': False, 'selected': True, 'defaultReminders': [ {'method': 'email', 'minutes': 60}, {'method': 'popup', 'minutes': 15} ], 'notificationSettings': { 'notifications': [ {'type': 'eventCreation', 'method': 'email'}, {'type': 'eventChange', 'method': 'email'} ] } } self.assertDictEqual(CalendarListEntrySerializer.to_json(c), expected_calendar_json) c = CalendarListEntry( summary_override='Summary override', calendar_id='Calendar id', _timezone=TEST_TIMEZONE, ) expected_calendar_json = { 'id': 'Calendar id', 'summaryOverride': 'Summary override', 'hidden': False, 'selected': False, } self.assertDictEqual(CalendarListEntrySerializer.to_json(c), expected_calendar_json) def test_to_object(self): calendar_json = { "id": 'Calendar id', "summary": 'Summary', "description": 'Description', "location": 'Fiji', "timeZone": TEST_TIMEZONE, "summaryOverride": 'Summary override', "colorId": '1', "backgroundColor": '#123123', "foregroundColor": '#234234', "hidden": False, "selected": True, "accessRole": TEST_ACCESS_ROLE, "defaultReminders": [ {"method": 'email', "minutes": 60}, {"method": 'popup', "minutes": 15} ], "notificationSettings": { "notifications": [ {'type': 'eventCreation', 'method': 'email'}, {'type': 'eventChange', 'method': 'email'} ] }, "primary": True, "deleted": False, "conferenceProperties": { "allowedConferenceSolutionTypes": TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES } } serializer = CalendarListEntrySerializer(calendar_json) c = serializer.get_object() self.assertEqual(c.summary_override, 'Summary override') self.assertEqual(c.color_id, '1') self.assertEqual(c.background_color, '#123123') self.assertEqual(c.foreground_color, '#234234') self.assertFalse(c.hidden) self.assertTrue(c.selected) self.assertListEqual(c.default_reminders, [EmailReminder(60), PopupReminder(15)]) self.assertEqual(c.notification_types, TEST_NOTIFICATION_TYPES) self.assertEqual(c.access_role, TEST_ACCESS_ROLE) self.assertTrue(c.primary) self.assertFalse(c.deleted) self.assertEqual(c.summary, 'Summary') self.assertEqual(c.calendar_id, 'Calendar id') self.assertEqual(c.description, 'Description') self.assertEqual(c.location, 'Fiji') self.assertEqual(c.timezone, TEST_TIMEZONE) self.assertListEqual(c.allowed_conference_solution_types, TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES) calendar_json = """{ "id": "Calendar id", "foregroundColor": "#234234", "defaultReminders": [ {"method": "email", "minutes": 60}, {"method": "popup", "minutes": 15} ], "primary": true, "conferenceProperties": { "allowedConferenceSolutionTypes": ["eventHangout", "eventNamedHangout"] } }""" serializer = CalendarListEntrySerializer(calendar_json) c = serializer.get_object() self.assertEqual(c.foreground_color, '#234234') self.assertListEqual(c.default_reminders, [EmailReminder(60), PopupReminder(15)]) self.assertTrue(c.primary) self.assertEqual(c.calendar_id, 'Calendar id') self.assertListEqual(c.allowed_conference_solution_types, TEST_ALLOWED_CONFERENCE_SOLUTION_TYPES)