84 lines
3.5 KiB
Python
84 lines
3.5 KiB
Python
# -*- encoding: utf-8 -*-
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from oslotest import base
|
|
|
|
from aodhclient import utils
|
|
|
|
|
|
class SearchQueryBuilderTest(base.BaseTestCase):
|
|
def _do_test(self, expr, expected):
|
|
req = utils.search_query_builder(expr)
|
|
self.assertEqual(expected, req)
|
|
|
|
def test_search_query_builder(self):
|
|
self._do_test('foo=bar', {"=": {"foo": "bar"}})
|
|
self._do_test('foo!=1', {"!=": {"foo": 1.0}})
|
|
self._do_test('foo=True', {"=": {"foo": True}})
|
|
self._do_test('foo=null', {"=": {"foo": None}})
|
|
self._do_test('foo="null"', {"=": {"foo": "null"}})
|
|
self._do_test('foo in ["null", "foo"]',
|
|
{"in": {"foo": ["null", "foo"]}})
|
|
self._do_test(u'foo="quote" and bar≠1',
|
|
{"and": [{u"≠": {"bar": 1}},
|
|
{"=": {"foo": "quote"}}]})
|
|
self._do_test('foo="quote" or bar like "%%foo"',
|
|
{"or": [{"like": {"bar": "%%foo"}},
|
|
{"=": {"foo": "quote"}}]})
|
|
|
|
self._do_test('not (foo="quote" or bar like "%%foo" or foo="what!" '
|
|
'or bar="who?")',
|
|
{"not": {"or": [
|
|
{"=": {"bar": "who?"}},
|
|
{"=": {"foo": "what!"}},
|
|
{"like": {"bar": "%%foo"}},
|
|
{"=": {"foo": "quote"}},
|
|
]}})
|
|
|
|
self._do_test('(foo="quote" or bar like "%%foo" or not foo="what!" '
|
|
'or bar="who?") and cat="meme"',
|
|
{"and": [
|
|
{"=": {"cat": "meme"}},
|
|
{"or": [
|
|
{"=": {"bar": "who?"}},
|
|
{"not": {"=": {"foo": "what!"}}},
|
|
{"like": {"bar": "%%foo"}},
|
|
{"=": {"foo": "quote"}},
|
|
]}
|
|
]})
|
|
|
|
self._do_test('foo="quote" or bar like "%%foo" or foo="what!" '
|
|
'or bar="who?" and cat="meme"',
|
|
{"or": [
|
|
{"and": [
|
|
{"=": {"cat": "meme"}},
|
|
{"=": {"bar": "who?"}},
|
|
]},
|
|
{"=": {"foo": "what!"}},
|
|
{"like": {"bar": "%%foo"}},
|
|
{"=": {"foo": "quote"}},
|
|
]})
|
|
|
|
self._do_test('foo="quote" or bar like "%%foo" and foo="what!" '
|
|
'or bar="who?" or cat="meme"',
|
|
{"or": [
|
|
{"=": {"cat": "meme"}},
|
|
{"=": {"bar": "who?"}},
|
|
{"and": [
|
|
{"=": {"foo": "what!"}},
|
|
{"like": {"bar": "%%foo"}},
|
|
]},
|
|
{"=": {"foo": "quote"}},
|
|
]})
|