3
3
"""
4
4
5
5
import pytest
6
+ from azure .keyvault .secrets import SecretClient
6
7
from pydantic import BaseModel , Field
7
8
from pytest_mock import MockerFixture
8
9
23
24
azure_key_vault = False
24
25
25
26
26
- MODULE = 'pydantic_settings.sources.providers.azure'
27
-
28
-
29
27
@pytest .mark .skipif (not azure_key_vault , reason = 'pydantic-settings[azure-key-vault] is not installed' )
30
28
class TestAzureKeyVaultSettingsSource :
31
29
"""Test AzureKeyVaultSettingsSource."""
@@ -36,7 +34,10 @@ def test___init__(self, mocker: MockerFixture) -> None:
36
34
class AzureKeyVaultSettings (BaseSettings ):
37
35
"""AzureKeyVault settings."""
38
36
39
- mocker .patch (f'{ MODULE } .SecretClient.list_properties_of_secrets' , return_value = [])
37
+ mocker .patch (
38
+ f'{ AzureKeyVaultSettingsSource .__module__ } .{ SecretClient .list_properties_of_secrets .__qualname__ } ' ,
39
+ return_value = [],
40
+ )
40
41
41
42
AzureKeyVaultSettingsSource (
42
43
AzureKeyVaultSettings , 'https://my-resource.vault.azure.net/' , DefaultAzureCredential ()
@@ -55,11 +56,17 @@ class AzureKeyVaultSettings(BaseSettings):
55
56
sql_server_user : str = Field (..., alias = 'SqlServerUser' )
56
57
sql_server : SqlServer = Field (..., alias = 'SqlServer' )
57
58
58
- expected_secrets = [type ('' , (), {'name' : 'SqlServerUser' }), type ('' , (), {'name' : 'SqlServer--Password' })]
59
+ expected_secrets = [
60
+ type ('' , (), {'name' : 'SqlServerUser' , 'enabled' : True }),
61
+ type ('' , (), {'name' : 'SqlServer--Password' , 'enabled' : True }),
62
+ ]
59
63
expected_secret_value = 'SecretValue'
60
- mocker .patch (f'{ MODULE } .SecretClient.list_properties_of_secrets' , return_value = expected_secrets )
61
64
mocker .patch (
62
- f'{ MODULE } .SecretClient.get_secret' ,
65
+ f'{ AzureKeyVaultSettingsSource .__module__ } .{ SecretClient .list_properties_of_secrets .__qualname__ } ' ,
66
+ return_value = expected_secrets ,
67
+ )
68
+ mocker .patch (
69
+ f'{ AzureKeyVaultSettingsSource .__module__ } .{ SecretClient .get_secret .__qualname__ } ' ,
63
70
side_effect = self ._raise_resource_not_found_when_getting_parent_secret_name ,
64
71
)
65
72
obj = AzureKeyVaultSettingsSource (
@@ -71,6 +78,33 @@ class AzureKeyVaultSettings(BaseSettings):
71
78
assert settings ['SqlServerUser' ] == expected_secret_value
72
79
assert settings ['SqlServer' ]['Password' ] == expected_secret_value
73
80
81
+ def test_do_not_load_disabled_secrets (self , mocker : MockerFixture ) -> None :
82
+ class AzureKeyVaultSettings (BaseSettings ):
83
+ """AzureKeyVault settings."""
84
+
85
+ SqlServerPassword : str
86
+ DisabledSqlServerPassword : str
87
+
88
+ disabled_secret_name = 'SqlServerPassword'
89
+ expected_secrets = [
90
+ type ('' , (), {'name' : disabled_secret_name , 'enabled' : False }),
91
+ ]
92
+ mocker .patch (
93
+ f'{ AzureKeyVaultSettingsSource .__module__ } .{ SecretClient .list_properties_of_secrets .__qualname__ } ' ,
94
+ return_value = expected_secrets ,
95
+ )
96
+ mocker .patch (
97
+ f'{ AzureKeyVaultSettingsSource .__module__ } .{ SecretClient .get_secret .__qualname__ } ' ,
98
+ return_value = KeyVaultSecret (SecretProperties (), 'SecretValue' ),
99
+ )
100
+ obj = AzureKeyVaultSettingsSource (
101
+ AzureKeyVaultSettings , 'https://my-resource.vault.azure.net/' , DefaultAzureCredential ()
102
+ )
103
+
104
+ settings = obj ()
105
+
106
+ assert disabled_secret_name not in settings
107
+
74
108
def test_azure_key_vault_settings_source (self , mocker : MockerFixture ) -> None :
75
109
"""Test AzureKeyVaultSettingsSource."""
76
110
@@ -99,11 +133,17 @@ def settings_customise_sources(
99
133
),
100
134
)
101
135
102
- expected_secrets = [type ('' , (), {'name' : 'SqlServerUser' }), type ('' , (), {'name' : 'SqlServer--Password' })]
136
+ expected_secrets = [
137
+ type ('' , (), {'name' : 'SqlServerUser' , 'enabled' : True }),
138
+ type ('' , (), {'name' : 'SqlServer--Password' , 'enabled' : True }),
139
+ ]
103
140
expected_secret_value = 'SecretValue'
104
- mocker .patch (f'{ MODULE } .SecretClient.list_properties_of_secrets' , return_value = expected_secrets )
105
141
mocker .patch (
106
- f'{ MODULE } .SecretClient.get_secret' ,
142
+ f'{ AzureKeyVaultSettingsSource .__module__ } .{ SecretClient .list_properties_of_secrets .__qualname__ } ' ,
143
+ return_value = expected_secrets ,
144
+ )
145
+ mocker .patch (
146
+ f'{ AzureKeyVaultSettingsSource .__module__ } .{ SecretClient .get_secret .__qualname__ } ' ,
107
147
side_effect = self ._raise_resource_not_found_when_getting_parent_secret_name ,
108
148
)
109
149
0 commit comments