def test_proximity_rank_four_uses_dynamo(self, logger_mock): self.assertEqual(models.dynamo.IncomingEdge.items.count(), 0) for x in xrange(2, DB_MIN_FRIEND_COUNT + 2): models.User.items.create(fbid=x) models.IncomingEdge.items.create(fbid_source=x, fbid_target=1, post_likes=(x % 20)) result = targeting.proximity_rank_four( self.token, campaign_id=self.campaign.pk, visit_id=self.visit.pk, content_id=None, num_faces=None, ) ranked_edges = result[0] self.assertIsInstance(ranked_edges, models.datastructs.UserNetwork) assert all(isinstance(x, models.datastructs.Edge) for x in ranked_edges) assert all(x.incoming.post_likes is not None for x in ranked_edges) events = self.visit.events.all() self.assertEqual(events.filter(event_type='px4_started').count(), 1) self.assertEqual(events.filter(event_type='px4_completed').count(), 1) self.assertGreater(models.dynamo.IncomingEdge.items.count(), 0) self.assertIn('using Dynamo data.', logger_mock.info.call_args[0][0]) # One call to get the user, the other to get the friend count self.assertEqual(facebook.client.urllib2.urlopen.call_count, 2)
def test_proximity_rank_four_from_fb(self, logger_mock): self.assertFalse(models.dynamo.IncomingEdge.items.scan()) result = targeting.proximity_rank_four(self.token, campaign_id=self.campaign.pk, content_id=None, visit_id=self.visit.pk, num_faces=None) ranked_edges = result[0] self.assertIsInstance(ranked_edges, models.datastructs.UserNetwork) events = self.visit.events.all() self.assertEqual(events.filter(event_type='px4_started').count(), 1) self.assertEqual(events.filter(event_type='px4_completed').count(), 1) interactions_set = tuple(ranked_edges.iter_interactions()) self.assertTrue(interactions_set) assert all(isinstance(i, models.PostInteractions) for i in interactions_set) self.assertEqual({type(edge) for edge in ranked_edges}, {models.datastructs.Edge}) assert all(x.incoming.post_likes is not None for x in ranked_edges) self.assertTrue(models.dynamo.IncomingEdge.items.scan(limit=1)) self.assertIn('falling back to FB', logger_mock.info.call_args[0][0]) # We know we have a call to get the user and the friend count at the # very least. However, hitting FB should spawn many more hits to FB self.assertGreater(facebook.client.urllib2.urlopen.call_count, 2)