def test_type_boolean_false(self): query_result = mqm(string_query="active!=false") assert query_result == { 'filter': { "active": { '$ne': False } }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None } query_result = mqm(string_query="active!=False") assert query_result == { 'filter': { "active": { '$ne': False } }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None }
def test_type_null(self): query_result = mqm(string_query="active!=null") assert query_result == { 'filter': { "active": { '$ne': None } }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None } query_result = mqm(string_query="active!=Null") assert query_result == { 'filter': { "active": { '$ne': None } }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None } query_result = mqm(string_query="active!=none") assert query_result == { 'filter': { "active": { '$ne': None } }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None } query_result = mqm(string_query="active!=None") assert query_result == { 'filter': { "active": { '$ne': None } }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None }
def test_custom_cast_2(self): def parse_custom_list(custom_list: str) -> List[str]: return custom_list.split(';') query_result = mqm( string_query= "price=string(5)&name=John&in_stock=custom_list(1;2;3;4)&" "in_stock_string=custom_list(string(1);string(2);string(3);string(4))", casters={ 'string': str, 'custom_list': parse_custom_list }) assert query_result == { 'filter': { 'price': '5', 'name': 'John', 'in_stock': { '$in': [1, 2, 3, 4] }, 'in_stock_string': { '$in': ['1', '2', '3', '4'] } }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None }
def test_bad_population_logic(self): with pytest.raises(LogicalPopulationError) as excinfo: query_result = mqm(string_query="populate=service.description", populate=True) assert excinfo.value.__str__( ) == 'Fail to find logical population item'
def test_multi_population_with_multi_projection(self): query_result = mqm( string_query="fields=-created_at,-updated_at,hives.label,hives._id," "data.temperature&populate=hives,data", populate=True) assert query_result == { 'filter': {}, 'sort': None, 'skip': 0, 'limit': 0, 'projection': { 'created_at': 0, 'updated_at': 0 }, 'population': [{ 'path': 'hives', 'projection': { 'label': 1, '_id': 1 } }, { 'path': 'data', 'projection': { 'temperature': 1 } }] }
def test_multi_descending_sort(self): query_result = mqm(string_query="sort=-_id,-created_at,-price") assert query_result == {'filter': {}, 'sort': [('_id', pymongo.DESCENDING), ('created_at', pymongo.DESCENDING), ('price', pymongo.DESCENDING)], 'skip': 0, 'limit': 0, 'projection': None}
def test_multi_population_3(self): query_result = mqm( string_query="populate=user,user.settings,user.comments,user.info", populate=True) assert query_result == { 'filter': {}, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None, 'population': [{ 'path': 'user', 'projection': None, 'population': [{ 'path': 'settings', 'projection': None }, { 'path': 'comments', 'projection': None }, { 'path': 'info', 'projection': None }] }] }
def test_complex_projection_error(self): with pytest.raises(ProjectionError) as excinfo: query_result = mqm( string_query= 'fields={"games": {"$elemMatch":{"score": {"$gt": 5}}},joined,lastLogin' ) assert excinfo.value.__str__() == 'Fail to decode projection'
def test_custom_cast_fail(self): with pytest.raises(CustomCasterFail) as excinfo: query_result = mqm(string_query="price=float(A.B)", casters={'float': float}) assert excinfo.value.__str__( ) == 'Fail to cast float(A.B) with caster float'
def test_empty_limit(self): query_result = mqm(string_query="limit=") assert query_result == { 'filter': {}, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None }
def test_good_skip(self): query_result = mqm(string_query="skip=5") assert query_result == { 'filter': {}, 'sort': None, 'skip': 5, 'limit': 0, 'projection': None }
def test_bad_sub_population_logic_2(self): with pytest.raises(LogicalSubPopulationError) as excinfo: query_result = mqm( string_query= "populate=service,service.description,service.description.info," "service.description.info,service.description.info.toto," "service.descriptions.info.titi", populate=True) assert excinfo.value.__str__( ) == 'Fail to find logical sub population item'
def test_empty_population(self): query_result = mqm(string_query="populate=", populate=True) assert query_result == { 'filter': {}, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None, 'population': [] }
def test_simple_projection_2(self): query_result = mqm(string_query="fields=-_id") assert query_result == { 'filter': {}, 'sort': None, 'skip': 0, 'limit': 0, 'projection': { '_id': 0 } }
def test_type_integer(self): query_result = mqm(string_query="price=5") assert query_result == { 'filter': { "price": 5 }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None }
def test_type_negative_float(self): query_result = mqm(string_query="price=-5.5") assert query_result == { 'filter': { "price": -5.5 }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None }
def test_type_datetime_format_1(self): query_result = mqm(string_query="created_at=2016-01-01") assert query_result == { 'filter': { "created_at": datetime(year=2016, month=1, day=1) }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None }
def test_type_string(self): query_result = mqm(string_query="name=toto") assert query_result == { 'filter': { "name": 'toto' }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None }
def test_type_regex(self): query_result = mqm(string_query="email=/@gmail\\.com$/i") assert query_result == { 'filter': { "email": re.compile(r'/@gmail\.com$/i') }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None }
def test_custom_cast(self): query_result = mqm(string_query="price=string(5)", casters={'string': str}) assert query_result == { 'filter': { 'price': '5' }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None }
def test_type_boolean_true(self): query_result = mqm(string_query="active=true") assert query_result == { 'filter': { "active": True }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None } query_result = mqm(string_query="active=True") assert query_result == { 'filter': { "active": True }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None }
def test_sub_population_alex_2(self): query_result = mqm( string_query= "populate=animal,crossbreed,crossbreed.crossbreeds,company,service," "service.service_description,pet&fields=-company.settings.booking," "-company.settings.toto", populate=True) assert query_result == { 'filter': {}, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None, 'population': [{ 'path': 'animal', 'projection': None }, { 'path': 'crossbreed', 'projection': None, 'population': [{ 'path': 'crossbreeds', 'projection': None }] }, { 'path': 'company', 'projection': { 'settings.booking': 0, 'settings.toto': 0 } }, { 'path': 'service', 'projection': None, 'population': [{ 'path': 'service_description', 'projection': None }] }, { 'path': 'pet', 'projection': None }] }
def test_type_datetime_format_2(self): query_result = mqm( string_query="created_at=2016-01-01T00:00:00.000000+00:00") assert query_result == { 'filter': { "created_at": datetime(year=2016, month=1, day=1, tzinfo=timezone.utc) }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None }
def test_multi_projection_1(self): query_result = mqm(string_query="fields=-_id,-created_at,-price") assert query_result == { 'filter': {}, 'sort': None, 'skip': 0, 'limit': 0, 'projection': { '_id': 0, 'created_at': 0, 'price': 0 } }
def test_simple_population(self): query_result = mqm(string_query="populate=user", populate=True) assert query_result == { 'filter': {}, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None, 'population': [{ 'path': 'user', 'projection': None }] }
def test_type_list(self): query_result = mqm(string_query="country=US,RU") assert query_result == { 'filter': { "country": { "$in": ['US', 'RU'] } }, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None }
def test_multi_population_with_multi_projection_2(self): query_result = mqm( string_query= "fields=-created_at,-updated_at,-service.created_at,-service.updated_at," "-service.description.created_at,-service." "description.updated_at&populate=service,service.description,service." "description.picture,animal,animal.info", populate=True) assert query_result == { 'filter': {}, 'sort': None, 'skip': 0, 'limit': 0, 'projection': { 'created_at': 0, 'updated_at': 0 }, 'population': [{ 'path': 'service', 'projection': { 'created_at': 0, 'updated_at': 0 }, 'population': [{ 'path': 'description', 'projection': { 'created_at': 0, 'updated_at': 0 }, 'population': [{ 'path': 'picture', 'projection': None }] }] }, { 'path': 'animal', 'projection': None, 'population': [{ 'path': 'info', 'projection': None }] }] }
def test_embedded_projection_1(self): query_result = mqm(string_query="fields=settings.notif&populate=user", populate=True) assert query_result == { 'filter': {}, 'sort': None, 'skip': 0, 'limit': 0, 'projection': { 'settings.notif': 1 }, 'population': [{ 'path': 'user', 'projection': None }] }
def test_multi_population_6(self): query_result = mqm( string_query= "populate=user,user.life,user.life.info,user.settings,user.settings.notifications", populate=True) assert query_result == { 'filter': {}, 'sort': None, 'skip': 0, 'limit': 0, 'projection': None, 'population': [{ 'path': 'user', 'projection': None, 'population': [{ 'path': 'life', 'projection': None, 'population': [{ 'path': 'info', 'projection': None }] }, { 'path': 'settings', 'projection': None, 'population': [{ 'path': 'notifications', 'projection': None }] }] }] }
def test_simple_population_with_projection(self): query_result = mqm( string_query= "fields=-created_at,-updated_at,hives.label&populate=hives", populate=True) assert query_result == { 'filter': {}, 'sort': None, 'skip': 0, 'limit': 0, 'projection': { 'created_at': 0, 'updated_at': 0 }, 'population': [{ 'path': 'hives', 'projection': { 'label': 1 } }] }