def test_offset(self, offset, from_): builder = query.Builder(ES_VERSION) if offset is MISSING: q = builder.build({}) else: q = builder.build({"offset": offset}) assert q["from"] == from_
def test_sort_is_by_updated(self): """Sort defaults to "updated".""" builder = query.Builder(ES_VERSION) q = builder.build({}) sort = q["sort"] assert len(sort) == 1 assert list(sort[0].keys()) == ["updated"]
def test_ignores_filters_returning_none(self): testfilter = mock.Mock() testfilter.return_value = None builder = query.Builder(ES_VERSION) builder.append_filter(testfilter) q = builder.build({}) assert q["query"] == {"match_all": {}}
def test_with_evil_arguments(self): builder = query.Builder(ES_VERSION) params = {"offset": "3foo", "limit": '\' drop table annotations'} q = builder.build(params) assert q["from"] == 0 assert q["size"] == 20 assert q["query"] == {'match_all': {}}
def test_default_param_action(self): """Other params are added as "match" clauses.""" builder = query.Builder(ES_VERSION) q = builder.build({"foo": "bar"}) assert q["query"] == { 'bool': {'filter': [], 'must': [{'match': {'foo': 'bar'}}]}, }
def test_adds_aggregations_to_query(self): testaggregation = mock.Mock(key="foobar") # testaggregation.key.return_value = "foobar" testaggregation.return_value = {"terms": {"field": "foo"}} builder = query.Builder() builder.append_aggregation(testaggregation) q = builder.build({}) assert q["aggs"] == {"foobar": {"terms": {"field": "foo"}}}
def test_filters_query_by_filter_results(self): testfilter = mock.Mock() testfilter.return_value = {"term": {"giraffe": "nose"}} builder = query.Builder(ES_VERSION) builder.append_filter(testfilter) q = builder.build({}) assert q["query"] == { 'bool': {'filter': [{'term': {'giraffe': 'nose'}}], 'must': []}, }
def test_adds_matchers_to_query(self): testmatcher = mock.Mock() testmatcher.return_value = {"match": {"giraffe": "nose"}} builder = query.Builder() builder.append_matcher(testmatcher) q = builder.build({}) assert q["query"] == { "bool": {"must": [{"match": {"giraffe": "nose"}}]}, }
def test_adds_matchers_to_query(self): testmatcher = mock.Mock() testmatcher.return_value = {"match": {"giraffe": "nose"}} builder = query.Builder(ES_VERSION) builder.append_matcher(testmatcher) q = builder.build({}) assert q["query"] == { 'bool': {'filter': [], 'must': [{'match': {'giraffe': 'nose'}}]}, }
def default_querybuilder(request): builder = query.Builder() builder.append_filter(query.DeletedFilter()) builder.append_filter(query.AuthFilter(request)) builder.append_filter(query.UriFilter(request)) builder.append_filter(query.GroupFilter()) builder.append_filter(query.UserFilter()) builder.append_matcher(query.AnyMatcher()) builder.append_matcher(query.TagsMatcher()) for factory in request.registry.get(FILTERS_KEY, []): builder.append_filter(factory(request)) return builder
def test_with_custom_sort(self): """Custom sorts are returned in the query dict.""" builder = query.Builder(ES_VERSION) q = builder.build({"sort": "title"}) assert q["sort"] == [{ 'title': { 'unmapped_type': 'boolean', 'order': 'desc' } }]
def _default_querybuilder(request, es): builder = query.Builder(es_version=es.version) builder.append_filter(query.DeletedFilter()) builder.append_filter(query.AuthFilter(request)) builder.append_filter(query.UriFilter(request)) builder.append_filter(query.GroupFilter()) builder.append_filter(query.GroupAuthFilter(request)) builder.append_filter(query.UserFilter()) builder.append_filter(query.NipsaFilter(request)) builder.append_matcher(query.AnyMatcher()) builder.append_matcher(query.TagsMatcher()) return builder
def test_with_custom_sort(self): """Custom sorts are returned in the query dict.""" builder = query.Builder() q = builder.build({"sort": "title"}) assert q["sort"] == [{ 'title': { 'ignore_unmapped': True, 'order': 'desc' } }]
def test_default_params_multidict(self): """Multiple params go into multiple "match" dicts.""" builder = query.Builder(ES_VERSION) params = multidict.MultiDict() params.add("user", "fred") params.add("user", "bob") q = builder.build(params) assert q["query"] == { 'bool': {'filter': [], 'must': [{'match': {'user': '******'}}, {'match': {'user': '******'}}]}, }
def test_filters_query_by_filter_results(self): testfilter = mock.Mock() testfilter.return_value = {"term": {"giraffe": "nose"}} builder = query.Builder() builder.append_filter(testfilter) q = builder.build({}) assert q["query"] == { "filtered": { "filter": {"and": [{"term": {"giraffe": "nose"}}]}, "query": {"match_all": {}}, }, }
def test_default_params_multidict(self): """Multiple params go into multiple "match" dicts.""" builder = query.Builder() params = multidict.MultiDict() params.add("user", "fred") params.add("user", "bob") q = builder.build(params) assert q["query"] == { "bool": { "must": [ {"match": {"user": "******"}}, {"match": {"user": "******"}} ] } }
def clear(self): """Clear search filters, aggregators, and matchers.""" self.builder = query.Builder(es_version=self.es.version) self.reply_builder = query.Builder(es_version=self.es.version)
def test_limit_missing(self): builder = query.Builder(ES_VERSION) q = builder.build({}) assert q["size"] == LIMIT_DEFAULT