Skip to content

Commit 6ccbc90

Browse files
committed
Remove breaking changes
1 parent d15ce67 commit 6ccbc90

File tree

1 file changed

+62
-8
lines changed

1 file changed

+62
-8
lines changed

tests/test_source_azure_key_vault.py

Lines changed: 62 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ def test_do_not_load_disabled_secrets(self, mocker: MockerFixture) -> None:
8181
class AzureKeyVaultSettings(BaseSettings):
8282
"""AzureKeyVault settings."""
8383

84-
sql_server_password: str
84+
SqlServerPassword: str
8585
DisabledSqlServerPassword: str
8686

8787
disabled_secret_name = 'SqlServerPassword'
@@ -108,13 +108,14 @@ def test_azure_key_vault_settings_source(self, mocker: MockerFixture) -> None:
108108
"""Test AzureKeyVaultSettingsSource."""
109109

110110
class SqlServer(BaseModel):
111-
password: str
111+
password: str = Field(..., alias='Password')
112112

113113
class AzureKeyVaultSettings(BaseSettings):
114114
"""AzureKeyVault settings."""
115115

116-
sql_server_user: str
117-
sql_server: SqlServer
116+
SqlServerUser: str
117+
sql_server_user: str = Field(..., alias='SqlServerUser')
118+
sql_server: SqlServer = Field(..., alias='SqlServer')
118119

119120
@classmethod
120121
def settings_customise_sources(
@@ -147,6 +148,7 @@ def settings_customise_sources(
147148

148149
settings = AzureKeyVaultSettings() # type: ignore
149150

151+
assert settings.SqlServerUser == expected_secret_value
150152
assert settings.sql_server_user == expected_secret_value
151153
assert settings.sql_server.password == expected_secret_value
152154

@@ -159,14 +161,61 @@ def _raise_resource_not_found_when_getting_parent_secret_name(self, secret_name:
159161

160162
return key_vault_secret
161163

162-
def test_snake_case_translation(self, mocker: MockerFixture) -> None:
164+
def test_dash_to_underscore_translation(self, mocker: MockerFixture) -> None:
165+
"""Test that dashes in secret names are mapped to underscores in field names."""
166+
167+
class AzureKeyVaultSettings(BaseSettings):
168+
my_field: str
169+
alias_field: str = Field(..., alias='Secret-Alias')
170+
171+
@classmethod
172+
def settings_customise_sources(
173+
cls,
174+
settings_cls: type[BaseSettings],
175+
init_settings: PydanticBaseSettingsSource,
176+
env_settings: PydanticBaseSettingsSource,
177+
dotenv_settings: PydanticBaseSettingsSource,
178+
file_secret_settings: PydanticBaseSettingsSource,
179+
) -> tuple[PydanticBaseSettingsSource, ...]:
180+
return (
181+
AzureKeyVaultSettingsSource(
182+
settings_cls,
183+
'https://my-resource.vault.azure.net/',
184+
DefaultAzureCredential(),
185+
dash_to_underscore=True,
186+
),
187+
)
188+
189+
expected_secrets = [
190+
type('', (), {'name': 'my-field', 'enabled': True}),
191+
type('', (), {'name': 'Secret-Alias', 'enabled': True}),
192+
]
193+
expected_secret_value = 'SecretValue'
194+
195+
mocker.patch(
196+
f'{AzureKeyVaultSettingsSource.__module__}.{SecretClient.list_properties_of_secrets.__qualname__}',
197+
return_value=expected_secrets,
198+
)
199+
mocker.patch(
200+
f'{AzureKeyVaultSettingsSource.__module__}.{SecretClient.get_secret.__qualname__}',
201+
return_value=KeyVaultSecret(SecretProperties(), expected_secret_value),
202+
)
203+
204+
settings = AzureKeyVaultSettings()
205+
206+
assert settings.my_field == expected_secret_value
207+
assert settings.alias_field == expected_secret_value
208+
209+
def test_snake_case_conversion(self, mocker: MockerFixture) -> None:
163210
"""Test that secret names are mapped to snake case in field names."""
164211

165212
class NestedModel(BaseModel):
166213
nested_field: str
167214

168215
class AzureKeyVaultSettings(BaseSettings):
169-
my_field: str
216+
my_field_from_kebab_case: str
217+
my_field_from_pascal_case: str
218+
my_field_from_camel_case: str
170219
alias_field: str = Field(alias='Secret-Alias')
171220
alias_field_2: str = Field(alias='another-SECRET-AliaS')
172221
nested_model: NestedModel
@@ -185,11 +234,14 @@ def settings_customise_sources(
185234
settings_cls,
186235
'https://my-resource.vault.azure.net/',
187236
DefaultAzureCredential(),
237+
snake_case_conversion=True,
188238
),
189239
)
190240

191241
expected_secrets = [
192-
type('', (), {'name': 'my-field', 'enabled': True}),
242+
type('', (), {'name': 'my-field-from-kebab-case', 'enabled': True}),
243+
type('', (), {'name': 'MyFieldFromPascalCase', 'enabled': True}),
244+
type('', (), {'name': 'myFieldFromCamelCase', 'enabled': True}),
193245
type('', (), {'name': 'Secret-Alias', 'enabled': True}),
194246
type('', (), {'name': 'another-SECRET-AliaS', 'enabled': True}),
195247
type('', (), {'name': 'NestedModel--NestedField', 'enabled': True}),
@@ -207,7 +259,9 @@ def settings_customise_sources(
207259

208260
settings = AzureKeyVaultSettings()
209261

210-
assert settings.my_field == expected_secret_value
262+
assert settings.my_field_from_kebab_case == expected_secret_value
263+
assert settings.my_field_from_pascal_case == expected_secret_value
264+
assert settings.my_field_from_camel_case == expected_secret_value
211265
assert settings.alias_field == expected_secret_value
212266
assert settings.alias_field_2 == expected_secret_value
213267
assert settings.nested_model.nested_field == expected_secret_value

0 commit comments

Comments
 (0)