diff options
Diffstat (limited to 'tests/unit')
| -rw-r--r-- | tests/unit/settings/test_github_code.yml | 13 | ||||
| -rw-r--r-- | tests/unit/test_engine_github_code.py | 170 |
2 files changed, 183 insertions, 0 deletions
diff --git a/tests/unit/settings/test_github_code.yml b/tests/unit/settings/test_github_code.yml new file mode 100644 index 000000000..2cf039138 --- /dev/null +++ b/tests/unit/settings/test_github_code.yml @@ -0,0 +1,13 @@ +# This SearXNG setup is used in unit tests + +use_default_settings: + + engines: + keep_only: [] + +engines: + + - name: github code + engine: github_code + shortcut: "ghc" + disabled: true diff --git a/tests/unit/test_engine_github_code.py b/tests/unit/test_engine_github_code.py new file mode 100644 index 000000000..d10081f28 --- /dev/null +++ b/tests/unit/test_engine_github_code.py @@ -0,0 +1,170 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# pylint: disable=missing-module-docstring,disable=missing-class-docstring + +import logging +from unittest.mock import Mock +from urllib.parse import urlparse +from parameterized import parameterized + +import searx.engines +from tests import SearxTestCase +from searx.result_types import EngineResults + + +class GithubCodeTests(SearxTestCase): + + TEST_SETTINGS = "test_github_code.yml" + + def setUp(self): + super().setUp() + self.ghc = searx.engines.engines['github code'] + self.ghc.logger.setLevel(logging.INFO) + + def tearDown(self): + searx.search.load_engines([]) + + @parameterized.expand( + [ + [ + [ + { + "fragment": " - [Tab management](#tab-management)\n - [Buffer/window management]" + "(#bufferwindow-management)\n- [🎨 Highlights](#-highlights)", + "matches": [{"indices": [47, 53], "text": "Buffer"}, {"indices": [74, 80], "text": "buffer"}], + }, + { + "fragment": "To conditionally activate plugins, the best solution is to use the\n" + "[LazyVim VSCode extra](https://www.lazyvim.org/extras/vscode). However, " + "`packer.nvim` and `lazy.nvim` have built-in\nsupport for " + "`cond = vim.g.vscode` and `vim-plug` has a", + "matches": [ + {"indices": [68, 75], "text": "LazyVim"}, + {"indices": [102, 109], "text": "lazyvim"}, + ], + }, + ], + [ + " - [Tab management](#tab-management)", + " - [Buffer/window management](#bufferwindow-management)", + "- [🎨 Highlights](#-highlights)", + "To conditionally activate plugins, the best solution is to use the", + "[LazyVim VSCode extra](https://www.lazyvim.org/extras/vscode)." + " However, `packer.nvim` and `lazy.nvim` have built-in", + "support for `cond = vim.g.vscode` and `vim-plug` has a", + ], + {2, 5}, + ], + [ + [ + { + "fragment": "\n| `<leader>uf` | Toggle format (global) |\n" + "| `<leader>uF` | Toggle format (buffer) |\n" + "| `<leader>us` | Toggle spelling |\n", + "matches": [{"indices": [74, 80], "text": "buffer"}], + }, + ], + [ + "| `<leader>uf` | Toggle format (global) |", + "| `<leader>uF` | Toggle format (buffer) |", + "| `<leader>us` | Toggle spelling |", + ], + {2}, + ], + [ + [ + { + "fragment": "\n\n\n1\n2\n3\n4", + "matches": [{"indices": [3, 4], "text": "1"}], + }, + ], + [ + "1", + "2", + "3", + "4", + ], + {1}, + ], + [ + [ + { + "fragment": "placeholder", + "matches": [], + }, + ], + [ + "placeholder", + ], + set(), + ], + ] + ) + def test_code_extraction(self, code_matches, expected_code, expected_highlighted_lines): + code, highlights = self.ghc.extract_code(code_matches=code_matches) + self.assertEqual(code, expected_code) + self.assertEqual(highlights, expected_highlighted_lines) + + def test_transforms_response(self): + response = Mock() + response.json.return_value = { + "items": [ + { + "name": "TODO.md", + "path": "TODO.md", + "html_url": "https://github.com/folke/dot/blob/3140f4f5720c3cc6b5034c624eb7706f8533a82c/TODO.md", + "repository": { + "full_name": "folke/dot", + "html_url": "https://github.com/folke/dot", + "description": "☕️ My Dot Files", + }, + "text_matches": [ + { + "object_type": "FileContent", + "property": "content", + "fragment": "- [x] windows picker\n" + "- [x] toggle cwd / root (LazyVim)\n" + "- [x] dynamic workspace symbol", + "matches": [{"indices": [46, 53], "text": "LazyVim"}], + }, + { + "object_type": "FileContent", + "property": "content", + "fragment": "- [x] smart stops working after custom\n" + "- [x] edit in empty buffer\n" + "- [x] support toggling line nr for preview", + "matches": [{"indices": [59, 65], "text": "buffer"}, {"indices": [89, 93], "text": "line"}], + }, + ], + } + ] + } + response.status_code = 200 + results = self.ghc.response(response) + expected_results = EngineResults() + expected_results.add( + expected_results.types.LegacyResult( + **{ + 'url': "https://github.com/folke/dot/blob/3140f4f5720c3cc6b5034c624eb7706f8533a82c/TODO.md", + 'title': "folke/dot · TODO.md", + 'content': "☕️ My Dot Files", + 'repository': "https://github.com/folke/dot", + 'codelines': [ + (1, "- [x] windows picker"), + (2, "- [x] toggle cwd / root (LazyVim)"), + (3, "- [x] dynamic workspace symbol"), + (4, "- [x] smart stops working after custom"), + (5, "- [x] edit in empty buffer"), + (6, "- [x] support toggling line nr for preview"), + ], + 'hl_lines': {2, 5, 6}, + 'code_language': "markdown", + 'template': 'code.html', + 'strip_whitespace': False, + 'strip_new_lines': True, + 'parsed_url': urlparse( + "https://github.com/folke/dot/blob/3140f4f5720c3cc6b5034c624eb7706f8533a82c/TODO.md" + ), + } + ) + ) + self.assertEqual(results, expected_results) |