def test_perform_filtering(self): ''' Runs the filtering celery task ''' visitor = models.relational.Visitor.objects.create() visit = visitor.visits.create(session_id='123', app_id=123, ip='127.0.0.1') ranked_edges = targeting.px3_crawl(self.token) # Ensure at least one edge passes filter: # (NOTE: May have to fiddle with campaign properties as well.) ranked_edges[0].secondary.state = 'Illinois' ( edges_ranked, edges_filtered, filter_id, cs_slug, campaign_id, content_id, ) = targeting.perform_filtering( ranked_edges, campaign_id=1, content_id=1, fbid=1, visit_id=visit.pk, num_faces=1, ) self.assertTrue(edges_ranked) self.assertEqual({type(edge) for edge in edges_ranked}, {models.datastructs.Edge}) self.assertIsInstance(edges_filtered, models.datastructs.TieredEdges) self.assertEqual({type(edge) for edge in edges_filtered.edges}, {models.datastructs.Edge}) self.assertIsInstance(filter_id, long) self.assertIsInstance(cs_slug, (types.NoneType, basestring))
def test_px4_choiceset_filter(self, classifier_mock): # Configure null global filter: self.campaign.campaignglobalfilters.create(filter=self.default_filter, rand_cdf=1) # Configure choiceset: topics_filter = self.client.filters.create() topics_filter.filterfeatures.create( feature_type=models.relational.FilterFeatureType.objects.get_topics(), feature='topics[Weather]', operator=models.FilterFeature.Operator.MIN, value=0.1, ) choice_set = self.client.choicesets.create() choice_set.choicesetfilters.create(filter=topics_filter) self.campaign.campaignchoicesets.create(choice_set=choice_set, rand_cdf=1) # px3 ranked_edges = targeting.px3_crawl(self.token) result = targeting.perform_filtering( ranked_edges, fbid=self.token.fbid, campaign_id=self.campaign.pk, content_id=self.content.pk, visit_id=self.visit.pk, num_faces=1, ) self.assertTrue(result.ranked) self.assertTrue(result.filtered) self.assertEqual(len(result.filtered), len(result.ranked)) # no filtering # px4 (stream, ranked_edges) = targeting.px4_crawl(self.token) self.assertTrue(stream) self.assertEqual(models.dynamo.PostTopics.items.count(), 0) filtering_result = targeting.px4_filter( stream, ranked_edges, fbid=self.token.fbid, campaign_id=self.campaign.pk, content_id=self.content.pk, visit_id=self.visit.pk, num_faces=1, ) result = targeting.px4_rank(filtering_result) self.assertTrue(result.ranked) self.assertTrue(result.filtered) self.assertTrue(classifier_mock.called) self.assertGreater(models.dynamo.PostTopics.items.count(), 0) self.assertLess(len(result.filtered), len(result.ranked)) mismatch = [user for user in result.filtered.secondaries if user.topics['Weather'] < 0.1] self.assertFalse(mismatch)
def test_fallback_cascade(self): # Some test users and edges test_user1 = models.User( fbid=1, fname='Test', lname='User', email='*****@*****.**', gender='male', birthday=timezone.datetime(1984, 1, 1, tzinfo=timezone.utc), city='Chicago', state='Illinois' ) test_user2 = models.User( fbid=2, fname='Test', lname='User', email='*****@*****.**', gender='male', birthday=timezone.datetime(1984, 1, 1, tzinfo=timezone.utc), city='Toledo', state='Ohio' ) test_edge1 = models.datastructs.UserNetwork.Edge(test_user1, test_user1, None, px3_score=0.5) test_edge2 = models.datastructs.UserNetwork.Edge(test_user1, test_user2, None, px3_score=0.4) visitor = models.relational.Visitor.objects.create(fbid=1) visit = visitor.visits.create(session_id='123', app_id=123, ip='127.0.0.1') ranked_edges = [test_edge2, test_edge1] ( edges_ranked, edges_filtered, filter_id, cs_slug, campaign_id, content_id, ) = targeting.perform_filtering( ranked_edges, campaign_id=5, content_id=1, fbid=1, visit_id=visit.pk, num_faces=10, ) self.assertEquals(edges_filtered.secondary_ids, (1, 2)) self.assertEquals(edges_filtered[0]['campaign_id'], 5) self.assertEquals(edges_filtered[1]['campaign_id'], 6)