@@ -67,17 +67,31 @@ describe('TelemetryService', () => {
6767 } ) ;
6868
6969 describe ( 'setOptIn' , ( ) => {
70+ it ( 'does not call the api if canChangeOptInStatus==false' , async ( ) => {
71+ const telemetryService = mockTelemetryService ( {
72+ reportOptInStatusChange : false ,
73+ config : { allowChangingOptInStatus : false } ,
74+ } ) ;
75+ expect ( await telemetryService . setOptIn ( true ) ) . toBe ( false ) ;
76+
77+ expect ( telemetryService [ 'http' ] . post ) . toBeCalledTimes ( 0 ) ;
78+ } ) ;
79+
7080 it ( 'calls api if canChangeOptInStatus' , async ( ) => {
71- const telemetryService = mockTelemetryService ( { reportOptInStatusChange : false } ) ;
72- telemetryService . getCanChangeOptInStatus = jest . fn ( ) . mockReturnValue ( true ) ;
81+ const telemetryService = mockTelemetryService ( {
82+ reportOptInStatusChange : false ,
83+ config : { allowChangingOptInStatus : true } ,
84+ } ) ;
7385 await telemetryService . setOptIn ( true ) ;
7486
7587 expect ( telemetryService [ 'http' ] . post ) . toBeCalledTimes ( 1 ) ;
7688 } ) ;
7789
7890 it ( 'sends enabled true if optedIn: true' , async ( ) => {
79- const telemetryService = mockTelemetryService ( { reportOptInStatusChange : false } ) ;
80- telemetryService . getCanChangeOptInStatus = jest . fn ( ) . mockReturnValue ( true ) ;
91+ const telemetryService = mockTelemetryService ( {
92+ reportOptInStatusChange : false ,
93+ config : { allowChangingOptInStatus : true } ,
94+ } ) ;
8195 const optedIn = true ;
8296 await telemetryService . setOptIn ( optedIn ) ;
8397
@@ -87,8 +101,10 @@ describe('TelemetryService', () => {
87101 } ) ;
88102
89103 it ( 'sends enabled false if optedIn: false' , async ( ) => {
90- const telemetryService = mockTelemetryService ( { reportOptInStatusChange : false } ) ;
91- telemetryService . getCanChangeOptInStatus = jest . fn ( ) . mockReturnValue ( true ) ;
104+ const telemetryService = mockTelemetryService ( {
105+ reportOptInStatusChange : false ,
106+ config : { allowChangingOptInStatus : true } ,
107+ } ) ;
92108 const optedIn = false ;
93109 await telemetryService . setOptIn ( optedIn ) ;
94110
@@ -98,29 +114,32 @@ describe('TelemetryService', () => {
98114 } ) ;
99115
100116 it ( 'does not call reportOptInStatus if reportOptInStatusChange is false' , async ( ) => {
101- const telemetryService = mockTelemetryService ( { reportOptInStatusChange : false } ) ;
102- telemetryService . getCanChangeOptInStatus = jest . fn ( ) . mockReturnValue ( true ) ;
103- telemetryService [ 'reportOptInStatus' ] = jest . fn ( ) ;
117+ const telemetryService = mockTelemetryService ( {
118+ reportOptInStatusChange : false ,
119+ config : { allowChangingOptInStatus : true } ,
120+ } ) ;
104121 await telemetryService . setOptIn ( true ) ;
105122
106123 expect ( telemetryService [ 'reportOptInStatus' ] ) . toBeCalledTimes ( 0 ) ;
107124 expect ( telemetryService [ 'http' ] . post ) . toBeCalledTimes ( 1 ) ;
108125 } ) ;
109126
110127 it ( 'calls reportOptInStatus if reportOptInStatusChange is true' , async ( ) => {
111- const telemetryService = mockTelemetryService ( { reportOptInStatusChange : true } ) ;
112- telemetryService . getCanChangeOptInStatus = jest . fn ( ) . mockReturnValue ( true ) ;
113- telemetryService [ 'reportOptInStatus' ] = jest . fn ( ) ;
128+ const telemetryService = mockTelemetryService ( {
129+ reportOptInStatusChange : true ,
130+ config : { allowChangingOptInStatus : true } ,
131+ } ) ;
114132 await telemetryService . setOptIn ( true ) ;
115133
116134 expect ( telemetryService [ 'reportOptInStatus' ] ) . toBeCalledTimes ( 1 ) ;
117135 expect ( telemetryService [ 'http' ] . post ) . toBeCalledTimes ( 1 ) ;
118136 } ) ;
119137
120138 it ( 'adds an error toast on api error' , async ( ) => {
121- const telemetryService = mockTelemetryService ( { reportOptInStatusChange : false } ) ;
122- telemetryService . getCanChangeOptInStatus = jest . fn ( ) . mockReturnValue ( true ) ;
123- telemetryService [ 'reportOptInStatus' ] = jest . fn ( ) ;
139+ const telemetryService = mockTelemetryService ( {
140+ reportOptInStatusChange : false ,
141+ config : { allowChangingOptInStatus : true } ,
142+ } ) ;
124143 telemetryService [ 'http' ] . post = jest . fn ( ) . mockImplementation ( ( url : string ) => {
125144 if ( url === '/api/telemetry/v2/optIn' ) {
126145 throw Error ( 'failed to update opt in.' ) ;
@@ -133,9 +152,13 @@ describe('TelemetryService', () => {
133152 expect ( telemetryService [ 'notifications' ] . toasts . addError ) . toBeCalledTimes ( 1 ) ;
134153 } ) ;
135154
155+ // This one should not happen because the entire method is fully caught but hey! :)
136156 it ( 'adds an error toast on reportOptInStatus error' , async ( ) => {
137- const telemetryService = mockTelemetryService ( { reportOptInStatusChange : true } ) ;
138- telemetryService . getCanChangeOptInStatus = jest . fn ( ) . mockReturnValue ( true ) ;
157+ const telemetryService = mockTelemetryService ( {
158+ reportOptInStatusChange : true ,
159+ config : { allowChangingOptInStatus : true } ,
160+ } ) ;
161+
139162 telemetryService [ 'reportOptInStatus' ] = jest . fn ( ) . mockImplementation ( ( ) => {
140163 throw Error ( 'failed to report OptIn Status.' ) ;
141164 } ) ;
@@ -146,4 +169,50 @@ describe('TelemetryService', () => {
146169 expect ( telemetryService [ 'notifications' ] . toasts . addError ) . toBeCalledTimes ( 1 ) ;
147170 } ) ;
148171 } ) ;
172+
173+ describe ( 'getTelemetryUrl' , ( ) => {
174+ it ( 'should return the config.url parameter' , async ( ) => {
175+ const url = 'http://test.com' ;
176+ const telemetryService = mockTelemetryService ( {
177+ config : { url } ,
178+ } ) ;
179+
180+ expect ( telemetryService . getTelemetryUrl ( ) ) . toBe ( url ) ;
181+ } ) ;
182+ } ) ;
183+
184+ describe ( 'setUserHasSeenNotice' , ( ) => {
185+ it ( 'should hit the API and change the config' , async ( ) => {
186+ const telemetryService = mockTelemetryService ( {
187+ config : { telemetryNotifyUserAboutOptInDefault : undefined } ,
188+ } ) ;
189+
190+ expect ( telemetryService . userHasSeenOptedInNotice ) . toBe ( undefined ) ;
191+ expect ( telemetryService . getUserHasSeenOptedInNotice ( ) ) . toBe ( false ) ;
192+ await telemetryService . setUserHasSeenNotice ( ) ;
193+ expect ( telemetryService [ 'http' ] . put ) . toBeCalledTimes ( 1 ) ;
194+ expect ( telemetryService . userHasSeenOptedInNotice ) . toBe ( true ) ;
195+ expect ( telemetryService . getUserHasSeenOptedInNotice ( ) ) . toBe ( true ) ;
196+ } ) ;
197+
198+ it ( 'should show a toast notification if the request fail' , async ( ) => {
199+ const telemetryService = mockTelemetryService ( {
200+ config : { telemetryNotifyUserAboutOptInDefault : undefined } ,
201+ } ) ;
202+
203+ telemetryService [ 'http' ] . put = jest . fn ( ) . mockImplementation ( ( url : string ) => {
204+ if ( url === '/api/telemetry/v2/userHasSeenNotice' ) {
205+ throw Error ( 'failed to update opt in.' ) ;
206+ }
207+ } ) ;
208+
209+ expect ( telemetryService . userHasSeenOptedInNotice ) . toBe ( undefined ) ;
210+ expect ( telemetryService . getUserHasSeenOptedInNotice ( ) ) . toBe ( false ) ;
211+ await telemetryService . setUserHasSeenNotice ( ) ;
212+ expect ( telemetryService [ 'http' ] . put ) . toBeCalledTimes ( 1 ) ;
213+ expect ( telemetryService [ 'notifications' ] . toasts . addError ) . toBeCalledTimes ( 1 ) ;
214+ expect ( telemetryService . userHasSeenOptedInNotice ) . toBe ( false ) ;
215+ expect ( telemetryService . getUserHasSeenOptedInNotice ( ) ) . toBe ( false ) ;
216+ } ) ;
217+ } ) ;
149218} ) ;
0 commit comments