Esempio n. 1
0
    def test_limit_matches_input(self, lim):
        """Given an integer in the allowed range, it should be passed through."""
        builder = query.Builder()

        q = builder.build({"limit": str(lim)})

        assert q["size"] == lim
Esempio n. 2
0
    def test_sort_includes_ignore_unmapped(self):
        """'ignore_unmapped': True is used in the sort clause."""
        builder = query.Builder()

        q = builder.build({})

        assert q["sort"][0]["updated"]["ignore_unmapped"] == True
Esempio n. 3
0
    def test_defaults_to_match_all(self):
        """If no query params are given a "match_all": {} query is returned."""
        builder = query.Builder()

        q = builder.build({})

        assert q["query"] == {"match_all": {}}
Esempio n. 4
0
    def test_default_param_action(self):
        """Other params are added as "match" clauses."""
        builder = query.Builder()

        q = builder.build({"foo": "bar"})

        assert q["query"] == {"bool": {"must": [{"match": {"foo": "bar"}}]}}
Esempio n. 5
0
    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'}}]
Esempio n. 6
0
    def test_passes_params_to_aggregations(self):
        testaggregation = mock.Mock()
        builder = query.Builder()
        builder.append_aggregation(testaggregation)

        builder.build({"foo": "bar"})

        testaggregation.assert_called_with({"foo": "bar"})
Esempio n. 7
0
    def test_limit_output_within_bounds(self, text):
        """Given any string input, output should be in the allowed range."""
        builder = query.Builder()

        q = builder.build({"limit": text})

        assert isinstance(q["size"], int)
        assert 0 <= q["size"] <= LIMIT_MAX
Esempio n. 8
0
    def test_limit_output_within_bounds_int_input(self, lim):
        """Given any integer input, output should be in the allowed range."""
        builder = query.Builder()

        q = builder.build({"limit": str(lim)})

        assert isinstance(q["size"], int)
        assert 0 <= q["size"] <= LIMIT_MAX
Esempio n. 9
0
    def test_with_custom_order(self):
        """'order' params are returned in the query dict if given."""
        builder = query.Builder()

        q = builder.build({"order": "asc"})

        sort = q["sort"]
        assert sort[0]["updated"]["order"] == "asc"
Esempio n. 10
0
    def test_order_defaults_to_desc(self):
        """'order': "desc" is returned in the q dict by default."""
        builder = query.Builder()

        q = builder.build({})

        sort = q["sort"]
        assert sort[0]["updated"]["order"] == "desc"
Esempio n. 11
0
    def test_passes_params_to_matchers(self):
        testmatcher = mock.Mock()
        builder = query.Builder()
        builder.append_matcher(testmatcher)

        builder.build({"foo": "bar"})

        testmatcher.assert_called_with({"foo": "bar"})
Esempio n. 12
0
    def test_ignores_filters_returning_none(self):
        testfilter = mock.Mock()
        testfilter.return_value = None
        builder = query.Builder()
        builder.append_filter(testfilter)

        q = builder.build({})

        assert q["query"] == {"match_all": {}}
Esempio n. 13
0
    def test_offset(self, offset, from_):
        builder = query.Builder()

        if offset is MISSING:
            q = builder.build({})
        else:
            q = builder.build({"offset": offset})

        assert q["from"] == from_
Esempio n. 14
0
    def test_with_evil_arguments(self):
        builder = query.Builder()
        params = {"offset": "3foo", "limit": '\' drop table annotations'}

        q = builder.build(params)

        assert q["from"] == 0
        assert q["size"] == 20
        assert q["query"] == {'match_all': {}}
Esempio n. 15
0
    def test_sort_is_by_updated(self):
        """Sort defaults to "updated"."""
        builder = query.Builder()

        q = builder.build({})

        sort = q["sort"]
        assert len(sort) == 1
        assert sort[0].keys() == ["updated"]
Esempio n. 16
0
    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"}}}
Esempio n. 17
0
    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"}}]},
        }
Esempio n. 18
0
File: core.py Progetto: zermelozf/h
def default_querybuilder(request):
    builder = query.Builder()
    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))
    for factory in request.registry.get(MATCHERS_KEY, []):
        builder.append_matcher(factory(request))
    return builder
Esempio n. 19
0
    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": {}},
            },
        }
Esempio n. 20
0
    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": "******"}}
                ]
            }
        }
Esempio n. 21
0
    def test_limit_missing(self):
        builder = query.Builder()

        q = builder.build({})

        assert q["size"] == LIMIT_DEFAULT