forked from Ponysearch/Ponysearch
44a06190bb
- for tests which perform the same arrange/act/assert pattern but with different data, the data portion has been moved to the ``paramaterized.expand`` fields - for monolithic tests which performed multiple arrange/act/asserts, they have been broken up into different unit tests. - when possible, change generic assert statements to more concise asserts (i.e. ``assertIsNone``) This work ultimately is focused on creating smaller and more concise tests. While paramaterized may make adding new configurations for existing tests easier, that is just a beneficial side effect. The main benefit is that smaller tests are easier to reason about, meaning they are easier to debug when they start failing. This improves the developer experience in debugging what went wrong when refactoring the project. Total number of tests went from 192 -> 259; or, broke apart larger tests into 69 more concise ones.
144 lines
4.9 KiB
Python
144 lines
4.9 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
# pylint: disable=missing-module-docstring, invalid-name
|
|
|
|
from copy import copy
|
|
import logging
|
|
|
|
import searx.search
|
|
from searx.search import SearchQuery, EngineRef
|
|
from searx import settings
|
|
from tests import SearxTestCase
|
|
|
|
|
|
SAFESEARCH = 0
|
|
PAGENO = 1
|
|
PUBLIC_ENGINE_NAME = 'general dummy'
|
|
TEST_ENGINES = [
|
|
{
|
|
'name': PUBLIC_ENGINE_NAME,
|
|
'engine': 'dummy',
|
|
'categories': 'general',
|
|
'shortcut': 'gd',
|
|
'timeout': 3.0,
|
|
'tokens': [],
|
|
},
|
|
]
|
|
|
|
|
|
class SearchQueryTestCase(SearxTestCase): # pylint: disable=missing-class-docstring
|
|
def test_repr(self):
|
|
s = SearchQuery('test', [EngineRef('bing', 'general')], 'all', 0, 1, '1', 5.0, 'g')
|
|
self.assertEqual(
|
|
repr(s), "SearchQuery('test', [EngineRef('bing', 'general')], 'all', 0, 1, '1', 5.0, 'g', None)"
|
|
) # noqa
|
|
|
|
def test_eq(self):
|
|
s = SearchQuery('test', [EngineRef('bing', 'general')], 'all', 0, 1, None, None, None)
|
|
t = SearchQuery('test', [EngineRef('google', 'general')], 'all', 0, 1, None, None, None)
|
|
self.assertEqual(s, s)
|
|
self.assertNotEqual(s, t)
|
|
|
|
def test_copy(self):
|
|
s = SearchQuery('test', [EngineRef('bing', 'general')], 'all', 0, 1, None, None, None)
|
|
t = copy(s)
|
|
self.assertEqual(s, t)
|
|
|
|
|
|
class SearchTestCase(SearxTestCase): # pylint: disable=missing-class-docstring
|
|
def setUp(self):
|
|
|
|
log = logging.getLogger("searx")
|
|
log_lev = log.level
|
|
log.setLevel(logging.ERROR)
|
|
from searx import webapp # pylint: disable=import-outside-toplevel
|
|
|
|
log.setLevel(log_lev)
|
|
|
|
self.app = webapp.app
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
searx.search.initialize(TEST_ENGINES)
|
|
|
|
def test_timeout_simple(self):
|
|
settings['outgoing']['max_request_timeout'] = None
|
|
search_query = SearchQuery(
|
|
'test', [EngineRef(PUBLIC_ENGINE_NAME, 'general')], 'en-US', SAFESEARCH, PAGENO, None, None
|
|
)
|
|
search = searx.search.Search(search_query)
|
|
with self.app.test_request_context('/search'):
|
|
search.search()
|
|
self.assertEqual(search.actual_timeout, 3.0)
|
|
|
|
def test_timeout_query_above_default_nomax(self):
|
|
settings['outgoing']['max_request_timeout'] = None
|
|
search_query = SearchQuery(
|
|
'test', [EngineRef(PUBLIC_ENGINE_NAME, 'general')], 'en-US', SAFESEARCH, PAGENO, None, 5.0
|
|
)
|
|
search = searx.search.Search(search_query)
|
|
with self.app.test_request_context('/search'):
|
|
search.search()
|
|
self.assertEqual(search.actual_timeout, 3.0)
|
|
|
|
def test_timeout_query_below_default_nomax(self):
|
|
settings['outgoing']['max_request_timeout'] = None
|
|
search_query = SearchQuery(
|
|
'test', [EngineRef(PUBLIC_ENGINE_NAME, 'general')], 'en-US', SAFESEARCH, PAGENO, None, 1.0
|
|
)
|
|
search = searx.search.Search(search_query)
|
|
with self.app.test_request_context('/search'):
|
|
search.search()
|
|
self.assertEqual(search.actual_timeout, 1.0)
|
|
|
|
def test_timeout_query_below_max(self):
|
|
settings['outgoing']['max_request_timeout'] = 10.0
|
|
search_query = SearchQuery(
|
|
'test', [EngineRef(PUBLIC_ENGINE_NAME, 'general')], 'en-US', SAFESEARCH, PAGENO, None, 5.0
|
|
)
|
|
search = searx.search.Search(search_query)
|
|
with self.app.test_request_context('/search'):
|
|
search.search()
|
|
self.assertEqual(search.actual_timeout, 5.0)
|
|
|
|
def test_timeout_query_above_max(self):
|
|
settings['outgoing']['max_request_timeout'] = 10.0
|
|
search_query = SearchQuery(
|
|
'test', [EngineRef(PUBLIC_ENGINE_NAME, 'general')], 'en-US', SAFESEARCH, PAGENO, None, 15.0
|
|
)
|
|
search = searx.search.Search(search_query)
|
|
with self.app.test_request_context('/search'):
|
|
search.search()
|
|
self.assertEqual(search.actual_timeout, 10.0)
|
|
|
|
def test_external_bang_valid(self):
|
|
search_query = SearchQuery(
|
|
'yes yes',
|
|
[EngineRef(PUBLIC_ENGINE_NAME, 'general')],
|
|
'en-US',
|
|
SAFESEARCH,
|
|
PAGENO,
|
|
None,
|
|
None,
|
|
external_bang="yt",
|
|
)
|
|
search = searx.search.Search(search_query)
|
|
results = search.search()
|
|
# For checking if the user redirected with the youtube external bang
|
|
self.assertIsNotNone(results.redirect_url)
|
|
|
|
def test_external_bang_none(self):
|
|
search_query = SearchQuery(
|
|
'youtube never gonna give you up',
|
|
[EngineRef(PUBLIC_ENGINE_NAME, 'general')],
|
|
'en-US',
|
|
SAFESEARCH,
|
|
PAGENO,
|
|
None,
|
|
None,
|
|
)
|
|
|
|
search = searx.search.Search(search_query)
|
|
with self.app.test_request_context('/search'):
|
|
results = search.search()
|
|
# This should not redirect
|
|
self.assertIsNone(results.redirect_url)
|