| 
									
										
										
										
											2024-03-11 14:06:26 +01:00
										 |  |  | # SPDX-License-Identifier: AGPL-3.0-or-later | 
					
						
							|  |  |  | # pylint: disable=missing-module-docstring | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-19 18:25:24 +02:00
										 |  |  | import mock | 
					
						
							|  |  |  | from searx import webutils | 
					
						
							| 
									
										
										
										
											2021-09-02 16:01:34 +02:00
										 |  |  | from tests import SearxTestCase | 
					
						
							| 
									
										
										
										
											2020-09-19 18:25:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-11 14:06:26 +01:00
										 |  |  | class TestWebUtils(SearxTestCase):  # pylint: disable=missing-class-docstring | 
					
						
							| 
									
										
										
										
											2020-09-19 18:25:24 +02:00
										 |  |  |     def test_prettify_url(self): | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |         data = ( | 
					
						
							|  |  |  |             ('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/[...]űűűűűűűűűűűűűűűűű'), | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2020-09-19 18:25:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         for test_url, expected in data: | 
					
						
							|  |  |  |             self.assertEqual(webutils.prettify_url(test_url, max_length=32), expected) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_highlight_content(self): | 
					
						
							|  |  |  |         self.assertEqual(webutils.highlight_content(0, None), None) | 
					
						
							|  |  |  |         self.assertEqual(webutils.highlight_content(None, None), None) | 
					
						
							|  |  |  |         self.assertEqual(webutils.highlight_content('', None), None) | 
					
						
							|  |  |  |         self.assertEqual(webutils.highlight_content(False, None), None) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-27 10:16:20 +01:00
										 |  |  |         contents = ['<html></html>not<'] | 
					
						
							| 
									
										
										
										
											2020-09-19 18:25:24 +02:00
										 |  |  |         for content in contents: | 
					
						
							|  |  |  |             self.assertEqual(webutils.highlight_content(content, None), content) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         content = 'a' | 
					
						
							|  |  |  |         query = 'test' | 
					
						
							| 
									
										
										
										
											2023-01-15 16:08:11 +01:00
										 |  |  |         self.assertEqual(webutils.highlight_content(content, query), 'a') | 
					
						
							| 
									
										
										
										
											2020-09-19 18:25:24 +02:00
										 |  |  |         query = 'a test' | 
					
						
							| 
									
										
										
										
											2023-01-15 16:08:11 +01:00
										 |  |  |         self.assertEqual(webutils.highlight_content(content, query), '<span class="highlight">a</span>') | 
					
						
							| 
									
										
										
										
											2020-09-19 18:25:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-11 14:06:26 +01:00
										 |  |  |         # pylint: disable=line-too-long | 
					
						
							| 
									
										
										
										
											2021-02-09 05:58:54 +01:00
										 |  |  |         data = ( | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |             ('" test "', 'a test string', 'a <span class="highlight">test</span> string'), | 
					
						
							| 
									
										
										
										
											2023-01-15 16:08:11 +01:00
										 |  |  |             ('"a"', 'this is a test string', 'this is <span class="highlight">a</span> test string'), | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |             ( | 
					
						
							|  |  |  |                 'a test', | 
					
						
							|  |  |  |                 'this is a test string that matches entire query', | 
					
						
							| 
									
										
										
										
											2023-01-15 16:08:11 +01:00
										 |  |  |                 'this is <span class="highlight">a</span> <span class="highlight">test</span> string that matches entire query', | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |             ), | 
					
						
							|  |  |  |             ( | 
					
						
							|  |  |  |                 'this a test', | 
					
						
							|  |  |  |                 'this is a string to test.', | 
					
						
							|  |  |  |                 ( | 
					
						
							| 
									
										
										
										
											2023-01-15 16:08:11 +01:00
										 |  |  |                     '<span class="highlight">this</span> is <span class="highlight">a</span> string to <span class="highlight">test</span>.' | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |                 ), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |             ( | 
					
						
							|  |  |  |                 'match this "exact phrase"', | 
					
						
							|  |  |  |                 'this string contains the exact phrase we want to match', | 
					
						
							| 
									
										
										
										
											2023-01-15 16:08:11 +01:00
										 |  |  |                 ''.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>', | 
					
						
							|  |  |  |                     ] | 
					
						
							| 
									
										
										
										
											2021-12-27 09:26:22 +01:00
										 |  |  |                 ), | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2023-12-19 09:21:54 +01:00
										 |  |  |             ( | 
					
						
							|  |  |  |                 'a class', | 
					
						
							|  |  |  |                 'a string with class.', | 
					
						
							|  |  |  |                 '<span class="highlight">a</span> string with <span class="highlight">class</span>.', | 
					
						
							|  |  |  |             ), | 
					
						
							| 
									
										
										
										
											2021-02-09 05:58:54 +01:00
										 |  |  |         ) | 
					
						
							|  |  |  |         for query, content, expected in data: | 
					
						
							|  |  |  |             self.assertEqual(webutils.highlight_content(content, query), expected) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-19 18:25:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-11 14:06:26 +01:00
										 |  |  | class TestUnicodeWriter(SearxTestCase):  # pylint: disable=missing-class-docstring | 
					
						
							| 
									
										
										
										
											2020-09-19 18:25:24 +02:00
										 |  |  |     def setUp(self): | 
					
						
							| 
									
										
										
										
											2023-06-18 16:43:48 +02:00
										 |  |  |         self.unicode_writer = webutils.CSVWriter(mock.MagicMock()) | 
					
						
							| 
									
										
										
										
											2020-09-19 18:25:24 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_write_row(self): | 
					
						
							|  |  |  |         row = [1, 2, 3] | 
					
						
							|  |  |  |         self.assertEqual(self.unicode_writer.writerow(row), None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-03-11 14:06:26 +01:00
										 |  |  | class TestNewHmac(SearxTestCase):  # pylint: disable=missing-class-docstring | 
					
						
							| 
									
										
										
										
											2020-09-19 18:25:24 +02:00
										 |  |  |     def test_bytes(self): | 
					
						
							| 
									
										
										
										
											2021-12-28 10:14:38 +01:00
										 |  |  |         data = b'http://example.com' | 
					
						
							|  |  |  |         with self.assertRaises(AttributeError): | 
					
						
							|  |  |  |             webutils.new_hmac(b'secret', data) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         with self.assertRaises(AttributeError): | 
					
						
							|  |  |  |             webutils.new_hmac(1, data) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         res = webutils.new_hmac('secret', data) | 
					
						
							|  |  |  |         self.assertEqual(res, '23e2baa2404012a5cc8e4a18b4aabf0dde4cb9b56f679ddc0fd6d7c24339d819') |