test_external_bangs.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. from searx.external_bang import (
  2. get_node,
  3. resolve_bang_definition,
  4. get_bang_url,
  5. get_bang_definition_and_autocomplete,
  6. LEAF_KEY,
  7. )
  8. from searx.search import SearchQuery, EngineRef
  9. from tests import SearxTestCase
  10. TEST_DB = {
  11. 'trie': {
  12. 'exam': {
  13. 'ple': '//example.com/' + chr(2) + chr(1) + '0',
  14. LEAF_KEY: '//wikipedia.org/wiki/' + chr(2) + chr(1) + '0',
  15. },
  16. 'sea': {
  17. LEAF_KEY: 'sea' + chr(2) + chr(1) + '0',
  18. 'rch': {
  19. LEAF_KEY: 'search' + chr(2) + chr(1) + '0',
  20. 'ing': 'searching' + chr(2) + chr(1) + '0',
  21. },
  22. 's': {
  23. 'on': 'season' + chr(2) + chr(1) + '0',
  24. 'capes': 'seascape' + chr(2) + chr(1) + '0',
  25. },
  26. },
  27. 'error': ['error in external_bangs.json'],
  28. }
  29. }
  30. class TestGetNode(SearxTestCase):
  31. DB = {
  32. 'trie': {
  33. 'exam': {
  34. 'ple': 'test',
  35. LEAF_KEY: 'not used',
  36. }
  37. }
  38. }
  39. def test_found(self):
  40. node, before, after = get_node(TestGetNode.DB, 'example')
  41. self.assertEqual(node, 'test')
  42. self.assertEqual(before, 'example')
  43. self.assertEqual(after, '')
  44. def test_get_partial(self):
  45. node, before, after = get_node(TestGetNode.DB, 'examp')
  46. self.assertEqual(node, TestGetNode.DB['trie']['exam'])
  47. self.assertEqual(before, 'exam')
  48. self.assertEqual(after, 'p')
  49. def test_not_found(self):
  50. node, before, after = get_node(TestGetNode.DB, 'examples')
  51. self.assertEqual(node, 'test')
  52. self.assertEqual(before, 'example')
  53. self.assertEqual(after, 's')
  54. class TestResolveBangDefinition(SearxTestCase):
  55. def test_https(self):
  56. url, rank = resolve_bang_definition('//example.com/' + chr(2) + chr(1) + '42', 'query')
  57. self.assertEqual(url, 'https://example.com/query')
  58. self.assertEqual(rank, 42)
  59. def test_http(self):
  60. url, rank = resolve_bang_definition('http://example.com/' + chr(2) + chr(1) + '0', 'text')
  61. self.assertEqual(url, 'http://example.com/text')
  62. self.assertEqual(rank, 0)
  63. class TestGetBangDefinitionAndAutocomplete(SearxTestCase):
  64. def test_found(self):
  65. bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('exam', external_bangs_db=TEST_DB)
  66. self.assertEqual(bang_definition, TEST_DB['trie']['exam'][LEAF_KEY])
  67. self.assertEqual(new_autocomplete, ['example'])
  68. def test_found_optimized(self):
  69. bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('example', external_bangs_db=TEST_DB)
  70. self.assertEqual(bang_definition, TEST_DB['trie']['exam']['ple'])
  71. self.assertEqual(new_autocomplete, [])
  72. def test_partial(self):
  73. bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('examp', external_bangs_db=TEST_DB)
  74. self.assertEqual(bang_definition, None)
  75. self.assertEqual(new_autocomplete, ['example'])
  76. def test_partial2(self):
  77. bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('sea', external_bangs_db=TEST_DB)
  78. self.assertEqual(bang_definition, TEST_DB['trie']['sea'][LEAF_KEY])
  79. self.assertEqual(new_autocomplete, ['search', 'searching', 'seascapes', 'season'])
  80. def test_error(self):
  81. bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('error', external_bangs_db=TEST_DB)
  82. self.assertEqual(bang_definition, None)
  83. self.assertEqual(new_autocomplete, [])
  84. def test_actual_data(self):
  85. bang_definition, new_autocomplete = get_bang_definition_and_autocomplete('duckduckgo')
  86. self.assertTrue(bang_definition.startswith('//duckduckgo.com/?q='))
  87. self.assertEqual(new_autocomplete, [])
  88. class TestExternalBangJson(SearxTestCase):
  89. def test_no_external_bang_query(self):
  90. result = get_bang_url(SearchQuery('test', engineref_list=[EngineRef('wikipedia', 'general')]))
  91. self.assertEqual(result, None)
  92. def test_get_bang_url(self):
  93. url = get_bang_url(SearchQuery('test', engineref_list=[], external_bang='example'), external_bangs_db=TEST_DB)
  94. self.assertEqual(url, 'https://example.com/test')
  95. def test_actual_data(self):
  96. google_url = get_bang_url(SearchQuery('test', engineref_list=[], external_bang='g'))
  97. self.assertEqual(google_url, 'https://www.google.com/search?q=test')