@@ -10,7 +10,9 @@ import React, { useMemo } from 'react';
10
10
import {
11
11
isEmpty ,
12
12
useLocalStore ,
13
+ useLocalStores ,
13
14
useSessionStore ,
15
+ useSessionStores ,
14
16
useStore ,
15
17
useStores ,
16
18
withStore ,
@@ -534,6 +536,110 @@ describe('React store context hooks module test', () => {
534
536
} ) ;
535
537
} ) ;
536
538
539
+ describe ( 'useLocalStores' , ( ) => {
540
+ it ( 'should return expected value for undefined' , ( ) => {
541
+ const response = { rendered : 0 } ;
542
+ const value = { key : undefined } ;
543
+
544
+ const App = ( ) => {
545
+ response . rendered += 1 ;
546
+ [ response . get ] = useLocalStore ( 'key' ) ;
547
+ ( { setStores : response . sets } = useLocalStores ( ) ) ;
548
+ return null ;
549
+ } ;
550
+ render ( < App /> ) ;
551
+
552
+ // Initial value check.
553
+ expect ( localGet ) . toHaveBeenCalledTimes ( 1 ) ;
554
+ expect ( localGet ) . toHaveBeenNthCalledWith ( 1 , 'key' ) ;
555
+ expect ( localSet ) . not . toHaveBeenCalled ( ) ;
556
+ expect ( response . get ) . toBeUndefined ( ) ;
557
+ expect ( response . rendered ) . toEqual ( 1 ) ;
558
+ localGet . mockClear ( ) ;
559
+
560
+ // Post-write value check.
561
+ act ( ( ) => response . sets ( value ) ) ;
562
+ expect ( localGet ) . toHaveBeenCalledTimes ( 1 ) ;
563
+ expect ( localGet ) . toHaveBeenNthCalledWith ( 1 , 'key' ) ;
564
+ expect ( localSet ) . toHaveBeenCalledTimes ( 1 ) ;
565
+ expect ( localSet ) . toHaveBeenNthCalledWith ( 1 , 'key' , undefined ) ;
566
+ expect ( response . get ) . toEqual ( value . key ) ;
567
+ expect ( response . rendered ) . toEqual ( 1 ) ;
568
+ localGet . mockClear ( ) ;
569
+ localSet . mockClear ( ) ;
570
+
571
+ // Same value write check.
572
+ act ( ( ) => response . sets ( value ) ) ;
573
+ expect ( localGet ) . toHaveBeenCalledTimes ( 1 ) ;
574
+ expect ( localGet ) . toHaveBeenNthCalledWith ( 1 , 'key' ) ;
575
+ expect ( localSet ) . toHaveBeenCalledTimes ( 1 ) ;
576
+ expect ( localSet ) . toHaveBeenNthCalledWith ( 1 , 'key' , undefined ) ;
577
+ expect ( response . get ) . toEqual ( value . key ) ;
578
+ expect ( response . rendered ) . toEqual ( 1 ) ;
579
+ } ) ;
580
+
581
+ it . each `
582
+ value
583
+ ${ { key : null } }
584
+ ${ { key : false } }
585
+ ${ { key : 0 } }
586
+ ${ { key : '' } }
587
+ ${ { key : [ ] } }
588
+ ${ { key : { } } }
589
+ ${ { key : true } }
590
+ ${ { key : 1 } }
591
+ ${ { key : - 1 } }
592
+ ${ { key : 'string' } }
593
+ ${ { key : [ 1 , 2 , 3 ] } }
594
+ ${ { key : { 1 : 2 } } }
595
+ ${ { key : { k : 'v' } } }
596
+ ` ( 'should return expected value for $value' , ( { value } ) => {
597
+ // Remove previous test value.
598
+ global . localStorage . removeItem ( 'key' ) ;
599
+ localRemove . mockClear ( ) ;
600
+
601
+ const response = { rendered : 0 } ;
602
+
603
+ const App = ( ) => {
604
+ response . rendered += 1 ;
605
+ [ response . get ] = useLocalStore ( 'key' ) ;
606
+ ( { setStores : response . sets } = useLocalStores ( ) ) ;
607
+ return null ;
608
+ } ;
609
+ render ( < App /> ) ;
610
+
611
+ // Initial value check.
612
+ expect ( localGet ) . toHaveBeenCalledTimes ( 1 ) ;
613
+ expect ( localGet ) . toHaveBeenNthCalledWith ( 1 , 'key' ) ;
614
+ expect ( localSet ) . not . toHaveBeenCalled ( ) ;
615
+ expect ( response . get ) . toBeUndefined ( ) ;
616
+ expect ( response . rendered ) . toEqual ( 1 ) ;
617
+ localGet . mockClear ( ) ;
618
+
619
+ // Post-write value check.
620
+ act ( ( ) => response . sets ( value ) ) ;
621
+ expect ( localGet ) . toHaveBeenCalledTimes ( 2 ) ;
622
+ // Write check.
623
+ expect ( localGet ) . toHaveBeenNthCalledWith ( 1 , 'key' ) ;
624
+ // Render.
625
+ expect ( localGet ) . toHaveBeenNthCalledWith ( 2 , 'key' ) ;
626
+ expect ( localSet ) . toHaveBeenCalledTimes ( 1 ) ;
627
+ expect ( localSet ) . toHaveBeenNthCalledWith ( 1 , 'key' , JSON . stringify ( value . key ) ) ;
628
+ expect ( response . get ) . toEqual ( value . key ) ;
629
+ expect ( response . rendered ) . toEqual ( 2 ) ;
630
+ localGet . mockClear ( ) ;
631
+ localSet . mockClear ( ) ;
632
+
633
+ // Ignore same value write check.
634
+ act ( ( ) => response . sets ( value ) ) ;
635
+ expect ( localGet ) . toHaveBeenCalledTimes ( 1 ) ;
636
+ expect ( localGet ) . toHaveBeenNthCalledWith ( 1 , 'key' ) ;
637
+ expect ( localSet ) . not . toHaveBeenCalled ( ) ;
638
+ expect ( response . get ) . toEqual ( value . key ) ;
639
+ expect ( response . rendered ) . toEqual ( 2 ) ;
640
+ } ) ;
641
+ } ) ;
642
+
537
643
describe ( 'useSessionStore' , ( ) => {
538
644
it ( 'should return expected value for undefined' , ( ) => {
539
645
// Remove previous test value.
@@ -1007,6 +1113,110 @@ describe('React store context hooks module test', () => {
1007
1113
} ) ;
1008
1114
} ) ;
1009
1115
1116
+ describe ( 'useSessionStores' , ( ) => {
1117
+ it ( 'should return expected value for undefined' , ( ) => {
1118
+ const response = { rendered : 0 } ;
1119
+ const value = { key : undefined } ;
1120
+
1121
+ const App = ( ) => {
1122
+ response . rendered += 1 ;
1123
+ [ response . get ] = useSessionStore ( 'key' ) ;
1124
+ ( { setStores : response . sets } = useSessionStores ( ) ) ;
1125
+ return null ;
1126
+ } ;
1127
+ render ( < App /> ) ;
1128
+
1129
+ // Initial value check.
1130
+ expect ( sessionGet ) . toHaveBeenCalledTimes ( 1 ) ;
1131
+ expect ( sessionGet ) . toHaveBeenNthCalledWith ( 1 , 'key' ) ;
1132
+ expect ( sessionSet ) . not . toHaveBeenCalled ( ) ;
1133
+ expect ( response . get ) . toBeUndefined ( ) ;
1134
+ expect ( response . rendered ) . toEqual ( 1 ) ;
1135
+ sessionGet . mockClear ( ) ;
1136
+
1137
+ // Post-write value check.
1138
+ act ( ( ) => response . sets ( value ) ) ;
1139
+ expect ( sessionGet ) . toHaveBeenCalledTimes ( 1 ) ;
1140
+ expect ( sessionGet ) . toHaveBeenNthCalledWith ( 1 , 'key' ) ;
1141
+ expect ( sessionSet ) . toHaveBeenCalledTimes ( 1 ) ;
1142
+ expect ( sessionSet ) . toHaveBeenNthCalledWith ( 1 , 'key' , undefined ) ;
1143
+ expect ( response . get ) . toEqual ( value . key ) ;
1144
+ expect ( response . rendered ) . toEqual ( 1 ) ;
1145
+ sessionGet . mockClear ( ) ;
1146
+ sessionSet . mockClear ( ) ;
1147
+
1148
+ // Same value write check.
1149
+ act ( ( ) => response . sets ( value ) ) ;
1150
+ expect ( sessionGet ) . toHaveBeenCalledTimes ( 1 ) ;
1151
+ expect ( sessionGet ) . toHaveBeenNthCalledWith ( 1 , 'key' ) ;
1152
+ expect ( sessionSet ) . toHaveBeenCalledTimes ( 1 ) ;
1153
+ expect ( sessionSet ) . toHaveBeenNthCalledWith ( 1 , 'key' , undefined ) ;
1154
+ expect ( response . get ) . toEqual ( value . key ) ;
1155
+ expect ( response . rendered ) . toEqual ( 1 ) ;
1156
+ } ) ;
1157
+
1158
+ it . each `
1159
+ value
1160
+ ${ { key : null } }
1161
+ ${ { key : false } }
1162
+ ${ { key : 0 } }
1163
+ ${ { key : '' } }
1164
+ ${ { key : [ ] } }
1165
+ ${ { key : { } } }
1166
+ ${ { key : true } }
1167
+ ${ { key : 1 } }
1168
+ ${ { key : - 1 } }
1169
+ ${ { key : 'string' } }
1170
+ ${ { key : [ 1 , 2 , 3 ] } }
1171
+ ${ { key : { 1 : 2 } } }
1172
+ ${ { key : { k : 'v' } } }
1173
+ ` ( 'should return expected value for $value' , ( { value } ) => {
1174
+ // Remove previous test value.
1175
+ global . sessionStorage . removeItem ( 'key' ) ;
1176
+ sessionRemove . mockClear ( ) ;
1177
+
1178
+ const response = { rendered : 0 } ;
1179
+
1180
+ const App = ( ) => {
1181
+ response . rendered += 1 ;
1182
+ [ response . get ] = useSessionStore ( 'key' ) ;
1183
+ ( { setStores : response . sets } = useSessionStores ( ) ) ;
1184
+ return null ;
1185
+ } ;
1186
+ render ( < App /> ) ;
1187
+
1188
+ // Initial value check.
1189
+ expect ( sessionGet ) . toHaveBeenCalledTimes ( 1 ) ;
1190
+ expect ( sessionGet ) . toHaveBeenNthCalledWith ( 1 , 'key' ) ;
1191
+ expect ( sessionSet ) . not . toHaveBeenCalled ( ) ;
1192
+ expect ( response . get ) . toBeUndefined ( ) ;
1193
+ expect ( response . rendered ) . toEqual ( 1 ) ;
1194
+ sessionGet . mockClear ( ) ;
1195
+
1196
+ // Post-write value check.
1197
+ act ( ( ) => response . sets ( value ) ) ;
1198
+ expect ( sessionGet ) . toHaveBeenCalledTimes ( 2 ) ;
1199
+ // Write check.
1200
+ expect ( sessionGet ) . toHaveBeenNthCalledWith ( 1 , 'key' ) ;
1201
+ // Render.
1202
+ expect ( sessionGet ) . toHaveBeenNthCalledWith ( 2 , 'key' ) ;
1203
+ expect ( sessionSet ) . toHaveBeenCalledTimes ( 1 ) ;
1204
+ expect ( sessionSet ) . toHaveBeenNthCalledWith ( 1 , 'key' , JSON . stringify ( value . key ) ) ;
1205
+ expect ( response . get ) . toEqual ( value . key ) ;
1206
+ expect ( response . rendered ) . toEqual ( 2 ) ;
1207
+ sessionGet . mockClear ( ) ;
1208
+ sessionSet . mockClear ( ) ;
1209
+
1210
+ // Ignore same value write check.
1211
+ act ( ( ) => response . sets ( value ) ) ;
1212
+ expect ( sessionGet ) . toHaveBeenCalledTimes ( 1 ) ;
1213
+ expect ( sessionGet ) . toHaveBeenNthCalledWith ( 1 , 'key' ) ;
1214
+ expect ( sessionSet ) . not . toHaveBeenCalled ( ) ;
1215
+ expect ( response . get ) . toEqual ( value . key ) ;
1216
+ expect ( response . rendered ) . toEqual ( 2 ) ;
1217
+ } ) ;
1218
+ } ) ;
1219
+
1010
1220
describe ( 'useStore' , ( ) => {
1011
1221
it . each `
1012
1222
value
0 commit comments