@@ -16,6 +16,7 @@ import {
1616 TELEMETRY_NOTICE_VERSION_ACKNOWLEDGED ,
1717 hasUserSeenTelemetryNotice ,
1818 setHasUserSeenTelemetryNotice ,
19+ sanitizeTelemetrySetting ,
1920} from '../../../shared/telemetry/activation'
2021import { DefaultSettingsConfiguration } from '../../../shared/settingsConfiguration'
2122import { extensionSettingsPrefix } from '../../../shared/constants'
@@ -70,7 +71,7 @@ describe('handleTelemetryNoticeResponse', () => {
7071 } )
7172} )
7273
73- describe ( 'isTelemetryEnabled ' , ( ) => {
74+ describe ( 'Telemetry on activation ' , ( ) => {
7475 let settings : vscode . WorkspaceConfiguration
7576 const toolkitSettings = new DefaultSettingsConfiguration ( extensionSettingsPrefix )
7677
@@ -88,23 +89,72 @@ describe('isTelemetryEnabled', () => {
8889 } )
8990
9091 const scenarios = [
91- { initialSettingValue : 'Enable' , expectedIsEnabledValue : true , desc : 'Original opt-in value' } ,
92- { initialSettingValue : 'Disable' , expectedIsEnabledValue : false , desc : 'Original opt-out value' } ,
93- { initialSettingValue : 'Use IDE settings' , expectedIsEnabledValue : true , desc : 'Original deferral value' } ,
94- { initialSettingValue : true , expectedIsEnabledValue : true , desc : 'Opt in' } ,
95- { initialSettingValue : false , expectedIsEnabledValue : false , desc : 'Opt out' } ,
96- { initialSettingValue : 1234 , expectedIsEnabledValue : true , desc : 'Unexpected numbers' } ,
97- { initialSettingValue : { label : 'garbageData' } , expectedIsEnabledValue : true , desc : 'Unexpected object' } ,
98- { initialSettingValue : [ { label : 'garbageDataList' } ] , expectedIsEnabledValue : true , desc : 'Unexpected array' } ,
99- { initialSettingValue : undefined , expectedIsEnabledValue : true , desc : 'Unset value' } ,
92+ {
93+ initialSettingValue : 'Enable' ,
94+ expectedIsEnabledValue : true ,
95+ desc : 'Original opt-in value' ,
96+ expectedSanitizedValue : true ,
97+ } ,
98+ {
99+ initialSettingValue : 'Disable' ,
100+ expectedIsEnabledValue : false ,
101+ desc : 'Original opt-out value' ,
102+ expectedSanitizedValue : false ,
103+ } ,
104+ {
105+ initialSettingValue : 'Use IDE settings' ,
106+ expectedIsEnabledValue : true ,
107+ desc : 'Original deferral value' ,
108+ expectedSanitizedValue : 'Use IDE settings' ,
109+ } ,
110+ { initialSettingValue : true , expectedIsEnabledValue : true , desc : 'Opt in' , expectedSanitizedValue : true } ,
111+ { initialSettingValue : false , expectedIsEnabledValue : false , desc : 'Opt out' , expectedSanitizedValue : false } ,
112+ {
113+ initialSettingValue : 1234 ,
114+ expectedIsEnabledValue : true ,
115+ desc : 'Unexpected numbers' ,
116+ expectedSanitizedValue : 1234 ,
117+ } ,
118+ {
119+ initialSettingValue : { label : 'garbageData' } ,
120+ expectedIsEnabledValue : true ,
121+ desc : 'Unexpected object' ,
122+ expectedSanitizedValue : { label : 'garbageData' } ,
123+ } ,
124+ {
125+ initialSettingValue : [ { label : 'garbageDataList' } ] ,
126+ expectedIsEnabledValue : true ,
127+ desc : 'Unexpected array' ,
128+ expectedSanitizedValue : [ { label : 'garbageDataList' } ] ,
129+ } ,
130+ {
131+ initialSettingValue : undefined ,
132+ expectedIsEnabledValue : true ,
133+ desc : 'Unset value' ,
134+ expectedSanitizedValue : true ,
135+ } , // The 'expectedSanitizedValue' is true based on the package.json configuration declaration
100136 ]
101137
102- scenarios . forEach ( scenario => {
103- it ( scenario . desc , async ( ) => {
104- await settings . update ( 'telemetry' , scenario . initialSettingValue , vscode . ConfigurationTarget . Global )
138+ describe ( 'isTelemetryEnabled' , ( ) => {
139+ scenarios . forEach ( scenario => {
140+ it ( scenario . desc , async ( ) => {
141+ await settings . update ( 'telemetry' , scenario . initialSettingValue , vscode . ConfigurationTarget . Global )
142+
143+ const isEnabled = isTelemetryEnabled ( toolkitSettings )
144+ assert . strictEqual ( isEnabled , scenario . expectedIsEnabledValue )
145+ } )
146+ } )
147+ } )
148+
149+ describe ( 'sanitizeTelemetrySetting' , ( ) => {
150+ scenarios . forEach ( scenario => {
151+ it ( scenario . desc , async ( ) => {
152+ await settings . update ( 'telemetry' , scenario . initialSettingValue , vscode . ConfigurationTarget . Global )
105153
106- const isEnabled = isTelemetryEnabled ( toolkitSettings )
107- assert . strictEqual ( isEnabled , scenario . expectedIsEnabledValue )
154+ await sanitizeTelemetrySetting ( toolkitSettings )
155+ const sanitizedSetting = toolkitSettings . readSetting < any > ( 'telemetry' )
156+ assert . deepStrictEqual ( sanitizedSetting , scenario . expectedSanitizedValue )
157+ } )
108158 } )
109159 } )
110160} )
0 commit comments