class KnownValues(unittest.TestCase): def setUp(self): self.filter = Filter() def test_add_filter_by_id(self): print('It should generate an empty filter') cfilter = self.filter.add_filter_by_id([], True) self.assertEqual(cfilter, {}) print('It should generate a filter with a single key equal test') cfilter = self.filter.add_filter_by_id(['keyone'], True) self.assertEqual(cfilter, {'_id': {'$eq': 'keyone'}}) print('It should generate a filter with a single key not equal test') cfilter = self.filter.add_filter_by_id(['keyone'], False) self.assertEqual(cfilter, {'_id': {'$ne': 'keyone'}}) print( 'It should generate a filter with a _id key with nested' + ' dict with noop key and given dict as value') value = ['keyone', 'keytwo'] cfilter = self.filter.add_filter_by_id(value, True) test = {'_id': {'$in': ['keyone', 'keytwo']}} self.assertEqual(cfilter, test) def test_make_mfilter(self): mfilter = {'key': 'value'} value = ['key1', 'key2'] print('It should return an empty filter') cfilter = self.filter.make_filter() self.assertEqual(cfilter, {}) print('It should return given filter') cfilter = self.filter.make_filter(mfilter=mfilter) self.assertIn('key', cfilter) self.assertEqual(cfilter['key'], 'value') self.assertEqual(len(cfilter.keys()), 1) print('It should return an include filter') cfilter = self.filter.make_filter(includes=value) self.assertIn('_id', cfilter) self.assertEqual(len(cfilter.keys()), 1) self.assertIn('$in', cfilter['_id']) self.assertEqual(len(cfilter['_id'].keys()), 1) self.assertEqual(cfilter['_id']['$in'], value) print('It should return an exclude filter') cfilter = self.filter.make_filter(excludes=value) self.assertIn('_id', cfilter) self.assertEqual(len(cfilter.keys()), 1) self.assertIn('$nin', cfilter['_id']) self.assertEqual(len(cfilter['_id'].keys()), 1) self.assertEqual(cfilter['_id']['$nin'], value) print('It should return a compund filter between mfilter and excludes') cfilter = self.filter.make_filter(mfilter=mfilter, excludes=value) self.assertIn('$and', cfilter) self.assertEqual(len(cfilter['$and']), 2) self.assertEqual(cfilter['$and'][0], mfilter) self.assertEqual(cfilter['$and'][1], {'_id': {'$nin': value}}) print('It should return a compund filter between mfilter and includes') cfilter = self.filter.make_filter(mfilter=mfilter, includes=value) self.assertIn('$or', cfilter) self.assertEqual(len(cfilter['$or']), 2) self.assertEqual(cfilter, {'$or': [mfilter, {'_id': {'$in': value}}]}) print('It should return a compund filter between excludes includes') cfilter = self.filter.make_filter( excludes=['singlekey'], includes=value) test = {'$and': [ {'_id': {'$in': value}}, {'_id': {'$ne': 'singlekey'}}]} self.assertEqual(cfilter, test)