class CalendarTestGetEvents(unittest.TestCase): """ Test suite to test for upcoming events """ def setUp(self) -> None: self.mock_api = MagicMock() self.Calendar = Calendar(self.mock_api) def test_get_upcoming_events_number(self): """ Number of upcoming events """ time = "2020-08-03T00:00:00.000000Z" # Valid case num_events = 2 try: self.Calendar.get_upcoming_events(time, num_events) except ValueError: self.fail("ValueError Raised: Test failed") # Invalid Cases : Events cannot be zero num_events = 0 self.assertRaises(ValueError, self.Calendar.get_upcoming_events, time, num_events) num_events = -5 self.assertRaises(ValueError, self.Calendar.get_upcoming_events, time, num_events) def test_get_upcoming_events_api_call(self): num_events = 2 time = "2020-08-03T00:00:00.000000Z" # Call count events = self.Calendar.get_upcoming_events(time, num_events) access_event_list = self.mock_api.events().list().execute.return_value self.assertEqual(access_event_list.get.call_count, 1) # num_events properly passed args, kwargs = self.mock_api.events.return_value.list.call_args_list[0] self.assertEqual(kwargs['maxResults'], num_events) # Check if non empty number of events is returned. self.assertNotEqual(events.items, []) def test_year_input_valid(self): default_future_year_limit = 2 default_past_year_limit = 5 # Invalid Inputs year_input = -3 self.assertRaises(ValueError, self.Calendar.get_past_events, year_input) # Past self.assertRaises(ValueError, self.Calendar.get_future_events, year_input) # future # Default Obeyed self.assertEqual(self.Calendar.get_future_events.__defaults__[0], default_future_year_limit) self.assertEqual(self.Calendar.get_past_events.__defaults__[0], default_past_year_limit) def test_events_future(self): self.mock_api.events().list().execute()["items"] = MagicMock(side_effect=KeyError()) try: self.Calendar.get_future_events() except KeyError: self.fail("Test failed: KeyError raised for no event instance.")