test_standalone_searx.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. # -*- coding: utf-8 -*-
  2. """Test utils/standalone_searx.py"""
  3. import datetime
  4. import io
  5. import sys
  6. from mock import Mock, patch
  7. from nose2.tools import params
  8. from searx.search import SearchQuery, EngineRef, initialize
  9. from searxng_extra import standalone_searx as sas
  10. from tests import SearxTestCase
  11. class StandaloneSearx(SearxTestCase):
  12. """Unit test for standalone_searx."""
  13. @classmethod
  14. def setUpClass(cls):
  15. engine_list = [{'engine': 'dummy', 'name': 'engine1', 'shortcut': 'e1'}]
  16. initialize(engine_list)
  17. def test_parse_argument_no_args(self):
  18. """Test parse argument without args."""
  19. with patch.object(sys, 'argv', ['standalone_searx']), self.assertRaises(SystemExit):
  20. sys.stderr = io.StringIO()
  21. sas.parse_argument()
  22. sys.stdout = sys.__stderr__
  23. def test_parse_argument_basic_args(self):
  24. """Test parse argument with basic args."""
  25. query = 'red box'
  26. exp_dict = {
  27. 'query': query,
  28. 'category': 'general',
  29. 'lang': 'all',
  30. 'pageno': 1,
  31. 'safesearch': '0',
  32. 'timerange': None,
  33. }
  34. args = ['standalone_searx', query]
  35. with patch.object(sys, 'argv', args):
  36. res = sas.parse_argument()
  37. self.assertEqual(exp_dict, vars(res))
  38. res2 = sas.parse_argument(args[1:])
  39. self.assertEqual(exp_dict, vars(res2))
  40. def test_to_dict(self):
  41. """test to_dict."""
  42. self.assertEqual(
  43. sas.to_dict(sas.get_search_query(sas.parse_argument(['red box']))),
  44. {
  45. 'search': {'q': 'red box', 'pageno': 1, 'lang': 'all', 'safesearch': 0, 'timerange': None},
  46. 'results': [],
  47. 'infoboxes': [],
  48. 'suggestions': [],
  49. 'answers': [],
  50. 'paging': False,
  51. 'results_number': 0,
  52. },
  53. )
  54. def test_to_dict_with_mock(self):
  55. """test to dict."""
  56. with patch.object(sas.searx.search, 'Search') as mock_s:
  57. m_search = mock_s().search()
  58. m_sq = Mock()
  59. self.assertEqual(
  60. sas.to_dict(m_sq),
  61. {
  62. 'answers': [],
  63. 'infoboxes': m_search.infoboxes,
  64. 'paging': m_search.paging,
  65. 'results': m_search.get_ordered_results(),
  66. 'results_number': m_search.results_number(),
  67. 'search': {
  68. 'lang': m_sq.lang,
  69. 'pageno': m_sq.pageno,
  70. 'q': m_sq.query,
  71. 'safesearch': m_sq.safesearch,
  72. 'timerange': m_sq.time_range,
  73. },
  74. 'suggestions': [],
  75. },
  76. )
  77. def test_get_search_query(self):
  78. """test get_search_query."""
  79. args = sas.parse_argument(
  80. [
  81. 'rain',
  82. ]
  83. )
  84. search_q = sas.get_search_query(args)
  85. self.assertTrue(search_q)
  86. self.assertEqual(
  87. search_q, SearchQuery('rain', [EngineRef('engine1', 'general')], 'all', 0, 1, None, None, None)
  88. )
  89. def test_no_parsed_url(self):
  90. """test no_parsed_url func"""
  91. self.assertEqual(sas.no_parsed_url([{'parsed_url': 'http://example.com'}]), [{}])
  92. @params((datetime.datetime(2020, 1, 1), '2020-01-01T00:00:00'), ('a'.encode('utf8'), 'a'), (set([1]), [1]))
  93. def test_json_serial(self, arg, exp_res):
  94. """test json_serial func"""
  95. self.assertEqual(sas.json_serial(arg), exp_res)
  96. def test_json_serial_error(self):
  97. """test error on json_serial."""
  98. with self.assertRaises(TypeError):
  99. sas.json_serial('a')