Skip to content

Commit 3bd506a

Browse files
authored
unittest: test init_kwargs.items()
1 parent 1bd8b15 commit 3bd506a

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

tests/test_settings.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -879,6 +879,49 @@ class CaseInsensitiveSettings(BaseSettings):
879879
settings = CaseInsensitiveSettings()
880880
assert settings.foo == 'foo_value'
881881

882+
def test_init_settings_source_extra_fields_case_sensitive(monkeypatch):
883+
class CaseSensitiveSettings(BaseSettings):
884+
foo: str = Field(..., alias='FOO')
885+
886+
model_config = SettingsConfigDict(case_sensitive=True, extra='allow')
887+
888+
monkeypatch.setattr(os, 'environ', value={})
889+
init_kwargs_case_sensitive = {
890+
'FOO': 'foo_value',
891+
'extra_field': 'extra_value',
892+
'Foo': 'wrong_value'
893+
}
894+
with pytest.raises(ValidationError) as exc_info:
895+
CaseSensitiveSettings(**init_kwargs_case_sensitive)
896+
assert exc_info.value.errors(include_url=False) == [
897+
{'type': 'missing', 'loc': ('foo',), 'msg': 'Field required', 'input': init_kwargs_case_sensitive}
898+
]
899+
900+
# Test with correct case and extra field
901+
monkeypatch.setattr(os, 'environ', value={})
902+
settings_correct = CaseSensitiveSettings(FOO='foo_value', extra_field='extra_value')
903+
assert settings_correct.foo == 'foo_value'
904+
assert settings_correct.__pydantic_extra__ == {'extra_field': 'extra_value'}
905+
906+
class CaseInsensitiveSettings(BaseSettings):
907+
foo: str = Field(..., alias='FOO')
908+
909+
model_config = SettingsConfigDict(case_sensitive=False, extra='allow')
910+
911+
# Test when case sensitivity is disabled
912+
monkeypatch.setattr(os, 'environ', value={})
913+
init_kwargs_case_insensitive = {
914+
'Foo': 'foo_value',
915+
'extra_field': 'extra_value',
916+
'EXTRA_FIELD': 'another_value'
917+
}
918+
settings = CaseInsensitiveSettings(**init_kwargs_case_insensitive)
919+
assert settings.foo == 'foo_value'
920+
assert settings.__pydantic_extra__ == {
921+
'extra_field': 'extra_value',
922+
'EXTRA_FIELD': 'another_value'
923+
}
924+
882925

883926
@pytest.mark.parametrize('env_nested_delimiter', [None, ''])
884927
def test_case_sensitive_no_nested_delimiter(monkeypatch, env_nested_delimiter):

0 commit comments

Comments
 (0)