@wordpress/data 6.4.1 → 6.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -0
- package/build/plugins/persistence/index.js +55 -45
- package/build/plugins/persistence/index.js.map +1 -1
- package/build-module/plugins/persistence/index.js +54 -44
- package/build-module/plugins/persistence/index.js.map +1 -1
- package/package.json +8 -8
- package/src/plugins/persistence/index.js +70 -45
- package/src/plugins/persistence/test/index.js +369 -344
|
@@ -9,8 +9,8 @@ import deepFreeze from 'deep-freeze';
|
|
|
9
9
|
import plugin, {
|
|
10
10
|
createPersistenceInterface,
|
|
11
11
|
withLazySameState,
|
|
12
|
-
migrateFeaturePreferencesToInterfaceStore,
|
|
13
12
|
migrateFeaturePreferencesToPreferencesStore,
|
|
13
|
+
migrateThirdPartyFeaturePreferencesToPreferencesStore,
|
|
14
14
|
migrateIndividualPreferenceToPreferencesStore,
|
|
15
15
|
} from '../';
|
|
16
16
|
import objectStorage from '../storage/object';
|
|
@@ -384,13 +384,13 @@ describe( 'persistence', () => {
|
|
|
384
384
|
} );
|
|
385
385
|
} );
|
|
386
386
|
|
|
387
|
-
describe( '
|
|
388
|
-
it( 'migrates preferences from
|
|
387
|
+
describe( 'migrateFeaturePreferencesToPreferencesStore', () => {
|
|
388
|
+
it( 'migrates multiple preferences from persisted source stores to preferences', () => {
|
|
389
389
|
const persistenceInterface = createPersistenceInterface( {
|
|
390
390
|
storageKey: 'test-username',
|
|
391
391
|
} );
|
|
392
392
|
|
|
393
|
-
const
|
|
393
|
+
const sourceStateA = {
|
|
394
394
|
preferences: {
|
|
395
395
|
features: {
|
|
396
396
|
featureA: true,
|
|
@@ -400,26 +400,50 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
|
|
|
400
400
|
},
|
|
401
401
|
};
|
|
402
402
|
|
|
403
|
-
|
|
403
|
+
const sourceStateB = {
|
|
404
|
+
preferences: {
|
|
405
|
+
features: {
|
|
406
|
+
featureD: true,
|
|
407
|
+
featureE: false,
|
|
408
|
+
featureF: true,
|
|
409
|
+
},
|
|
410
|
+
},
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
persistenceInterface.set( 'core/test-a', sourceStateA );
|
|
414
|
+
persistenceInterface.set( 'core/test-b', sourceStateB );
|
|
404
415
|
|
|
405
|
-
|
|
416
|
+
migrateFeaturePreferencesToPreferencesStore(
|
|
406
417
|
persistenceInterface,
|
|
407
|
-
'core/test'
|
|
418
|
+
'core/test-a'
|
|
419
|
+
);
|
|
420
|
+
|
|
421
|
+
migrateFeaturePreferencesToPreferencesStore(
|
|
422
|
+
persistenceInterface,
|
|
423
|
+
'core/test-b'
|
|
408
424
|
);
|
|
409
425
|
|
|
410
426
|
expect( persistenceInterface.get() ).toEqual( {
|
|
411
|
-
'core/
|
|
427
|
+
'core/preferences': {
|
|
412
428
|
preferences: {
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
429
|
+
'core/test-a': {
|
|
430
|
+
featureA: true,
|
|
431
|
+
featureB: false,
|
|
432
|
+
featureC: true,
|
|
433
|
+
},
|
|
434
|
+
'core/test-b': {
|
|
435
|
+
featureD: true,
|
|
436
|
+
featureE: false,
|
|
437
|
+
featureF: true,
|
|
419
438
|
},
|
|
420
439
|
},
|
|
421
440
|
},
|
|
422
|
-
'core/test': {
|
|
441
|
+
'core/test-a': {
|
|
442
|
+
preferences: {
|
|
443
|
+
features: undefined,
|
|
444
|
+
},
|
|
445
|
+
},
|
|
446
|
+
'core/test-b': {
|
|
423
447
|
preferences: {
|
|
424
448
|
features: undefined,
|
|
425
449
|
},
|
|
@@ -427,12 +451,12 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
|
|
|
427
451
|
} );
|
|
428
452
|
} );
|
|
429
453
|
|
|
430
|
-
it( '
|
|
454
|
+
it( 'migrates multiple preferences from the persisted interface store to preferences, with interface state taking precedence over source stores', () => {
|
|
431
455
|
const persistenceInterface = createPersistenceInterface( {
|
|
432
456
|
storageKey: 'test-username',
|
|
433
457
|
} );
|
|
434
458
|
|
|
435
|
-
const
|
|
459
|
+
const sourceStateA = {
|
|
436
460
|
preferences: {
|
|
437
461
|
features: {
|
|
438
462
|
featureA: true,
|
|
@@ -442,7 +466,7 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
|
|
|
442
466
|
},
|
|
443
467
|
};
|
|
444
468
|
|
|
445
|
-
const
|
|
469
|
+
const sourceStateB = {
|
|
446
470
|
preferences: {
|
|
447
471
|
features: {
|
|
448
472
|
featureD: true,
|
|
@@ -452,33 +476,63 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
|
|
|
452
476
|
},
|
|
453
477
|
};
|
|
454
478
|
|
|
455
|
-
|
|
456
|
-
|
|
479
|
+
const interfaceState = {
|
|
480
|
+
otherData: {
|
|
481
|
+
test: 1,
|
|
482
|
+
},
|
|
483
|
+
preferences: {
|
|
484
|
+
features: {
|
|
485
|
+
'core/test-a': {
|
|
486
|
+
featureG: true,
|
|
487
|
+
featureH: false,
|
|
488
|
+
featureI: true,
|
|
489
|
+
},
|
|
490
|
+
'core/test-b': {
|
|
491
|
+
featureJ: true,
|
|
492
|
+
featureK: false,
|
|
493
|
+
featureL: true,
|
|
494
|
+
},
|
|
495
|
+
},
|
|
496
|
+
},
|
|
497
|
+
};
|
|
457
498
|
|
|
458
|
-
|
|
499
|
+
persistenceInterface.set( 'core/test-a', sourceStateA );
|
|
500
|
+
persistenceInterface.set( 'core/test-b', sourceStateB );
|
|
501
|
+
persistenceInterface.set( 'core/interface', interfaceState );
|
|
502
|
+
|
|
503
|
+
migrateFeaturePreferencesToPreferencesStore(
|
|
459
504
|
persistenceInterface,
|
|
460
505
|
'core/test-a'
|
|
461
506
|
);
|
|
462
507
|
|
|
463
|
-
|
|
508
|
+
migrateFeaturePreferencesToPreferencesStore(
|
|
464
509
|
persistenceInterface,
|
|
465
510
|
'core/test-b'
|
|
466
511
|
);
|
|
467
512
|
|
|
468
513
|
expect( persistenceInterface.get() ).toEqual( {
|
|
514
|
+
'core/preferences': {
|
|
515
|
+
preferences: {
|
|
516
|
+
'core/test-a': {
|
|
517
|
+
featureG: true,
|
|
518
|
+
featureH: false,
|
|
519
|
+
featureI: true,
|
|
520
|
+
},
|
|
521
|
+
'core/test-b': {
|
|
522
|
+
featureJ: true,
|
|
523
|
+
featureK: false,
|
|
524
|
+
featureL: true,
|
|
525
|
+
},
|
|
526
|
+
},
|
|
527
|
+
},
|
|
469
528
|
'core/interface': {
|
|
529
|
+
otherData: {
|
|
530
|
+
test: 1,
|
|
531
|
+
},
|
|
470
532
|
preferences: {
|
|
471
533
|
features: {
|
|
472
|
-
'core/test-a':
|
|
473
|
-
|
|
474
|
-
featureB: false,
|
|
475
|
-
featureC: true,
|
|
476
|
-
},
|
|
477
|
-
'core/test-b': {
|
|
478
|
-
featureD: true,
|
|
479
|
-
featureE: false,
|
|
480
|
-
featureF: true,
|
|
481
|
-
},
|
|
534
|
+
'core/test-a': undefined,
|
|
535
|
+
'core/test-b': undefined,
|
|
482
536
|
},
|
|
483
537
|
},
|
|
484
538
|
},
|
|
@@ -495,23 +549,67 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
|
|
|
495
549
|
} );
|
|
496
550
|
} );
|
|
497
551
|
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
} );
|
|
552
|
+
it( 'only migrates persisted preference data for the source name from source stores', () => {
|
|
553
|
+
const persistenceInterface = createPersistenceInterface( {
|
|
554
|
+
storageKey: 'test-username',
|
|
555
|
+
} );
|
|
503
556
|
|
|
504
|
-
|
|
557
|
+
const sourceStateA = {
|
|
558
|
+
otherData: {
|
|
559
|
+
test: 1,
|
|
560
|
+
},
|
|
561
|
+
preferences: {
|
|
562
|
+
features: {
|
|
563
|
+
featureA: true,
|
|
564
|
+
featureB: false,
|
|
565
|
+
featureC: true,
|
|
566
|
+
},
|
|
567
|
+
},
|
|
568
|
+
};
|
|
569
|
+
|
|
570
|
+
const sourceStateB = {
|
|
571
|
+
otherData: {
|
|
572
|
+
test: 2,
|
|
573
|
+
},
|
|
574
|
+
preferences: {
|
|
575
|
+
features: {
|
|
576
|
+
featureD: true,
|
|
577
|
+
featureE: false,
|
|
578
|
+
featureF: true,
|
|
579
|
+
},
|
|
580
|
+
},
|
|
581
|
+
};
|
|
582
|
+
|
|
583
|
+
persistenceInterface.set( 'core/test-a', sourceStateA );
|
|
584
|
+
persistenceInterface.set( 'core/test-b', sourceStateB );
|
|
585
|
+
|
|
586
|
+
migrateFeaturePreferencesToPreferencesStore(
|
|
587
|
+
persistenceInterface,
|
|
588
|
+
'core/test-a'
|
|
589
|
+
);
|
|
590
|
+
|
|
591
|
+
expect( persistenceInterface.get() ).toEqual( {
|
|
592
|
+
'core/preferences': {
|
|
505
593
|
preferences: {
|
|
506
|
-
|
|
594
|
+
'core/test-a': {
|
|
507
595
|
featureA: true,
|
|
508
596
|
featureB: false,
|
|
509
597
|
featureC: true,
|
|
510
598
|
},
|
|
511
599
|
},
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
|
|
600
|
+
},
|
|
601
|
+
'core/test-a': {
|
|
602
|
+
otherData: {
|
|
603
|
+
test: 1,
|
|
604
|
+
},
|
|
605
|
+
preferences: {
|
|
606
|
+
features: undefined,
|
|
607
|
+
},
|
|
608
|
+
},
|
|
609
|
+
'core/test-b': {
|
|
610
|
+
otherData: {
|
|
611
|
+
test: 2,
|
|
612
|
+
},
|
|
515
613
|
preferences: {
|
|
516
614
|
features: {
|
|
517
615
|
featureD: true,
|
|
@@ -519,113 +617,53 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
|
|
|
519
617
|
featureF: true,
|
|
520
618
|
},
|
|
521
619
|
},
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
persistenceInterface.set( 'core/test-b', sourceStateB );
|
|
526
|
-
|
|
527
|
-
migrateFeaturePreferencesToPreferencesStore(
|
|
528
|
-
persistenceInterface,
|
|
529
|
-
'core/test-a'
|
|
530
|
-
);
|
|
620
|
+
},
|
|
621
|
+
} );
|
|
622
|
+
} );
|
|
531
623
|
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
624
|
+
it( 'only migrates persisted data for the source name from interface', () => {
|
|
625
|
+
const persistenceInterface = createPersistenceInterface( {
|
|
626
|
+
storageKey: 'test-username',
|
|
627
|
+
} );
|
|
536
628
|
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
},
|
|
545
|
-
'core/test-b': {
|
|
546
|
-
featureD: true,
|
|
547
|
-
featureE: false,
|
|
548
|
-
featureF: true,
|
|
549
|
-
},
|
|
550
|
-
},
|
|
551
|
-
},
|
|
552
|
-
'core/test-a': {
|
|
553
|
-
preferences: {
|
|
554
|
-
features: undefined,
|
|
629
|
+
const interfaceState = {
|
|
630
|
+
preferences: {
|
|
631
|
+
features: {
|
|
632
|
+
'core/test-a': {
|
|
633
|
+
featureG: true,
|
|
634
|
+
featureH: false,
|
|
635
|
+
featureI: true,
|
|
555
636
|
},
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
637
|
+
'core/test-b': {
|
|
638
|
+
featureJ: true,
|
|
639
|
+
featureK: false,
|
|
640
|
+
featureL: true,
|
|
560
641
|
},
|
|
561
642
|
},
|
|
562
|
-
}
|
|
563
|
-
}
|
|
643
|
+
},
|
|
644
|
+
};
|
|
564
645
|
|
|
565
|
-
|
|
566
|
-
const persistenceInterface = createPersistenceInterface( {
|
|
567
|
-
storageKey: 'test-username',
|
|
568
|
-
} );
|
|
646
|
+
persistenceInterface.set( 'core/interface', interfaceState );
|
|
569
647
|
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
featureB: false,
|
|
575
|
-
featureC: true,
|
|
576
|
-
},
|
|
577
|
-
},
|
|
578
|
-
};
|
|
648
|
+
migrateFeaturePreferencesToPreferencesStore(
|
|
649
|
+
persistenceInterface,
|
|
650
|
+
'core/test-a'
|
|
651
|
+
);
|
|
579
652
|
|
|
580
|
-
|
|
653
|
+
expect( persistenceInterface.get() ).toEqual( {
|
|
654
|
+
'core/preferences': {
|
|
581
655
|
preferences: {
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
656
|
+
'core/test-a': {
|
|
657
|
+
featureG: true,
|
|
658
|
+
featureH: false,
|
|
659
|
+
featureI: true,
|
|
586
660
|
},
|
|
587
661
|
},
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
const interfaceState = {
|
|
662
|
+
},
|
|
663
|
+
'core/interface': {
|
|
591
664
|
preferences: {
|
|
592
665
|
features: {
|
|
593
|
-
'core/test-a':
|
|
594
|
-
featureG: true,
|
|
595
|
-
featureH: false,
|
|
596
|
-
featureI: true,
|
|
597
|
-
},
|
|
598
|
-
'core/test-b': {
|
|
599
|
-
featureJ: true,
|
|
600
|
-
featureK: false,
|
|
601
|
-
featureL: true,
|
|
602
|
-
},
|
|
603
|
-
},
|
|
604
|
-
},
|
|
605
|
-
};
|
|
606
|
-
|
|
607
|
-
persistenceInterface.set( 'core/test-a', sourceStateA );
|
|
608
|
-
persistenceInterface.set( 'core/test-b', sourceStateB );
|
|
609
|
-
persistenceInterface.set( 'core/interface', interfaceState );
|
|
610
|
-
|
|
611
|
-
migrateFeaturePreferencesToPreferencesStore(
|
|
612
|
-
persistenceInterface,
|
|
613
|
-
'core/test-a'
|
|
614
|
-
);
|
|
615
|
-
|
|
616
|
-
migrateFeaturePreferencesToPreferencesStore(
|
|
617
|
-
persistenceInterface,
|
|
618
|
-
'core/test-b'
|
|
619
|
-
);
|
|
620
|
-
|
|
621
|
-
expect( persistenceInterface.get() ).toEqual( {
|
|
622
|
-
'core/preferences': {
|
|
623
|
-
preferences: {
|
|
624
|
-
'core/test-a': {
|
|
625
|
-
featureG: true,
|
|
626
|
-
featureH: false,
|
|
627
|
-
featureI: true,
|
|
628
|
-
},
|
|
666
|
+
'core/test-a': undefined,
|
|
629
667
|
'core/test-b': {
|
|
630
668
|
featureJ: true,
|
|
631
669
|
featureK: false,
|
|
@@ -633,268 +671,255 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
|
|
|
633
671
|
},
|
|
634
672
|
},
|
|
635
673
|
},
|
|
636
|
-
|
|
637
|
-
preferences: {
|
|
638
|
-
features: {
|
|
639
|
-
'core/test-a': undefined,
|
|
640
|
-
'core/test-b': undefined,
|
|
641
|
-
},
|
|
642
|
-
},
|
|
643
|
-
},
|
|
644
|
-
'core/test-a': {
|
|
645
|
-
preferences: {
|
|
646
|
-
features: undefined,
|
|
647
|
-
},
|
|
648
|
-
},
|
|
649
|
-
'core/test-b': {
|
|
650
|
-
preferences: {
|
|
651
|
-
features: undefined,
|
|
652
|
-
},
|
|
653
|
-
},
|
|
654
|
-
} );
|
|
674
|
+
},
|
|
655
675
|
} );
|
|
676
|
+
} );
|
|
677
|
+
} );
|
|
656
678
|
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
679
|
+
describe( 'migrateIndividualPreferenceToPreferencesStore', () => {
|
|
680
|
+
it( 'migrates an individual preference from the source to the preferences store', () => {
|
|
681
|
+
const persistenceInterface = createPersistenceInterface( {
|
|
682
|
+
storageKey: 'test-username',
|
|
683
|
+
} );
|
|
684
|
+
|
|
685
|
+
const initialState = {
|
|
686
|
+
preferences: {
|
|
687
|
+
myPreference: '123',
|
|
688
|
+
},
|
|
689
|
+
};
|
|
690
|
+
|
|
691
|
+
persistenceInterface.set( 'core/test', initialState );
|
|
692
|
+
|
|
693
|
+
migrateIndividualPreferenceToPreferencesStore(
|
|
694
|
+
persistenceInterface,
|
|
695
|
+
'core/test',
|
|
696
|
+
'myPreference'
|
|
697
|
+
);
|
|
661
698
|
|
|
662
|
-
|
|
699
|
+
expect( persistenceInterface.get() ).toEqual( {
|
|
700
|
+
'core/preferences': {
|
|
663
701
|
preferences: {
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
featureB: false,
|
|
667
|
-
featureC: true,
|
|
702
|
+
'core/test': {
|
|
703
|
+
myPreference: '123',
|
|
668
704
|
},
|
|
669
705
|
},
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
const sourceStateB = {
|
|
706
|
+
},
|
|
707
|
+
'core/test': {
|
|
673
708
|
preferences: {
|
|
674
|
-
|
|
675
|
-
featureD: true,
|
|
676
|
-
featureE: false,
|
|
677
|
-
featureF: true,
|
|
678
|
-
},
|
|
709
|
+
myPreference: undefined,
|
|
679
710
|
},
|
|
680
|
-
}
|
|
711
|
+
},
|
|
712
|
+
} );
|
|
713
|
+
} );
|
|
681
714
|
|
|
682
|
-
|
|
683
|
-
|
|
715
|
+
it( 'does not overwrite other preferences in the preferences store', () => {
|
|
716
|
+
const persistenceInterface = createPersistenceInterface( {
|
|
717
|
+
storageKey: 'test-username',
|
|
718
|
+
} );
|
|
684
719
|
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
720
|
+
const initialState = {
|
|
721
|
+
otherData: {
|
|
722
|
+
test: 1,
|
|
723
|
+
},
|
|
724
|
+
preferences: {
|
|
725
|
+
myPreference: '123',
|
|
726
|
+
},
|
|
727
|
+
};
|
|
689
728
|
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
featureC: true,
|
|
697
|
-
},
|
|
698
|
-
},
|
|
699
|
-
},
|
|
700
|
-
'core/test-a': {
|
|
701
|
-
preferences: {
|
|
702
|
-
features: undefined,
|
|
703
|
-
},
|
|
729
|
+
persistenceInterface.set( 'core/test', initialState );
|
|
730
|
+
persistenceInterface.set( 'core/preferences', {
|
|
731
|
+
preferences: {
|
|
732
|
+
'core/other-store': {
|
|
733
|
+
preferenceA: 1,
|
|
734
|
+
preferenceB: 2,
|
|
704
735
|
},
|
|
705
|
-
'core/test
|
|
706
|
-
|
|
707
|
-
features: {
|
|
708
|
-
featureD: true,
|
|
709
|
-
featureE: false,
|
|
710
|
-
featureF: true,
|
|
711
|
-
},
|
|
712
|
-
},
|
|
736
|
+
'core/test': {
|
|
737
|
+
unrelatedPreference: 'unrelated-value',
|
|
713
738
|
},
|
|
714
|
-
}
|
|
739
|
+
},
|
|
715
740
|
} );
|
|
716
741
|
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
742
|
+
migrateIndividualPreferenceToPreferencesStore(
|
|
743
|
+
persistenceInterface,
|
|
744
|
+
'core/test',
|
|
745
|
+
'myPreference'
|
|
746
|
+
);
|
|
721
747
|
|
|
722
|
-
|
|
748
|
+
expect( persistenceInterface.get() ).toEqual( {
|
|
749
|
+
'core/preferences': {
|
|
723
750
|
preferences: {
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
featureH: false,
|
|
728
|
-
featureI: true,
|
|
729
|
-
},
|
|
730
|
-
'core/test-b': {
|
|
731
|
-
featureJ: true,
|
|
732
|
-
featureK: false,
|
|
733
|
-
featureL: true,
|
|
734
|
-
},
|
|
751
|
+
'core/other-store': {
|
|
752
|
+
preferenceA: 1,
|
|
753
|
+
preferenceB: 2,
|
|
735
754
|
},
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
persistenceInterface.set( 'core/interface', interfaceState );
|
|
740
|
-
|
|
741
|
-
migrateFeaturePreferencesToPreferencesStore(
|
|
742
|
-
persistenceInterface,
|
|
743
|
-
'core/test-a'
|
|
744
|
-
);
|
|
745
|
-
|
|
746
|
-
expect( persistenceInterface.get() ).toEqual( {
|
|
747
|
-
'core/preferences': {
|
|
748
|
-
preferences: {
|
|
749
|
-
'core/test-a': {
|
|
750
|
-
featureG: true,
|
|
751
|
-
featureH: false,
|
|
752
|
-
featureI: true,
|
|
753
|
-
},
|
|
755
|
+
'core/test': {
|
|
756
|
+
unrelatedPreference: 'unrelated-value',
|
|
757
|
+
myPreference: '123',
|
|
754
758
|
},
|
|
755
759
|
},
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
'core/test-b': {
|
|
761
|
-
featureJ: true,
|
|
762
|
-
featureK: false,
|
|
763
|
-
featureL: true,
|
|
764
|
-
},
|
|
765
|
-
},
|
|
766
|
-
},
|
|
760
|
+
},
|
|
761
|
+
'core/test': {
|
|
762
|
+
otherData: {
|
|
763
|
+
test: 1,
|
|
767
764
|
},
|
|
768
|
-
} );
|
|
769
|
-
} );
|
|
770
|
-
} );
|
|
771
|
-
|
|
772
|
-
describe( 'migrateIndividualPreferenceToPreferencesStore', () => {
|
|
773
|
-
it( 'migrates an individual preference from the source to the preferences store', () => {
|
|
774
|
-
const persistenceInterface = createPersistenceInterface( {
|
|
775
|
-
storageKey: 'test-username',
|
|
776
|
-
} );
|
|
777
|
-
|
|
778
|
-
const initialState = {
|
|
779
765
|
preferences: {
|
|
780
|
-
myPreference:
|
|
766
|
+
myPreference: undefined,
|
|
781
767
|
},
|
|
782
|
-
}
|
|
768
|
+
},
|
|
769
|
+
} );
|
|
770
|
+
} );
|
|
783
771
|
|
|
784
|
-
|
|
772
|
+
it( 'does not migrate data if there is already a matching preference key at the target', () => {
|
|
773
|
+
const persistenceInterface = createPersistenceInterface( {
|
|
774
|
+
storageKey: 'test-username',
|
|
775
|
+
} );
|
|
785
776
|
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
'
|
|
789
|
-
|
|
790
|
-
|
|
777
|
+
persistenceInterface.set( 'core/test', {
|
|
778
|
+
preferences: {
|
|
779
|
+
myPreference: '123',
|
|
780
|
+
},
|
|
781
|
+
} );
|
|
791
782
|
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
preferences: {
|
|
795
|
-
'core/test': {
|
|
796
|
-
myPreference: '123',
|
|
797
|
-
},
|
|
798
|
-
},
|
|
799
|
-
},
|
|
783
|
+
persistenceInterface.set( 'core/preferences', {
|
|
784
|
+
preferences: {
|
|
800
785
|
'core/test': {
|
|
801
|
-
|
|
802
|
-
myPreference: undefined,
|
|
803
|
-
},
|
|
786
|
+
myPreference: 'already-set',
|
|
804
787
|
},
|
|
805
|
-
}
|
|
788
|
+
},
|
|
806
789
|
} );
|
|
807
790
|
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
791
|
+
migrateIndividualPreferenceToPreferencesStore(
|
|
792
|
+
persistenceInterface,
|
|
793
|
+
'core/test',
|
|
794
|
+
'myPreference'
|
|
795
|
+
);
|
|
812
796
|
|
|
813
|
-
|
|
797
|
+
expect( persistenceInterface.get() ).toEqual( {
|
|
798
|
+
'core/preferences': {
|
|
799
|
+
preferences: {
|
|
800
|
+
'core/test': {
|
|
801
|
+
myPreference: 'already-set',
|
|
802
|
+
},
|
|
803
|
+
},
|
|
804
|
+
},
|
|
805
|
+
'core/test': {
|
|
814
806
|
preferences: {
|
|
815
807
|
myPreference: '123',
|
|
816
808
|
},
|
|
817
|
-
}
|
|
809
|
+
},
|
|
810
|
+
} );
|
|
811
|
+
} );
|
|
812
|
+
} );
|
|
818
813
|
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
814
|
+
describe( 'migrateThirdPartyFeaturePreferencesToPreferencesStore', () => {
|
|
815
|
+
it( 'migrates multiple scopes from the interface package to the preferences package', () => {
|
|
816
|
+
const persistenceInterface = createPersistenceInterface( {
|
|
817
|
+
storageKey: 'test-username',
|
|
818
|
+
} );
|
|
819
|
+
|
|
820
|
+
const interfaceState = {
|
|
821
|
+
otherData: {
|
|
822
|
+
test: 1,
|
|
823
|
+
},
|
|
824
|
+
preferences: {
|
|
825
|
+
features: {
|
|
826
|
+
'plugin-a': {
|
|
827
|
+
featureA: true,
|
|
828
|
+
featureB: false,
|
|
829
|
+
featureC: true,
|
|
825
830
|
},
|
|
826
|
-
'
|
|
827
|
-
|
|
831
|
+
'plugin-b': {
|
|
832
|
+
featureD: true,
|
|
833
|
+
featureE: false,
|
|
834
|
+
featureF: true,
|
|
828
835
|
},
|
|
829
836
|
},
|
|
830
|
-
}
|
|
837
|
+
},
|
|
838
|
+
};
|
|
839
|
+
persistenceInterface.set( 'core/interface', interfaceState );
|
|
831
840
|
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
},
|
|
841
|
+
migrateThirdPartyFeaturePreferencesToPreferencesStore(
|
|
842
|
+
persistenceInterface
|
|
843
|
+
);
|
|
844
|
+
|
|
845
|
+
expect( persistenceInterface.get() ).toEqual( {
|
|
846
|
+
'core/preferences': {
|
|
847
|
+
preferences: {
|
|
848
|
+
'plugin-a': {
|
|
849
|
+
featureA: true,
|
|
850
|
+
featureB: false,
|
|
851
|
+
featureC: true,
|
|
852
|
+
},
|
|
853
|
+
'plugin-b': {
|
|
854
|
+
featureD: true,
|
|
855
|
+
featureE: false,
|
|
856
|
+
featureF: true,
|
|
849
857
|
},
|
|
850
858
|
},
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
859
|
+
},
|
|
860
|
+
'core/interface': {
|
|
861
|
+
otherData: {
|
|
862
|
+
test: 1,
|
|
863
|
+
},
|
|
864
|
+
preferences: {
|
|
865
|
+
features: {
|
|
866
|
+
'plugin-a': undefined,
|
|
867
|
+
'plugin-b': undefined,
|
|
854
868
|
},
|
|
855
869
|
},
|
|
856
|
-
}
|
|
870
|
+
},
|
|
857
871
|
} );
|
|
872
|
+
} );
|
|
858
873
|
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
874
|
+
it( 'ignores any core scopes', () => {
|
|
875
|
+
const persistenceInterface = createPersistenceInterface( {
|
|
876
|
+
storageKey: 'test-username',
|
|
877
|
+
} );
|
|
863
878
|
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
879
|
+
const interfaceState = {
|
|
880
|
+
preferences: {
|
|
881
|
+
features: {
|
|
882
|
+
'plugin-a': {
|
|
883
|
+
featureA: true,
|
|
884
|
+
featureB: false,
|
|
885
|
+
featureC: true,
|
|
886
|
+
},
|
|
887
|
+
'core/edit-post': {
|
|
888
|
+
featureD: true,
|
|
889
|
+
featureE: false,
|
|
890
|
+
featureF: true,
|
|
891
|
+
},
|
|
867
892
|
},
|
|
868
|
-
}
|
|
893
|
+
},
|
|
894
|
+
};
|
|
895
|
+
persistenceInterface.set( 'core/interface', interfaceState );
|
|
869
896
|
|
|
870
|
-
|
|
897
|
+
migrateThirdPartyFeaturePreferencesToPreferencesStore(
|
|
898
|
+
persistenceInterface
|
|
899
|
+
);
|
|
900
|
+
|
|
901
|
+
expect( persistenceInterface.get() ).toEqual( {
|
|
902
|
+
'core/preferences': {
|
|
871
903
|
preferences: {
|
|
872
|
-
'
|
|
873
|
-
|
|
904
|
+
'plugin-a': {
|
|
905
|
+
featureA: true,
|
|
906
|
+
featureB: false,
|
|
907
|
+
featureC: true,
|
|
874
908
|
},
|
|
875
909
|
},
|
|
876
|
-
}
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
'core/preferences': {
|
|
886
|
-
preferences: {
|
|
887
|
-
'core/test': {
|
|
888
|
-
myPreference: 'already-set',
|
|
910
|
+
},
|
|
911
|
+
'core/interface': {
|
|
912
|
+
preferences: {
|
|
913
|
+
features: {
|
|
914
|
+
'plugin-a': undefined,
|
|
915
|
+
'core/edit-post': {
|
|
916
|
+
featureD: true,
|
|
917
|
+
featureE: false,
|
|
918
|
+
featureF: true,
|
|
889
919
|
},
|
|
890
920
|
},
|
|
891
921
|
},
|
|
892
|
-
|
|
893
|
-
preferences: {
|
|
894
|
-
myPreference: '123',
|
|
895
|
-
},
|
|
896
|
-
},
|
|
897
|
-
} );
|
|
922
|
+
},
|
|
898
923
|
} );
|
|
899
924
|
} );
|
|
900
925
|
} );
|