Browse Source

[test] add additional tests for preferences

Grant Lanham 6 months ago
parent
commit
68b4961b81
1 changed files with 49 additions and 5 deletions
  1. 49 5
      tests/unit/test_preferences.py

+ 49 - 5
tests/unit/test_preferences.py

@@ -1,10 +1,13 @@
 # SPDX-License-Identifier: AGPL-3.0-or-later
 # SPDX-License-Identifier: AGPL-3.0-or-later
 # pylint: disable=missing-module-docstring, invalid-name
 # pylint: disable=missing-module-docstring, invalid-name
 
 
+import flask
+from mock import Mock
 from tests import SearxTestCase
 from tests import SearxTestCase
 from searx import favicons
 from searx import favicons
 from searx.locales import locales_initialize
 from searx.locales import locales_initialize
 from searx.preferences import (
 from searx.preferences import (
+    Setting,
     EnumStringSetting,
     EnumStringSetting,
     MapSetting,
     MapSetting,
     SearchLanguageSetting,
     SearchLanguageSetting,
@@ -13,6 +16,7 @@ from searx.preferences import (
     ValidationException,
     ValidationException,
 )
 )
 from searx.plugins import Plugin
 from searx.plugins import Plugin
+from searx.preferences import Preferences
 
 
 locales_initialize()
 locales_initialize()
 favicons.init()
 favicons.init()
@@ -125,10 +129,10 @@ class TestSettings(SearxTestCase):  # pylint: disable=missing-class-docstring
 
 
 
 
 class TestPreferences(SearxTestCase):  # pylint: disable=missing-class-docstring
 class TestPreferences(SearxTestCase):  # pylint: disable=missing-class-docstring
-    def test_encode(self):
-        from searx.preferences import Preferences  # pylint: disable=import-outside-toplevel
+    def setUp(self):
+        self.preferences = Preferences(['simple'], ['general'], {}, [])
 
 
-        pref = Preferences(['simple'], ['general'], {}, [])
+    def test_encode(self):
         url_params = (
         url_params = (
             'eJx1Vk1z4zYM_TXxRZNMd7eddg8-pe21nWnvGoiEJEQkofDDtvzrC1qSRdnbQxQTBA'
             'eJx1Vk1z4zYM_TXxRZNMd7eddg8-pe21nWnvGoiEJEQkofDDtvzrC1qSRdnbQxQTBA'
             'Hw8eGRCiJ27AnDsUOHHszBgOsSdHjU-Pr7HwfDCkweHCBFVmxHgxGPB7LiU4-eL9Px'
             'Hw8eGRCiJ27AnDsUOHHszBgOsSdHjU-Pr7HwfDCkweHCBFVmxHgxGPB7LiU4-eL9Px'
@@ -155,8 +159,48 @@ class TestPreferences(SearxTestCase):  # pylint: disable=missing-class-docstring
             'd-DZy7PtaVp2WgvPBpzCXUL_J1OGex48RVmOXzBU8_N3kqekkefRDzxNK2_Klp9mBJ'
             'd-DZy7PtaVp2WgvPBpzCXUL_J1OGex48RVmOXzBU8_N3kqekkefRDzxNK2_Klp9mBJ'
             'wsUnXyRqq1mScHuYalUY7_AZTCR4s=&q='
             'wsUnXyRqq1mScHuYalUY7_AZTCR4s=&q='
         )
         )
-        pref.parse_encoded_data(url_params)
+        self.preferences.parse_encoded_data(url_params)
         self.assertEqual(
         self.assertEqual(
-            vars(pref.key_value_settings['categories']),
+            vars(self.preferences.key_value_settings['categories']),
             {'value': ['general'], 'locked': False, 'choices': ['general', 'none']},
             {'value': ['general'], 'locked': False, 'choices': ['general', 'none']},
         )
         )
+
+    def test_save_key_value_setting(self):
+        setting_key = 'foo'
+        setting_value = 'bar'
+
+        cookie_callback = {}
+
+        def set_cookie_callback(name, value, max_age):  # pylint: disable=unused-argument
+            cookie_callback[name] = value
+
+        response_mock = Mock(flask.Response)
+        response_mock.set_cookie = set_cookie_callback
+        self.preferences.key_value_settings = {
+            setting_key: Setting(
+                setting_value,
+                locked=False,
+            ),
+        }
+        self.preferences.save(response_mock)
+        self.assertIn(setting_key, cookie_callback)
+        self.assertEqual(cookie_callback[setting_key], setting_value)
+
+    def test_false_key_value_setting(self):
+        setting_key = 'foo'
+
+        cookie_callback = {}
+
+        def set_cookie_callback(name, value, max_age):  # pylint: disable=unused-argument
+            cookie_callback[name] = value
+
+        response_mock = Mock(flask.Response)
+        response_mock.set_cookie = set_cookie_callback
+        self.preferences.key_value_settings = {
+            setting_key: Setting(
+                '',
+                locked=True,
+            ),
+        }
+        self.preferences.save(response_mock)
+        self.assertNotIn(setting_key, cookie_callback)