@@ -234,6 +234,28 @@ def test_parse(self):
234234
235235 assert set (_req .keys ()) == set (_token_request .keys ())
236236
237+ def test_auth_code_grant_disallowed_per_client (self ):
238+ areq = AUTH_REQ .copy ()
239+ areq ["scope" ] = ["email" ]
240+ self .endpoint_context .cdb ["client_1" ]["grant_types_supported" ] = []
241+
242+ session_id = self ._create_session (areq )
243+ grant = self .endpoint_context .authz (session_id , areq )
244+ code = self ._mint_code (grant , areq ["client_id" ])
245+
246+ _cntx = self .endpoint_context
247+
248+ _token_request = TOKEN_REQ_DICT .copy ()
249+ _token_request ["code" ] = code .value
250+ _req = self .token_endpoint .parse_request (_token_request )
251+ _resp = self .token_endpoint .process_request (request = _req , issue_refresh = True )
252+
253+ assert isinstance (_req , TokenErrorResponse )
254+ assert _req .to_dict () == {
255+ "error" : "invalid_request" ,
256+ "error_description" : "Unsupported grant_type: authorization_code" ,
257+ }
258+
237259 def test_process_request (self ):
238260 session_id = self ._create_session (AUTH_REQ )
239261 grant = self .session_manager [session_id ]
@@ -336,6 +358,40 @@ def test_do_refresh_access_token(self):
336358 msg = self .token_endpoint .do_response (request = _req , ** _resp )
337359 assert isinstance (msg , dict )
338360
361+ def test_refresh_grant_disallowed_per_client (self ):
362+ areq = AUTH_REQ .copy ()
363+ areq ["scope" ] = ["email" ]
364+ self .endpoint_context .cdb ["client_1" ]["grant_types_supported" ] = [
365+ "authorization_code"
366+ ]
367+
368+ session_id = self ._create_session (areq )
369+ grant = self .endpoint_context .authz (session_id , areq )
370+ code = self ._mint_code (grant , areq ["client_id" ])
371+
372+ _cntx = self .endpoint_context
373+
374+ _token_request = TOKEN_REQ_DICT .copy ()
375+ _token_request ["code" ] = code .value
376+ _req = self .token_endpoint .parse_request (_token_request )
377+ _resp = self .token_endpoint .process_request (request = _req , issue_refresh = True )
378+
379+ _request = REFRESH_TOKEN_REQ .copy ()
380+ _request ["refresh_token" ] = _resp ["response_args" ]["refresh_token" ]
381+
382+ _token_value = _resp ["response_args" ]["refresh_token" ]
383+ _session_info = self .session_manager .get_session_info_by_token (_token_value )
384+ _token = self .session_manager .find_token (_session_info ["session_id" ], _token_value )
385+ _token .usage_rules ["supports_minting" ] = ["access_token" , "refresh_token" ]
386+
387+ _req = self .token_endpoint .parse_request (_request .to_json ())
388+
389+ assert isinstance (_req , TokenErrorResponse )
390+ assert _req .to_dict () == {
391+ "error" : "invalid_request" ,
392+ "error_description" : "Unsupported grant_type: refresh_token" ,
393+ }
394+
339395 def test_do_2nd_refresh_access_token (self ):
340396 areq = AUTH_REQ .copy ()
341397 areq ["scope" ] = ["email" ]
0 commit comments