diff options
author | rachmadani haryono <rachmadaniHaryono@users.noreply.github.com> | 2020-11-04 20:38:54 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-04 12:38:54 +0000 |
commit | c03e4c86bc49d6ef4664c038066d9f1c16e7dafc (patch) | |
tree | 48853358314a01448dd651f6f94620cad7dfc88f /tests | |
parent | 1b42d42695070f4a93f4df1605dcdff70f4d4d10 (diff) | |
download | searxng-c03e4c86bc49d6ef4664c038066d9f1c16e7dafc.tar.gz searxng-c03e4c86bc49d6ef4664c038066d9f1c16e7dafc.zip |
Feature/standalone searx update (#1591)
* chg: dev: update standalone_searx
parent d8a5df721b33dd8a7cc9e21dba4060f21d629f69
author rachmadaniHaryono <foreturiga@gmail.com> 1603896594 +0800
committer rachmadaniHaryono <foreturiga@gmail.com> 1603896619 +0800
chg: dev: debug engine_shortcuts
chg: dev: only initilize if engine is given
chg: dev: split main
chg: dev: standalone_searx
chg: dev: update standalone_searx
chg: doc: remove unnecessary log
chg: test: differentiate travis
chg: test: disable shortcut
chg: test: use default engine settings
fix: dev: category choices
fix: dev: duplicate engine shortcut
fix: dev: travis python3
fix: test: use empty string as shortcut
fix: test: apkm
fix: test: engine shortcut
fix: test: mypy
fix: test: parameter
fix: test: pep8
fix: test: py2 compatibilities
fix: test: searx settings
fix: test: travis engines
new: dev: deduplicate engine
new: dev: main receive engines parameter
new: dev: parse_argument accept engines parameter
new: dev: split search query from get_result func
new: test: basic result case
Suggestions: use RawTextQuery to make the suggestions URLs. Update all themes accordingly.
* new: doc: searx import and init
* chg: dev: parse_argument
- doc
- run on __main__
- simple parse_args
* chg: doc: module
* chg: dev: import section
- remove unused python path modification
- new required package
* chg: dev: script run
- parse_argument func return directly parsed results
- main func return dict instead json text
- dump directly on sys.stdout.write
* chg: dev: get_search_query and get_search_query func
* chg: dev: main func
- move inner function outside
- return dict instead of json text
* new: dev: add utils to doc sys path
* new: doc: standalone_searx
* fix: doc: run script
* chg: dev: mypy type hint
* chg: dev: SearchQuery don't have attr engines
* chg: dev: reset engines __init__
* chg: test: unit test update
* chg: dev: pylint and flake8
* new: test: standalone_searx
* chg: dev: main func and doc
* chg: dev: import and type hint
* new: dev: main func
- remove get_result func
- single func which just translate dict
* chg: test: put mypy on dev requirement
* chg: doc: update
* new: doc: add standalone_searx module member
* chg: doc: shell command line
* chg: dev: remove mypy
* chg: doc: module docstring
Diffstat (limited to 'tests')
-rw-r--r-- | tests/unit/test_standalone_searx.py | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/tests/unit/test_standalone_searx.py b/tests/unit/test_standalone_searx.py new file mode 100644 index 000000000..cd1a14f46 --- /dev/null +++ b/tests/unit/test_standalone_searx.py @@ -0,0 +1,118 @@ +# -*- 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.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(str(search_q), 'rain;[]') + + 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') |