@wordpress/data 6.4.0 → 6.6.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.
@@ -9,9 +9,11 @@ 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
+ convertEditPostPanels,
16
+ migrateInterfaceEnableItemsToPreferencesStore,
15
17
  } from '../';
16
18
  import objectStorage from '../storage/object';
17
19
  import { createRegistry } from '../../../';
@@ -384,13 +386,13 @@ describe( 'persistence', () => {
384
386
  } );
385
387
  } );
386
388
 
387
- describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
388
- it( 'migrates preferences from the source to the interface store', () => {
389
+ describe( 'migrateFeaturePreferencesToPreferencesStore', () => {
390
+ it( 'migrates multiple preferences from persisted source stores to preferences', () => {
389
391
  const persistenceInterface = createPersistenceInterface( {
390
392
  storageKey: 'test-username',
391
393
  } );
392
394
 
393
- const initialState = {
395
+ const sourceStateA = {
394
396
  preferences: {
395
397
  features: {
396
398
  featureA: true,
@@ -400,26 +402,50 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
400
402
  },
401
403
  };
402
404
 
403
- persistenceInterface.set( 'core/test', initialState );
405
+ const sourceStateB = {
406
+ preferences: {
407
+ features: {
408
+ featureD: true,
409
+ featureE: false,
410
+ featureF: true,
411
+ },
412
+ },
413
+ };
414
+
415
+ persistenceInterface.set( 'core/test-a', sourceStateA );
416
+ persistenceInterface.set( 'core/test-b', sourceStateB );
417
+
418
+ migrateFeaturePreferencesToPreferencesStore(
419
+ persistenceInterface,
420
+ 'core/test-a'
421
+ );
404
422
 
405
- migrateFeaturePreferencesToInterfaceStore(
423
+ migrateFeaturePreferencesToPreferencesStore(
406
424
  persistenceInterface,
407
- 'core/test'
425
+ 'core/test-b'
408
426
  );
409
427
 
410
428
  expect( persistenceInterface.get() ).toEqual( {
411
- 'core/interface': {
429
+ 'core/preferences': {
412
430
  preferences: {
413
- features: {
414
- 'core/test': {
415
- featureA: true,
416
- featureB: false,
417
- featureC: true,
418
- },
431
+ 'core/test-a': {
432
+ featureA: true,
433
+ featureB: false,
434
+ featureC: true,
435
+ },
436
+ 'core/test-b': {
437
+ featureD: true,
438
+ featureE: false,
439
+ featureF: true,
419
440
  },
420
441
  },
421
442
  },
422
- 'core/test': {
443
+ 'core/test-a': {
444
+ preferences: {
445
+ features: undefined,
446
+ },
447
+ },
448
+ 'core/test-b': {
423
449
  preferences: {
424
450
  features: undefined,
425
451
  },
@@ -427,12 +453,12 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
427
453
  } );
428
454
  } );
429
455
 
430
- it( 'handles multiple preferences from different stores to be migrated', () => {
456
+ it( 'migrates multiple preferences from the persisted interface store to preferences, with interface state taking precedence over source stores', () => {
431
457
  const persistenceInterface = createPersistenceInterface( {
432
458
  storageKey: 'test-username',
433
459
  } );
434
460
 
435
- const initialStateA = {
461
+ const sourceStateA = {
436
462
  preferences: {
437
463
  features: {
438
464
  featureA: true,
@@ -442,7 +468,7 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
442
468
  },
443
469
  };
444
470
 
445
- const initialStateB = {
471
+ const sourceStateB = {
446
472
  preferences: {
447
473
  features: {
448
474
  featureD: true,
@@ -452,33 +478,63 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
452
478
  },
453
479
  };
454
480
 
455
- persistenceInterface.set( 'core/test-a', initialStateA );
456
- persistenceInterface.set( 'core/test-b', initialStateB );
481
+ const interfaceState = {
482
+ otherData: {
483
+ test: 1,
484
+ },
485
+ preferences: {
486
+ features: {
487
+ 'core/test-a': {
488
+ featureG: true,
489
+ featureH: false,
490
+ featureI: true,
491
+ },
492
+ 'core/test-b': {
493
+ featureJ: true,
494
+ featureK: false,
495
+ featureL: true,
496
+ },
497
+ },
498
+ },
499
+ };
500
+
501
+ persistenceInterface.set( 'core/test-a', sourceStateA );
502
+ persistenceInterface.set( 'core/test-b', sourceStateB );
503
+ persistenceInterface.set( 'core/interface', interfaceState );
457
504
 
458
- migrateFeaturePreferencesToInterfaceStore(
505
+ migrateFeaturePreferencesToPreferencesStore(
459
506
  persistenceInterface,
460
507
  'core/test-a'
461
508
  );
462
509
 
463
- migrateFeaturePreferencesToInterfaceStore(
510
+ migrateFeaturePreferencesToPreferencesStore(
464
511
  persistenceInterface,
465
512
  'core/test-b'
466
513
  );
467
514
 
468
515
  expect( persistenceInterface.get() ).toEqual( {
516
+ 'core/preferences': {
517
+ preferences: {
518
+ 'core/test-a': {
519
+ featureG: true,
520
+ featureH: false,
521
+ featureI: true,
522
+ },
523
+ 'core/test-b': {
524
+ featureJ: true,
525
+ featureK: false,
526
+ featureL: true,
527
+ },
528
+ },
529
+ },
469
530
  'core/interface': {
531
+ otherData: {
532
+ test: 1,
533
+ },
470
534
  preferences: {
471
535
  features: {
472
- 'core/test-a': {
473
- featureA: true,
474
- featureB: false,
475
- featureC: true,
476
- },
477
- 'core/test-b': {
478
- featureD: true,
479
- featureE: false,
480
- featureF: true,
481
- },
536
+ 'core/test-a': undefined,
537
+ 'core/test-b': undefined,
482
538
  },
483
539
  },
484
540
  },
@@ -495,23 +551,67 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
495
551
  } );
496
552
  } );
497
553
 
498
- describe( 'migrateFeaturePreferencesToPreferencesStore', () => {
499
- it( 'migrates multiple preferences from persisted source stores to preferences', () => {
500
- const persistenceInterface = createPersistenceInterface( {
501
- storageKey: 'test-username',
502
- } );
554
+ it( 'only migrates persisted preference data for the source name from source stores', () => {
555
+ const persistenceInterface = createPersistenceInterface( {
556
+ storageKey: 'test-username',
557
+ } );
558
+
559
+ const sourceStateA = {
560
+ otherData: {
561
+ test: 1,
562
+ },
563
+ preferences: {
564
+ features: {
565
+ featureA: true,
566
+ featureB: false,
567
+ featureC: true,
568
+ },
569
+ },
570
+ };
571
+
572
+ const sourceStateB = {
573
+ otherData: {
574
+ test: 2,
575
+ },
576
+ preferences: {
577
+ features: {
578
+ featureD: true,
579
+ featureE: false,
580
+ featureF: true,
581
+ },
582
+ },
583
+ };
584
+
585
+ persistenceInterface.set( 'core/test-a', sourceStateA );
586
+ persistenceInterface.set( 'core/test-b', sourceStateB );
503
587
 
504
- const sourceStateA = {
588
+ migrateFeaturePreferencesToPreferencesStore(
589
+ persistenceInterface,
590
+ 'core/test-a'
591
+ );
592
+
593
+ expect( persistenceInterface.get() ).toEqual( {
594
+ 'core/preferences': {
505
595
  preferences: {
506
- features: {
596
+ 'core/test-a': {
507
597
  featureA: true,
508
598
  featureB: false,
509
599
  featureC: true,
510
600
  },
511
601
  },
512
- };
513
-
514
- const sourceStateB = {
602
+ },
603
+ 'core/test-a': {
604
+ otherData: {
605
+ test: 1,
606
+ },
607
+ preferences: {
608
+ features: undefined,
609
+ },
610
+ },
611
+ 'core/test-b': {
612
+ otherData: {
613
+ test: 2,
614
+ },
515
615
  preferences: {
516
616
  features: {
517
617
  featureD: true,
@@ -519,82 +619,53 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
519
619
  featureF: true,
520
620
  },
521
621
  },
522
- };
523
-
524
- persistenceInterface.set( 'core/test-a', sourceStateA );
525
- persistenceInterface.set( 'core/test-b', sourceStateB );
526
-
527
- migrateFeaturePreferencesToPreferencesStore(
528
- persistenceInterface,
529
- 'core/test-a'
530
- );
622
+ },
623
+ } );
624
+ } );
531
625
 
532
- migrateFeaturePreferencesToPreferencesStore(
533
- persistenceInterface,
534
- 'core/test-b'
535
- );
626
+ it( 'only migrates persisted data for the source name from interface', () => {
627
+ const persistenceInterface = createPersistenceInterface( {
628
+ storageKey: 'test-username',
629
+ } );
536
630
 
537
- expect( persistenceInterface.get() ).toEqual( {
538
- 'core/preferences': {
539
- preferences: {
540
- 'core/test-a': {
541
- featureA: true,
542
- featureB: false,
543
- featureC: true,
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,
631
+ const interfaceState = {
632
+ preferences: {
633
+ features: {
634
+ 'core/test-a': {
635
+ featureG: true,
636
+ featureH: false,
637
+ featureI: true,
555
638
  },
556
- },
557
- 'core/test-b': {
558
- preferences: {
559
- features: undefined,
639
+ 'core/test-b': {
640
+ featureJ: true,
641
+ featureK: false,
642
+ featureL: true,
560
643
  },
561
644
  },
562
- } );
563
- } );
645
+ },
646
+ };
564
647
 
565
- it( 'migrates multiple preferences from the persisted interface store to preferences, with interface state taking precedence over source stores', () => {
566
- const persistenceInterface = createPersistenceInterface( {
567
- storageKey: 'test-username',
568
- } );
648
+ persistenceInterface.set( 'core/interface', interfaceState );
569
649
 
570
- const sourceStateA = {
571
- preferences: {
572
- features: {
573
- featureA: true,
574
- featureB: false,
575
- featureC: true,
576
- },
577
- },
578
- };
650
+ migrateFeaturePreferencesToPreferencesStore(
651
+ persistenceInterface,
652
+ 'core/test-a'
653
+ );
579
654
 
580
- const sourceStateB = {
655
+ expect( persistenceInterface.get() ).toEqual( {
656
+ 'core/preferences': {
581
657
  preferences: {
582
- features: {
583
- featureD: true,
584
- featureE: false,
585
- featureF: true,
658
+ 'core/test-a': {
659
+ featureG: true,
660
+ featureH: false,
661
+ featureI: true,
586
662
  },
587
663
  },
588
- };
589
-
590
- const interfaceState = {
664
+ },
665
+ 'core/interface': {
591
666
  preferences: {
592
667
  features: {
593
- 'core/test-a': {
594
- featureG: true,
595
- featureH: false,
596
- featureI: true,
597
- },
668
+ 'core/test-a': undefined,
598
669
  'core/test-b': {
599
670
  featureJ: true,
600
671
  featureK: false,
@@ -602,299 +673,483 @@ describe( 'migrateFeaturePreferencesToInterfaceStore', () => {
602
673
  },
603
674
  },
604
675
  },
605
- };
676
+ },
677
+ } );
678
+ } );
679
+ } );
606
680
 
607
- persistenceInterface.set( 'core/test-a', sourceStateA );
608
- persistenceInterface.set( 'core/test-b', sourceStateB );
609
- persistenceInterface.set( 'core/interface', interfaceState );
681
+ describe( 'migrateIndividualPreferenceToPreferencesStore', () => {
682
+ it( 'migrates an individual preference from the source to the preferences store', () => {
683
+ const persistenceInterface = createPersistenceInterface( {
684
+ storageKey: 'test-username',
685
+ } );
610
686
 
611
- migrateFeaturePreferencesToPreferencesStore(
612
- persistenceInterface,
613
- 'core/test-a'
614
- );
687
+ const initialState = {
688
+ preferences: {
689
+ myPreference: '123',
690
+ },
691
+ };
615
692
 
616
- migrateFeaturePreferencesToPreferencesStore(
617
- persistenceInterface,
618
- 'core/test-b'
619
- );
693
+ persistenceInterface.set( 'core/test', initialState );
620
694
 
621
- expect( persistenceInterface.get() ).toEqual( {
622
- 'core/preferences': {
623
- preferences: {
624
- 'core/test-a': {
625
- featureG: true,
626
- featureH: false,
627
- featureI: true,
628
- },
629
- 'core/test-b': {
630
- featureJ: true,
631
- featureK: false,
632
- featureL: true,
633
- },
695
+ migrateIndividualPreferenceToPreferencesStore(
696
+ persistenceInterface,
697
+ { from: 'core/test', scope: 'core/test' },
698
+ 'myPreference'
699
+ );
700
+
701
+ expect( persistenceInterface.get() ).toEqual( {
702
+ 'core/preferences': {
703
+ preferences: {
704
+ 'core/test': {
705
+ myPreference: '123',
634
706
  },
635
707
  },
636
- 'core/interface': {
637
- preferences: {
638
- features: {
639
- 'core/test-a': undefined,
640
- 'core/test-b': undefined,
641
- },
708
+ },
709
+ 'core/test': {
710
+ preferences: {
711
+ myPreference: undefined,
712
+ },
713
+ },
714
+ } );
715
+ } );
716
+
717
+ it( 'does not overwrite other preferences in the preferences store', () => {
718
+ const persistenceInterface = createPersistenceInterface( {
719
+ storageKey: 'test-username',
720
+ } );
721
+
722
+ const initialState = {
723
+ otherData: {
724
+ test: 1,
725
+ },
726
+ preferences: {
727
+ myPreference: '123',
728
+ },
729
+ };
730
+
731
+ persistenceInterface.set( 'core/test', initialState );
732
+ persistenceInterface.set( 'core/preferences', {
733
+ preferences: {
734
+ 'core/other-store': {
735
+ preferenceA: 1,
736
+ preferenceB: 2,
737
+ },
738
+ 'core/test': {
739
+ unrelatedPreference: 'unrelated-value',
740
+ },
741
+ },
742
+ } );
743
+
744
+ migrateIndividualPreferenceToPreferencesStore(
745
+ persistenceInterface,
746
+ { from: 'core/test', scope: 'core/test' },
747
+ 'myPreference'
748
+ );
749
+
750
+ expect( persistenceInterface.get() ).toEqual( {
751
+ 'core/preferences': {
752
+ preferences: {
753
+ 'core/other-store': {
754
+ preferenceA: 1,
755
+ preferenceB: 2,
756
+ },
757
+ 'core/test': {
758
+ unrelatedPreference: 'unrelated-value',
759
+ myPreference: '123',
642
760
  },
643
761
  },
644
- 'core/test-a': {
645
- preferences: {
646
- features: undefined,
762
+ },
763
+ 'core/test': {
764
+ otherData: {
765
+ test: 1,
766
+ },
767
+ preferences: {
768
+ myPreference: undefined,
769
+ },
770
+ },
771
+ } );
772
+ } );
773
+
774
+ it( 'supports moving data to a scope that is differently named to the source store', () => {
775
+ const persistenceInterface = createPersistenceInterface( {
776
+ storageKey: 'test-username',
777
+ } );
778
+
779
+ const initialState = {
780
+ preferences: {
781
+ myPreference: '123',
782
+ },
783
+ };
784
+
785
+ persistenceInterface.set( 'core/source', initialState );
786
+
787
+ migrateIndividualPreferenceToPreferencesStore(
788
+ persistenceInterface,
789
+ { from: 'core/source', scope: 'core/destination' },
790
+ 'myPreference'
791
+ );
792
+
793
+ expect( persistenceInterface.get() ).toEqual( {
794
+ 'core/preferences': {
795
+ preferences: {
796
+ 'core/destination': {
797
+ myPreference: '123',
647
798
  },
648
799
  },
649
- 'core/test-b': {
650
- preferences: {
651
- features: undefined,
800
+ },
801
+ 'core/source': {
802
+ preferences: {
803
+ myPreference: undefined,
804
+ },
805
+ },
806
+ } );
807
+ } );
808
+
809
+ it( 'does not migrate data if there is already a matching preference key at the target', () => {
810
+ const persistenceInterface = createPersistenceInterface( {
811
+ storageKey: 'test-username',
812
+ } );
813
+
814
+ persistenceInterface.set( 'core/test', {
815
+ preferences: {
816
+ myPreference: '123',
817
+ },
818
+ } );
819
+
820
+ persistenceInterface.set( 'core/preferences', {
821
+ preferences: {
822
+ 'core/test': {
823
+ myPreference: 'already-set',
824
+ },
825
+ },
826
+ } );
827
+
828
+ migrateIndividualPreferenceToPreferencesStore(
829
+ persistenceInterface,
830
+ { from: 'core/test', scope: 'core/test' },
831
+ 'myPreference'
832
+ );
833
+
834
+ expect( persistenceInterface.get() ).toEqual( {
835
+ 'core/preferences': {
836
+ preferences: {
837
+ 'core/test': {
838
+ myPreference: 'already-set',
652
839
  },
653
840
  },
654
- } );
841
+ },
842
+ 'core/test': {
843
+ preferences: {
844
+ myPreference: '123',
845
+ },
846
+ },
847
+ } );
848
+ } );
849
+
850
+ it( 'migrates preferences that have a `false` value', () => {
851
+ const persistenceInterface = createPersistenceInterface( {
852
+ storageKey: 'test-username',
655
853
  } );
656
854
 
657
- it( 'only migrates persisted data for the source name from source stores', () => {
658
- const persistenceInterface = createPersistenceInterface( {
659
- storageKey: 'test-username',
660
- } );
855
+ persistenceInterface.set( 'core/test', {
856
+ preferences: {
857
+ myFalsePreference: false,
858
+ },
859
+ } );
860
+
861
+ migrateIndividualPreferenceToPreferencesStore(
862
+ persistenceInterface,
863
+ { from: 'core/test', scope: 'core/test' },
864
+ 'myFalsePreference'
865
+ );
661
866
 
662
- const sourceStateA = {
867
+ expect( persistenceInterface.get() ).toEqual( {
868
+ 'core/preferences': {
663
869
  preferences: {
664
- features: {
870
+ 'core/test': {
871
+ myFalsePreference: false,
872
+ },
873
+ },
874
+ },
875
+ 'core/test': {
876
+ preferences: {},
877
+ },
878
+ } );
879
+ } );
880
+ } );
881
+
882
+ describe( 'migrateThirdPartyFeaturePreferencesToPreferencesStore', () => {
883
+ it( 'migrates multiple scopes from the interface package to the preferences package', () => {
884
+ const persistenceInterface = createPersistenceInterface( {
885
+ storageKey: 'test-username',
886
+ } );
887
+
888
+ const interfaceState = {
889
+ otherData: {
890
+ test: 1,
891
+ },
892
+ preferences: {
893
+ features: {
894
+ 'plugin-a': {
665
895
  featureA: true,
666
896
  featureB: false,
667
897
  featureC: true,
668
898
  },
899
+ 'plugin-b': {
900
+ featureD: true,
901
+ featureE: false,
902
+ featureF: true,
903
+ },
669
904
  },
670
- };
905
+ },
906
+ };
907
+ persistenceInterface.set( 'core/interface', interfaceState );
908
+
909
+ migrateThirdPartyFeaturePreferencesToPreferencesStore(
910
+ persistenceInterface
911
+ );
671
912
 
672
- const sourceStateB = {
913
+ expect( persistenceInterface.get() ).toEqual( {
914
+ 'core/preferences': {
673
915
  preferences: {
674
- features: {
916
+ 'plugin-a': {
917
+ featureA: true,
918
+ featureB: false,
919
+ featureC: true,
920
+ },
921
+ 'plugin-b': {
675
922
  featureD: true,
676
923
  featureE: false,
677
924
  featureF: true,
678
925
  },
679
926
  },
680
- };
681
-
682
- persistenceInterface.set( 'core/test-a', sourceStateA );
683
- persistenceInterface.set( 'core/test-b', sourceStateB );
927
+ },
928
+ 'core/interface': {
929
+ otherData: {
930
+ test: 1,
931
+ },
932
+ preferences: {
933
+ features: {
934
+ 'plugin-a': undefined,
935
+ 'plugin-b': undefined,
936
+ },
937
+ },
938
+ },
939
+ } );
940
+ } );
684
941
 
685
- migrateFeaturePreferencesToPreferencesStore(
686
- persistenceInterface,
687
- 'core/test-a'
688
- );
942
+ it( 'ignores any core scopes', () => {
943
+ const persistenceInterface = createPersistenceInterface( {
944
+ storageKey: 'test-username',
945
+ } );
689
946
 
690
- expect( persistenceInterface.get() ).toEqual( {
691
- 'core/preferences': {
692
- preferences: {
693
- 'core/test-a': {
694
- featureA: true,
695
- featureB: false,
696
- featureC: true,
697
- },
947
+ const interfaceState = {
948
+ preferences: {
949
+ features: {
950
+ 'plugin-a': {
951
+ featureA: true,
952
+ featureB: false,
953
+ featureC: true,
954
+ },
955
+ 'core/edit-post': {
956
+ featureD: true,
957
+ featureE: false,
958
+ featureF: true,
698
959
  },
699
960
  },
700
- 'core/test-a': {
701
- preferences: {
702
- features: undefined,
961
+ },
962
+ };
963
+ persistenceInterface.set( 'core/interface', interfaceState );
964
+
965
+ migrateThirdPartyFeaturePreferencesToPreferencesStore(
966
+ persistenceInterface
967
+ );
968
+
969
+ expect( persistenceInterface.get() ).toEqual( {
970
+ 'core/preferences': {
971
+ preferences: {
972
+ 'plugin-a': {
973
+ featureA: true,
974
+ featureB: false,
975
+ featureC: true,
703
976
  },
704
977
  },
705
- 'core/test-b': {
706
- preferences: {
707
- features: {
978
+ },
979
+ 'core/interface': {
980
+ preferences: {
981
+ features: {
982
+ 'plugin-a': undefined,
983
+ 'core/edit-post': {
708
984
  featureD: true,
709
985
  featureE: false,
710
986
  featureF: true,
711
987
  },
712
988
  },
713
989
  },
714
- } );
990
+ },
715
991
  } );
992
+ } );
993
+ } );
716
994
 
717
- it( 'only migrates persisted data for the source name from interface', () => {
718
- const persistenceInterface = createPersistenceInterface( {
719
- storageKey: 'test-username',
720
- } );
721
-
722
- const interfaceState = {
723
- preferences: {
724
- features: {
725
- 'core/test-a': {
726
- featureG: true,
727
- featureH: false,
728
- featureI: true,
729
- },
730
- 'core/test-b': {
731
- featureJ: true,
732
- featureK: false,
733
- featureL: true,
734
- },
995
+ describe( 'convertEditPostPanels', () => {
996
+ it( 'converts from one format to another', () => {
997
+ expect(
998
+ convertEditPostPanels( {
999
+ panels: {
1000
+ tags: {
1001
+ enabled: true,
1002
+ opened: true,
1003
+ },
1004
+ permalinks: {
1005
+ enabled: false,
1006
+ opened: false,
1007
+ },
1008
+ categories: {
1009
+ enabled: true,
1010
+ opened: false,
1011
+ },
1012
+ excerpt: {
1013
+ enabled: false,
1014
+ opened: true,
1015
+ },
1016
+ discussion: {
1017
+ enabled: false,
1018
+ },
1019
+ template: {
1020
+ opened: true,
735
1021
  },
736
1022
  },
737
- };
1023
+ } )
1024
+ ).toEqual( {
1025
+ inactivePanels: [ 'permalinks', 'excerpt', 'discussion' ],
1026
+ openPanels: [ 'tags', 'excerpt', 'template' ],
1027
+ } );
1028
+ } );
738
1029
 
739
- persistenceInterface.set( 'core/interface', interfaceState );
1030
+ it( 'returns empty arrays when there is no data to convert', () => {
1031
+ expect( convertEditPostPanels( {} ) ).toEqual( {
1032
+ inactivePanels: [],
1033
+ openPanels: [],
1034
+ } );
1035
+ } );
1036
+ } );
740
1037
 
741
- migrateFeaturePreferencesToPreferencesStore(
742
- persistenceInterface,
743
- 'core/test-a'
744
- );
1038
+ describe( 'migrateInterfaceEnableItemsToPreferencesStore', () => {
1039
+ it( 'migrates enableItems to the preferences store', () => {
1040
+ const persistenceInterface = createPersistenceInterface( {
1041
+ storageKey: 'test-username',
1042
+ } );
745
1043
 
746
- expect( persistenceInterface.get() ).toEqual( {
747
- 'core/preferences': {
748
- preferences: {
749
- 'core/test-a': {
750
- featureG: true,
751
- featureH: false,
752
- featureI: true,
753
- },
1044
+ persistenceInterface.set( 'core/interface', {
1045
+ enableItems: {
1046
+ singleEnableItems: {
1047
+ complementaryArea: {
1048
+ 'core/edit-post': 'edit-post/document',
1049
+ 'core/edit-site': 'edit-site/global-styles',
754
1050
  },
755
1051
  },
756
- 'core/interface': {
757
- preferences: {
758
- features: {
759
- 'core/test-a': undefined,
760
- 'core/test-b': {
761
- featureJ: true,
762
- featureK: false,
763
- featureL: true,
764
- },
1052
+ multipleEnableItems: {
1053
+ pinnedItems: {
1054
+ 'core/edit-post': {
1055
+ 'plugin-1': true,
1056
+ },
1057
+ 'core/edit-site': {
1058
+ 'plugin-2': true,
765
1059
  },
766
1060
  },
767
1061
  },
768
- } );
1062
+ },
769
1063
  } );
770
- } );
771
1064
 
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
- } );
1065
+ migrateInterfaceEnableItemsToPreferencesStore( persistenceInterface );
777
1066
 
778
- const initialState = {
1067
+ expect( persistenceInterface.get() ).toEqual( {
1068
+ 'core/preferences': {
779
1069
  preferences: {
780
- myPreference: '123',
781
- },
782
- };
783
-
784
- persistenceInterface.set( 'core/test', initialState );
785
-
786
- migrateIndividualPreferenceToPreferencesStore(
787
- persistenceInterface,
788
- 'core/test',
789
- 'myPreference'
790
- );
791
-
792
- expect( persistenceInterface.get() ).toEqual( {
793
- 'core/preferences': {
794
- preferences: {
795
- 'core/test': {
796
- myPreference: '123',
1070
+ 'core/edit-post': {
1071
+ complementaryArea: 'edit-post/document',
1072
+ pinnedItems: {
1073
+ 'plugin-1': true,
797
1074
  },
798
1075
  },
799
- },
800
- 'core/test': {
801
- preferences: {
802
- myPreference: undefined,
1076
+ 'core/edit-site': {
1077
+ complementaryArea: 'edit-site/global-styles',
1078
+ pinnedItems: {
1079
+ 'plugin-2': true,
1080
+ },
803
1081
  },
804
1082
  },
805
- } );
1083
+ },
1084
+ 'core/interface': {
1085
+ enableItems: undefined,
1086
+ },
806
1087
  } );
1088
+ } );
807
1089
 
808
- it( 'does not overwrite other preferences in the preferences store', () => {
809
- const persistenceInterface = createPersistenceInterface( {
810
- storageKey: 'test-username',
811
- } );
812
-
813
- const initialState = {
814
- preferences: {
815
- myPreference: '123',
816
- },
817
- };
1090
+ it( 'merges pinnedItems and complementaryAreas with existing preferences store data', () => {
1091
+ const persistenceInterface = createPersistenceInterface( {
1092
+ storageKey: 'test-username',
1093
+ } );
818
1094
 
819
- persistenceInterface.set( 'core/test', initialState );
820
- persistenceInterface.set( 'core/preferences', {
821
- preferences: {
822
- 'core/other-store': {
823
- preferenceA: 1,
824
- preferenceB: 2,
825
- },
826
- 'core/test': {
827
- unrelatedPreference: 'unrelated-value',
1095
+ persistenceInterface.set( 'core/interface', {
1096
+ enableItems: {
1097
+ singleEnableItems: {
1098
+ complementaryArea: {
1099
+ 'core/edit-post': 'edit-post/document',
1100
+ 'core/edit-site': 'edit-site/global-styles',
828
1101
  },
829
1102
  },
830
- } );
831
-
832
- migrateIndividualPreferenceToPreferencesStore(
833
- persistenceInterface,
834
- 'core/test',
835
- 'myPreference'
836
- );
837
-
838
- expect( persistenceInterface.get() ).toEqual( {
839
- 'core/preferences': {
840
- preferences: {
841
- 'core/other-store': {
842
- preferenceA: 1,
843
- preferenceB: 2,
1103
+ multipleEnableItems: {
1104
+ pinnedItems: {
1105
+ 'core/edit-post': {
1106
+ 'plugin-1': true,
844
1107
  },
845
- 'core/test': {
846
- unrelatedPreference: 'unrelated-value',
847
- myPreference: '123',
1108
+ 'core/edit-site': {
1109
+ 'plugin-2': true,
848
1110
  },
849
1111
  },
850
1112
  },
851
- 'core/test': {
852
- preferences: {
853
- myPreference: undefined,
854
- },
855
- },
856
- } );
1113
+ },
857
1114
  } );
858
1115
 
859
- it( 'does not migrate data if there is already a matching preference key at the target', () => {
860
- const persistenceInterface = createPersistenceInterface( {
861
- storageKey: 'test-username',
862
- } );
863
-
864
- persistenceInterface.set( 'core/test', {
865
- preferences: {
866
- myPreference: '123',
1116
+ persistenceInterface.set( 'core/preferences', {
1117
+ preferences: {
1118
+ 'core/edit-post': {
1119
+ preferenceA: 1,
1120
+ preferenceB: 2,
867
1121
  },
868
- } );
869
-
870
- persistenceInterface.set( 'core/preferences', {
871
- preferences: {
872
- 'core/test': {
873
- myPreference: 'already-set',
874
- },
1122
+ 'core/edit-site': {
1123
+ preferenceC: true,
875
1124
  },
876
- } );
1125
+ },
1126
+ } );
877
1127
 
878
- migrateIndividualPreferenceToPreferencesStore(
879
- persistenceInterface,
880
- 'core/test',
881
- 'myPreference'
882
- );
883
-
884
- expect( persistenceInterface.get() ).toEqual( {
885
- 'core/preferences': {
886
- preferences: {
887
- 'core/test': {
888
- myPreference: 'already-set',
1128
+ migrateInterfaceEnableItemsToPreferencesStore( persistenceInterface );
1129
+
1130
+ expect( persistenceInterface.get() ).toEqual( {
1131
+ 'core/preferences': {
1132
+ preferences: {
1133
+ 'core/edit-post': {
1134
+ preferenceA: 1,
1135
+ preferenceB: 2,
1136
+ complementaryArea: 'edit-post/document',
1137
+ pinnedItems: {
1138
+ 'plugin-1': true,
889
1139
  },
890
1140
  },
891
- },
892
- 'core/test': {
893
- preferences: {
894
- myPreference: '123',
1141
+ 'core/edit-site': {
1142
+ preferenceC: true,
1143
+ complementaryArea: 'edit-site/global-styles',
1144
+ pinnedItems: {
1145
+ 'plugin-2': true,
1146
+ },
895
1147
  },
896
1148
  },
897
- } );
1149
+ },
1150
+ 'core/interface': {
1151
+ enableItems: undefined,
1152
+ },
898
1153
  } );
899
1154
  } );
900
1155
  } );