summaryrefslogtreecommitdiff
path: root/tests/unit/test_plugins.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit/test_plugins.py')
-rw-r--r--tests/unit/test_plugins.py122
1 files changed, 89 insertions, 33 deletions
diff --git a/tests/unit/test_plugins.py b/tests/unit/test_plugins.py
index 86b5ce930..1096894b4 100644
--- a/tests/unit/test_plugins.py
+++ b/tests/unit/test_plugins.py
@@ -1,50 +1,106 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
-# pylint: disable=missing-module-docstring
+# pylint: disable=missing-module-docstring,disable=missing-class-docstring,invalid-name
import babel
from mock import Mock
-from searx import plugins
+
+import searx.plugins
+import searx.preferences
+import searx.results
+
+from searx.result_types import Result
+from searx.extended_types import sxng_request
+
from tests import SearxTestCase
+plg_store = searx.plugins.PluginStorage()
+plg_store.load_builtins()
+
def get_search_mock(query, **kwargs):
+
lang = kwargs.get("lang", "en-US")
+ kwargs["pageno"] = kwargs.get("pageno", 1)
kwargs["locale"] = babel.Locale.parse(lang, sep="-")
- return Mock(search_query=Mock(query=query, **kwargs), result_container=Mock(answers={}))
+ user_plugins = kwargs.pop("user_plugins", [x.id for x in plg_store])
+
+ return Mock(
+ search_query=Mock(query=query, **kwargs),
+ user_plugins=user_plugins,
+ result_container=searx.results.ResultContainer(),
+ )
+
+
+def do_pre_search(query, storage, **kwargs) -> bool:
+
+ search = get_search_mock(query, **kwargs)
+ ret = storage.pre_search(sxng_request, search)
+ return ret
+
+
+def do_post_search(query, storage, **kwargs) -> Mock:
+
+ search = get_search_mock(query, **kwargs)
+ storage.post_search(sxng_request, search)
+ return search
-class PluginMock: # pylint: disable=missing-class-docstring, too-few-public-methods
- default_on = False
- name = 'Default plugin'
- description = 'Default plugin description'
+class PluginMock(searx.plugins.Plugin):
+ def __init__(self, _id: str, name: str, default_on: bool):
+ self.id = _id
+ self.default_on = default_on
+ self._name = name
+ super().__init__()
+
+ # pylint: disable= unused-argument
+ def pre_search(self, request, search) -> bool:
+ return True
+
+ def post_search(self, request, search) -> None:
+ return None
+
+ def on_result(self, request, search, result) -> bool:
+ return False
+
+ def info(self):
+ return searx.plugins.PluginInfo(
+ id=self.id,
+ name=self._name,
+ description=f"Dummy plugin: {self.id}",
+ preference_section="general",
+ )
+
+
+class PluginStorage(SearxTestCase):
-class PluginStoreTest(SearxTestCase): # pylint: disable=missing-class-docstring
def setUp(self):
- self.store = plugins.PluginStore()
+ super().setUp()
+ engines = {}
+
+ self.storage = searx.plugins.PluginStorage()
+ self.storage.register(PluginMock("plg001", "first plugin", True))
+ self.storage.register(PluginMock("plg002", "second plugin", True))
+ self.storage.init(self.app)
+ self.pref = searx.preferences.Preferences(["simple"], ["general"], engines, self.storage)
+ self.pref.parse_dict({"locale": "en"})
def test_init(self):
- self.assertEqual(0, len(self.store.plugins))
- self.assertIsInstance(self.store.plugins, list)
-
- def test_register(self):
- testplugin = PluginMock()
- self.store.register(testplugin)
- self.assertEqual(1, len(self.store.plugins))
-
- def test_call_empty(self):
- testplugin = PluginMock()
- self.store.register(testplugin)
- setattr(testplugin, 'asdf', Mock())
- request = Mock()
- self.store.call([], 'asdf', request, Mock())
- self.assertFalse(getattr(testplugin, 'asdf').called) # pylint: disable=E1101
-
- def test_call_with_plugin(self):
- store = plugins.PluginStore()
- testplugin = PluginMock()
- store.register(testplugin)
- setattr(testplugin, 'asdf', Mock())
- request = Mock()
- store.call([testplugin], 'asdf', request, Mock())
- self.assertTrue(getattr(testplugin, 'asdf').called) # pylint: disable=E1101
+
+ self.assertEqual(2, len(self.storage))
+
+ def test_hooks(self):
+
+ with self.app.test_request_context():
+ sxng_request.preferences = self.pref
+ query = ""
+
+ ret = do_pre_search(query, self.storage, pageno=1)
+ self.assertTrue(ret is True)
+
+ ret = self.storage.on_result(
+ sxng_request,
+ get_search_mock("lorem ipsum", user_plugins=["plg001", "plg002"]),
+ Result(results=[]),
+ )
+ self.assertFalse(ret)