def test_fetch_from_empty_cache(self): """Test if there are not any event returned when the cache is empty""" cache = Cache(self.tmp_path) meetup = Meetup('sqlpass-es', 'aaaa', max_items=2, cache=cache) cached_events = [event for event in meetup.fetch_from_cache()] self.assertEqual(len(cached_events), 0)
def test_fetch_from_non_set_cache(self): """Test if a error is raised when the cache was not set""" meetup = Meetup('sqlpass-es', 'aaaa', max_items=2) with self.assertRaises(CacheError): _ = [event for event in meetup.fetch_from_cache()]
def test_fetch_empty(self): """Test if nothing is returned when there are no events""" http_requests = setup_http_server() from_date = datetime.datetime(2017, 1, 1) meetup = Meetup('sqlpass-es', 'aaaa', max_items=2) events = [event for event in meetup.fetch(from_date=from_date)] self.assertEqual(len(events), 0) # Check requests expected = { 'fields': [ 'event_hosts', 'featured', 'group_topics', 'plain_text_description', 'rsvpable', 'series' ], 'key': ['aaaa'], 'order': ['updated'], 'page': ['2'], 'scroll': ['since:2017-01-01T00:00:00.000Z'], 'sign': ['true'], 'status': [ 'cancelled', 'upcoming', 'past', 'proposed', 'suggested', 'draft' ] } self.assertEqual(len(http_requests), 1) self.assertDictEqual(http_requests[0].querystring, expected)
def test_fetch_from_date(self): """Test wether if fetches a set of events from the given date""" http_requests = setup_http_server() from_date = datetime.datetime(2016, 9, 25) meetup = Meetup('sqlpass-es', 'aaaa', max_items=2) events = [event for event in meetup.fetch(from_date=from_date)] expected = [('3', 'a42b7cf556c17b17f05b951e2eb5e07a7cb0a731', 1474842748.0, 2, 3)] self.assertEqual(len(events), len(expected)) for x in range(len(events)): event = events[x] expc = expected[x] self.assertEqual(event['data']['id'], expc[0]) self.assertEqual(event['uuid'], expc[1]) self.assertEqual(event['origin'], 'https://meetup.com/') self.assertEqual(event['updated_on'], expc[2]) self.assertEqual(event['category'], 'event') self.assertEqual(event['tag'], 'https://meetup.com/') self.assertEqual(len(event['data']['comments']), expc[3]) self.assertEqual(len(event['data']['rsvps']), expc[4]) # Check requests expected = [{ 'fields': [ 'event_hosts', 'featured', 'group_topics', 'plain_text_description', 'rsvpable', 'series' ], 'key': ['aaaa'], 'order': ['updated'], 'page': ['2'], 'scroll': ['since:2016-09-25T00:00:00.000Z'], 'sign': ['true'], 'status': [ 'cancelled', 'upcoming', 'past', 'proposed', 'suggested', 'draft' ] }, { 'key': ['aaaa'], 'page': ['2'], 'sign': ['true'] }, { 'fields': ['attendance_status'], 'key': ['aaaa'], 'page': ['2'], 'response': ['yes', 'no'], 'sign': ['true'] }] self.assertEqual(len(http_requests), len(expected)) for i in range(len(expected)): self.assertDictEqual(http_requests[i].querystring, expected[i])
def test_initialization(self): """Test whether attributes are initializated""" meetup = Meetup('mygroup', 'aaaa', max_items=5, tag='test') self.assertEqual(meetup.origin, 'https://meetup.com/') self.assertEqual(meetup.tag, 'test') self.assertEqual(meetup.group, 'mygroup') self.assertEqual(meetup.max_items, 5) self.assertIsInstance(meetup.client, MeetupClient) self.assertEqual(meetup.client.api_key, 'aaaa') # When tag is empty or None it will be set to # the value in URL meetup = Meetup('mygroup', 'aaaa') self.assertEqual(meetup.origin, 'https://meetup.com/') self.assertEqual(meetup.tag, 'https://meetup.com/') meetup = Meetup('mygroup', 'aaaa', tag='') self.assertEqual(meetup.origin, 'https://meetup.com/') self.assertEqual(meetup.tag, 'https://meetup.com/')
def test_fetch_from_cache(self): """Test whether the cache works""" http_requests = setup_http_server() # First, we fetch the events from the server, # storing them in a cache cache = Cache(self.tmp_path) meetup = Meetup('sqlpass-es', 'aaaa', max_items=2, cache=cache) events = [event for event in meetup.fetch()] self.assertEqual(len(http_requests), 8) # Now, we get the events from the cache. # The events should be the same and there won't be # any new request to the server cached_events = [event for event in meetup.fetch_from_cache()] self.assertEqual(len(cached_events), len(events)) expected = [('1', '0d07fe36f994a6c78dfcf60fb73674bcf158cb5a', 1460065164.0, 2, 3), ('2', '24b47b622eb33965676dd951b18eea7689b1d81c', 1465503498.0, 2, 3), ('3', 'a42b7cf556c17b17f05b951e2eb5e07a7cb0a731', 1474842748.0, 2, 3)] self.assertEqual(len(cached_events), len(expected)) for x in range(len(cached_events)): event = cached_events[x] expc = expected[x] self.assertEqual(event['data']['id'], expc[0]) self.assertEqual(event['uuid'], expc[1]) self.assertEqual(event['origin'], 'https://meetup.com/') self.assertEqual(event['updated_on'], expc[2]) self.assertEqual(event['category'], 'event') self.assertEqual(event['tag'], 'https://meetup.com/') self.assertEqual(len(event['data']['comments']), expc[3]) self.assertEqual(len(event['data']['rsvps']), expc[4]) # Compare chached and fetched task self.assertDictEqual(event['data'], events[x]['data']) # No more requests were sent self.assertEqual(len(http_requests), 8)
def test_fetch(self): """Test whether it fetches a set of events""" http_requests = setup_http_server() meetup = Meetup('sqlpass-es', 'aaaa', max_items=2) events = [event for event in meetup.fetch()] expected = [('1', '0d07fe36f994a6c78dfcf60fb73674bcf158cb5a', 1460065164.0, 2, 3), ('2', '24b47b622eb33965676dd951b18eea7689b1d81c', 1465503498.0, 2, 3), ('3', 'a42b7cf556c17b17f05b951e2eb5e07a7cb0a731', 1474842748.0, 2, 3)] self.assertEqual(len(events), len(expected)) for x in range(len(events)): event = events[x] expc = expected[x] self.assertEqual(event['data']['id'], expc[0]) self.assertEqual(event['uuid'], expc[1]) self.assertEqual(event['origin'], 'https://meetup.com/') self.assertEqual(event['updated_on'], expc[2]) self.assertEqual(event['category'], 'event') self.assertEqual(event['tag'], 'https://meetup.com/') self.assertEqual(len(event['data']['comments']), expc[3]) self.assertEqual(len(event['data']['rsvps']), expc[4]) # Check requests 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', 'draft' ] }, { 'key': ['aaaa'], 'page': ['2'], 'sign': ['true'] }, { 'fields': ['attendance_status'], 'key': ['aaaa'], 'page': ['2'], 'response': ['yes', 'no'], 'sign': ['true'] }, { 'key': ['aaaa'], 'page': ['2'], 'sign': ['true'] }, { 'fields': ['attendance_status'], 'key': ['aaaa'], 'page': ['2'], 'response': ['yes', 'no'], 'sign': ['true'] }, { 'key': ['aaaa'], 'sign': ['true'] }, { 'key': ['aaaa'], 'page': ['2'], 'sign': ['true'] }, { 'fields': ['attendance_status'], 'key': ['aaaa'], 'page': ['2'], 'response': ['yes', 'no'], 'sign': ['true'] }] self.assertEqual(len(http_requests), len(expected)) for i in range(len(expected)): self.assertDictEqual(http_requests[i].querystring, expected[i])