@@ -239,7 +239,52 @@ def _mint_code(self, grant, client_id):
239239 {"refresh_token" : "urn:ietf:params:oauth:token-type:refresh_token" },
240240 ],
241241 )
242- def test_token_exchange (self , token ):
242+ def test_token_exchange1 (self , token ):
243+ """
244+ Test that token exchange requests work correctly with only the required parameters
245+ present
246+ """
247+ if list (token .keys ())[0 ] == "refresh_token" :
248+ AUTH_REQ ["scope" ] = ["openid" , "offline_access" ]
249+ areq = AUTH_REQ .copy ()
250+
251+ session_id = self ._create_session (areq )
252+ grant = self .endpoint_context .authz (session_id , areq )
253+ code = self ._mint_code (grant , areq ["client_id" ])
254+
255+ _token_request = TOKEN_REQ_DICT .copy ()
256+ _token_request ["code" ] = code .value
257+ _req = self .endpoint .parse_request (_token_request )
258+ _resp = self .endpoint .process_request (request = _req )
259+ _token_value = _resp ["response_args" ][list (token .keys ())[0 ]]
260+
261+ token_exchange_req = TokenExchangeRequest (
262+ grant_type = "urn:ietf:params:oauth:grant-type:token-exchange" ,
263+ subject_token = _token_value ,
264+ subject_token_type = token [list (token .keys ())[0 ]]
265+ )
266+
267+ _req = self .endpoint .parse_request (
268+ token_exchange_req .to_urlencoded (),
269+ {"headers" : {"authorization" : "Basic {}" .format ("Y2xpZW50XzI6aGVtbGlndA==" )}},
270+ )
271+ _resp = self .endpoint .process_request (request = _req )
272+ assert set (_resp ["response_args" ].keys ()) == {
273+ "access_token" ,
274+ "token_type" ,
275+ "scope" ,
276+ "expires_in" ,
277+ "issued_token_type" ,
278+ }
279+
280+ @pytest .mark .parametrize (
281+ "token" ,
282+ [
283+ {"access_token" : "urn:ietf:params:oauth:token-type:access_token" },
284+ {"refresh_token" : "urn:ietf:params:oauth:token-type:refresh_token" },
285+ ],
286+ )
287+ def test_token_exchange2 (self , token ):
243288 """
244289 Test that token exchange requests work correctly
245290 """
0 commit comments