def test_rate_limit_error(self): """Test if a rate limit error is raised when rate is exhausted""" http_requests = setup_http_server(rate_limit=0, reset_rate_limit=1) client = MeetupClient('aaaa', max_items=2) # Call API events = client.events('sqlpass-es') with self.assertRaises(RateLimitError): _ = [event for event in events] expected = { 'fields': [ 'event_hosts,featured,group_topics,plain_text_description,rsvpable,series' ], 'key': ['aaaa'], 'order': ['updated'], 'page': ['2'], 'scroll': ['since:1970-01-01T00:00:00.000Z'], 'sign': ['true'], 'status': ['cancelled,upcoming,past,proposed,suggested'] } self.assertEqual(len(http_requests), 1) req = http_requests[0] self.assertEqual(req.method, 'GET') self.assertRegex(req.path, '/sqlpass-es/events') self.assertDictEqual(req.querystring, expected)
def test_events_oauth_token(self): """Test events API call with oauth token""" http_requests = setup_http_server() client = MeetupClient('aaaa', is_oauth_token=True, max_items=2) from_date = datetime.datetime(2016, 1, 1) # Call API events = client.events('sqlpass-es', from_date=from_date) result = [event for event in events] self.assertEqual(len(result), 2) expected = [{ 'fields': [ 'event_hosts,featured,group_topics,plain_text_description,rsvpable,series' ], 'access_token': ['aaaa'], 'order': ['updated'], 'page': ['2'], 'scroll': ['since:2016-01-01T00:00:00.000Z'], 'status': ['cancelled,upcoming,past,proposed,suggested'] }, { 'access_token': ['aaaa'] }] self.assertEqual(len(http_requests), 2) for x in range(0, len(http_requests)): req = http_requests[x] self.assertEqual(req.method, 'GET') self.assertRegex(req.path, '/sqlpass-es/events') self.assertDictEqual(req.querystring, expected[x])
def test_events_error(self): """Test whether HTTP errors different from 410 are thrown when fetching event pages""" httpretty.register_uri(httpretty.GET, MEETUP_EVENTS_URL, body="", status=401) client = MeetupClient('aaaa', max_items=2) events = client.events('sqlpass-es') with self.assertRaises(requests.exceptions.HTTPError): _ = [event for event in events]
def test_group_gone(self): """Test whether the group gone exception (HTTP 410) is properly handled""" httpretty.register_uri(httpretty.GET, MEETUP_EVENTS_URL, body="", status=410) client = MeetupClient('aaaa', max_items=2) events = client.events('sqlpass-es') with self.assertRaises(RepositoryError): _ = [event for event in events]
def test_too_many_requests(self): """Test if a Retry error is raised""" httpretty.register_uri(httpretty.GET, MEETUP_EVENTS_URL, status=429) client = MeetupClient('aaaa', max_items=2, sleep_time=0.1) start = float(time.time()) expected = start + (sum( [i * client.sleep_time for i in range(client.MAX_RETRIES)])) events = client.events('sqlpass-es') with self.assertRaises(requests.exceptions.RetryError): _ = [event for event in events] end = float(time.time()) self.assertGreater(end, expected)
def test_sleep_for_rate(self): """ Test if the clients sleeps when the rate limit is reached""" wait_to_reset = 1 http_requests = setup_http_server(rate_limit=0, reset_rate_limit=wait_to_reset) client = MeetupClient('aaaa', max_items=2, min_rate_to_sleep=2, sleep_for_rate=True) # Call API before = float(time.time()) events = client.events('sqlpass-es') results = [event for event in events] after = float(time.time()) diff = after - before self.assertGreaterEqual(diff, wait_to_reset) self.assertEqual(len(results), 2) expected = [{ 'fields': [ 'event_hosts,featured,group_topics,plain_text_description,rsvpable,series' ], 'order': ['updated'], 'page': ['2'], 'scroll': ['since:1970-01-01T00:00:00.000Z'], 'status': ['cancelled,upcoming,past,proposed,suggested'] }, { 'order': ['updated'], 'page': ['2'], 'scroll': ['since:1970-01-01T00:00:00.000Z'] }] self.assertEqual(len(http_requests), 2) for x in range(0, len(http_requests)): req = http_requests[x] self.assertEqual(req.method, 'GET') self.assertRegex(req.path, '/sqlpass-es/events') self.assertIn((MeetupClient.PKEY_OAUTH2, 'Bearer aaaa'), req.headers._headers) self.assertDictEqual(req.querystring, expected[x])