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_px3_crawl(self): ''' Run the px3_crawl celery task without throwing it through the celery/rabbitmq stack, because we're testing our code, not celerys. Pass in True for mock mode, a dummy FB id, and a dummy token. Should get back a lengthy list of Edges. ''' ranked_edges = targeting.px3_crawl(self.token) assert all(isinstance(x, models.datastructs.Edge) for x in ranked_edges)