Commit c0ea55a5 authored by Illya Klymov's avatar Illya Klymov 🔴
Browse files

fix: respect vscode telemetry settings

* do not include telemetry stats if user opted-out
parent f737f1f1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ module.exports = {
    getExtension: jest.fn(),
  },
  env: {
    isTelemetryEnabled: true,
    uriScheme: 'vscode',
    clipboard: {
      writeText: jest.fn(),
+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';

@@ -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);

@@ -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 },
      ]);
    });
  });
});
+5 −1
Original line number Diff line number Diff line
import * as vscode from 'vscode';

export interface Model {
  engine: string;
  name: string;
@@ -55,7 +57,9 @@ export class CodeSuggestionsTelemetry {
  }

  toArray() {
    return Object.values(this.#telemetryByModel);
    const { isTelemetryEnabled } = vscode.env;

    return isTelemetryEnabled ? Object.values(this.#telemetryByModel) : [];
  }
}