From c068f1823754503a88a1027e0aa0f352f8ba6938 Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Thu, 4 May 2023 10:56:35 -0700 Subject: [PATCH 01/19] Add enable telemetry to package json --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index fd6ddcea84ca..3a16f60d0f97 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "engines": { "vscode": "^1.78.0-20230421" }, + "enableTelemetry": false, "keywords": [ "python", "django", From 0e9d972f37ecbe6a74920b684a104ee9c9813367 Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Thu, 4 May 2023 10:57:33 -0700 Subject: [PATCH 02/19] Update disableTelemetry function --- src/client/telemetry/index.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/client/telemetry/index.ts b/src/client/telemetry/index.ts index 5dff35067196..8f1fdf773dd6 100644 --- a/src/client/telemetry/index.ts +++ b/src/client/telemetry/index.ts @@ -4,9 +4,10 @@ import TelemetryReporter from '@vscode/extension-telemetry'; +import * as path from 'path'; +import * as fs from 'fs-extra'; import { DiagnosticCodes } from '../application/diagnostics/constants'; -import { IWorkspaceService } from '../common/application/types'; -import { AppinsightsKey, isTestExecution, isUnitTestExecution } from '../common/constants'; +import { AppinsightsKey, EXTENSION_ROOT_DIR, isTestExecution, isUnitTestExecution } from '../common/constants'; import type { TerminalShellType } from '../common/terminal/types'; import { StopWatch } from '../common/utils/stopWatch'; import { isPromise } from '../common/utils/async'; @@ -41,12 +42,13 @@ function isTelemetrySupported(): boolean { } /** - * Checks if the telemetry is disabled in user settings + * Checks if the telemetry is disabled * @returns {boolean} */ -export function isTelemetryDisabled(workspaceService: IWorkspaceService): boolean { - const settings = workspaceService.getConfiguration('telemetry').inspect('enableTelemetry')!; - return settings.globalValue === false; +export function isTelemetryDisabled(): boolean { + const packaJsonPath = path.join(EXTENSION_ROOT_DIR, 'package.json') + const packageJson = fs.readJSONSync(packaJsonPath); + return !packageJson.enableTelemetry; } const sharedProperties: Record = {}; @@ -101,7 +103,7 @@ export function sendTelemetryEvent

Date: Thu, 4 May 2023 10:57:43 -0700 Subject: [PATCH 03/19] Update tests --- src/test/telemetry/index.unit.test.ts | 39 +++++++++++---------------- 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/src/test/telemetry/index.unit.test.ts b/src/test/telemetry/index.unit.test.ts index 00272aad1f64..7401278414c6 100644 --- a/src/test/telemetry/index.unit.test.ts +++ b/src/test/telemetry/index.unit.test.ts @@ -4,12 +4,9 @@ import { expect } from 'chai'; import rewiremock from 'rewiremock'; -import * as TypeMoq from 'typemoq'; +import * as sinon from 'sinon'; +import * as fs from 'fs-extra'; -import { instance, mock, verify, when } from 'ts-mockito'; -import { WorkspaceConfiguration } from 'vscode'; -import { IWorkspaceService } from '../../client/common/application/types'; -import { WorkspaceService } from '../../client/common/application/workspace'; import { _resetSharedProperties, clearTelemetryReporter, @@ -19,9 +16,9 @@ import { } from '../../client/telemetry'; suite('Telemetry', () => { - let workspaceService: IWorkspaceService; const oldValueOfVSC_PYTHON_UNIT_TEST = process.env.VSC_PYTHON_UNIT_TEST; const oldValueOfVSC_PYTHON_CI_TEST = process.env.VSC_PYTHON_CI_TEST; + let readJSONSyncStub: sinon.SinonStub; class Reporter { public static eventName: string[] = []; @@ -48,9 +45,10 @@ suite('Telemetry', () => { } setup(() => { - workspaceService = mock(WorkspaceService); process.env.VSC_PYTHON_UNIT_TEST = undefined; process.env.VSC_PYTHON_CI_TEST = undefined; + readJSONSyncStub = sinon.stub(fs, 'readJSONSync'); + readJSONSyncStub.returns({enableTelemetry: true}); clearTelemetryReporter(); Reporter.clear(); }); @@ -59,35 +57,28 @@ suite('Telemetry', () => { process.env.VSC_PYTHON_CI_TEST = oldValueOfVSC_PYTHON_CI_TEST; rewiremock.disable(); _resetSharedProperties(); + sinon.restore(); }); const testsForisTelemetryDisabled = [ { - testName: 'Returns true when globalValue is set to false', - settings: { globalValue: false }, - expectedResult: true, + testName: 'Returns true', + settings: { enableTelemetry: true }, + expectedResult: false, }, { - testName: 'Returns false otherwise', - settings: {}, - expectedResult: false, + testName: 'Returns false ', + settings: {enableTelemetry: false}, + expectedResult: true, }, ]; suite('Function isTelemetryDisabled()', () => { testsForisTelemetryDisabled.forEach((testParams) => { test(testParams.testName, async () => { - const workspaceConfig = TypeMoq.Mock.ofType(); - when(workspaceService.getConfiguration('telemetry')).thenReturn(workspaceConfig.object); - workspaceConfig - .setup((c) => c.inspect('enableTelemetry')) - .returns(() => testParams.settings as any) - .verifiable(TypeMoq.Times.once()); - - expect(isTelemetryDisabled(instance(workspaceService))).to.equal(testParams.expectedResult); - - verify(workspaceService.getConfiguration('telemetry')).once(); - workspaceConfig.verifyAll(); + readJSONSyncStub.returns(testParams.settings); + expect(isTelemetryDisabled()).to.equal(testParams.expectedResult); + sinon.assert.calledOnce(readJSONSyncStub); }); }); }); From eea8190c5ff5f4b05da8d4ca81d422fa0a6095bf Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Thu, 4 May 2023 11:01:02 -0700 Subject: [PATCH 04/19] run prettier --- src/client/telemetry/index.ts | 4 ++-- src/test/telemetry/index.unit.test.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/client/telemetry/index.ts b/src/client/telemetry/index.ts index 8f1fdf773dd6..5b94c9eeb614 100644 --- a/src/client/telemetry/index.ts +++ b/src/client/telemetry/index.ts @@ -46,7 +46,7 @@ function isTelemetrySupported(): boolean { * @returns {boolean} */ export function isTelemetryDisabled(): boolean { - const packaJsonPath = path.join(EXTENSION_ROOT_DIR, 'package.json') + const packaJsonPath = path.join(EXTENSION_ROOT_DIR, 'package.json'); const packageJson = fs.readJSONSync(packaJsonPath); return !packageJson.enableTelemetry; } @@ -103,7 +103,7 @@ export function sendTelemetryEvent

{ process.env.VSC_PYTHON_UNIT_TEST = undefined; process.env.VSC_PYTHON_CI_TEST = undefined; readJSONSyncStub = sinon.stub(fs, 'readJSONSync'); - readJSONSyncStub.returns({enableTelemetry: true}); + readJSONSyncStub.returns({ enableTelemetry: true }); clearTelemetryReporter(); Reporter.clear(); }); @@ -68,7 +68,7 @@ suite('Telemetry', () => { }, { testName: 'Returns false ', - settings: {enableTelemetry: false}, + settings: { enableTelemetry: false }, expectedResult: true, }, ]; From e828cccf15039d08c60f0410a385fad58e6393df Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Thu, 4 May 2023 10:56:35 -0700 Subject: [PATCH 05/19] Add enable telemetry to package json --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 3983015784dc..02f263ed3fd2 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "engines": { "vscode": "^1.79.0-20230526" }, + "enableTelemetry": false, "keywords": [ "python", "django", From e5606115016a42aaa4b8a18fc30727ea3bd0f3e7 Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Thu, 4 May 2023 10:57:33 -0700 Subject: [PATCH 06/19] Update disableTelemetry function --- src/client/telemetry/index.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/client/telemetry/index.ts b/src/client/telemetry/index.ts index d0b9d463c070..d4ad97155c22 100644 --- a/src/client/telemetry/index.ts +++ b/src/client/telemetry/index.ts @@ -4,9 +4,10 @@ import TelemetryReporter from '@vscode/extension-telemetry'; +import * as path from 'path'; +import * as fs from 'fs-extra'; import { DiagnosticCodes } from '../application/diagnostics/constants'; -import { IWorkspaceService } from '../common/application/types'; -import { AppinsightsKey, isTestExecution, isUnitTestExecution } from '../common/constants'; +import { AppinsightsKey, EXTENSION_ROOT_DIR, isTestExecution, isUnitTestExecution } from '../common/constants'; import type { TerminalShellType } from '../common/terminal/types'; import { StopWatch } from '../common/utils/stopWatch'; import { isPromise } from '../common/utils/async'; @@ -41,12 +42,13 @@ function isTelemetrySupported(): boolean { } /** - * Checks if the telemetry is disabled in user settings + * Checks if the telemetry is disabled * @returns {boolean} */ -export function isTelemetryDisabled(workspaceService: IWorkspaceService): boolean { - const settings = workspaceService.getConfiguration('telemetry').inspect('enableTelemetry')!; - return settings.globalValue === false; +export function isTelemetryDisabled(): boolean { + const packaJsonPath = path.join(EXTENSION_ROOT_DIR, 'package.json') + const packageJson = fs.readJSONSync(packaJsonPath); + return !packageJson.enableTelemetry; } const sharedProperties: Record = {}; @@ -101,7 +103,7 @@ export function sendTelemetryEvent

Date: Thu, 4 May 2023 10:57:43 -0700 Subject: [PATCH 07/19] Update tests --- src/test/telemetry/index.unit.test.ts | 39 +++++++++++---------------- 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/src/test/telemetry/index.unit.test.ts b/src/test/telemetry/index.unit.test.ts index 00272aad1f64..7401278414c6 100644 --- a/src/test/telemetry/index.unit.test.ts +++ b/src/test/telemetry/index.unit.test.ts @@ -4,12 +4,9 @@ import { expect } from 'chai'; import rewiremock from 'rewiremock'; -import * as TypeMoq from 'typemoq'; +import * as sinon from 'sinon'; +import * as fs from 'fs-extra'; -import { instance, mock, verify, when } from 'ts-mockito'; -import { WorkspaceConfiguration } from 'vscode'; -import { IWorkspaceService } from '../../client/common/application/types'; -import { WorkspaceService } from '../../client/common/application/workspace'; import { _resetSharedProperties, clearTelemetryReporter, @@ -19,9 +16,9 @@ import { } from '../../client/telemetry'; suite('Telemetry', () => { - let workspaceService: IWorkspaceService; const oldValueOfVSC_PYTHON_UNIT_TEST = process.env.VSC_PYTHON_UNIT_TEST; const oldValueOfVSC_PYTHON_CI_TEST = process.env.VSC_PYTHON_CI_TEST; + let readJSONSyncStub: sinon.SinonStub; class Reporter { public static eventName: string[] = []; @@ -48,9 +45,10 @@ suite('Telemetry', () => { } setup(() => { - workspaceService = mock(WorkspaceService); process.env.VSC_PYTHON_UNIT_TEST = undefined; process.env.VSC_PYTHON_CI_TEST = undefined; + readJSONSyncStub = sinon.stub(fs, 'readJSONSync'); + readJSONSyncStub.returns({enableTelemetry: true}); clearTelemetryReporter(); Reporter.clear(); }); @@ -59,35 +57,28 @@ suite('Telemetry', () => { process.env.VSC_PYTHON_CI_TEST = oldValueOfVSC_PYTHON_CI_TEST; rewiremock.disable(); _resetSharedProperties(); + sinon.restore(); }); const testsForisTelemetryDisabled = [ { - testName: 'Returns true when globalValue is set to false', - settings: { globalValue: false }, - expectedResult: true, + testName: 'Returns true', + settings: { enableTelemetry: true }, + expectedResult: false, }, { - testName: 'Returns false otherwise', - settings: {}, - expectedResult: false, + testName: 'Returns false ', + settings: {enableTelemetry: false}, + expectedResult: true, }, ]; suite('Function isTelemetryDisabled()', () => { testsForisTelemetryDisabled.forEach((testParams) => { test(testParams.testName, async () => { - const workspaceConfig = TypeMoq.Mock.ofType(); - when(workspaceService.getConfiguration('telemetry')).thenReturn(workspaceConfig.object); - workspaceConfig - .setup((c) => c.inspect('enableTelemetry')) - .returns(() => testParams.settings as any) - .verifiable(TypeMoq.Times.once()); - - expect(isTelemetryDisabled(instance(workspaceService))).to.equal(testParams.expectedResult); - - verify(workspaceService.getConfiguration('telemetry')).once(); - workspaceConfig.verifyAll(); + readJSONSyncStub.returns(testParams.settings); + expect(isTelemetryDisabled()).to.equal(testParams.expectedResult); + sinon.assert.calledOnce(readJSONSyncStub); }); }); }); From 1b0e2bfa989752b6e1c19a8454c56a3f8434bbed Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Thu, 4 May 2023 11:01:02 -0700 Subject: [PATCH 08/19] run prettier --- src/client/telemetry/index.ts | 4 ++-- src/test/telemetry/index.unit.test.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/client/telemetry/index.ts b/src/client/telemetry/index.ts index d4ad97155c22..a031e85294d6 100644 --- a/src/client/telemetry/index.ts +++ b/src/client/telemetry/index.ts @@ -46,7 +46,7 @@ function isTelemetrySupported(): boolean { * @returns {boolean} */ export function isTelemetryDisabled(): boolean { - const packaJsonPath = path.join(EXTENSION_ROOT_DIR, 'package.json') + const packaJsonPath = path.join(EXTENSION_ROOT_DIR, 'package.json'); const packageJson = fs.readJSONSync(packaJsonPath); return !packageJson.enableTelemetry; } @@ -103,7 +103,7 @@ export function sendTelemetryEvent

{ process.env.VSC_PYTHON_UNIT_TEST = undefined; process.env.VSC_PYTHON_CI_TEST = undefined; readJSONSyncStub = sinon.stub(fs, 'readJSONSync'); - readJSONSyncStub.returns({enableTelemetry: true}); + readJSONSyncStub.returns({ enableTelemetry: true }); clearTelemetryReporter(); Reporter.clear(); }); @@ -68,7 +68,7 @@ suite('Telemetry', () => { }, { testName: 'Returns false ', - settings: {enableTelemetry: false}, + settings: { enableTelemetry: false }, expectedResult: true, }, ]; From 8d61c1ceb322a8efcdbf01016d65a3acea0c366d Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Tue, 6 Jun 2023 15:35:36 -0700 Subject: [PATCH 09/19] Fix tests --- src/test/debugger/extension/adapter/factory.unit.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/debugger/extension/adapter/factory.unit.test.ts b/src/test/debugger/extension/adapter/factory.unit.test.ts index a1e57d44f6cb..5728bf0c34cd 100644 --- a/src/test/debugger/extension/adapter/factory.unit.test.ts +++ b/src/test/debugger/extension/adapter/factory.unit.test.ts @@ -6,6 +6,7 @@ import * as assert from 'assert'; import { expect, use } from 'chai'; import * as chaiAsPromised from 'chai-as-promised'; +import * as fs from 'fs-extra'; import * as path from 'path'; import * as sinon from 'sinon'; import rewiremock from 'rewiremock'; @@ -36,6 +37,7 @@ suite('Debugging - Adapter Factory', () => { let stateFactory: IPersistentStateFactory; let state: PersistentState; let showErrorMessageStub: sinon.SinonStub; + let readJSONSyncStub: sinon.SinonStub; let commandManager: ICommandManager; const nodeExecutable = undefined; @@ -66,6 +68,8 @@ suite('Debugging - Adapter Factory', () => { setup(() => { process.env.VSC_PYTHON_UNIT_TEST = undefined; process.env.VSC_PYTHON_CI_TEST = undefined; + readJSONSyncStub = sinon.stub(fs, 'readJSONSync'); + readJSONSyncStub.returns({ enableTelemetry: true }); rewiremock.enable(); rewiremock('@vscode/extension-telemetry').with({ default: Reporter }); stateFactory = mock(PersistentStateFactory); From 011b6ca7d78a88ebc539d95322e74eddd55343b0 Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Tue, 6 Jun 2023 15:38:41 -0700 Subject: [PATCH 10/19] Add funtion that update package.json file --- build/update_package_file.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 build/update_package_file.py diff --git a/build/update_package_file.py b/build/update_package_file.py new file mode 100644 index 000000000000..b61460b4cc21 --- /dev/null +++ b/build/update_package_file.py @@ -0,0 +1,21 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import json +import pathlib +import sys + +EXT_ROOT = pathlib.Path(__file__).parent.parent +PACKAGE_JSON_PATH = EXT_ROOT / "package.json" + +def main(package_json: pathlib.Path) -> None: + package = json.loads(package_json.read_text(encoding="utf-8")) + package['enableTelemetry'] = True + + # Overwrite package.json with new data add a new-line at the end of the file. + package_json.write_text( + json.dumps(package, indent=4, ensure_ascii=False) + "\n", encoding="utf-8" + ) + +if __name__ == "__main__": + main(PACKAGE_JSON_PATH, sys.argv[1:]) From 47f5e1371a1425f7c157baf40ad6c877aa20c9d7 Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Tue, 6 Jun 2023 15:40:59 -0700 Subject: [PATCH 11/19] Update release pipelines --- build/azure-pipeline.pre-release.yml | 4 ++++ build/azure-pipeline.stable.yml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/build/azure-pipeline.pre-release.yml b/build/azure-pipeline.pre-release.yml index 5bc61b2fd559..7b13978b8db2 100644 --- a/build/azure-pipeline.pre-release.yml +++ b/build/azure-pipeline.pre-release.yml @@ -61,6 +61,10 @@ extends: python ./build/update_ext_version.py --for-publishing displayName: Update build number + - script: | + python ./build/update_package_file.py + displayName: Update telemetry in package.json + - script: npm run addExtensionPackDependencies displayName: Update optional extension dependencies diff --git a/build/azure-pipeline.stable.yml b/build/azure-pipeline.stable.yml index 159d856b6c3e..50ccbb9fff7a 100644 --- a/build/azure-pipeline.stable.yml +++ b/build/azure-pipeline.stable.yml @@ -63,6 +63,10 @@ extends: - script: | python ./build/update_ext_version.py --release --for-publishing displayName: Update build number + + - script: | + python ./build/update_package_file.py + displayName: Update telemetry in package.json - script: npm run addExtensionPackDependencies displayName: Update optional extension dependencies From 8ba88d4756bcb42cd766040f91e0768393a58e4f Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Thu, 4 May 2023 10:56:35 -0700 Subject: [PATCH 12/19] Add enable telemetry to package json --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index d76ba16ee16d..8d9c14724438 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "engines": { "vscode": "^1.79.0-20230526" }, + "enableTelemetry": false, "keywords": [ "python", "django", From 6f5bf8b39c282a8ca655e3ba522d7f9a4621ce2d Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Thu, 4 May 2023 10:57:33 -0700 Subject: [PATCH 13/19] Update disableTelemetry function --- src/client/telemetry/index.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/client/telemetry/index.ts b/src/client/telemetry/index.ts index d0b9d463c070..d4ad97155c22 100644 --- a/src/client/telemetry/index.ts +++ b/src/client/telemetry/index.ts @@ -4,9 +4,10 @@ import TelemetryReporter from '@vscode/extension-telemetry'; +import * as path from 'path'; +import * as fs from 'fs-extra'; import { DiagnosticCodes } from '../application/diagnostics/constants'; -import { IWorkspaceService } from '../common/application/types'; -import { AppinsightsKey, isTestExecution, isUnitTestExecution } from '../common/constants'; +import { AppinsightsKey, EXTENSION_ROOT_DIR, isTestExecution, isUnitTestExecution } from '../common/constants'; import type { TerminalShellType } from '../common/terminal/types'; import { StopWatch } from '../common/utils/stopWatch'; import { isPromise } from '../common/utils/async'; @@ -41,12 +42,13 @@ function isTelemetrySupported(): boolean { } /** - * Checks if the telemetry is disabled in user settings + * Checks if the telemetry is disabled * @returns {boolean} */ -export function isTelemetryDisabled(workspaceService: IWorkspaceService): boolean { - const settings = workspaceService.getConfiguration('telemetry').inspect('enableTelemetry')!; - return settings.globalValue === false; +export function isTelemetryDisabled(): boolean { + const packaJsonPath = path.join(EXTENSION_ROOT_DIR, 'package.json') + const packageJson = fs.readJSONSync(packaJsonPath); + return !packageJson.enableTelemetry; } const sharedProperties: Record = {}; @@ -101,7 +103,7 @@ export function sendTelemetryEvent

Date: Thu, 4 May 2023 10:57:43 -0700 Subject: [PATCH 14/19] Update tests --- src/test/telemetry/index.unit.test.ts | 39 +++++++++++---------------- 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/src/test/telemetry/index.unit.test.ts b/src/test/telemetry/index.unit.test.ts index 00272aad1f64..7401278414c6 100644 --- a/src/test/telemetry/index.unit.test.ts +++ b/src/test/telemetry/index.unit.test.ts @@ -4,12 +4,9 @@ import { expect } from 'chai'; import rewiremock from 'rewiremock'; -import * as TypeMoq from 'typemoq'; +import * as sinon from 'sinon'; +import * as fs from 'fs-extra'; -import { instance, mock, verify, when } from 'ts-mockito'; -import { WorkspaceConfiguration } from 'vscode'; -import { IWorkspaceService } from '../../client/common/application/types'; -import { WorkspaceService } from '../../client/common/application/workspace'; import { _resetSharedProperties, clearTelemetryReporter, @@ -19,9 +16,9 @@ import { } from '../../client/telemetry'; suite('Telemetry', () => { - let workspaceService: IWorkspaceService; const oldValueOfVSC_PYTHON_UNIT_TEST = process.env.VSC_PYTHON_UNIT_TEST; const oldValueOfVSC_PYTHON_CI_TEST = process.env.VSC_PYTHON_CI_TEST; + let readJSONSyncStub: sinon.SinonStub; class Reporter { public static eventName: string[] = []; @@ -48,9 +45,10 @@ suite('Telemetry', () => { } setup(() => { - workspaceService = mock(WorkspaceService); process.env.VSC_PYTHON_UNIT_TEST = undefined; process.env.VSC_PYTHON_CI_TEST = undefined; + readJSONSyncStub = sinon.stub(fs, 'readJSONSync'); + readJSONSyncStub.returns({enableTelemetry: true}); clearTelemetryReporter(); Reporter.clear(); }); @@ -59,35 +57,28 @@ suite('Telemetry', () => { process.env.VSC_PYTHON_CI_TEST = oldValueOfVSC_PYTHON_CI_TEST; rewiremock.disable(); _resetSharedProperties(); + sinon.restore(); }); const testsForisTelemetryDisabled = [ { - testName: 'Returns true when globalValue is set to false', - settings: { globalValue: false }, - expectedResult: true, + testName: 'Returns true', + settings: { enableTelemetry: true }, + expectedResult: false, }, { - testName: 'Returns false otherwise', - settings: {}, - expectedResult: false, + testName: 'Returns false ', + settings: {enableTelemetry: false}, + expectedResult: true, }, ]; suite('Function isTelemetryDisabled()', () => { testsForisTelemetryDisabled.forEach((testParams) => { test(testParams.testName, async () => { - const workspaceConfig = TypeMoq.Mock.ofType(); - when(workspaceService.getConfiguration('telemetry')).thenReturn(workspaceConfig.object); - workspaceConfig - .setup((c) => c.inspect('enableTelemetry')) - .returns(() => testParams.settings as any) - .verifiable(TypeMoq.Times.once()); - - expect(isTelemetryDisabled(instance(workspaceService))).to.equal(testParams.expectedResult); - - verify(workspaceService.getConfiguration('telemetry')).once(); - workspaceConfig.verifyAll(); + readJSONSyncStub.returns(testParams.settings); + expect(isTelemetryDisabled()).to.equal(testParams.expectedResult); + sinon.assert.calledOnce(readJSONSyncStub); }); }); }); From 81e6c98d2b3dc5b46647fc944db6955bbc357387 Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Thu, 4 May 2023 11:01:02 -0700 Subject: [PATCH 15/19] run prettier --- src/client/telemetry/index.ts | 4 ++-- src/test/telemetry/index.unit.test.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/client/telemetry/index.ts b/src/client/telemetry/index.ts index d4ad97155c22..a031e85294d6 100644 --- a/src/client/telemetry/index.ts +++ b/src/client/telemetry/index.ts @@ -46,7 +46,7 @@ function isTelemetrySupported(): boolean { * @returns {boolean} */ export function isTelemetryDisabled(): boolean { - const packaJsonPath = path.join(EXTENSION_ROOT_DIR, 'package.json') + const packaJsonPath = path.join(EXTENSION_ROOT_DIR, 'package.json'); const packageJson = fs.readJSONSync(packaJsonPath); return !packageJson.enableTelemetry; } @@ -103,7 +103,7 @@ export function sendTelemetryEvent

{ process.env.VSC_PYTHON_UNIT_TEST = undefined; process.env.VSC_PYTHON_CI_TEST = undefined; readJSONSyncStub = sinon.stub(fs, 'readJSONSync'); - readJSONSyncStub.returns({enableTelemetry: true}); + readJSONSyncStub.returns({ enableTelemetry: true }); clearTelemetryReporter(); Reporter.clear(); }); @@ -68,7 +68,7 @@ suite('Telemetry', () => { }, { testName: 'Returns false ', - settings: {enableTelemetry: false}, + settings: { enableTelemetry: false }, expectedResult: true, }, ]; From eafb10f7204e0ccd6f5e57a7b324885066cada41 Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Tue, 6 Jun 2023 15:35:36 -0700 Subject: [PATCH 16/19] Fix tests --- src/test/debugger/extension/adapter/factory.unit.test.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/debugger/extension/adapter/factory.unit.test.ts b/src/test/debugger/extension/adapter/factory.unit.test.ts index a1e57d44f6cb..5728bf0c34cd 100644 --- a/src/test/debugger/extension/adapter/factory.unit.test.ts +++ b/src/test/debugger/extension/adapter/factory.unit.test.ts @@ -6,6 +6,7 @@ import * as assert from 'assert'; import { expect, use } from 'chai'; import * as chaiAsPromised from 'chai-as-promised'; +import * as fs from 'fs-extra'; import * as path from 'path'; import * as sinon from 'sinon'; import rewiremock from 'rewiremock'; @@ -36,6 +37,7 @@ suite('Debugging - Adapter Factory', () => { let stateFactory: IPersistentStateFactory; let state: PersistentState; let showErrorMessageStub: sinon.SinonStub; + let readJSONSyncStub: sinon.SinonStub; let commandManager: ICommandManager; const nodeExecutable = undefined; @@ -66,6 +68,8 @@ suite('Debugging - Adapter Factory', () => { setup(() => { process.env.VSC_PYTHON_UNIT_TEST = undefined; process.env.VSC_PYTHON_CI_TEST = undefined; + readJSONSyncStub = sinon.stub(fs, 'readJSONSync'); + readJSONSyncStub.returns({ enableTelemetry: true }); rewiremock.enable(); rewiremock('@vscode/extension-telemetry').with({ default: Reporter }); stateFactory = mock(PersistentStateFactory); From 56e1d05561ccff896ad56bd57d76285a2c818490 Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Tue, 6 Jun 2023 15:38:41 -0700 Subject: [PATCH 17/19] Add funtion that update package.json file --- build/update_package_file.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 build/update_package_file.py diff --git a/build/update_package_file.py b/build/update_package_file.py new file mode 100644 index 000000000000..b61460b4cc21 --- /dev/null +++ b/build/update_package_file.py @@ -0,0 +1,21 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import json +import pathlib +import sys + +EXT_ROOT = pathlib.Path(__file__).parent.parent +PACKAGE_JSON_PATH = EXT_ROOT / "package.json" + +def main(package_json: pathlib.Path) -> None: + package = json.loads(package_json.read_text(encoding="utf-8")) + package['enableTelemetry'] = True + + # Overwrite package.json with new data add a new-line at the end of the file. + package_json.write_text( + json.dumps(package, indent=4, ensure_ascii=False) + "\n", encoding="utf-8" + ) + +if __name__ == "__main__": + main(PACKAGE_JSON_PATH, sys.argv[1:]) From 57d5f5b0f9991af088b92022f7f29d684f4b8dd2 Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Tue, 6 Jun 2023 15:40:59 -0700 Subject: [PATCH 18/19] Update release pipelines --- build/azure-pipeline.pre-release.yml | 4 ++++ build/azure-pipeline.stable.yml | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/build/azure-pipeline.pre-release.yml b/build/azure-pipeline.pre-release.yml index 5bc61b2fd559..7b13978b8db2 100644 --- a/build/azure-pipeline.pre-release.yml +++ b/build/azure-pipeline.pre-release.yml @@ -61,6 +61,10 @@ extends: python ./build/update_ext_version.py --for-publishing displayName: Update build number + - script: | + python ./build/update_package_file.py + displayName: Update telemetry in package.json + - script: npm run addExtensionPackDependencies displayName: Update optional extension dependencies diff --git a/build/azure-pipeline.stable.yml b/build/azure-pipeline.stable.yml index 159d856b6c3e..50ccbb9fff7a 100644 --- a/build/azure-pipeline.stable.yml +++ b/build/azure-pipeline.stable.yml @@ -63,6 +63,10 @@ extends: - script: | python ./build/update_ext_version.py --release --for-publishing displayName: Update build number + + - script: | + python ./build/update_package_file.py + displayName: Update telemetry in package.json - script: npm run addExtensionPackDependencies displayName: Update optional extension dependencies From 8735489f9459678d433a981062ac6b0ccd24561c Mon Sep 17 00:00:00 2001 From: Paula Camargo Date: Tue, 6 Jun 2023 16:05:46 -0700 Subject: [PATCH 19/19] Fix typo --- src/client/telemetry/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/client/telemetry/index.ts b/src/client/telemetry/index.ts index a031e85294d6..20df3a21eb37 100644 --- a/src/client/telemetry/index.ts +++ b/src/client/telemetry/index.ts @@ -46,8 +46,8 @@ function isTelemetrySupported(): boolean { * @returns {boolean} */ export function isTelemetryDisabled(): boolean { - const packaJsonPath = path.join(EXTENSION_ROOT_DIR, 'package.json'); - const packageJson = fs.readJSONSync(packaJsonPath); + const packageJsonPath = path.join(EXTENSION_ROOT_DIR, 'package.json'); + const packageJson = fs.readJSONSync(packageJsonPath); return !packageJson.enableTelemetry; }