@@ -393,3 +393,98 @@ def test_file_uploads_complete(client, part_uploaded_file_upload_id):
393393 assert response ["content_type" ] == "text/plain"
394394 assert response ["number_of_parts" ]["total" ] == 3
395395 assert response ["number_of_parts" ]["sent" ] == 3
396+
397+
398+ def test_oauth_introspect (client , mocker ):
399+ """Test OAuth token introspection with mock"""
400+ mock_response = {"active" : False , "request_id" : "test-request-id" }
401+ mock_request = mocker .patch .object (client , "request" , return_value = mock_response )
402+
403+ response = client .oauth .introspect (
404+ client_id = "test_client_id" ,
405+ client_secret = "test_client_secret" ,
406+ token = "test_token" ,
407+ )
408+
409+ assert "active" in response
410+ assert isinstance (response ["active" ], bool )
411+ mock_request .assert_called_once_with (
412+ path = "oauth/introspect" ,
413+ method = "POST" ,
414+ body = {"token" : "test_token" },
415+ auth = {"client_id" : "test_client_id" , "client_secret" : "test_client_secret" },
416+ )
417+
418+
419+ def test_oauth_revoke (client , mocker ):
420+ """Test OAuth token revocation with mock (can't use cassette - token becomes invalid)"""
421+ mock_response = {}
422+ mock_request = mocker .patch .object (client , "request" , return_value = mock_response )
423+
424+ response = client .oauth .revoke (
425+ client_id = "test_client_id" ,
426+ client_secret = "test_client_secret" ,
427+ token = "test_token" ,
428+ )
429+
430+ assert response == {}
431+ mock_request .assert_called_once_with (
432+ path = "oauth/revoke" ,
433+ method = "POST" ,
434+ body = {"token" : "test_token" },
435+ auth = {"client_id" : "test_client_id" , "client_secret" : "test_client_secret" },
436+ )
437+
438+
439+ def test_oauth_token_authorization_code (client , mocker ):
440+ mock_response = {
441+ "access_token" : "secret_test_token" ,
442+ "token_type" : "bearer" ,
443+ "bot_id" : "bot_123" ,
444+ "workspace_id" : "ws_456" ,
445+ "workspace_name" : "Test Workspace" ,
446+ "owner" : {"type" : "user" , "user" : {"object" : "user" , "id" : "user_789" }},
447+ }
448+
449+ mock_request = mocker .patch .object (client , "request" , return_value = mock_response )
450+
451+ response = client .oauth .token (
452+ client_id = "test_client_id" ,
453+ client_secret = "test_client_secret" ,
454+ grant_type = "authorization_code" ,
455+ code = "test_code" ,
456+ redirect_uri = "http://localhost:3000/callback" ,
457+ )
458+
459+ assert response ["access_token" ] == "secret_test_token"
460+ assert response ["bot_id" ] == "bot_123"
461+ mock_request .assert_called_once ()
462+ call_kwargs = mock_request .call_args [1 ]
463+ assert call_kwargs ["path" ] == "oauth/token"
464+ assert call_kwargs ["method" ] == "POST"
465+ assert call_kwargs ["auth" ] == {
466+ "client_id" : "test_client_id" ,
467+ "client_secret" : "test_client_secret" ,
468+ }
469+
470+
471+ def test_oauth_token_refresh_token (client , mocker ):
472+ mock_response = {
473+ "access_token" : "secret_refreshed_token" ,
474+ "token_type" : "bearer" ,
475+ "bot_id" : "bot_123" ,
476+ }
477+
478+ mock_request = mocker .patch .object (client , "request" , return_value = mock_response )
479+
480+ response = client .oauth .token (
481+ client_id = "test_client_id" ,
482+ client_secret = "test_client_secret" ,
483+ grant_type = "refresh_token" ,
484+ refresh_token = "test_refresh_token" ,
485+ )
486+
487+ assert response ["access_token" ] == "secret_refreshed_token"
488+ mock_request .assert_called_once ()
489+ call_kwargs = mock_request .call_args [1 ]
490+ assert call_kwargs ["path" ] == "oauth/token"
0 commit comments