def test_if_fc_is_used(self): f = FilterConditionService() with self.app.app_context(): self.assertTrue( f._get_referenced_filter_conditions(1).count() == 1) self.assertTrue( f._get_referenced_filter_conditions(2).count() == 0)
def test_get_mongo_value(self): f = FilterConditionService() self.assertEqual(f._get_mongo_value('in', '1,2', 'urgency'), [1, 2]) self.assertEqual(f._get_mongo_value('nin', '3', 'priority'), ['3']) self.assertEqual(f._get_mongo_value('like', 'test', 'headline'), re.compile('.*test.*', re.IGNORECASE)) self.assertEqual(f._get_mongo_value('notlike', 'test', 'headline'), re.compile('.*test.*', re.IGNORECASE)) self.assertEqual(f._get_mongo_value('startswith', 'test', 'headline'), re.compile('^test', re.IGNORECASE)) self.assertEqual(f._get_mongo_value('endswith', 'test', 'headline'), re.compile('.*test', re.IGNORECASE))
def test_mongo_using_desk_filter_in_list(self): f = FilterConditionService() doc = {'field': 'desk', 'operator': 'in', 'value': '1,2'} query = f.get_mongo_query(doc) with self.app.app_context(): docs = superdesk.get_resource_service('archive').\ get_from_mongo(req=self.req, lookup=query) self.assertEqual(2, docs.count())
def test_get_mongo_operator(self): f = FilterConditionService() self.assertEqual(f._get_mongo_operator('in'), '$in') self.assertEqual(f._get_mongo_operator('nin'), '$nin') self.assertEqual(f._get_mongo_operator('like'), '$regex') self.assertEqual(f._get_mongo_operator('notlike'), '$not') self.assertEqual(f._get_mongo_operator('startswith'), '$regex') self.assertEqual(f._get_mongo_operator('endswith'), '$regex')
def test_elastic_using_endswith_filter(self): f = FilterConditionService() doc = {'field': 'headline', 'operator': 'endswith', 'value': 'Que'} query = f.get_elastic_query(doc) with self.app.app_context(): self._setup_elastic_args(query, 'keyword') docs = superdesk.get_resource_service('archive').get(req=self.req, lookup=None) self.assertEqual(1, docs.count()) self.assertEqual('2', docs[0]['_id'])
def test_does_match_with_notlike_filter(self): f = FilterConditionService() doc = {'field': 'headline', 'operator': 'notlike', 'value': 'Que'} self.assertTrue(f.does_match(doc, self.articles[0])) self.assertFalse(f.does_match(doc, self.articles[1])) self.assertTrue(f.does_match(doc, self.articles[2])) self.assertTrue(f.does_match(doc, self.articles[3])) self.assertTrue(f.does_match(doc, self.articles[4])) self.assertTrue(f.does_match(doc, self.articles[5]))
def test_mongo_using_endswith_filter(self): f = FilterConditionService() doc = {'field': 'headline', 'operator': 'endswith', 'value': 'Que'} query = f.get_mongo_query(doc) with self.app.app_context(): docs = superdesk.get_resource_service('archive').\ get_from_mongo(req=self.req, lookup=query) self.assertEqual(1, docs.count()) self.assertEqual('2', docs[0]['_id'])
def test_does_match_with_nin_filter(self): f = FilterConditionService() doc = {'field': 'urgency', 'operator': 'nin', 'value': '2,3,4'} self.assertTrue(f.does_match(doc, self.articles[0])) self.assertTrue(f.does_match(doc, self.articles[1])) self.assertFalse(f.does_match(doc, self.articles[2])) self.assertFalse(f.does_match(doc, self.articles[3])) self.assertFalse(f.does_match(doc, self.articles[4])) self.assertTrue(f.does_match(doc, self.articles[5]))
def test_mongo_using_genre_filter_complete_string(self): f = FilterConditionService() doc = {'field': 'genre', 'operator': 'in', 'value': 'Sidebar'} query = f.get_mongo_query(doc) with self.app.app_context(): docs = superdesk.get_resource_service('archive').\ get_from_mongo(req=self.req, lookup=query) self.assertEqual(1, docs.count()) self.assertEqual('7', docs[0]['_id'])
def test_elastic_using_anpa_category_filter_complete_string(self): f = FilterConditionService() doc = {'field': 'anpa_category', 'operator': 'in', 'value': 'a,i'} query = f.get_elastic_query(doc) with self.app.app_context(): self._setup_elastic_args(query) docs = superdesk.get_resource_service('archive').get(req=self.req, lookup=None) doc_ids = [d['_id'] for d in docs] self.assertEqual(1, docs.count()) self.assertTrue('9' in doc_ids)
def test_mongo_using_in_filter(self): f = FilterConditionService() doc = {'field': 'urgency', 'operator': 'in', 'value': '3,4'} query = f.get_mongo_query(doc) with self.app.app_context(): docs = superdesk.get_resource_service('archive').\ get_from_mongo(req=self.req, lookup=query) self.assertEqual(2, docs.count()) self.assertEqual('3', docs[0]['_id']) self.assertEqual('4', docs[1]['_id'])
def test_mongo_using_notlike_filter(self): f = FilterConditionService() doc = {'field': 'headline', 'operator': 'notlike', 'value': 'Que'} query = f.get_mongo_query(doc) with self.app.app_context(): docs = superdesk.get_resource_service('archive').\ get_from_mongo(req=self.req, lookup=query) self.assertEqual(8, docs.count()) doc_ids = [d['_id'] for d in docs] self.assertTrue('2' not in doc_ids)
def test_elastic_using_notlike_filter(self): f = FilterConditionService() doc = {'field': 'headline', 'operator': 'notlike', 'value': 'que'} query = f.get_elastic_query(doc) with self.app.app_context(): self._setup_elastic_args(query, 'not') docs = superdesk.get_resource_service('archive').get(req=self.req, lookup=None) self.assertEqual(8, docs.count()) doc_ids = [d['_id'] for d in docs] self.assertTrue('2' not in doc_ids)
def test_does_match_with_in_filter_case_insensitive(self): f = FilterConditionService() doc = {'field': 'source', 'operator': 'in', 'value': 'aap,reuters'} self.assertTrue(f.does_match(doc, {'source': 'AAP'})) self.assertTrue(f.does_match(doc, {'source': 'aap'})) self.assertTrue(f.does_match(doc, {'source': 'REUTERS'})) doc = {'field': 'source', 'operator': 'in', 'value': 'AAP'} self.assertTrue(f.does_match(doc, {'source': 'AAP'})) self.assertTrue(f.does_match(doc, {'source': 'aap'})) self.assertFalse(f.does_match(doc, {'source': 'REUTERS'}))
def test_does_match_with_sms_filter(self): f = FilterConditionService() doc = {'field': 'sms', 'operator': 'nin', 'value': 'true'} self.assertTrue(f.does_match(doc, self.articles[0])) self.assertTrue(f.does_match(doc, self.articles[1])) self.assertFalse(f.does_match(doc, self.articles[2])) self.assertTrue(f.does_match(doc, self.articles[3])) self.assertTrue(f.does_match(doc, self.articles[4])) self.assertTrue(f.does_match(doc, self.articles[5])) self.assertTrue(f.does_match(doc, self.articles[6])) self.assertTrue(f.does_match(doc, self.articles[7]))
def test_elastic_using_in_filter(self): f = FilterConditionService() doc = {'field': 'urgency', 'operator': 'in', 'value': '3,4'} query = f.get_elastic_query(doc) with self.app.app_context(): self._setup_elastic_args(query) docs = superdesk.get_resource_service('archive').get(req=self.req, lookup=None) doc_ids = [d['_id'] for d in docs] self.assertEqual(2, docs.count()) self.assertTrue('4' in doc_ids) self.assertTrue('3' in doc_ids)
def test_does_match_with_category_filter(self): f = FilterConditionService() doc = {'field': 'anpa_category', 'operator': 'in', 'value': 'a,i'} self.assertFalse(f.does_match(doc, self.articles[0])) self.assertFalse(f.does_match(doc, self.articles[1])) self.assertFalse(f.does_match(doc, self.articles[2])) self.assertFalse(f.does_match(doc, self.articles[3])) self.assertFalse(f.does_match(doc, self.articles[4])) self.assertFalse(f.does_match(doc, self.articles[5])) self.assertFalse(f.does_match(doc, self.articles[6])) self.assertFalse(f.does_match(doc, self.articles[7])) self.assertTrue(f.does_match(doc, self.articles[8]))
def test_are_equal3(self): f = FilterConditionService() new_doc = { 'name': 'A', 'field': 'urgency', 'operator': 'nin', 'value': 'jump,track' } doc = { '_id': 1, 'name': 'B', 'field': 'urgency', 'operator': 'nin', 'value': 'tump,jrack' } self.assertTrue(f._are_equal(new_doc, doc))
def test_are_equal4(self): f = FilterConditionService() new_doc = { 'name': 'A', 'field': 'urgency', 'operator': 'nin', 'value': '4,2,3' } doc = { '_id': 1, 'name': 'B', 'field': 'urgency', 'operator': 'nin', 'value': '2,3' } self.assertFalse(f._are_equal(new_doc, doc))
def init_app(app): endpoint_name = 'filter_conditions' service = FilterConditionService(endpoint_name, backend=get_backend()) FilterConditionResource(endpoint_name, app=app, service=service) endpoint_name = 'filter_condition_parameters' service = FilterConditionParametersService(endpoint_name, backend=get_backend()) FilterConditionParametersResource(endpoint_name, app=app, service=service) endpoint_name = 'content_filters' service = ContentFilterService(endpoint_name, backend=get_backend()) ContentFilterResource(endpoint_name, app=app, service=service) endpoint_name = 'content_filter_tests' service = ContentFilterTestService(endpoint_name, backend=superdesk.get_backend()) ContentFilterTestResource(endpoint_name, app=app, service=service) superdesk.privilege(name='content_filters', label='Content Filters', description='User can manage content filters')