def test_setting_raw_value(self): setting = appsettings.Setting(name="setting") setting.check() with pytest.raises(AttributeError): setting.raw_value with override_settings(SETTING="value"): setting.check() assert setting.raw_value == "value" setting.parent_setting = appsettings.NestedDictSetting( settings={}, name="parent_setting") with override_settings(PARENT_SETTING={}): with pytest.raises(KeyError): setting.raw_value with override_settings(PARENT_SETTING={"SETTING": "value"}): setting.check() assert setting.raw_value == "value" setting.parent_setting = appsettings.NestedListSetting( inner_setting=setting, name="parent_setting") setting.nested_list_index = 0 with override_settings(PARENT_SETTING=[]): with pytest.raises(IndexError): setting.raw_value with override_settings(PARENT_SETTING=["value"]): setting.check() assert setting.raw_value == "value"
def test_setting_required(self): setting = appsettings.Setting(name="setting", prefix="custom_", required=True, default=True) with pytest.raises(AttributeError, match=self.message_required % setting.full_name): assert setting.value assert setting.default_value setting.parent_setting = appsettings.Setting(name="parent_setting") with override_settings(PARENT_SETTING={}): with pytest.raises(KeyError, match=self.message_missing_item % setting.parent_setting.full_name): assert setting.value
def test_setting_raw_value(self): setting = appsettings.Setting(name="setting") setting.check() with pytest.raises(AttributeError): setting.raw_value with override_settings(SETTING="value"): setting.check() assert setting.raw_value == "value" setting.parent_setting = appsettings.Setting(name="parent_setting") with override_settings(PARENT_SETTING={}): with pytest.raises(KeyError): setting.raw_value with override_settings(PARENT_SETTING={"SETTING": "value"}): setting.check() assert setting.raw_value == "value"
def test_setting_validators_pass(self): validator = mock.Mock() setting = appsettings.Setting(name="INQUISITOR", validators=(validator,)) with self.settings(INQUISITOR=mock.sentinel.lister): setting.check() assert validator.mock_calls == [mock.call(mock.sentinel.lister)]
def test_setting(self): setting = appsettings.Setting(name="simple") assert setting.name == "simple" assert setting.full_name == "SIMPLE" assert setting.default_value is None assert setting.value is None assert setting.get_value() is None assert setting.validators == [] setting.check() with pytest.raises(AttributeError, match="SIMPLE"): assert setting.raw_value
def test_setting_validators_fail(self): validator = mock.Mock(side_effect=ValidationError("You're not worthy!")) setting = appsettings.Setting(name="INQUISITOR", validators=(validator,)) with self.settings(INQUISITOR=mock.sentinel.lister): with pytest.raises( ImproperlyConfigured, match="Setting INQUISITOR has an invalid value:.*You're not worthy!" ): setting.check() assert validator.mock_calls == [mock.call(mock.sentinel.lister)]
def test_setting_required(self): setting = appsettings.Setting(name="setting", prefix="custom_", required=True, default=True) with pytest.raises(ImproperlyConfigured, match=self.message_required % setting.full_name): assert setting.value assert setting.default_value setting.parent_setting = appsettings.NestedDictSetting(settings={}, name="parent_setting") with override_settings(PARENT_SETTING={}): with pytest.raises( ImproperlyConfigured, match=self.message_missing_item % setting.parent_setting.full_name ): assert setting.value
def test_setting(self): setting = appsettings.Setting() assert setting.name == "" assert setting.full_name == "" assert setting.default_value is None assert setting.value is None assert setting.get_value() is None assert setting.checker is None assert setting.validators == [] setting.check() with pytest.raises(AttributeError, match=self.message_no_attr % setting.full_name): assert setting.raw_value
def test_nested_dict_nested_list(self): setting = appsettings.NestedDictSetting( settings=dict( sub=appsettings.NestedListSetting( inner_setting=appsettings.Setting(name="value", default=None), name="sub", default=None ) ), name="setting", default=None, ) setting.check() assert setting.value is None with override_settings(SETTING={}): setting.check() assert setting.value == {"sub": None} with override_settings(SETTING={"SUB": ["hello"]}): setting.check() assert setting.value == {"sub": ("hello",)}
def test_setting_checker(self): class Setting(appsettings.Setting): def checker(self, name, value): if isinstance(value, int): raise ValueError(name) setting = Setting(name="check_test") with override_settings(CHECK_TEST=0): with pytest.raises(ValueError): setting.check() with override_settings(CHECK_TEST="ok"): setting.check() def checker(name, value): if isinstance(value, str): raise ValueError(name) setting = Setting(name="check_test2", checker=checker) with override_settings(CHECK_TEST2="not ok"): with pytest.raises(ValueError): setting.check() with override_settings(CHECK_TEST2=1): setting.check() class SettingNoChecker(appsettings.Setting): pass setting = SettingNoChecker(name="check_test3") with override_settings(CHECK_TEST3=list(range(1, 10))): setting.check() setting = appsettings.NestedSetting( name="check_test3", settings=dict(inner=appsettings.Setting(checker=checker))) setting.check() with override_settings(CHECK_TEST3={"INNER": True}): setting.check() with override_settings(CHECK_TEST3={"INNER": "AAA"}): with pytest.raises(ValueError): setting.check()
def test_nested_dict_nested_dict(self): setting = appsettings.NestedDictSetting( settings=dict( sub=appsettings.NestedDictSetting(settings=dict(value=appsettings.Setting(name="value")), name="sub") ), name="setting", ) setting.check() assert setting.value == {} with override_settings(SETTING={}): setting.check() assert setting.value == {"sub": {}} with override_settings(SETTING={"SUB": {}}): setting.check() assert setting.value == {"sub": {"value": None}} with override_settings(SETTING={"SUB": {"VALUE": "Value"}}): setting.check() assert setting.value == {"sub": {"value": "Value"}}
class AppConf(appsettings.AppSettings): setting = appsettings.Setting()
class AppConf(appsettings.AppSettings): setting = appsettings.Setting(name="name") class Meta: setting_prefix = "prefix_"
class MetaAppConf(appsettings.AppSettings): without_prefix = appsettings.Setting() with_prefix = appsettings.Setting(prefix="got_a_prefix") class Meta: setting_prefix = "meta_prefix_"
class NoMetaAppConf(appsettings.AppSettings): without_prefix = appsettings.Setting() with_prefix = appsettings.Setting(prefix="got_a_prefix")
class AppConf(appsettings.AppSettings): without_name = appsettings.Setting() with_name = appsettings.Setting(name="got_a_name")
def test_json_from_environ_value(self): setting = appsettings.Setting(name="setting") setting.check() assert setting.value == {"key": ["v", "a", "l"]}
def test_nested_dict_setting_from_environ_value(self): setting = appsettings.NestedDictSetting( settings=dict(a=appsettings.Setting(), b=appsettings.Setting(),), name="setting" ) setting.check() assert setting.value == {"a": "A", "b": "B"}
def test_setting_default_callable(self): setting = appsettings.Setting(default=lambda: 1, call_default=True) assert setting.value == 1 setting.call_default = False assert callable(setting.value) assert setting.value() == 1
def test_setting_name(self): setting = appsettings.Setting(name="Name", prefix="Prefix_") assert setting.name == "Name" assert setting.prefix == "Prefix_" assert setting.full_name == "PREFIX_NAME"
def test_preference_of_environ_values(self): setting = appsettings.Setting(name="preference_setting") with override_settings(PREFERENCE_SETTING="__OVER__"): setting.check() assert setting.value == "__ENV__"