summaryrefslogtreecommitdiff
path: root/tests/unit
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/test_search.py14
-rw-r--r--tests/unit/test_standalone_searx.py119
-rw-r--r--tests/unit/test_webapp.py41
3 files changed, 173 insertions, 1 deletions
diff --git a/tests/unit/test_search.py b/tests/unit/test_search.py
index 36135913c..464a9b37d 100644
--- a/tests/unit/test_search.py
+++ b/tests/unit/test_search.py
@@ -21,6 +21,20 @@ TEST_ENGINES = [
]
+class SearchQueryTestCase(SearxTestCase):
+
+ def test_repr(self):
+ s = SearchQuery('test', [EngineRef('bing', 'general', False)], ['general'], 'all', 0, 1, '1', 5.0, 'g')
+ self.assertEqual(repr(s),
+ "SearchQuery('test', [EngineRef('bing', 'general', False)], ['general'], 'all', 0, 1, '1', 5.0, 'g')") # noqa
+
+ def test_eq(self):
+ s = SearchQuery('test', [EngineRef('bing', 'general', False)], ['general'], 'all', 0, 1, None, None, None)
+ t = SearchQuery('test', [EngineRef('google', 'general', False)], ['general'], 'all', 0, 1, None, None, None)
+ self.assertEqual(s, s)
+ self.assertNotEqual(s, t)
+
+
class SearchTestCase(SearxTestCase):
@classmethod
diff --git a/tests/unit/test_standalone_searx.py b/tests/unit/test_standalone_searx.py
new file mode 100644
index 000000000..c00f033b6
--- /dev/null
+++ b/tests/unit/test_standalone_searx.py
@@ -0,0 +1,119 @@
+# -*- coding: utf-8 -*-
+"""Test utils/standalone_searx.py"""
+import datetime
+import importlib.util
+import sys
+
+from mock import Mock, patch
+from nose2.tools import params
+
+from searx.search import SearchQuery
+from searx.testing import SearxTestCase
+
+
+def get_standalone_searx_module():
+ """Get standalone_searx module."""
+ module_name = 'utils.standalone_searx'
+ filename = 'utils/standalone_searx.py'
+ spec = importlib.util.spec_from_file_location(module_name, filename)
+ sas = importlib.util.module_from_spec(spec)
+ spec.loader.exec_module(sas)
+ return sas
+
+
+class StandaloneSearx(SearxTestCase):
+ """Unit test for standalone_searx."""
+
+ def test_parse_argument_no_args(self):
+ """Test parse argument without args."""
+ sas = get_standalone_searx_module()
+ with patch.object(sys, 'argv', ['standalone_searx']), \
+ self.assertRaises(SystemExit):
+ sas.parse_argument()
+
+ def test_parse_argument_basic_args(self):
+ """Test parse argument with basic args."""
+ sas = get_standalone_searx_module()
+ query = 'red box'
+ exp_dict = {
+ 'query': query, 'category': 'general', 'lang': 'all', 'pageno': 1,
+ 'safesearch': '0', 'timerange': None}
+ 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."""
+ sas = get_standalone_searx_module()
+ self.assertEqual(
+ sas.to_dict(
+ sas.get_search_query(sas.parse_argument(['red box']))),
+ {
+ 'search': {
+ 'q': 'red box', 'pageno': 1, 'lang': 'all',
+ 'safesearch': 0, 'timerange': None
+ },
+ 'results': [], 'infoboxes': [], 'suggestions': [],
+ 'answers': [], 'paging': False, 'results_number': 0
+ }
+ )
+
+ def test_to_dict_with_mock(self):
+ """test to dict."""
+ sas = get_standalone_searx_module()
+ 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(),
+ 'results_number': m_search.results_number(),
+ 'search': {
+ 'lang': m_sq.lang,
+ 'pageno': m_sq.pageno,
+ 'q': m_sq.query,
+ 'safesearch': m_sq.safesearch,
+ 'timerange': m_sq.time_range,
+ },
+ 'suggestions': []
+ }
+ )
+
+ def test_get_search_query(self):
+ """test get_search_query."""
+ sas = get_standalone_searx_module()
+ args = sas.parse_argument(['rain', ])
+ search_q = sas.get_search_query(args)
+ self.assertTrue(search_q)
+ self.assertEqual(search_q, SearchQuery('rain', [], ['general'], 'all', 0, 1, None, None, None))
+
+ def test_no_parsed_url(self):
+ """test no_parsed_url func"""
+ sas = get_standalone_searx_module()
+ self.assertEqual(
+ sas.no_parsed_url([{'parsed_url': 'http://example.com'}]),
+ [{}]
+ )
+
+ @params(
+ (datetime.datetime(2020, 1, 1), '2020-01-01T00:00:00'),
+ ('a'.encode('utf8'), 'a'),
+ (set([1]), [1])
+ )
+ def test_json_serial(self, arg, exp_res):
+ """test json_serial func"""
+ sas = get_standalone_searx_module()
+ self.assertEqual(sas.json_serial(arg), exp_res)
+
+ def test_json_serial_error(self):
+ """test error on json_serial."""
+ sas = get_standalone_searx_module()
+ with self.assertRaises(TypeError):
+ sas.json_serial('a')
diff --git a/tests/unit/test_webapp.py b/tests/unit/test_webapp.py
index 7dd465898..75a968ad8 100644
--- a/tests/unit/test_webapp.py
+++ b/tests/unit/test_webapp.py
@@ -75,8 +75,36 @@ class ViewsTestCase(SearxTestCase):
self.assertEqual(result.status_code, 200)
self.assertIn(b'<div class="title"><h1>searx</h1></div>', result.data)
- def test_index_html(self):
+ def test_index_html_post(self):
result = self.app.post('/', data={'q': 'test'})
+ self.assertEqual(result.status_code, 308)
+ self.assertEqual(result.location, 'http://localhost/search')
+
+ def test_index_html_get(self):
+ result = self.app.post('/?q=test')
+ self.assertEqual(result.status_code, 308)
+ self.assertEqual(result.location, 'http://localhost/search?q=test')
+
+ def test_search_empty_html(self):
+ result = self.app.post('/search', data={'q': ''})
+ self.assertEqual(result.status_code, 200)
+ self.assertIn(b'<div class="title"><h1>searx</h1></div>', result.data)
+
+ def test_search_empty_json(self):
+ result = self.app.post('/search', data={'q': '', 'format': 'json'})
+ self.assertEqual(result.status_code, 400)
+
+ def test_search_empty_csv(self):
+ result = self.app.post('/search', data={'q': '', 'format': 'csv'})
+ self.assertEqual(result.status_code, 400)
+
+ def test_search_empty_rss(self):
+ result = self.app.post('/search', data={'q': '', 'format': 'rss'})
+ self.assertEqual(result.status_code, 400)
+
+ def test_search_html(self):
+ result = self.app.post('/search', data={'q': 'test'})
+
self.assertIn(
b'<h3 class="result_title"><img width="14" height="14" class="favicon" src="/static/themes/legacy/img/icons/icon_youtube.ico" alt="youtube" /><a href="http://second.test.xyz" rel="noreferrer">Second <span class="highlight">Test</span></a></h3>', # noqa
result.data
@@ -88,7 +116,10 @@ class ViewsTestCase(SearxTestCase):
def test_index_json(self):
result = self.app.post('/', data={'q': 'test', 'format': 'json'})
+ self.assertEqual(result.status_code, 308)
+ def test_search_json(self):
+ result = self.app.post('/search', data={'q': 'test', 'format': 'json'})
result_dict = json.loads(result.data.decode())
self.assertEqual('test', result_dict['query'])
@@ -98,6 +129,10 @@ class ViewsTestCase(SearxTestCase):
def test_index_csv(self):
result = self.app.post('/', data={'q': 'test', 'format': 'csv'})
+ self.assertEqual(result.status_code, 308)
+
+ def test_search_csv(self):
+ result = self.app.post('/search', data={'q': 'test', 'format': 'csv'})
self.assertEqual(
b'title,url,content,host,engine,score,type\r\n'
@@ -108,6 +143,10 @@ class ViewsTestCase(SearxTestCase):
def test_index_rss(self):
result = self.app.post('/', data={'q': 'test', 'format': 'rss'})
+ self.assertEqual(result.status_code, 308)
+
+ def test_index_rss(self):
+ result = self.app.post('/search', data={'q': 'test', 'format': 'rss'})
self.assertIn(
b'<description>Search results for "test" - searx</description>',