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

1import pytest 

2 

3from django import test 

4from django.conf import global_settings 

5 

6from lazy_settings.conf import settings 

7from lazy_settings.test.utils import override_settings, modify_settings 

8 

9 

10settings.clear() 

11settings.register(global_settings) 

12mock = None 

13 

14 

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 

23 

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) 

33 

34 def test_overriden_settings(self): 

35 self.assertEqual(settings.LANGUAGE_CODE, "fa") 

36 self.assertEqual(settings.NEW_SETTING, "new") 

37 

38 @override_settings(LANGUAGE_CODE="de") 

39 def test_override_after_override(self): 

40 self.assertEqual(settings.LANGUAGE_CODE, "de") 

41 

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") 

46 

47 self.assertEqual(settings.LANGUAGE_CODE, "fa") 

48 

49 def test_django_specific_method_is_called(self): 

50 spy_decorator = mock.spy(override_settings, "django_save_options") 

51 

52 @override_settings(A_SETTING="a") 

53 class TestClass(test.SimpleTestCase): 

54 def test_something(self): 

55 self.assertEqual(2, 2) 

56 

57 spy_decorator.assert_called_once() 

58 

59 

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 

68 

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) 

78 

79 def test_overriden_settings(self): 

80 self.assertEqual(settings.ADMINS, [("john doe", "john@email.com")]) 

81 

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")) 

86 

87 def test_override_with_context_manager(self): 

88 self.assertEqual(settings.ADMINS, [("john doe", "john@email.com")]) 

89 

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")) 

93 

94 self.assertEqual(len(settings.ADMINS), 1) 

95 

96 def test_django_specific_method_is_called(self): 

97 spy_decorator = mock.spy(modify_settings, "django_save_options") 

98 

99 @modify_settings(ADMIN={"append": [("hi", "hi@email.com")]}) 

100 class TestClass(test.SimpleTestCase): 

101 def test_something(self): 

102 self.assertEqual(2, 2) 

103 

104 spy_decorator.assert_called_once()