@@ -58,6 +58,21 @@ def _instrument_provider_mgt(app, status, payload):
5858
5959class TestOIDCProviderConfig :
6060
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+
6176 @pytest .mark .parametrize ('provider_id' , INVALID_PROVIDER_IDS + ['saml.provider' ])
6277 def test_get_invalid_provider_id (self , user_mgt_app , provider_id ):
6378 with pytest .raises (ValueError ) as excinfo :
@@ -76,6 +91,135 @@ def test_get(self, user_mgt_app):
7691 assert req .method == 'GET'
7792 assert req .url == '{0}{1}' .format (USER_MGT_URL_PREFIX , '/oauthIdpConfigs/oidc.provider' )
7893
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+
79223 @pytest .mark .parametrize ('provider_id' , INVALID_PROVIDER_IDS + ['saml.provider' ])
80224 def test_delete_invalid_provider_id (self , user_mgt_app , provider_id ):
81225 with pytest .raises (ValueError ) as excinfo :
0 commit comments