@@ -321,8 +321,10 @@ describe("extension.ts", () => {
321321 } )
322322
323323 describe ( "telemetry level reactivity" , ( ) => {
324- beforeEach ( ( ) => {
324+ beforeEach ( async ( ) => {
325325 vi . resetModules ( )
326+ const vscode = await import ( "vscode" )
327+ ; ( vscode . env as any ) . isTelemetryEnabled = true
326328 } )
327329
328330 test ( "registers a listener for vscode.env.onDidChangeTelemetryEnabled" , async ( ) => {
@@ -342,26 +344,30 @@ describe("extension.ts", () => {
342344
343345 const mockContextProxyInstance = await ( ContextProxy . getInstance as any ) ( )
344346 vi . mocked ( mockContextProxyInstance . getGlobalState ) . mockReturnValue ( "enabled" )
347+ ; ( vscode . env as any ) . isTelemetryEnabled = true
345348
346349 const { activate } = await import ( "../extension" )
347350 await activate ( mockContext )
348351
349352 const updateTelemetryStateMock = vi . mocked ( TelemetryService . instance . updateTelemetryState )
350353 updateTelemetryStateMock . mockClear ( )
351354
355+ // The real vscode.env.onDidChangeTelemetryEnabled event carries no payload; the handler
356+ // must read the current vscode.env.isTelemetryEnabled value, not any argument it's called with.
352357 const onDidChangeHandler = vi . mocked ( vscode . env . onDidChangeTelemetryEnabled ) . mock . calls [ 0 ] [ 0 ]
353- onDidChangeHandler ( false )
358+ onDidChangeHandler ( undefined as any )
354359
355360 expect ( updateTelemetryStateMock ) . toHaveBeenCalledWith ( true )
356361 } )
357362
358- test ( "treats a disabled stored setting as opted out even when VS Code telemetry is re- enabled" , async ( ) => {
363+ test ( "treats a disabled stored setting as opted out even when VS Code telemetry is enabled" , async ( ) => {
359364 const vscode = await import ( "vscode" )
360365 const { TelemetryService } = await import ( "@roo-code/telemetry" )
361366 const { ContextProxy } = await import ( "../core/config/ContextProxy" )
362367
363368 const mockContextProxyInstance = await ( ContextProxy . getInstance as any ) ( )
364369 vi . mocked ( mockContextProxyInstance . getGlobalState ) . mockReturnValue ( "disabled" )
370+ ; ( vscode . env as any ) . isTelemetryEnabled = true
365371
366372 const { activate } = await import ( "../extension" )
367373 await activate ( mockContext )
@@ -370,7 +376,33 @@ describe("extension.ts", () => {
370376 updateTelemetryStateMock . mockClear ( )
371377
372378 const onDidChangeHandler = vi . mocked ( vscode . env . onDidChangeTelemetryEnabled ) . mock . calls [ 0 ] [ 0 ]
373- onDidChangeHandler ( true )
379+ onDidChangeHandler ( undefined as any )
380+
381+ expect ( updateTelemetryStateMock ) . toHaveBeenCalledWith ( false )
382+ } )
383+
384+ test ( "treats VS Code's live telemetry-disabled signal as opted out even when the stored setting is enabled" , async ( ) => {
385+ const vscode = await import ( "vscode" )
386+ const { TelemetryService } = await import ( "@roo-code/telemetry" )
387+ const { ContextProxy } = await import ( "../core/config/ContextProxy" )
388+
389+ const mockContextProxyInstance = await ( ContextProxy . getInstance as any ) ( )
390+ vi . mocked ( mockContextProxyInstance . getGlobalState ) . mockReturnValue ( "enabled" )
391+ ; ( vscode . env as any ) . isTelemetryEnabled = true
392+
393+ const { activate } = await import ( "../extension" )
394+ await activate ( mockContext )
395+
396+ const updateTelemetryStateMock = vi . mocked ( TelemetryService . instance . updateTelemetryState )
397+ updateTelemetryStateMock . mockClear ( )
398+
399+ // Simulate the user turning off VS Code's global telemetry toggle: the live env value
400+ // flips before the event fires, and the handler must honor it rather than only the
401+ // stored extension setting.
402+ ; ( vscode . env as any ) . isTelemetryEnabled = false
403+
404+ const onDidChangeHandler = vi . mocked ( vscode . env . onDidChangeTelemetryEnabled ) . mock . calls [ 0 ] [ 0 ]
405+ onDidChangeHandler ( undefined as any )
374406
375407 expect ( updateTelemetryStateMock ) . toHaveBeenCalledWith ( false )
376408 } )
0 commit comments