@@ -465,5 +465,93 @@ describe("MCP Client - API Routing", () => {
465465
466466 expect ( apiHandlerCalled ) . toBe ( true ) ;
467467 } ) ;
468+
469+ it ( "should detect X-Integrate-Use-Database header and update skipLocalStorage" , async ( ) => {
470+ const mockLocalStorage = new Map < string , string > ( ) ;
471+
472+ // Mock localStorage
473+ global . localStorage = {
474+ getItem : ( key : string ) => mockLocalStorage . get ( key ) || null ,
475+ setItem : ( key : string , value : string ) => mockLocalStorage . set ( key , value ) ,
476+ removeItem : ( key : string ) => mockLocalStorage . delete ( key ) ,
477+ clear : ( ) => mockLocalStorage . clear ( ) ,
478+ length : 0 ,
479+ key : ( ) => null ,
480+ } as any ;
481+
482+ let headerDetected = false ;
483+
484+ global . fetch = mock ( async ( url : string , options ?: any ) => {
485+ if ( url . includes ( "/api/integrate/mcp" ) ) {
486+ // Return response with X-Integrate-Use-Database header
487+ const headers = new Headers ( ) ;
488+ headers . set ( 'X-Integrate-Use-Database' , 'true' ) ;
489+
490+ return {
491+ ok : true ,
492+ headers,
493+ json : async ( ) => ( {
494+ content : [ { type : "text" , text : "result" } ] ,
495+ } ) ,
496+ } as Response ;
497+ } else if ( url . includes ( "mcp.integrate.dev" ) ) {
498+ // Mock initialization calls
499+ return {
500+ ok : true ,
501+ headers : new Headers ( ) ,
502+ json : async ( ) => ( {
503+ jsonrpc : "2.0" ,
504+ id : 1 ,
505+ result : { tools : [ ] } ,
506+ } ) ,
507+ } as Response ;
508+ }
509+ return { ok : false , headers : new Headers ( ) } as Response ;
510+ } ) as any ;
511+
512+ const mockOAuthManager = {
513+ getProviderToken : mock ( ( ) => null ) ,
514+ loadAllProviderTokens : mock ( ( ) => { } ) ,
515+ getAllProviderTokens : mock ( ( ) => new Map ( ) ) ,
516+ setProviderToken : mock ( ( ) => { } ) ,
517+ clearAllProviderTokens : mock ( ( ) => { } ) ,
518+ clearAllPendingAuths : mock ( ( ) => { } ) ,
519+ checkAuthStatus : mock ( ( ) => Promise . resolve ( { authorized : false } ) ) ,
520+ initiateFlow : mock ( ( ) => Promise . resolve ( ) ) ,
521+ handleCallback : mock ( ( ) => Promise . resolve ( { provider : "github" , accessToken : "token" , expiresAt : Date . now ( ) } ) ) ,
522+ disconnectProvider : mock ( ( ) => Promise . resolve ( ) ) ,
523+ setSkipLocalStorage : mock ( ( value : boolean ) => {
524+ headerDetected = value ;
525+ } ) ,
526+ } ;
527+
528+ const integration = createSimpleIntegration ( {
529+ id : "test" ,
530+ tools : [ "test_tool" ] ,
531+ } ) ;
532+
533+ const client = new MCPClientBase ( {
534+ integrations : [ integration ] ,
535+ apiRouteBase : "/api/integrate" ,
536+ connectionMode : "manual" ,
537+ } ) ;
538+
539+ ( client as any ) . oauthManager = mockOAuthManager ;
540+ ( client as any ) . initialized = true ;
541+ ( client as any ) . transport . connected = true ;
542+ ( client as any ) . availableTools . set ( "test_tool" , {
543+ name : "test_tool" ,
544+ description : "Test tool" ,
545+ inputSchema : { type : "object" } ,
546+ } ) ;
547+ ( client as any ) . enabledToolNames . add ( "test_tool" ) ;
548+
549+ // Make a tool call - should detect header
550+ await ( client as any ) . callServerTool ( "test_tool" , { } ) ;
551+
552+ // Verify header was detected and skipLocalStorage was set
553+ expect ( mockOAuthManager . setSkipLocalStorage ) . toHaveBeenCalledWith ( true ) ;
554+ expect ( headerDetected ) . toBe ( true ) ;
555+ } ) ;
468556} ) ;
469557
0 commit comments