def test_nested_or_filter(self): """ It should be possible to add another multi-clause filter inside of an existing multi-clause filter and have them nest correctly. """ query_builder = QueryBuilder() query_builder.or_filter( Exists('value') ) or_filter = query_builder.find_filter(Or) or_filter.or_filter( Exists('nested_value') ) self.assertEquals( query_builder.to_query()['filter'], { "or": [ {"exists": {"field": "value"}}, { "or": [ {"exists": { "field": "nested_value" }} ] } ] } )
def test_add_or_shorthand(self): query_builder = QueryBuilder() query_builder.or_filter('range', 'range_field', gte=5) self.assertEquals(query_builder.to_query()['filter'], { 'or': [ {'range': {'range_field': {'gte': 5}}} ] })
def test_inversion_or(self): """ Filters can return an inverted version of themselve using the `~` operator. """ query_builder = QueryBuilder() query_builder.or_filter( ~Exists('and_not_value') ) query_builder.or_filter( Exists('exists_value') ) self.assertEquals( query_builder.to_query()['filter'], { "or": [ {"not": {"exists": {"field": "and_not_value"}}}, {"exists": {"field": "exists_value"}} ] } )