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.
111 lines
4.1 KiB
Python
111 lines
4.1 KiB
Python
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
# pylint: disable=missing-module-docstring
|
|
|
|
import mock
|
|
from parameterized.parameterized import parameterized
|
|
from searx import webutils
|
|
from tests import SearxTestCase
|
|
|
|
|
|
class TestWebUtils(SearxTestCase): # pylint: disable=missing-class-docstring
|
|
|
|
@parameterized.expand(
|
|
[
|
|
('https://searx.me/', 'https://searx.me/'),
|
|
('https://searx.me/ű', 'https://searx.me/ű'),
|
|
('https://searx.me/' + (100 * 'a'), 'https://searx.me/[...]aaaaaaaaaaaaaaaaa'),
|
|
('https://searx.me/' + (100 * 'ű'), 'https://searx.me/[...]űűűűűűűűűűűűűűűűű'),
|
|
]
|
|
)
|
|
def test_prettify_url(self, test_url: str, expected: str):
|
|
self.assertEqual(webutils.prettify_url(test_url, max_length=32), expected)
|
|
|
|
@parameterized.expand(
|
|
[
|
|
(0, None, None),
|
|
(None, None, None),
|
|
('', None, None),
|
|
(False, None, None),
|
|
]
|
|
)
|
|
def test_highlight_content_none(self, content, query, expected):
|
|
self.assertEqual(webutils.highlight_content(content, query), expected)
|
|
|
|
def test_highlight_content_same(self):
|
|
content = '<html></html>not<'
|
|
self.assertEqual(webutils.highlight_content(content, None), content)
|
|
|
|
@parameterized.expand(
|
|
[
|
|
('test', 'a', 'a'),
|
|
('a test', 'a', '<span class="highlight">a</span>'),
|
|
('" test "', 'a test string', 'a <span class="highlight">test</span> string'),
|
|
('"a"', 'this is a test string', 'this is <span class="highlight">a</span> test string'),
|
|
(
|
|
'a test',
|
|
'this is a test string that matches entire query',
|
|
'this is <span class="highlight">a</span>'
|
|
' <span class="highlight">test</span>'
|
|
' string that matches entire query',
|
|
),
|
|
(
|
|
'this a test',
|
|
'this is a string to test.',
|
|
(
|
|
'<span class="highlight">this</span>'
|
|
' is <span class="highlight">a</span>'
|
|
' string to <span class="highlight">test</span>.'
|
|
),
|
|
),
|
|
(
|
|
'match this "exact phrase"',
|
|
'this string contains the exact phrase we want to match',
|
|
''.join(
|
|
[
|
|
'<span class="highlight">this</span> string contains the <span class="highlight">exact</span> ',
|
|
'<span class="highlight">phrase</span> we want to <span class="highlight">match</span>',
|
|
]
|
|
),
|
|
),
|
|
(
|
|
'a class',
|
|
'a string with class.',
|
|
'<span class="highlight">a</span> string with <span class="highlight">class</span>.',
|
|
),
|
|
]
|
|
)
|
|
def test_highlight_content_equal(self, query: str, content: str, expected: str):
|
|
self.assertEqual(webutils.highlight_content(content, query), expected)
|
|
|
|
|
|
class TestUnicodeWriter(SearxTestCase): # pylint: disable=missing-class-docstring
|
|
def setUp(self):
|
|
self.unicode_writer = webutils.CSVWriter(mock.MagicMock())
|
|
|
|
def test_write_row(self):
|
|
row = [1, 2, 3]
|
|
self.assertIsNone(self.unicode_writer.writerow(row))
|
|
|
|
def test_write_rows(self):
|
|
self.unicode_writer.writerow = mock.MagicMock()
|
|
rows = [1, 2, 3]
|
|
self.unicode_writer.writerows(rows)
|
|
self.assertEqual(self.unicode_writer.writerow.call_count, len(rows))
|
|
|
|
|
|
class TestNewHmac(SearxTestCase): # pylint: disable=missing-class-docstring
|
|
@parameterized.expand(
|
|
[
|
|
b'secret',
|
|
1,
|
|
]
|
|
)
|
|
def test_attribute_error(self, secret_key):
|
|
data = b'http://example.com'
|
|
with self.assertRaises(AttributeError):
|
|
webutils.new_hmac(secret_key, data)
|
|
|
|
def test_bytes(self):
|
|
data = b'http://example.com'
|
|
res = webutils.new_hmac('secret', data)
|
|
self.assertEqual(res, '23e2baa2404012a5cc8e4a18b4aabf0dde4cb9b56f679ddc0fd6d7c24339d819')
|