Loading src/__mocks__/vscode.js +1 −0 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ module.exports = { getExtension: jest.fn(), }, env: { isTelemetryEnabled: true, uriScheme: 'vscode', clipboard: { writeText: jest.fn(), Loading src/common/code_suggestions/code_suggestions_telemetry.test.ts +32 −0 Original line number Diff line number Diff line import * as vscode from 'vscode'; import { compareBy } from '../utils/compare_by'; import { CodeSuggestionsTelemetry, Model, Telemetry } from './code_suggestions_telemetry'; Loading @@ -23,6 +24,12 @@ describe('CodeSuggestionsTelemetry', () => { telemetry = new CodeSuggestionsTelemetry(); }); describe('when telemetry is enabled', () => { beforeEach(() => { // @ts-expect-error vscode is mocked, so it is writable here vscode.env.isTelemetryEnabled = true; }); it('increases request count', () => { telemetry.incRequestCount(codegenModel); Loading Loading @@ -67,3 +74,28 @@ describe('CodeSuggestionsTelemetry', () => { ]); }); }); describe('when telemetry is disabled', () => { beforeEach(() => { // @ts-expect-error vscode is mocked, so it is writable here vscode.env.isTelemetryEnabled = false; telemetry.incRequestCount(codegenModel); telemetry.incAcceptCount(codegenModel); telemetry.incErrorCount(codegenModel); }); it('does not expose any telemetry data', () => { expect(telemetry.toArray()).toEqual([]); }); it('exposes tracked stats when telemetry becomes enabled', () => { // @ts-expect-error vscode is mocked, so it is writable here vscode.env.isTelemetryEnabled = true; expect(telemetry.toArray()).toEqual([ { ...codegenTelemetry, accepts: 1, errors: 1, requests: 1 }, ]); }); }); }); src/common/code_suggestions/code_suggestions_telemetry.ts +5 −1 Original line number Diff line number Diff line import * as vscode from 'vscode'; export interface Model { engine: string; name: string; Loading Loading @@ -55,7 +57,9 @@ export class CodeSuggestionsTelemetry { } toArray() { return Object.values(this.#telemetryByModel); const { isTelemetryEnabled } = vscode.env; return isTelemetryEnabled ? Object.values(this.#telemetryByModel) : []; } } Loading Loading
src/__mocks__/vscode.js +1 −0 Original line number Diff line number Diff line Loading @@ -71,6 +71,7 @@ module.exports = { getExtension: jest.fn(), }, env: { isTelemetryEnabled: true, uriScheme: 'vscode', clipboard: { writeText: jest.fn(), Loading
src/common/code_suggestions/code_suggestions_telemetry.test.ts +32 −0 Original line number Diff line number Diff line import * as vscode from 'vscode'; import { compareBy } from '../utils/compare_by'; import { CodeSuggestionsTelemetry, Model, Telemetry } from './code_suggestions_telemetry'; Loading @@ -23,6 +24,12 @@ describe('CodeSuggestionsTelemetry', () => { telemetry = new CodeSuggestionsTelemetry(); }); describe('when telemetry is enabled', () => { beforeEach(() => { // @ts-expect-error vscode is mocked, so it is writable here vscode.env.isTelemetryEnabled = true; }); it('increases request count', () => { telemetry.incRequestCount(codegenModel); Loading Loading @@ -67,3 +74,28 @@ describe('CodeSuggestionsTelemetry', () => { ]); }); }); describe('when telemetry is disabled', () => { beforeEach(() => { // @ts-expect-error vscode is mocked, so it is writable here vscode.env.isTelemetryEnabled = false; telemetry.incRequestCount(codegenModel); telemetry.incAcceptCount(codegenModel); telemetry.incErrorCount(codegenModel); }); it('does not expose any telemetry data', () => { expect(telemetry.toArray()).toEqual([]); }); it('exposes tracked stats when telemetry becomes enabled', () => { // @ts-expect-error vscode is mocked, so it is writable here vscode.env.isTelemetryEnabled = true; expect(telemetry.toArray()).toEqual([ { ...codegenTelemetry, accepts: 1, errors: 1, requests: 1 }, ]); }); }); });
src/common/code_suggestions/code_suggestions_telemetry.ts +5 −1 Original line number Diff line number Diff line import * as vscode from 'vscode'; export interface Model { engine: string; name: string; Loading Loading @@ -55,7 +57,9 @@ export class CodeSuggestionsTelemetry { } toArray() { return Object.values(this.#telemetryByModel); const { isTelemetryEnabled } = vscode.env; return isTelemetryEnabled ? Object.values(this.#telemetryByModel) : []; } } Loading