コード例 #1
0
ファイル: test_targeting.py プロジェクト: edgeflip/edgeflip
    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)
コード例 #2
0
ファイル: test_targeting.py プロジェクト: edgeflip/edgeflip
    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)