11from contextvars import ContextVar
22import pytest
3- from unittest .mock import patch , MagicMock
3+ from unittest .mock import AsyncMock , patch , MagicMock
44from mcpauth import MCPAuth , MCPAuthAuthServerException , AuthServerExceptionCode
55from mcpauth .config import AuthServerConfig , AuthServerType , AuthorizationServerMetadata
66from mcpauth .middleware .create_bearer_auth import BearerAuthConfig
7+ from mcpauth .types import AuthInfo
78
89
910class TestMCPAuth :
@@ -154,8 +155,8 @@ def test_bearer_auth_middleware_jwt_mode(self):
154155 "https://example.com/.well-known/jwks.json" , leeway = 60
155156 )
156157
157- def test_bearer_auth_middleware_custom_verify ( self ):
158- # Setup
158+ @ pytest . mark . asyncio
159+ async def test_bearer_auth_middleware_custom_verify ( self ):
159160 server_config = AuthServerConfig (
160161 type = AuthServerType .OAUTH ,
161162 metadata = AuthorizationServerMetadata (
@@ -169,24 +170,25 @@ def test_bearer_auth_middleware_custom_verify(self):
169170 )
170171 auth = MCPAuth (server = server_config )
171172
173+ auth_info = AuthInfo (
174+ token = "valid_token" ,
175+ issuer = "https://example.com" ,
176+ subject = "1234567890" ,
177+ scopes = ["profile" ],
178+ claims = {},
179+ )
172180 custom_verify = MagicMock ()
181+ custom_verify .return_value = auth_info
173182
174- # Exercise
175- with patch (
176- "mcpauth.middleware.create_bearer_auth.create_bearer_auth"
177- ) as mock_create_bearer_auth :
178- middleware_class = auth .bearer_auth_middleware (
179- custom_verify , required_scopes = ["profile" ]
180- )
183+ middleware_class = auth .bearer_auth_middleware (
184+ custom_verify , required_scopes = ["profile" ]
185+ )
181186
182- # Verify
183- assert middleware_class is not None
184- mock_create_bearer_auth .assert_called_once ()
185- args , kwargs = mock_create_bearer_auth .call_args
186- assert args [0 ] == custom_verify
187- assert isinstance (kwargs , dict )
188- assert isinstance (kwargs .get ("config" ), BearerAuthConfig ) # type: ignore
189- assert isinstance (kwargs .get ("context_var" ), ContextVar ) # type: ignore
187+ mock_request = MagicMock ()
188+ mock_request .headers = {"Authorization" : "Bearer valid_token" }
189+ middleware_instance = middleware_class (MagicMock ())
190+ await middleware_instance .dispatch (mock_request , AsyncMock ())
191+ assert auth .auth_info == auth_info
190192
191193 def test_bearer_auth_middleware_jwt_without_jwks_uri (self ):
192194 # Setup
0 commit comments