diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/test_plugins.py | 18 | ||||
-rw-r--r-- | tests/unit/test_search.py | 111 | ||||
-rw-r--r-- | tests/unit/test_webapp.py | 11 |
3 files changed, 107 insertions, 33 deletions
diff --git a/tests/unit/test_plugins.py b/tests/unit/test_plugins.py index e497371..10de847 100644 --- a/tests/unit/test_plugins.py +++ b/tests/unit/test_plugins.py @@ -7,7 +7,7 @@ from mock import Mock def get_search_mock(query, **kwargs): return Mock(search_query=Mock(query=query, **kwargs), - result_container=Mock(answers=set())) + result_container=Mock(answers=dict())) class PluginStoreTest(SearxTestCase): @@ -50,11 +50,11 @@ class SelfIPTest(SearxTestCase): request.headers.getlist.return_value = [] search = get_search_mock(query=b'ip', pageno=1) store.call(store.plugins, 'post_search', request, search) - self.assertTrue('127.0.0.1' in search.result_container.answers) + self.assertTrue('127.0.0.1' in search.result_container.answers["ip"]["answer"]) search = get_search_mock(query=b'ip', pageno=2) store.call(store.plugins, 'post_search', request, search) - self.assertFalse('127.0.0.1' in search.result_container.answers) + self.assertFalse('ip' in search.result_container.answers) # User agent test request = Mock(user_agent='Mock') @@ -62,24 +62,24 @@ class SelfIPTest(SearxTestCase): search = get_search_mock(query=b'user-agent', pageno=1) store.call(store.plugins, 'post_search', request, search) - self.assertTrue('Mock' in search.result_container.answers) + self.assertTrue('Mock' in search.result_container.answers["user-agent"]["answer"]) search = get_search_mock(query=b'user-agent', pageno=2) store.call(store.plugins, 'post_search', request, search) - self.assertFalse('Mock' in search.result_container.answers) + self.assertFalse('user-agent' in search.result_container.answers) search = get_search_mock(query=b'user-agent', pageno=1) store.call(store.plugins, 'post_search', request, search) - self.assertTrue('Mock' in search.result_container.answers) + self.assertTrue('Mock' in search.result_container.answers["user-agent"]["answer"]) search = get_search_mock(query=b'user-agent', pageno=2) store.call(store.plugins, 'post_search', request, search) - self.assertFalse('Mock' in search.result_container.answers) + self.assertFalse('user-agent' in search.result_container.answers) search = get_search_mock(query=b'What is my User-Agent?', pageno=1) store.call(store.plugins, 'post_search', request, search) - self.assertTrue('Mock' in search.result_container.answers) + self.assertTrue('Mock' in search.result_container.answers["user-agent"]["answer"]) search = get_search_mock(query=b'What is my User-Agent?', pageno=2) store.call(store.plugins, 'post_search', request, search) - self.assertFalse('Mock' in search.result_container.answers) + self.assertFalse('user-agent' in search.result_container.answers) diff --git a/tests/unit/test_search.py b/tests/unit/test_search.py index a39786d..ca9fe86 100644 --- a/tests/unit/test_search.py +++ b/tests/unit/test_search.py @@ -1,60 +1,133 @@ # -*- coding: utf-8 -*- from searx.testing import SearxTestCase +from searx.preferences import Preferences +from searx.engines import engines -import searx.preferences import searx.search -import searx.engines + + +SAFESEARCH = 0 +PAGENO = 1 +PUBLIC_ENGINE_NAME = 'general dummy' +PRIVATE_ENGINE_NAME = 'general private offline' +TEST_ENGINES = [ + { + 'name': PUBLIC_ENGINE_NAME, + 'engine': 'dummy', + 'categories': 'general', + 'shortcut': 'gd', + 'timeout': 3.0, + 'tokens': [], + }, + { + 'name': PRIVATE_ENGINE_NAME, + 'engine': 'dummy-offline', + 'categories': 'general', + 'shortcut': 'do', + 'timeout': 3.0, + 'offline': True, + 'tokens': ['my-token'], + }, +] class SearchTestCase(SearxTestCase): @classmethod def setUpClass(cls): - searx.engines.initialize_engines([{ - 'name': 'general dummy', - 'engine': 'dummy', - 'categories': 'general', - 'shortcut': 'gd', - 'timeout': 3.0 - }]) + searx.engines.initialize_engines(TEST_ENGINES) def test_timeout_simple(self): searx.search.max_request_timeout = None - search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': 'general dummy'}], - ['general'], 'en-US', 0, 1, None, None) + search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PUBLIC_ENGINE_NAME}], + ['general'], 'en-US', SAFESEARCH, PAGENO, None, None, + preferences=Preferences(['oscar'], ['general'], engines, [])) search = searx.search.Search(search_query) search.search() self.assertEquals(search.actual_timeout, 3.0) def test_timeout_query_above_default_nomax(self): searx.search.max_request_timeout = None - search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': 'general dummy'}], - ['general'], 'en-US', 0, 1, None, 5.0) + search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PUBLIC_ENGINE_NAME}], + ['general'], 'en-US', SAFESEARCH, PAGENO, None, 5.0, + preferences=Preferences(['oscar'], ['general'], engines, [])) search = searx.search.Search(search_query) search.search() self.assertEquals(search.actual_timeout, 3.0) def test_timeout_query_below_default_nomax(self): searx.search.max_request_timeout = None - search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': 'general dummy'}], - ['general'], 'en-US', 0, 1, None, 1.0) + search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PUBLIC_ENGINE_NAME}], + ['general'], 'en-US', SAFESEARCH, PAGENO, None, 1.0, + preferences=Preferences(['oscar'], ['general'], engines, [])) search = searx.search.Search(search_query) search.search() self.assertEquals(search.actual_timeout, 1.0) def test_timeout_query_below_max(self): searx.search.max_request_timeout = 10.0 - search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': 'general dummy'}], - ['general'], 'en-US', 0, 1, None, 5.0) + search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PUBLIC_ENGINE_NAME}], + ['general'], 'en-US', SAFESEARCH, PAGENO, None, 5.0, + preferences=Preferences(['oscar'], ['general'], engines, [])) search = searx.search.Search(search_query) search.search() self.assertEquals(search.actual_timeout, 5.0) def test_timeout_query_above_max(self): searx.search.max_request_timeout = 10.0 - search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': 'general dummy'}], - ['general'], 'en-US', 0, 1, None, 15.0) + search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PUBLIC_ENGINE_NAME}], + ['general'], 'en-US', SAFESEARCH, PAGENO, None, 15.0, + preferences=Preferences(['oscar'], ['general'], engines, [])) search = searx.search.Search(search_query) search.search() self.assertEquals(search.actual_timeout, 10.0) + + def test_query_private_engine_without_token(self): + search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PRIVATE_ENGINE_NAME}], + ['general'], 'en-US', SAFESEARCH, PAGENO, None, 2.0, + preferences=Preferences(['oscar'], ['general'], engines, [])) + search = searx.search.Search(search_query) + results = search.search() + self.assertEquals(results.results_length(), 0) + + def test_query_private_engine_with_incorrect_token(self): + preferences_with_tokens = Preferences(['oscar'], ['general'], engines, []) + preferences_with_tokens.parse_dict({'tokens': 'bad-token'}) + search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PRIVATE_ENGINE_NAME}], + ['general'], 'en-US', SAFESEARCH, PAGENO, None, 2.0, + preferences=preferences_with_tokens) + search = searx.search.Search(search_query) + results = search.search() + self.assertEquals(results.results_length(), 0) + + def test_query_private_engine_with_correct_token(self): + preferences_with_tokens = Preferences(['oscar'], ['general'], engines, []) + preferences_with_tokens.parse_dict({'tokens': 'my-token'}) + search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PRIVATE_ENGINE_NAME}], + ['general'], 'en-US', SAFESEARCH, PAGENO, None, 2.0, + preferences=preferences_with_tokens) + search = searx.search.Search(search_query) + results = search.search() + self.assertEquals(results.results_length(), 1) + + def test_external_bang(self): + search_query = searx.query.SearchQuery('yes yes', + [{'category': 'general', 'name': PUBLIC_ENGINE_NAME}], + ['general'], 'en-US', SAFESEARCH, PAGENO, None, None, + preferences=Preferences(['oscar'], ['general'], engines, [],), + external_bang="yt") + search = searx.search.Search(search_query) + results = search.search() + # For checking if the user redirected with the youtube external bang + self.assertTrue(results.redirect_url is not None) + + search_query = searx.query.SearchQuery('youtube never gonna give you up', + [{'category': 'general', 'name': PUBLIC_ENGINE_NAME}], + ['general'], 'en-US', SAFESEARCH, PAGENO, None, None, + preferences=Preferences(['oscar'], ['general'], engines, []),) + + search = searx.search.Search(search_query) + results = search.search() + # This should not redirect + self.assertTrue(results.redirect_url is None) diff --git a/tests/unit/test_webapp.py b/tests/unit/test_webapp.py index 72ace48..8eed607 100644 --- a/tests/unit/test_webapp.py +++ b/tests/unit/test_webapp.py @@ -48,7 +48,7 @@ class ViewsTestCase(SearxTestCase): def search_mock(search_self, *args): search_self.result_container = Mock(get_ordered_results=lambda: test_results, - answers=set(), + answers=dict(), corrections=set(), suggestions=set(), infoboxes=[], @@ -56,7 +56,8 @@ class ViewsTestCase(SearxTestCase): results=test_results, results_number=lambda: 3, results_length=lambda: len(test_results), - get_timings=lambda: timings) + get_timings=lambda: timings, + redirect_url=None) self.setattr4test(Search, 'search', search_mock) @@ -99,9 +100,9 @@ class ViewsTestCase(SearxTestCase): result = self.app.post('/', data={'q': 'test', 'format': 'csv'}) self.assertEqual( - b'title,url,content,host,engine,score\r\n' - b'First Test,http://first.test.xyz,first test content,first.test.xyz,startpage,\r\n' # noqa - b'Second Test,http://second.test.xyz,second test content,second.test.xyz,youtube,\r\n', # noqa + b'title,url,content,host,engine,score,type\r\n' + b'First Test,http://first.test.xyz,first test content,first.test.xyz,startpage,,result\r\n' # noqa + b'Second Test,http://second.test.xyz,second test content,second.test.xyz,youtube,,result\r\n', # noqa result.data ) |