Skip to content

Commit e2f19f7

Browse files
committed
Add unit tests for new hooks.
1 parent 8154529 commit e2f19f7

File tree

1 file changed

+210
-0
lines changed

1 file changed

+210
-0
lines changed

__tests__/index.test.js

+210
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import React, { useMemo } from 'react';
1010
import {
1111
isEmpty,
1212
useLocalStore,
13+
useLocalStores,
1314
useSessionStore,
15+
useSessionStores,
1416
useStore,
1517
useStores,
1618
withStore,
@@ -534,6 +536,110 @@ describe('React store context hooks module test', () => {
534536
});
535537
});
536538

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+
537643
describe('useSessionStore', () => {
538644
it('should return expected value for undefined', () => {
539645
// Remove previous test value.
@@ -1007,6 +1113,110 @@ describe('React store context hooks module test', () => {
10071113
});
10081114
});
10091115

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+
10101220
describe('useStore', () => {
10111221
it.each`
10121222
value

0 commit comments

Comments
 (0)