test_search.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. # -*- coding: utf-8 -*-
  2. from searx.testing import SearxTestCase
  3. from searx.preferences import Preferences
  4. from searx.engines import engines
  5. import searx.search
  6. from searx.search import SearchQuery, EngineRef
  7. SAFESEARCH = 0
  8. PAGENO = 1
  9. PUBLIC_ENGINE_NAME = 'general dummy'
  10. PRIVATE_ENGINE_NAME = 'general private offline'
  11. TEST_ENGINES = [
  12. {
  13. 'name': PUBLIC_ENGINE_NAME,
  14. 'engine': 'dummy',
  15. 'categories': 'general',
  16. 'shortcut': 'gd',
  17. 'timeout': 3.0,
  18. 'tokens': [],
  19. },
  20. {
  21. 'name': PRIVATE_ENGINE_NAME,
  22. 'engine': 'dummy-offline',
  23. 'categories': 'general',
  24. 'shortcut': 'do',
  25. 'timeout': 3.0,
  26. 'offline': True,
  27. 'tokens': ['my-token'],
  28. },
  29. ]
  30. class SearchTestCase(SearxTestCase):
  31. @classmethod
  32. def setUpClass(cls):
  33. searx.engines.initialize_engines(TEST_ENGINES)
  34. def test_timeout_simple(self):
  35. searx.search.max_request_timeout = None
  36. search_query = SearchQuery('test', [EngineRef(PUBLIC_ENGINE_NAME, 'general')],
  37. ['general'], 'en-US', SAFESEARCH, PAGENO, None, None,
  38. preferences=Preferences(['oscar'], ['general'], engines, []))
  39. search = searx.search.Search(search_query)
  40. search.search()
  41. self.assertEqual(search.actual_timeout, 3.0)
  42. def test_timeout_query_above_default_nomax(self):
  43. searx.search.max_request_timeout = None
  44. search_query = SearchQuery('test', [EngineRef(PUBLIC_ENGINE_NAME, 'general')],
  45. ['general'], 'en-US', SAFESEARCH, PAGENO, None, 5.0,
  46. preferences=Preferences(['oscar'], ['general'], engines, []))
  47. search = searx.search.Search(search_query)
  48. search.search()
  49. self.assertEqual(search.actual_timeout, 3.0)
  50. def test_timeout_query_below_default_nomax(self):
  51. searx.search.max_request_timeout = None
  52. search_query = SearchQuery('test', [EngineRef(PUBLIC_ENGINE_NAME, 'general')],
  53. ['general'], 'en-US', SAFESEARCH, PAGENO, None, 1.0,
  54. preferences=Preferences(['oscar'], ['general'], engines, []))
  55. search = searx.search.Search(search_query)
  56. search.search()
  57. self.assertEqual(search.actual_timeout, 1.0)
  58. def test_timeout_query_below_max(self):
  59. searx.search.max_request_timeout = 10.0
  60. search_query = SearchQuery('test', [EngineRef(PUBLIC_ENGINE_NAME, 'general')],
  61. ['general'], 'en-US', SAFESEARCH, PAGENO, None, 5.0,
  62. preferences=Preferences(['oscar'], ['general'], engines, []))
  63. search = searx.search.Search(search_query)
  64. search.search()
  65. self.assertEqual(search.actual_timeout, 5.0)
  66. def test_timeout_query_above_max(self):
  67. searx.search.max_request_timeout = 10.0
  68. search_query = SearchQuery('test', [EngineRef(PUBLIC_ENGINE_NAME, 'general')],
  69. ['general'], 'en-US', SAFESEARCH, PAGENO, None, 15.0,
  70. preferences=Preferences(['oscar'], ['general'], engines, []))
  71. search = searx.search.Search(search_query)
  72. search.search()
  73. self.assertEqual(search.actual_timeout, 10.0)
  74. def test_query_private_engine_without_token(self):
  75. search_query = SearchQuery('test', [EngineRef(PRIVATE_ENGINE_NAME, 'general')],
  76. ['general'], 'en-US', SAFESEARCH, PAGENO, None, 2.0,
  77. preferences=Preferences(['oscar'], ['general'], engines, []))
  78. search = searx.search.Search(search_query)
  79. results = search.search()
  80. self.assertEqual(results.results_length(), 0)
  81. def test_query_private_engine_with_incorrect_token(self):
  82. preferences_with_tokens = Preferences(['oscar'], ['general'], engines, [])
  83. preferences_with_tokens.parse_dict({'tokens': 'bad-token'})
  84. search_query = SearchQuery('test', [EngineRef(PRIVATE_ENGINE_NAME, 'general')],
  85. ['general'], 'en-US', SAFESEARCH, PAGENO, None, 2.0,
  86. preferences=preferences_with_tokens)
  87. search = searx.search.Search(search_query)
  88. results = search.search()
  89. self.assertEqual(results.results_length(), 0)
  90. def test_query_private_engine_with_correct_token(self):
  91. preferences_with_tokens = Preferences(['oscar'], ['general'], engines, [])
  92. preferences_with_tokens.parse_dict({'tokens': 'my-token'})
  93. search_query = SearchQuery('test', [EngineRef(PRIVATE_ENGINE_NAME, 'general')],
  94. ['general'], 'en-US', SAFESEARCH, PAGENO, None, 2.0,
  95. preferences=preferences_with_tokens)
  96. search = searx.search.Search(search_query)
  97. results = search.search()
  98. self.assertEqual(results.results_length(), 1)
  99. def test_external_bang(self):
  100. search_query = SearchQuery('yes yes',
  101. [EngineRef(PUBLIC_ENGINE_NAME, 'general')],
  102. ['general'], 'en-US', SAFESEARCH, PAGENO, None, None,
  103. preferences=Preferences(['oscar'], ['general'], engines, [],),
  104. external_bang="yt")
  105. search = searx.search.Search(search_query)
  106. results = search.search()
  107. # For checking if the user redirected with the youtube external bang
  108. self.assertTrue(results.redirect_url is not None)
  109. search_query = SearchQuery('youtube never gonna give you up',
  110. [EngineRef(PUBLIC_ENGINE_NAME, 'general')],
  111. ['general'], 'en-US', SAFESEARCH, PAGENO, None, None,
  112. preferences=Preferences(['oscar'], ['general'], engines, []),)
  113. search = searx.search.Search(search_query)
  114. results = search.search()
  115. # This should not redirect
  116. self.assertTrue(results.redirect_url is None)