| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  | # -*- coding: utf-8 -*- | 
					
						
							|  |  |  | """Test utils/standalone_searx.py""" | 
					
						
							|  |  |  | import datetime | 
					
						
							| 
									
										
										
										
											2020-11-05 00:15:29 +01:00
										 |  |  | import io | 
					
						
							| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  | import sys | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from mock import Mock, patch | 
					
						
							|  |  |  | from nose2.tools import params | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 13:41:32 +01:00
										 |  |  | from searx.search import SearchQuery, EngineRef, initialize | 
					
						
							| 
									
										
										
										
											2021-10-02 17:30:39 +02:00
										 |  |  | from searxng_extra import standalone_searx as sas | 
					
						
							| 
									
										
										
										
											2021-09-02 16:01:34 +02:00
										 |  |  | from tests import SearxTestCase | 
					
						
							| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class StandaloneSearx(SearxTestCase): | 
					
						
							|  |  |  |     """Unit test for standalone_searx.""" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-17 10:39:44 +01:00
										 |  |  |     @classmethod | 
					
						
							|  |  |  |     def setUpClass(cls): | 
					
						
							| 
									
										
										
										
											2020-11-16 15:01:34 +01:00
										 |  |  |         engine_list = [{'engine': 'dummy', 'name': 'engine1', 'shortcut': 'e1'}] | 
					
						
							| 
									
										
										
										
											2020-11-17 10:39:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-16 13:41:32 +01:00
										 |  |  |         initialize(engine_list) | 
					
						
							| 
									
										
										
										
											2020-11-17 10:39:44 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  |     def test_parse_argument_no_args(self): | 
					
						
							|  |  |  |         """Test parse argument without args.""" | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |         with patch.object(sys, 'argv', ['standalone_searx']), self.assertRaises(SystemExit): | 
					
						
							| 
									
										
										
										
											2020-11-05 00:15:29 +01:00
										 |  |  |             sys.stderr = io.StringIO() | 
					
						
							| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  |             sas.parse_argument() | 
					
						
							| 
									
										
										
										
											2020-11-05 00:15:29 +01:00
										 |  |  |             sys.stdout = sys.__stderr__ | 
					
						
							| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_parse_argument_basic_args(self): | 
					
						
							|  |  |  |         """Test parse argument with basic args.""" | 
					
						
							|  |  |  |         query = 'red box' | 
					
						
							|  |  |  |         exp_dict = { | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |             'query': query, | 
					
						
							|  |  |  |             'category': 'general', | 
					
						
							|  |  |  |             'lang': 'all', | 
					
						
							|  |  |  |             'pageno': 1, | 
					
						
							|  |  |  |             'safesearch': '0', | 
					
						
							|  |  |  |             'timerange': None, | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  |         args = ['standalone_searx', query] | 
					
						
							|  |  |  |         with patch.object(sys, 'argv', args): | 
					
						
							|  |  |  |             res = sas.parse_argument() | 
					
						
							|  |  |  |             self.assertEqual(exp_dict, vars(res)) | 
					
						
							|  |  |  |         res2 = sas.parse_argument(args[1:]) | 
					
						
							|  |  |  |         self.assertEqual(exp_dict, vars(res2)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_to_dict(self): | 
					
						
							|  |  |  |         """test to_dict.""" | 
					
						
							|  |  |  |         self.assertEqual( | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |             sas.to_dict(sas.get_search_query(sas.parse_argument(['red box']))), | 
					
						
							| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  |             { | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |                 'search': {'q': 'red box', 'pageno': 1, 'lang': 'all', 'safesearch': 0, 'timerange': None}, | 
					
						
							|  |  |  |                 'results': [], | 
					
						
							|  |  |  |                 'infoboxes': [], | 
					
						
							|  |  |  |                 'suggestions': [], | 
					
						
							|  |  |  |                 'answers': [], | 
					
						
							|  |  |  |                 'paging': False, | 
					
						
							| 
									
										
										
										
											2023-06-18 16:43:48 +02:00
										 |  |  |                 'number_of_results': 0, | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |             }, | 
					
						
							| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_to_dict_with_mock(self): | 
					
						
							|  |  |  |         """test to dict.""" | 
					
						
							|  |  |  |         with patch.object(sas.searx.search, 'Search') as mock_s: | 
					
						
							|  |  |  |             m_search = mock_s().search() | 
					
						
							|  |  |  |             m_sq = Mock() | 
					
						
							|  |  |  |             self.assertEqual( | 
					
						
							|  |  |  |                 sas.to_dict(m_sq), | 
					
						
							|  |  |  |                 { | 
					
						
							|  |  |  |                     'answers': [], | 
					
						
							|  |  |  |                     'infoboxes': m_search.infoboxes, | 
					
						
							|  |  |  |                     'paging': m_search.paging, | 
					
						
							|  |  |  |                     'results': m_search.get_ordered_results(), | 
					
						
							| 
									
										
										
										
											2023-06-18 16:43:48 +02:00
										 |  |  |                     'number_of_results': m_search.number_of_results, | 
					
						
							| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  |                     'search': { | 
					
						
							|  |  |  |                         'lang': m_sq.lang, | 
					
						
							|  |  |  |                         'pageno': m_sq.pageno, | 
					
						
							|  |  |  |                         'q': m_sq.query, | 
					
						
							|  |  |  |                         'safesearch': m_sq.safesearch, | 
					
						
							|  |  |  |                         'timerange': m_sq.time_range, | 
					
						
							|  |  |  |                     }, | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |                     'suggestions': [], | 
					
						
							|  |  |  |                 }, | 
					
						
							| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  |             ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_get_search_query(self): | 
					
						
							|  |  |  |         """test get_search_query.""" | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |         args = sas.parse_argument( | 
					
						
							|  |  |  |             [ | 
					
						
							|  |  |  |                 'rain', | 
					
						
							|  |  |  |             ] | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  |         search_q = sas.get_search_query(args) | 
					
						
							|  |  |  |         self.assertTrue(search_q) | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |         self.assertEqual( | 
					
						
							|  |  |  |             search_q, SearchQuery('rain', [EngineRef('engine1', 'general')], 'all', 0, 1, None, None, None) | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_no_parsed_url(self): | 
					
						
							|  |  |  |         """test no_parsed_url func""" | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |         self.assertEqual(sas.no_parsed_url([{'parsed_url': 'http://example.com'}]), [{}]) | 
					
						
							| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |     @params((datetime.datetime(2020, 1, 1), '2020-01-01T00:00:00'), ('a'.encode('utf8'), 'a'), (set([1]), [1])) | 
					
						
							| 
									
										
										
										
											2020-11-04 13:38:54 +01:00
										 |  |  |     def test_json_serial(self, arg, exp_res): | 
					
						
							|  |  |  |         """test json_serial func""" | 
					
						
							|  |  |  |         self.assertEqual(sas.json_serial(arg), exp_res) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_json_serial_error(self): | 
					
						
							|  |  |  |         """test error on json_serial.""" | 
					
						
							|  |  |  |         with self.assertRaises(TypeError): | 
					
						
							|  |  |  |             sas.json_serial('a') |