@@ -29,6 +29,11 @@ const testDoubles = vi.hoisted(() => ({
2929 tool : vi . fn ( ) ,
3030 registerTool : vi . fn ( ) ,
3131 directRegisterToolCalls : 0 ,
32+ close : vi . fn ( ) . mockResolvedValue ( undefined ) ,
33+ installGracefulShutdown : vi . fn ( ( ) => ( {
34+ cleanup : vi . fn ( ) ,
35+ getShutdownPromise : vi . fn ( ) ,
36+ } ) ) ,
3237 sentry : {
3338 init : vi . fn ( ( ) => ( { } ) ) ,
3439 setUser : vi . fn ( ) ,
@@ -50,6 +55,10 @@ vi.mock("./utils/hevyClient.js", () => ({
5055 createClient : vi . fn ( ) . mockReturnValue ( { mockedClient : true } ) ,
5156} ) ) ;
5257
58+ vi . mock ( "./utils/graceful-shutdown.js" , ( ) => ( {
59+ installGracefulShutdown : testDoubles . installGracefulShutdown ,
60+ } ) ) ;
61+
5362vi . mock ( "./utils/telemetry.js" , ( ) => ( {
5463 Sentry : testDoubles . sentry ,
5564 tracer : {
@@ -100,6 +109,7 @@ vi.mock("@modelcontextprotocol/sdk/server/mcp.js", () => {
100109 }
101110
102111 connect = testDoubles . connect ;
112+ close = testDoubles . close ;
103113 isConnected = vi . fn ( ( ) => true ) ;
104114 sendLoggingMessage = testDoubles . sendLoggingMessage ;
105115 registerPrompt = testDoubles . registerPrompt ;
@@ -132,6 +142,8 @@ describe("Server entry", () => {
132142 process . env = { ...originalEnv } ;
133143 process . argv = [ ...originalArgv ] ;
134144 vi . clearAllMocks ( ) ;
145+ testDoubles . connect . mockResolvedValue ( undefined ) ;
146+ testDoubles . close . mockResolvedValue ( undefined ) ;
135147 testDoubles . directRegisterToolCalls = 0 ;
136148 testDoubles . tool . mockImplementation (
137149 function ( this : { registerTool : ( ) => void } ) {
@@ -290,6 +302,7 @@ describe("Server entry", () => {
290302 expect ( exitSpy ) . not . toHaveBeenCalled ( ) ;
291303 expect ( createClient ) . not . toHaveBeenCalled ( ) ;
292304 expect ( testDoubles . startActiveSpan ) . not . toHaveBeenCalled ( ) ;
305+ expect ( testDoubles . installGracefulShutdown ) . not . toHaveBeenCalled ( ) ;
293306
294307 const anyStdioModule = stdioModule as { __transports ?: unknown [ ] } ;
295308 expect ( anyStdioModule . __transports ) . toHaveLength ( 0 ) ;
@@ -323,6 +336,7 @@ describe("Server entry", () => {
323336 expect ( helpText ) . toContain ( "Examples:" ) ;
324337 expect ( createClient ) . not . toHaveBeenCalled ( ) ;
325338 expect ( testDoubles . startActiveSpan ) . not . toHaveBeenCalled ( ) ;
339+ expect ( testDoubles . installGracefulShutdown ) . not . toHaveBeenCalled ( ) ;
326340
327341 const anyStdioModule = stdioModule as { __transports ?: unknown [ ] } ;
328342 expect ( anyStdioModule . __transports ) . toHaveLength ( 0 ) ;
@@ -357,6 +371,12 @@ describe("Server entry", () => {
357371 ) ;
358372 expect ( spanNames ) . toContain ( "mcp.server.run" ) ;
359373 expect ( spanNames ) . toContain ( "mcp.server.connect" ) ;
374+ expect ( testDoubles . installGracefulShutdown ) . toHaveBeenCalledWith ( {
375+ target : expect . objectContaining ( { close : testDoubles . close } ) ,
376+ } ) ;
377+ expect ( testDoubles . connect . mock . invocationCallOrder [ 0 ] ) . toBeLessThan (
378+ testDoubles . installGracefulShutdown . mock . invocationCallOrder [ 0 ] ?? 0 ,
379+ ) ;
360380 } ) ;
361381
362382 it ( "prefers CLI --hevy-api-key argument over environment variable" , async ( ) => {
@@ -393,6 +413,7 @@ describe("Server entry", () => {
393413
394414 await expect ( runServer ( ) ) . rejects . toThrow ( "connect failed" ) ;
395415 expect ( testDoubles . connect ) . toHaveBeenCalled ( ) ;
416+ expect ( testDoubles . installGracefulShutdown ) . not . toHaveBeenCalled ( ) ;
396417 expect ( testDoubles . span . setStatus ) . toHaveBeenCalledWith ( { code : 2 } ) ;
397418 } ) ;
398419
0 commit comments