summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAlexandre Flament <alex@al-f.net>2021-02-22 18:03:24 +0100
committerAlexandre Flament <alex@al-f.net>2021-02-24 18:48:36 +0100
commit7c1847d5f2f78392d4e7f6b4892d732f6520b3dc (patch)
treefdaeb721ffc7c6bb55858790f211546bbe935323 /tests
parent606aa79e4949cd29d207443a3f82c368fbae2faf (diff)
[mod] add utils/fetch_external_bangs.py
Based on duckduckgo bangs Store bangs on a trie to allow autocomplete (not in this commit)
Diffstat (limited to 'tests')
-rw-r--r--tests/unit/test_external_bangs.py123
1 files changed, 123 insertions, 0 deletions
diff --git a/tests/unit/test_external_bangs.py b/tests/unit/test_external_bangs.py
new file mode 100644
index 00000000..6a968678
--- /dev/null
+++ b/tests/unit/test_external_bangs.py
@@ -0,0 +1,123 @@
+from searx.external_bang import get_node, resolve_bang_definition, get_bang_url, get_bang_definition_and_autocomplete
+from searx.search import SearchQuery, EngineRef
+from searx.testing import SearxTestCase
+
+
+TEST_DB = {
+ 'trie': {
+ 'exam': {
+ 'ple': '//example.com/' + chr(2) + chr(1) + '0',
+ '*': '//wikipedia.org/wiki/' + chr(2) + chr(1) + '0',
+ },
+ 'sea': {
+ '*': 'sea' + chr(2) + chr(1) + '0',
+ 'rch': {
+ '*': 'search' + chr(2) + chr(1) + '0',
+ 'ing': 'searching' + chr(2) + chr(1) + '0',
+ },
+ 's': {
+ 'on': 'season' + chr(2) + chr(1) + '0',
+ 'capes': 'seascape' + chr(2) + chr(1) + '0',
+ }
+ },
+ 'error': ['error in external_bangs.json']
+ }
+}
+
+
+class TestGetNode(SearxTestCase):
+
+ DB = {
+ 'trie': {
+ 'exam': {
+ 'ple': 'test',
+ '*': 'not used',
+ }
+ }
+ }
+
+ def test_found(self):
+ node, before, after = get_node(TestGetNode.DB, 'example')
+
+ self.assertEqual(node, 'test')
+ self.assertEqual(before, 'example')
+ self.assertEqual(after, '')
+
+ def test_get_partial(self):
+ node, before, after = get_node(TestGetNode.DB, 'examp')
+ self.assertEqual(node, TestGetNode.DB['trie']['exam'])
+ self.assertEqual(before, 'exam')
+ self.assertEqual(after, 'p')
+
+ def test_not_found(self):
+ node, before, after = get_node(TestGetNode.DB, 'examples')
+ self.assertEqual(node, 'test')
+ self.assertEqual(before, 'example')
+ self.assertEqual(after, 's')
+
+
+class TestResolveBangDefinition(SearxTestCase):
+
+ def test_https(self):
+ url, rank = resolve_bang_definition('//example.com/' + chr(2) + chr(1) + '42', 'query')
+ self.assertEqual(url, 'https://example.com/query')
+ self.assertEqual(rank, 42)
+
+ def test_http(self):
+ url, rank = resolve_bang_definition('http://example.com/' + chr(2) + chr(1) + '0', 'text')
+ self.assertEqual(url, 'http://example.com/text')
+ self.assertEqual(rank, 0)
+
+
+class TestGetBangDefinitionAndAutocomplete(SearxTestCase):
+
+ def test_found(self):
+ global TEST_DB
+ bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('exam', external_bangs_db=TEST_DB)
+ self.assertEqual(bang_definition, TEST_DB['trie']['exam']['*'])
+ self.assertEqual(new_autocomplete, ['example'])
+
+ def test_found_optimized(self):
+ global TEST_DB
+ bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('example', external_bangs_db=TEST_DB)
+ self.assertEqual(bang_definition, TEST_DB['trie']['exam']['ple'])
+ self.assertEqual(new_autocomplete, [])
+
+ def test_partial(self):
+ global TEST_DB
+ bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('examp', external_bangs_db=TEST_DB)
+ self.assertEqual(bang_definition, None)
+ self.assertEqual(new_autocomplete, ['example'])
+
+ def test_partial2(self):
+ global TEST_DB
+ bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('sea', external_bangs_db=TEST_DB)
+ self.assertEqual(bang_definition, TEST_DB['trie']['sea']['*'])
+ self.assertEqual(new_autocomplete, ['search', 'searching', 'seascapes', 'season'])
+
+ def test_error(self):
+ global TEST_DB
+ bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('error', external_bangs_db=TEST_DB)
+ self.assertEqual(bang_definition, None)
+ self.assertEqual(new_autocomplete, [])
+
+ def test_actual_data(self):
+ bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('duckduckgo')
+ self.assertTrue(bang_definition.startswith('//duckduckgo.com/?q='))
+ self.assertEqual(new_autocomplete, [])
+
+
+class TestExternalBangJson(SearxTestCase):
+
+ def test_no_external_bang_query(self):
+ result = get_bang_url(SearchQuery('test', engineref_list=[EngineRef('wikipedia', 'general')]))
+ self.assertEqual(result, None)
+
+ def test_get_bang_url(self):
+ global TEST_DB
+ url = get_bang_url(SearchQuery('test', engineref_list=[], external_bang='example'), external_bangs_db=TEST_DB)
+ self.assertEqual(url, 'https://example.com/test')
+
+ def test_actual_data(self):
+ google_url = get_bang_url(SearchQuery('test', engineref_list=[], external_bang='g'))
+ self.assertEqual(google_url, 'https://www.google.com/search?q=test')