on engine-data help sign in
searx/tests/unit/test_external_bangs.py
123 lines 4.6 kB history raw
1from searx.external_bang import get_node, resolve_bang_definition, get_bang_url, get_bang_definition_and_autocomplete
2from searx.search import SearchQuery, EngineRef
3from searx.testing import SearxTestCase
6TEST_DB = {
7 'trie': {
8 'exam': {
9 'ple': '//example.com/' + chr(2) + chr(1) + '0',
10 '*': '//wikipedia.org/wiki/' + chr(2) + chr(1) + '0',
11 },
12 'sea': {
13 '*': 'sea' + chr(2) + chr(1) + '0',
14 'rch': {
15 '*': 'search' + chr(2) + chr(1) + '0',
16 'ing': 'searching' + chr(2) + chr(1) + '0',
17 },
18 's': {
19 'on': 'season' + chr(2) + chr(1) + '0',
20 'capes': 'seascape' + chr(2) + chr(1) + '0',
21 }
22 },
23 'error': ['error in external_bangs.json']
24 }
28class TestGetNode(SearxTestCase):
30 DB = {
31 'trie': {
32 'exam': {
33 'ple': 'test',
34 '*': 'not used',
35 }
36 }
37 }
39 def test_found(self):
40 node, before, after = get_node(TestGetNode.DB, 'example')
42 self.assertEqual(node, 'test')
43 self.assertEqual(before, 'example')
44 self.assertEqual(after, '')
46 def test_get_partial(self):
47 node, before, after = get_node(TestGetNode.DB, 'examp')
48 self.assertEqual(node, TestGetNode.DB['trie']['exam'])
49 self.assertEqual(before, 'exam')
50 self.assertEqual(after, 'p')
52 def test_not_found(self):
53 node, before, after = get_node(TestGetNode.DB, 'examples')
54 self.assertEqual(node, 'test')
55 self.assertEqual(before, 'example')
56 self.assertEqual(after, 's')
59class TestResolveBangDefinition(SearxTestCase):
61 def test_https(self):
62 url, rank = resolve_bang_definition('//example.com/' + chr(2) + chr(1) + '42', 'query')
63 self.assertEqual(url, 'https://example.com/query')
64 self.assertEqual(rank, 42)
66 def test_http(self):
67 url, rank = resolve_bang_definition('http://example.com/' + chr(2) + chr(1) + '0', 'text')
68 self.assertEqual(url, 'http://example.com/text')
69 self.assertEqual(rank, 0)
72class TestGetBangDefinitionAndAutocomplete(SearxTestCase):
74 def test_found(self):
75 global TEST_DB
76 bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('exam', external_bangs_db=TEST_DB)
77 self.assertEqual(bang_definition, TEST_DB['trie']['exam']['*'])
78 self.assertEqual(new_autocomplete, ['example'])
80 def test_found_optimized(self):
81 global TEST_DB
82 bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('example', external_bangs_db=TEST_DB)
83 self.assertEqual(bang_definition, TEST_DB['trie']['exam']['ple'])
84 self.assertEqual(new_autocomplete, [])
86 def test_partial(self):
87 global TEST_DB
88 bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('examp', external_bangs_db=TEST_DB)
89 self.assertEqual(bang_definition, None)
90 self.assertEqual(new_autocomplete, ['example'])
92 def test_partial2(self):
93 global TEST_DB
94 bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('sea', external_bangs_db=TEST_DB)
95 self.assertEqual(bang_definition, TEST_DB['trie']['sea']['*'])
96 self.assertEqual(new_autocomplete, ['search', 'searching', 'seascapes', 'season'])
98 def test_error(self):
99 global TEST_DB
100 bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('error', external_bangs_db=TEST_DB)
101 self.assertEqual(bang_definition, None)
102 self.assertEqual(new_autocomplete, [])
104 def test_actual_data(self):
105 bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('duckduckgo')
106 self.assertTrue(bang_definition.startswith('//duckduckgo.com/?q='))
107 self.assertEqual(new_autocomplete, [])
110class TestExternalBangJson(SearxTestCase):
112 def test_no_external_bang_query(self):
113 result = get_bang_url(SearchQuery('test', engineref_list=[EngineRef('wikipedia', 'general')]))
114 self.assertEqual(result, None)
116 def test_get_bang_url(self):
117 global TEST_DB
118 url = get_bang_url(SearchQuery('test', engineref_list=[], external_bang='example'), external_bangs_db=TEST_DB)
119 self.assertEqual(url, 'https://example.com/test')
121 def test_actual_data(self):
122 google_url = get_bang_url(SearchQuery('test', engineref_list=[], external_bang='g'))
123 self.assertEqual(google_url, 'https://www.google.com/search?q=test')