Coverage for tests/test_utils/test_django.py: 94%
71 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-11 03:57 +0330
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-11 03:57 +0330
1import pytest
3from django import test
4from django.conf import global_settings
6from lazy_settings.conf import settings
7from lazy_settings.test.utils import override_settings, modify_settings
10settings.clear()
11settings.register(global_settings)
12mock = None
15@override_settings(LANGUAGE_CODE="fa", NEW_SETTING="new")
16class OverrideSettingsDjangoTests(test.SimpleTestCase):
17 @pytest.fixture(autouse=True)
18 def make_mocker_available(self, mocker):
19 global mock
20 mock = mocker
21 yield mock
22 mock = None
24 @classmethod
25 def setUpClass(cls):
26 if cls._overridden_settings:
27 cls.enterClassContext(override_settings(**cls._overridden_settings))
28 if cls._modified_settings:
29 cls.enterClassContext(modify_settings(cls._modified_settings))
30 # the below lines needs django settings to be configured, but we don't want that
31 # cls._add_databases_failures()
32 # cls.addClassCleanup(cls._remove_databases_failures)
34 def test_overriden_settings(self):
35 self.assertEqual(settings.LANGUAGE_CODE, "fa")
36 self.assertEqual(settings.NEW_SETTING, "new")
38 @override_settings(LANGUAGE_CODE="de")
39 def test_override_after_override(self):
40 self.assertEqual(settings.LANGUAGE_CODE, "de")
42 def test_override_with_context_manager(self):
43 self.assertEqual(settings.LANGUAGE_CODE, "fa")
44 with override_settings(LANGUAGE_CODE="en"):
45 self.assertEqual(settings.LANGUAGE_CODE, "en")
47 self.assertEqual(settings.LANGUAGE_CODE, "fa")
49 def test_django_specific_method_is_called(self):
50 spy_decorator = mock.spy(override_settings, "django_save_options")
52 @override_settings(A_SETTING="a")
53 class TestClass(test.SimpleTestCase):
54 def test_something(self):
55 self.assertEqual(2, 2)
57 spy_decorator.assert_called_once()
60@modify_settings(ADMINS={"append": [("john doe", "john@email.com")]})
61class ModifySettingsDjangoTests(test.SimpleTestCase):
62 @pytest.fixture(autouse=True)
63 def make_mocker_available(self, mocker):
64 global mock
65 mock = mocker
66 yield mock
67 mock = None
69 @classmethod
70 def setUpClass(cls):
71 if cls._overridden_settings:
72 cls.enterClassContext(override_settings(**cls._overridden_settings))
73 if cls._modified_settings:
74 cls.enterClassContext(modify_settings(cls._modified_settings))
75 # the below lines needs django settings to be configured, but we don't want that
76 # cls._add_databases_failures()
77 # cls.addClassCleanup(cls._remove_databases_failures)
79 def test_overriden_settings(self):
80 self.assertEqual(settings.ADMINS, [("john doe", "john@email.com")])
82 @modify_settings(ADMINS={"append": [("jane doe", "jane@email.com")]})
83 def test_override_after_override(self):
84 self.assertEqual(len(settings.ADMINS), 2)
85 self.assertEqual(settings.ADMINS[1], ("jane doe", "jane@email.com"))
87 def test_override_with_context_manager(self):
88 self.assertEqual(settings.ADMINS, [("john doe", "john@email.com")])
90 with modify_settings(ADMINS={"prepend": [("me", "me@email.com")]}):
91 self.assertEqual(len(settings.ADMINS), 2)
92 self.assertEqual(settings.ADMINS[0], ("me", "me@email.com"))
94 self.assertEqual(len(settings.ADMINS), 1)
96 def test_django_specific_method_is_called(self):
97 spy_decorator = mock.spy(modify_settings, "django_save_options")
99 @modify_settings(ADMIN={"append": [("hi", "hi@email.com")]})
100 class TestClass(test.SimpleTestCase):
101 def test_something(self):
102 self.assertEqual(2, 2)
104 spy_decorator.assert_called_once()