@@ -23,7 +23,7 @@ import { createDeferred, createDeferredFromPromise } from '../../client/common/u
2323import { sleep } from '../common' ;
2424
2525// tslint:disable-next-line: max-func-body-length
26- suite ( 'xA /B experiments' , ( ) => {
26+ suite ( 'A /B experiments' , ( ) => {
2727 let workspaceService : IWorkspaceService ;
2828 let httpClient : IHttpClient ;
2929 let crypto : ICryptoUtils ;
@@ -151,7 +151,7 @@ suite('xA/B experiments', () => {
151151 . verifiable ( TypeMoq . Times . once ( ) ) ;
152152 when ( fs . fileExists ( anything ( ) ) ) . thenResolve ( false ) ;
153153 experimentStorage . setup ( n => n . value ) . returns ( ( ) => undefined )
154- . verifiable ( TypeMoq . Times . once ( ) ) ;
154+ . verifiable ( TypeMoq . Times . exactly ( 2 ) ) ;
155155 isDownloadedStorageValid
156156 . setup ( n => n . value )
157157 . returns ( ( ) => true )
@@ -257,7 +257,46 @@ suite('xA/B experiments', () => {
257257 downloadedExperimentsStorage . verifyAll ( ) ;
258258 } ) ;
259259
260- test ( 'When no downloaded experiments are available, and if local experiments file is not valid, experiment storage is not updated' , async ( ) => {
260+ test ( 'When no downloaded experiments are available, and experiment storage contains experiments, then experiment storage is not updated' , async ( ) => {
261+ downloadedExperimentsStorage
262+ . setup ( n => n . value )
263+ . returns ( ( ) => undefined )
264+ . verifiable ( TypeMoq . Times . once ( ) ) ;
265+ downloadedExperimentsStorage
266+ . setup ( n => n . updateValue ( undefined ) )
267+ . returns ( ( ) => Promise . resolve ( undefined ) )
268+ . verifiable ( TypeMoq . Times . never ( ) ) ;
269+
270+ // tslint:disable-next-line:no-multiline-string
271+ const fileContent = `
272+ [{ "name": "experiment1", "salt": "salt", "min": 90, "max": 100 }]
273+ ` ;
274+
275+ when (
276+ fs . fileExists ( anything ( ) )
277+ ) . thenResolve ( true ) ;
278+ when (
279+ fs . readFile ( anything ( ) )
280+ ) . thenResolve ( fileContent ) ;
281+
282+ experimentStorage
283+ . setup ( n => n . value )
284+ . returns ( ( ) => [ { name : 'experiment1' , salt : 'salt' , min : 90 , max : 100 } ] )
285+ . verifiable ( TypeMoq . Times . once ( ) ) ;
286+ experimentStorage
287+ . setup ( n => n . updateValue ( TypeMoq . It . isAny ( ) ) )
288+ . returns ( ( ) => Promise . resolve ( undefined ) )
289+ . verifiable ( TypeMoq . Times . never ( ) ) ;
290+
291+ await expManager . updateExperimentStorage ( ) ;
292+
293+ verify ( fs . fileExists ( anything ( ) ) ) . never ( ) ;
294+ verify ( fs . readFile ( anything ( ) ) ) . never ( ) ;
295+ experimentStorage . verifyAll ( ) ;
296+ downloadedExperimentsStorage . verifyAll ( ) ;
297+ } ) ;
298+
299+ test ( 'When no downloaded experiments are available, experiment storage is empty, but if local experiments file is not valid, experiment storage is not updated' , async ( ) => {
261300 downloadedExperimentsStorage
262301 . setup ( n => n . value )
263302 . returns ( ( ) => undefined )
@@ -280,10 +319,11 @@ suite('xA/B experiments', () => {
280319 when (
281320 fs . readFile ( anything ( ) )
282321 ) . thenResolve ( fileContent ) ;
283- when (
284- fs . deleteFile ( anything ( ) )
285- ) . thenResolve ( undefined ) ;
286322
323+ experimentStorage
324+ . setup ( n => n . value )
325+ . returns ( ( ) => undefined )
326+ . verifiable ( TypeMoq . Times . once ( ) ) ;
287327 experimentStorage
288328 . setup ( n => n . updateValue ( TypeMoq . It . isAny ( ) ) )
289329 . returns ( ( ) => Promise . resolve ( undefined ) ) . verifiable ( TypeMoq . Times . never ( ) ) ;
@@ -292,12 +332,11 @@ suite('xA/B experiments', () => {
292332
293333 verify ( fs . fileExists ( anything ( ) ) ) . once ( ) ;
294334 verify ( fs . readFile ( anything ( ) ) ) . once ( ) ;
295- verify ( fs . deleteFile ( anything ( ) ) ) . never ( ) ;
296335 experimentStorage . verifyAll ( ) ;
297336 downloadedExperimentsStorage . verifyAll ( ) ;
298337 } ) ;
299338
300- test ( 'When no downloaded experiments are available, experiment storage is updated using local experiments file (which is then deleted) given experiments are valid' , async ( ) => {
339+ test ( 'When no downloaded experiments are available, and experiment storage is empty, then experiment storage is updated using local experiments file given experiments are valid' , async ( ) => {
301340 downloadedExperimentsStorage
302341 . setup ( n => n . value )
303342 . returns ( ( ) => undefined )
@@ -320,10 +359,11 @@ suite('xA/B experiments', () => {
320359 when (
321360 fs . readFile ( anything ( ) )
322361 ) . thenResolve ( fileContent ) ;
323- when (
324- fs . deleteFile ( anything ( ) )
325- ) . thenResolve ( undefined ) ;
326362
363+ experimentStorage
364+ . setup ( n => n . value )
365+ . returns ( ( ) => undefined )
366+ . verifiable ( TypeMoq . Times . once ( ) ) ;
327367 experimentStorage
328368 . setup ( n => n . updateValue ( [ { name : 'experiment1' , salt : 'salt' , min : 90 , max : 100 } ] ) )
329369 . returns ( ( ) => Promise . resolve ( undefined ) ) . verifiable ( TypeMoq . Times . once ( ) ) ;
@@ -332,13 +372,12 @@ suite('xA/B experiments', () => {
332372
333373 verify ( fs . fileExists ( anything ( ) ) ) . once ( ) ;
334374 verify ( fs . readFile ( anything ( ) ) ) . once ( ) ;
335- verify ( fs . deleteFile ( anything ( ) ) ) . once ( ) ;
336375 experimentStorage . verifyAll ( ) ;
337376 downloadedExperimentsStorage . verifyAll ( ) ;
338377 } ) ;
339378
340379 // tslint:disable-next-line:max-func-body-length
341- suite ( 'When no downloaded experiments are available, function updateExperimentStorage() stops execution and returns' , ( ) => {
380+ suite ( 'When no downloaded experiments are available, and experiment storage is empty, then function updateExperimentStorage() stops execution and returns' , ( ) => {
342381 test ( 'If checking the existence of config file fails' , async ( ) => {
343382 downloadedExperimentsStorage
344383 . setup ( n => n . value )
@@ -356,10 +395,11 @@ suite('xA/B experiments', () => {
356395 when (
357396 fs . readFile ( anything ( ) )
358397 ) . thenResolve ( 'fileContent' ) ;
359- when (
360- fs . deleteFile ( anything ( ) )
361- ) . thenResolve ( undefined ) ;
362398
399+ experimentStorage
400+ . setup ( n => n . value )
401+ . returns ( ( ) => undefined )
402+ . verifiable ( TypeMoq . Times . once ( ) ) ;
363403 experimentStorage
364404 . setup ( n => n . updateValue ( TypeMoq . It . isAny ( ) ) )
365405 . returns ( ( ) => Promise . resolve ( undefined ) )
@@ -369,7 +409,6 @@ suite('xA/B experiments', () => {
369409
370410 verify ( fs . fileExists ( anything ( ) ) ) . once ( ) ;
371411 verify ( fs . readFile ( anything ( ) ) ) . never ( ) ;
372- verify ( fs . deleteFile ( anything ( ) ) ) . never ( ) ;
373412 experimentStorage . verifyAll ( ) ;
374413 downloadedExperimentsStorage . verifyAll ( ) ;
375414 } ) ;
@@ -391,10 +430,11 @@ suite('xA/B experiments', () => {
391430 when (
392431 fs . readFile ( anything ( ) )
393432 ) . thenThrow ( error ) ;
394- when (
395- fs . deleteFile ( anything ( ) )
396- ) . thenResolve ( undefined ) ;
397433
434+ experimentStorage
435+ . setup ( n => n . value )
436+ . returns ( ( ) => undefined )
437+ . verifiable ( TypeMoq . Times . once ( ) ) ;
398438 experimentStorage
399439 . setup ( n => n . updateValue ( TypeMoq . It . isAny ( ) ) )
400440 . returns ( ( ) => Promise . resolve ( undefined ) )
@@ -404,7 +444,6 @@ suite('xA/B experiments', () => {
404444
405445 verify ( fs . fileExists ( anything ( ) ) ) . once ( ) ;
406446 verify ( fs . readFile ( anything ( ) ) ) . once ( ) ;
407- verify ( fs . deleteFile ( anything ( ) ) ) . never ( ) ;
408447 experimentStorage . verifyAll ( ) ;
409448 downloadedExperimentsStorage . verifyAll ( ) ;
410449 } ) ;
@@ -425,10 +464,11 @@ suite('xA/B experiments', () => {
425464 when (
426465 fs . readFile ( anything ( ) )
427466 ) . thenResolve ( 'fileContent' ) ;
428- when (
429- fs . deleteFile ( anything ( ) )
430- ) . thenResolve ( undefined ) ;
431467
468+ experimentStorage
469+ . setup ( n => n . value )
470+ . returns ( ( ) => undefined )
471+ . verifiable ( TypeMoq . Times . once ( ) ) ;
432472 experimentStorage
433473 . setup ( n => n . updateValue ( TypeMoq . It . isAny ( ) ) )
434474 . returns ( ( ) => Promise . resolve ( undefined ) )
@@ -438,7 +478,6 @@ suite('xA/B experiments', () => {
438478
439479 verify ( fs . fileExists ( anything ( ) ) ) . once ( ) ;
440480 verify ( fs . readFile ( anything ( ) ) ) . never ( ) ;
441- verify ( fs . deleteFile ( anything ( ) ) ) . never ( ) ;
442481 experimentStorage . verifyAll ( ) ;
443482 downloadedExperimentsStorage . verifyAll ( ) ;
444483 } ) ;
@@ -466,10 +505,11 @@ suite('xA/B experiments', () => {
466505 when (
467506 fs . readFile ( anything ( ) )
468507 ) . thenResolve ( fileContent ) ;
469- when (
470- fs . deleteFile ( anything ( ) )
471- ) . thenResolve ( undefined ) ;
472508
509+ experimentStorage
510+ . setup ( n => n . value )
511+ . returns ( ( ) => undefined )
512+ . verifiable ( TypeMoq . Times . once ( ) ) ;
473513 experimentStorage
474514 . setup ( n => n . updateValue ( TypeMoq . It . isAny ( ) ) )
475515 . returns ( ( ) => Promise . reject ( error ) )
@@ -479,7 +519,6 @@ suite('xA/B experiments', () => {
479519
480520 verify ( fs . fileExists ( anything ( ) ) ) . once ( ) ;
481521 verify ( fs . readFile ( anything ( ) ) ) . once ( ) ;
482- verify ( fs . deleteFile ( anything ( ) ) ) . never ( ) ;
483522 experimentStorage . verifyAll ( ) ;
484523 downloadedExperimentsStorage . verifyAll ( ) ;
485524 } ) ;
0 commit comments