@@ -6,22 +6,38 @@ vi.mock("http", () => ({
66 createServer : vi . fn ( ) ,
77} ) )
88
9+ function createMockServer ( ) {
10+ const mockServer = {
11+ listen : vi . fn ( ( port , host , callback ) => {
12+ callback ( )
13+ return mockServer
14+ } ) ,
15+ address : vi . fn ( ( ) => ( { port : 3000 } ) ) ,
16+ on : vi . fn ( ) ,
17+ close : vi . fn ( ) ,
18+ }
19+
20+ return mockServer
21+ }
22+
23+ function createMockResponse ( ) {
24+ return {
25+ writeHead : vi . fn ( ) ,
26+ end : vi . fn ( ) ,
27+ on : vi . fn ( ( event , cb ) => {
28+ if ( event === "finish" ) setImmediate ( cb )
29+ } ) ,
30+ }
31+ }
32+
933describe ( "startCallbackServer" , ( ) => {
1034 beforeEach ( ( ) => {
1135 vi . restoreAllMocks ( )
1236 delete process . env . MCP_OAUTH_TEST_MODE
1337 } )
1438
1539 it ( "should start server and resolve with callback result" , async ( ) => {
16- const mockServer = {
17- listen : vi . fn ( ( port , host , callback ) => {
18- callback ( )
19- return mockServer
20- } ) ,
21- address : vi . fn ( ( ) => ( { port : 3000 } ) ) ,
22- on : vi . fn ( ) ,
23- close : vi . fn ( ) ,
24- }
40+ const mockServer = createMockServer ( )
2541
2642 ; ( http . createServer as any ) . mockReturnValue ( mockServer )
2743
@@ -38,31 +54,24 @@ describe("startCallbackServer", () => {
3854 url : "/callback?code=test-code&state=test-state" ,
3955 method : "GET" ,
4056 }
41- const mockRes = {
42- writeHead : vi . fn ( ) ,
43- end : vi . fn ( ) ,
44- on : vi . fn ( ( event , cb ) => {
45- if ( event === "finish" ) setImmediate ( cb )
46- } ) ,
47- }
57+ const mockRes = createMockResponse ( )
4858
4959 requestHandler ( mockReq , mockRes )
5060
5161 const callbackResult = await result
5262 expect ( callbackResult . code ) . toBe ( "test-code" )
5363 expect ( callbackResult . state ) . toBe ( "test-state" )
64+ expect ( mockRes . writeHead ) . toHaveBeenCalledWith (
65+ 200 ,
66+ expect . objectContaining ( {
67+ "Content-Type" : "text/html; charset=utf-8" ,
68+ } ) ,
69+ )
70+ expect ( mockRes . end ) . toHaveBeenCalledWith ( expect . stringContaining ( '<meta charset="utf-8">' ) )
5471 } )
5572
5673 it ( "should reject invalid state" , async ( ) => {
57- const mockServer = {
58- listen : vi . fn ( ( port , host , callback ) => {
59- callback ( )
60- return mockServer
61- } ) ,
62- address : vi . fn ( ( ) => ( { port : 3000 } ) ) ,
63- on : vi . fn ( ) ,
64- close : vi . fn ( ) ,
65- }
74+ const mockServer = createMockServer ( )
6675
6776 ; ( http . createServer as any ) . mockReturnValue ( mockServer )
6877
@@ -76,17 +85,18 @@ describe("startCallbackServer", () => {
7685 url : "/callback?code=test-code&state=wrong-state" ,
7786 method : "GET" ,
7887 }
79- const mockRes = {
80- writeHead : vi . fn ( ) ,
81- end : vi . fn ( ) ,
82- on : vi . fn ( ( event , cb ) => {
83- if ( event === "finish" ) setImmediate ( cb )
84- } ) ,
85- }
88+ const mockRes = createMockResponse ( )
8689
8790 requestHandler ( mockReq , mockRes )
8891
8992 await expect ( result ) . rejects . toThrow ( "Invalid state parameter" )
93+ expect ( mockRes . writeHead ) . toHaveBeenCalledWith (
94+ 400 ,
95+ expect . objectContaining ( {
96+ "Content-Type" : "text/html; charset=utf-8" ,
97+ } ) ,
98+ )
99+ expect ( mockRes . end ) . toHaveBeenCalledWith ( expect . stringContaining ( '<meta charset="utf-8">' ) )
90100 } )
91101} )
92102
0 commit comments