@@ -18,7 +18,7 @@ jest.setTimeout(10000);
18
18
19
19
describe ( "telemetry reporting" , ( ) => {
20
20
let originalTelemetryExtension : boolean | undefined ;
21
- let originalTelemetryGlobal : boolean | undefined ;
21
+ let originalTelemetryGlobal : string | undefined ;
22
22
let isCanary : string ;
23
23
let ctx : ExtensionContext ;
24
24
let telemetryListener : ExtensionTelemetryListener ;
@@ -48,7 +48,7 @@ describe("telemetry reporting", () => {
48
48
try {
49
49
// in case a previous test has accidentally activated this extension,
50
50
// need to disable it first.
51
- // Accidentaly activation may happen asynchronously due to activationEvents
51
+ // Accidental activation may happen asynchronously due to activationEvents
52
52
// specified in the package.json.
53
53
globalTelemetryListener ?. dispose ( ) ;
54
54
@@ -73,7 +73,7 @@ describe("telemetry reporting", () => {
73
73
. get < boolean > ( "codeQL.telemetry.enableTelemetry" ) ;
74
74
originalTelemetryGlobal = workspace
75
75
. getConfiguration ( )
76
- . get < boolean > ( "telemetry.enableTelemetry " ) ;
76
+ . get < string > ( "telemetry.telemetryLevel " ) ;
77
77
isCanary = ( ! ! workspace
78
78
. getConfiguration ( )
79
79
. get < boolean > ( "codeQL.canary" ) ) . toString ( ) ;
@@ -82,7 +82,7 @@ describe("telemetry reporting", () => {
82
82
isTelemetryEnabledSpy = jest
83
83
. spyOn ( env , "isTelemetryEnabled" , "get" )
84
84
. mockReturnValue ( true ) ;
85
- await enableTelemetry ( "telemetry" , true ) ;
85
+ await setTelemetryLevel ( "telemetry" , "all" ) ;
86
86
await enableTelemetry ( "codeQL.telemetry" , true ) ;
87
87
88
88
telemetryListener = new ExtensionTelemetryListener (
@@ -101,27 +101,26 @@ describe("telemetry reporting", () => {
101
101
telemetryListener ?. dispose ( ) ;
102
102
// await wait(100);
103
103
try {
104
- await enableTelemetry ( "telemetry" , originalTelemetryGlobal ) ;
104
+ await setTelemetryLevel ( "telemetry" , originalTelemetryGlobal ) ;
105
105
await enableTelemetry ( "codeQL.telemetry" , originalTelemetryExtension ) ;
106
106
} catch ( e ) {
107
107
console . error ( e ) ;
108
108
}
109
109
} ) ;
110
110
111
- it ( "should initialize telemetry when both options are enabled" , async ( ) => {
111
+ it ( "should initialize telemetry when 'codeQL.telemetry.enableTelemetry' is enabled and global 'telemetry.telemetryLevel' is 'all' " , async ( ) => {
112
112
await telemetryListener . initialize ( ) ;
113
113
114
114
expect ( telemetryListener . _reporter ) . toBeDefined ( ) ;
115
-
116
115
const reporter : any = telemetryListener . _reporter ;
117
116
expect ( reporter . extensionId ) . toBe ( "my-id" ) ;
118
117
expect ( reporter . extensionVersion ) . toBe ( "1.2.3" ) ;
119
118
expect ( reporter . userOptIn ) . toBe ( true ) ; // enabled
120
119
} ) ;
121
120
122
- it ( "should initialize telemetry when global option disabled " , async ( ) => {
121
+ it ( "should initialize telemetry when global 'telemetry.telemetryLevel' is 'off' " , async ( ) => {
123
122
isTelemetryEnabledSpy . mockReturnValue ( false ) ;
124
- await enableTelemetry ( "telemetry" , false ) ;
123
+ await setTelemetryLevel ( "telemetry" , "off" ) ;
125
124
await telemetryListener . initialize ( ) ;
126
125
expect ( telemetryListener . _reporter ) . toBeDefined ( ) ;
127
126
@@ -139,7 +138,7 @@ describe("telemetry reporting", () => {
139
138
it ( "should not initialize telemetry when both options disabled" , async ( ) => {
140
139
await enableTelemetry ( "codeQL.telemetry" , false ) ;
141
140
isTelemetryEnabledSpy . mockReturnValue ( false ) ;
142
- await enableTelemetry ( "telemetry" , false ) ;
141
+ await setTelemetryLevel ( "telemetry" , "off" ) ;
143
142
await telemetryListener . initialize ( ) ;
144
143
expect ( telemetryListener . _reporter ) . toBeUndefined ( ) ;
145
144
} ) ;
@@ -179,14 +178,14 @@ describe("telemetry reporting", () => {
179
178
expect ( disposeSpy ) . toHaveBeenCalledTimes ( 1 ) ;
180
179
} ) ;
181
180
182
- it ( "should set userOprIn to false when global setting changes" , async ( ) => {
181
+ it ( "should set userOptIn to false when global setting changes" , async ( ) => {
183
182
await telemetryListener . initialize ( ) ;
184
183
185
184
const reporter : any = telemetryListener . _reporter ;
186
185
expect ( reporter . userOptIn ) . toBe ( true ) ; // enabled
187
186
188
187
isTelemetryEnabledSpy . mockReturnValue ( false ) ;
189
- await enableTelemetry ( "telemetry" , false ) ;
188
+ await setTelemetryLevel ( "telemetry" , "off" ) ;
190
189
expect ( reporter . userOptIn ) . toBe ( false ) ; // disabled
191
190
} ) ;
192
191
@@ -420,7 +419,7 @@ describe("telemetry reporting", () => {
420
419
// show the dialog.
421
420
422
421
isTelemetryEnabledSpy . mockReturnValue ( false ) ;
423
- await enableTelemetry ( "telemetry" , false ) ;
422
+ await setTelemetryLevel ( "telemetry" , "off" ) ;
424
423
await ctx . globalState . update ( "telemetry-request-viewed" , false ) ;
425
424
426
425
await telemetryListener . initialize ( ) ;
@@ -431,7 +430,7 @@ describe("telemetry reporting", () => {
431
430
432
431
// This test is failing because codeQL.canary is not a registered configuration.
433
432
// We do not want to have it registered because we don't want this item
434
- // appearing in the settings page. It needs to olny be set by users we tell
433
+ // appearing in the settings page. It needs to only be set by users we tell
435
434
// about it to.
436
435
// At this point, I see no other way of testing re-requesting permission.
437
436
xit ( "should request permission again when user changes canary setting" , async ( ) => {
@@ -574,6 +573,16 @@ describe("telemetry reporting", () => {
574
573
await wait ( 100 ) ;
575
574
}
576
575
576
+ async function setTelemetryLevel ( section : string , value : string | undefined ) {
577
+ await workspace
578
+ . getConfiguration ( section )
579
+ . update ( "telemetryLevel" , value , ConfigurationTarget . Global ) ;
580
+
581
+ // Need to wait some time since the onDidChangeConfiguration listeners fire
582
+ // asynchronously. Must ensure they to complete in order to have a successful test.
583
+ await wait ( 100 ) ;
584
+ }
585
+
577
586
async function wait ( ms = 0 ) {
578
587
return new Promise ( ( resolve ) => setTimeout ( resolve , ms ) ) ;
579
588
}
0 commit comments