diff options
author | Alexandre Flament <alex@al-f.net> | 2021-02-22 18:13:50 +0100 |
---|---|---|
committer | Alexandre Flament <alex@al-f.net> | 2021-03-01 19:12:32 +0100 |
commit | 63f17d2e4c735767bfcb2d4fdb77d8c9ad8d9265 (patch) | |
tree | 4a4b3cae4bc9223949694d77c98e6e7443c04a65 /tests/unit/test_query.py | |
parent | 4fa1290c11402f173c39a89324fe45c1b659fd9d (diff) | |
download | searxng-63f17d2e4c735767bfcb2d4fdb77d8c9ad8d9265.tar.gz searxng-63f17d2e4c735767bfcb2d4fdb77d8c9ad8d9265.zip |
[enh] autocomplete refactoring, autocomplete on external bangs
Diffstat (limited to 'tests/unit/test_query.py')
-rw-r--r-- | tests/unit/test_query.py | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/tests/unit/test_query.py b/tests/unit/test_query.py index 0176f735e..6bbfdb1e2 100644 --- a/tests/unit/test_query.py +++ b/tests/unit/test_query.py @@ -1,7 +1,20 @@ +from searx.search import initialize from searx.query import RawTextQuery from searx.testing import SearxTestCase +TEST_ENGINES = [ + { + 'name': 'dummy engine', + 'engine': 'dummy', + 'categories': 'general', + 'shortcut': 'du', + 'timeout': 3.0, + 'tokens': [], + }, +] + + class TestQuery(SearxTestCase): def test_simple_query(self): @@ -14,6 +27,37 @@ class TestQuery(SearxTestCase): self.assertEqual(len(query.languages), 0) self.assertFalse(query.specific) + def test_multiple_spaces_query(self): + query_text = '\tthe query' + query = RawTextQuery(query_text, []) + + self.assertEqual(query.getFullQuery(), 'the query') + self.assertEqual(len(query.query_parts), 0) + self.assertEqual(len(query.user_query_parts), 2) + self.assertEqual(len(query.languages), 0) + self.assertFalse(query.specific) + + def test_str_method(self): + query_text = '<7 the query' + query = RawTextQuery(query_text, []) + self.assertEqual(str(query), '<7 the query') + + def test_repr_method(self): + query_text = '<8 the query' + query = RawTextQuery(query_text, []) + r = repr(query) + self.assertTrue(r.startswith(f"<RawTextQuery query='{query_text}' ")) + + def test_change_query(self): + query_text = '<8 the query' + query = RawTextQuery(query_text, []) + another_query = query.changeQuery('another text') + self.assertEqual(query, another_query) + self.assertEqual(query.getFullQuery(), '<8 another text') + + +class TestLanguageParser(SearxTestCase): + def test_language_code(self): language = 'es-ES' query_text = 'the query' @@ -68,6 +112,30 @@ class TestQuery(SearxTestCase): self.assertEqual(len(query.languages), 0) self.assertFalse(query.specific) + def test_autocomplete_empty(self): + query_text = 'the query :' + query = RawTextQuery(query_text, []) + self.assertEqual(query.autocomplete_list, [":en", ":en_us", ":english", ":united_kingdom"]) + + def test_autocomplete(self): + query = RawTextQuery(':englis', []) + self.assertEqual(query.autocomplete_list, [":english"]) + + query = RawTextQuery(':deutschla', []) + self.assertEqual(query.autocomplete_list, [":deutschland"]) + + query = RawTextQuery(':new_zea', []) + self.assertEqual(query.autocomplete_list, [":new_zealand"]) + + query = RawTextQuery(':hu-H', []) + self.assertEqual(query.autocomplete_list, [":hu-hu"]) + + query = RawTextQuery(':v', []) + self.assertEqual(query.autocomplete_list, [":vi", ":tiếng việt"]) + + +class TestTimeoutParser(SearxTestCase): + def test_timeout_below100(self): query_text = '<3 the query' query = RawTextQuery(query_text, []) @@ -105,3 +173,113 @@ class TestQuery(SearxTestCase): self.assertEqual(query.getQuery(), query_text) self.assertEqual(query.timeout_limit, None) self.assertFalse(query.specific) + + def test_timeout_autocomplete(self): + # invalid number: it is not bang but it is part of the query + query_text = 'the query <' + query = RawTextQuery(query_text, []) + + self.assertEqual(query.getFullQuery(), query_text) + self.assertEqual(len(query.query_parts), 0) + self.assertEqual(query.getQuery(), query_text) + self.assertEqual(query.timeout_limit, None) + self.assertFalse(query.specific) + self.assertEqual(query.autocomplete_list, ['<3', '<850']) + + +class TestExternalBangParser(SearxTestCase): + + def test_external_bang(self): + query_text = '!!ddg the query' + query = RawTextQuery(query_text, []) + + self.assertEqual(query.getFullQuery(), query_text) + self.assertEqual(len(query.query_parts), 1) + self.assertFalse(query.specific) + + def test_external_bang_not_found(self): + query_text = '!!notfoundbang the query' + query = RawTextQuery(query_text, []) + + self.assertEqual(query.getFullQuery(), query_text) + self.assertEqual(query.external_bang, None) + self.assertFalse(query.specific) + + def test_external_bang_autocomplete(self): + query_text = 'the query !!dd' + query = RawTextQuery(query_text, []) + + self.assertEqual(query.getFullQuery(), '!!dd the query') + self.assertEqual(len(query.query_parts), 1) + self.assertFalse(query.specific) + self.assertGreater(len(query.autocomplete_list), 0) + + a = query.autocomplete_list[0] + self.assertEqual(query.get_autocomplete_full_query(a), a + ' the query') + + def test_external_bang_autocomplete_empty(self): + query_text = 'the query !!' + query = RawTextQuery(query_text, []) + + self.assertEqual(query.getFullQuery(), 'the query !!') + self.assertEqual(len(query.query_parts), 0) + self.assertFalse(query.specific) + self.assertGreater(len(query.autocomplete_list), 2) + + a = query.autocomplete_list[0] + self.assertEqual(query.get_autocomplete_full_query(a), 'the query ' + a) + + +class TestBang(SearxTestCase): + + SPECIFIC_BANGS = ['!dummy_engine', '!du', '!general'] + NOT_SPECIFIC_BANGS = ['?dummy_engine', '?du', '?general'] + THE_QUERY = 'the query' + + def test_bang(self): + initialize(TEST_ENGINES) + + for bang in TestBang.SPECIFIC_BANGS + TestBang.NOT_SPECIFIC_BANGS: + with self.subTest(msg="Check bang", bang=bang): + query_text = TestBang.THE_QUERY + ' ' + bang + query = RawTextQuery(query_text, []) + + self.assertEqual(query.getFullQuery(), bang + ' ' + TestBang.THE_QUERY) + self.assertEqual(query.query_parts, [bang]) + self.assertEqual(query.user_query_parts, TestBang.THE_QUERY.split(' ')) + + def test_specific(self): + for bang in TestBang.SPECIFIC_BANGS: + with self.subTest(msg="Check bang is specific", bang=bang): + query_text = TestBang.THE_QUERY + ' ' + bang + query = RawTextQuery(query_text, []) + self.assertTrue(query.specific) + + def test_not_specific(self): + for bang in TestBang.NOT_SPECIFIC_BANGS: + with self.subTest(msg="Check bang is not specific", bang=bang): + query_text = TestBang.THE_QUERY + ' ' + bang + query = RawTextQuery(query_text, []) + self.assertFalse(query.specific) + + def test_bang_not_found(self): + initialize(TEST_ENGINES) + query = RawTextQuery('the query !bang_not_found', []) + self.assertEqual(query.getFullQuery(), 'the query !bang_not_found') + + def test_bang_autocomplete(self): + initialize(TEST_ENGINES) + query = RawTextQuery('the query !dum', []) + self.assertEqual(query.autocomplete_list, ['!dummy_engine']) + + query = RawTextQuery('!dum the query', []) + self.assertEqual(query.autocomplete_list, []) + self.assertEqual(query.getQuery(), '!dum the query') + + def test_bang_autocomplete_empty(self): + initialize() + query = RawTextQuery('the query !', []) + self.assertEqual(query.autocomplete_list, ['!images', '!wikipedia', '!osm']) + + query = RawTextQuery('the query ?', ['osm']) + self.assertEqual(query.autocomplete_list, ['?images', '?wikipedia']) |