@@ -58,6 +58,21 @@ def _instrument_provider_mgt(app, status, payload):
58
58
59
59
class TestOIDCProviderConfig :
60
60
61
+ VALID_CREATE_OPTIONS = {
62
+ 'provider_id' : 'oidc.provider' ,
63
+ 'client_id' : 'CLIENT_ID' ,
64
+ 'issuer' : 'https://oidc.com/issuer' ,
65
+ 'display_name' : 'oidcProviderName' ,
66
+ 'enabled' : True ,
67
+ }
68
+
69
+ OIDC_CONFIG_REQUEST = {
70
+ 'displayName' : 'oidcProviderName' ,
71
+ 'enabled' : True ,
72
+ 'clientId' : 'CLIENT_ID' ,
73
+ 'issuer' : 'https://oidc.com/issuer' ,
74
+ }
75
+
61
76
@pytest .mark .parametrize ('provider_id' , INVALID_PROVIDER_IDS + ['saml.provider' ])
62
77
def test_get_invalid_provider_id (self , user_mgt_app , provider_id ):
63
78
with pytest .raises (ValueError ) as excinfo :
@@ -76,6 +91,135 @@ def test_get(self, user_mgt_app):
76
91
assert req .method == 'GET'
77
92
assert req .url == '{0}{1}' .format (USER_MGT_URL_PREFIX , '/oauthIdpConfigs/oidc.provider' )
78
93
94
+ @pytest .mark .parametrize ('invalid_opts' , [
95
+ {'provider_id' : None }, {'provider_id' : '' }, {'provider_id' : 'saml.provider' },
96
+ {'client_id' : None }, {'client_id' : '' },
97
+ {'issuer' : None }, {'issuer' : '' }, {'issuer' : 'not a url' },
98
+ {'display_name' : True },
99
+ {'enabled' : 'true' },
100
+ ])
101
+ def test_create_invalid_args (self , user_mgt_app , invalid_opts ):
102
+ options = dict (self .VALID_CREATE_OPTIONS )
103
+ options .update (invalid_opts )
104
+ with pytest .raises (ValueError ):
105
+ auth .create_oidc_provider_config (** options , app = user_mgt_app )
106
+
107
+ def test_create (self , user_mgt_app ):
108
+ recorder = _instrument_provider_mgt (user_mgt_app , 200 , OIDC_PROVIDER_CONFIG_RESPONSE )
109
+
110
+ provider_config = auth .create_oidc_provider_config (
111
+ ** self .VALID_CREATE_OPTIONS , app = user_mgt_app )
112
+
113
+ self ._assert_provider_config (provider_config )
114
+ assert len (recorder ) == 1
115
+ req = recorder [0 ]
116
+ assert req .method == 'POST'
117
+ assert req .url == '{0}/oauthIdpConfigs?oauthIdpConfigId=oidc.provider' .format (
118
+ USER_MGT_URL_PREFIX )
119
+ got = json .loads (req .body .decode ())
120
+ assert got == self .OIDC_CONFIG_REQUEST
121
+
122
+ def test_create_minimal (self , user_mgt_app ):
123
+ recorder = _instrument_provider_mgt (user_mgt_app , 200 , OIDC_PROVIDER_CONFIG_RESPONSE )
124
+ options = dict (self .VALID_CREATE_OPTIONS )
125
+ del options ['display_name' ]
126
+ del options ['enabled' ]
127
+ want = dict (self .OIDC_CONFIG_REQUEST )
128
+ del want ['displayName' ]
129
+ del want ['enabled' ]
130
+
131
+ provider_config = auth .create_oidc_provider_config (** options , app = user_mgt_app )
132
+
133
+ self ._assert_provider_config (provider_config )
134
+ assert len (recorder ) == 1
135
+ req = recorder [0 ]
136
+ assert req .method == 'POST'
137
+ assert req .url == '{0}/oauthIdpConfigs?oauthIdpConfigId=oidc.provider' .format (
138
+ USER_MGT_URL_PREFIX )
139
+ got = json .loads (req .body .decode ())
140
+ assert got == want
141
+
142
+ def test_create_empty_values (self , user_mgt_app ):
143
+ recorder = _instrument_provider_mgt (user_mgt_app , 200 , OIDC_PROVIDER_CONFIG_RESPONSE )
144
+ options = dict (self .VALID_CREATE_OPTIONS )
145
+ options ['display_name' ] = ''
146
+ options ['enabled' ] = False
147
+ want = dict (self .OIDC_CONFIG_REQUEST )
148
+ want ['displayName' ] = ''
149
+ want ['enabled' ] = False
150
+
151
+ provider_config = auth .create_oidc_provider_config (** options , app = user_mgt_app )
152
+
153
+ self ._assert_provider_config (provider_config )
154
+ assert len (recorder ) == 1
155
+ req = recorder [0 ]
156
+ assert req .method == 'POST'
157
+ assert req .url == '{0}/oauthIdpConfigs?oauthIdpConfigId=oidc.provider' .format (
158
+ USER_MGT_URL_PREFIX )
159
+ got = json .loads (req .body .decode ())
160
+ assert got == want
161
+
162
+ @pytest .mark .parametrize ('invalid_opts' , [
163
+ {},
164
+ {'provider_id' : None }, {'provider_id' : '' }, {'provider_id' : 'saml.provider' },
165
+ {'client_id' : '' },
166
+ {'issuer' : '' }, {'issuer' : 'not a url' },
167
+ {'display_name' : True },
168
+ {'enabled' : 'true' },
169
+ ])
170
+ def test_update_invalid_args (self , user_mgt_app , invalid_opts ):
171
+ options = {'provider_id' : 'oidc.provider' }
172
+ options .update (invalid_opts )
173
+ with pytest .raises (ValueError ):
174
+ auth .update_oidc_provider_config (** options , app = user_mgt_app )
175
+
176
+ def test_update (self , user_mgt_app ):
177
+ recorder = _instrument_provider_mgt (user_mgt_app , 200 , OIDC_PROVIDER_CONFIG_RESPONSE )
178
+
179
+ provider_config = auth .update_oidc_provider_config (
180
+ ** self .VALID_CREATE_OPTIONS , app = user_mgt_app )
181
+
182
+ self ._assert_provider_config (provider_config )
183
+ assert len (recorder ) == 1
184
+ req = recorder [0 ]
185
+ assert req .method == 'PATCH'
186
+ mask = ['clientId' , 'displayName' , 'enabled' , 'issuer' ]
187
+ assert req .url == '{0}/oauthIdpConfigs/oidc.provider?updateMask={1}' .format (
188
+ USER_MGT_URL_PREFIX , ',' .join (mask ))
189
+ got = json .loads (req .body .decode ())
190
+ assert got == self .OIDC_CONFIG_REQUEST
191
+
192
+ def test_update_minimal (self , user_mgt_app ):
193
+ recorder = _instrument_provider_mgt (user_mgt_app , 200 , OIDC_PROVIDER_CONFIG_RESPONSE )
194
+
195
+ provider_config = auth .update_oidc_provider_config (
196
+ 'oidc.provider' , display_name = 'oidcProviderName' , app = user_mgt_app )
197
+
198
+ self ._assert_provider_config (provider_config )
199
+ assert len (recorder ) == 1
200
+ req = recorder [0 ]
201
+ assert req .method == 'PATCH'
202
+ assert req .url == '{0}/oauthIdpConfigs/oidc.provider?updateMask=displayName' .format (
203
+ USER_MGT_URL_PREFIX )
204
+ got = json .loads (req .body .decode ())
205
+ assert got == {'displayName' : 'oidcProviderName' }
206
+
207
+ def test_update_empty_values (self , user_mgt_app ):
208
+ recorder = _instrument_provider_mgt (user_mgt_app , 200 , OIDC_PROVIDER_CONFIG_RESPONSE )
209
+
210
+ provider_config = auth .update_oidc_provider_config (
211
+ 'oidc.provider' , display_name = auth .DELETE_ATTRIBUTE , enabled = False , app = user_mgt_app )
212
+
213
+ self ._assert_provider_config (provider_config )
214
+ assert len (recorder ) == 1
215
+ req = recorder [0 ]
216
+ assert req .method == 'PATCH'
217
+ mask = ['displayName' , 'enabled' ]
218
+ assert req .url == '{0}/oauthIdpConfigs/oidc.provider?updateMask={1}' .format (
219
+ USER_MGT_URL_PREFIX , ',' .join (mask ))
220
+ got = json .loads (req .body .decode ())
221
+ assert got == {'displayName' : None , 'enabled' : False }
222
+
79
223
@pytest .mark .parametrize ('provider_id' , INVALID_PROVIDER_IDS + ['saml.provider' ])
80
224
def test_delete_invalid_provider_id (self , user_mgt_app , provider_id ):
81
225
with pytest .raises (ValueError ) as excinfo :
0 commit comments