Skip to content

Commit 9867069

Browse files
committed
improve useRecordSelection tests
1 parent 5d968ea commit 9867069

1 file changed

Lines changed: 92 additions & 37 deletions

File tree

packages/ra-core/src/controller/list/useRecordSelection.spec.tsx

Lines changed: 92 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -33,47 +33,102 @@ describe('useRecordSelection', () => {
3333
expect(selected).toEqual([123, 456]);
3434
});
3535

36-
it('should allow to select/unselect a record', () => {
37-
const { result } = renderHook(() => useRecordSelection('foo'), {
38-
wrapper,
36+
describe('select', () => {
37+
it('should allow to select a record', () => {
38+
const { result } = renderHook(() => useRecordSelection('foo'), {
39+
wrapper,
40+
});
41+
const [selected1, { select }] = result.current;
42+
expect(selected1).toEqual([]);
43+
select([123, 456]);
44+
const [selected2] = result.current;
45+
expect(selected2).toEqual([123, 456]);
46+
});
47+
it('should ignore previous selection', () => {
48+
const { result } = renderHook(() => useRecordSelection('foo'), {
49+
wrapper,
50+
});
51+
const [selected1, { select }] = result.current;
52+
expect(selected1).toEqual([]);
53+
select([123, 456]);
54+
const [selected2] = result.current;
55+
expect(selected2).toEqual([123, 456]);
56+
select([123, 789]);
57+
const [selected3] = result.current;
58+
expect(selected3).toEqual([123, 789]);
3959
});
40-
const [selected1, { select }] = result.current;
41-
expect(selected1).toEqual([]);
42-
select([123, 456]);
43-
const [selected2, { unselect }] = result.current;
44-
expect(selected2).toEqual([123, 456]);
45-
unselect([123]);
46-
const [selected3] = result.current;
47-
expect(selected3).toEqual([456]);
4860
});
49-
50-
it('should allow to toggle a record', () => {
51-
const { result } = renderHook(() => useRecordSelection('foo'), {
52-
wrapper,
61+
describe('unselect', () => {
62+
it('should allow to unselect a record', () => {
63+
const { result } = renderHook(() => useRecordSelection('foo'), {
64+
wrapper,
65+
});
66+
const [, { select, unselect }] = result.current;
67+
select([123, 456]);
68+
unselect([123]);
69+
const [selected] = result.current;
70+
expect(selected).toEqual([456]);
71+
});
72+
it('should not fail if the record was not selected', () => {
73+
const { result } = renderHook(() => useRecordSelection('foo'), {
74+
wrapper,
75+
});
76+
const [, { select, unselect }] = result.current;
77+
select([123, 456]);
78+
unselect([789]);
79+
const [selected] = result.current;
80+
expect(selected).toEqual([123, 456]);
5381
});
54-
const [selected1, { toggle }] = result.current;
55-
expect(selected1).toEqual([]);
56-
toggle(123);
57-
const [selected2] = result.current;
58-
expect(selected2).toEqual([123]);
59-
toggle(456);
60-
const [selected3] = result.current;
61-
expect(selected3).toEqual([123, 456]);
62-
toggle(123);
63-
const [selected4] = result.current;
64-
expect(selected4).toEqual([456]);
6582
});
66-
67-
it('should allow to clear the selection', () => {
68-
const { result } = renderHook(() => useRecordSelection('foo'), {
69-
wrapper,
83+
describe('toggle', () => {
84+
it('should allow to toggle a record selection', () => {
85+
const { result } = renderHook(() => useRecordSelection('foo'), {
86+
wrapper,
87+
});
88+
const [selected1, { toggle }] = result.current;
89+
expect(selected1).toEqual([]);
90+
toggle(123);
91+
const [selected2] = result.current;
92+
expect(selected2).toEqual([123]);
93+
toggle(456);
94+
const [selected3] = result.current;
95+
expect(selected3).toEqual([123, 456]);
96+
toggle(123);
97+
const [selected4] = result.current;
98+
expect(selected4).toEqual([456]);
99+
});
100+
it('should allow to empty the selection', () => {
101+
const { result } = renderHook(() => useRecordSelection('foo'), {
102+
wrapper,
103+
});
104+
const [, { select, toggle }] = result.current;
105+
select([123]);
106+
toggle(123);
107+
const [selected] = result.current;
108+
expect(selected).toEqual([]);
109+
});
110+
});
111+
describe('clearSelection', () => {
112+
it('should allow to clear the selection', () => {
113+
const { result } = renderHook(() => useRecordSelection('foo'), {
114+
wrapper,
115+
});
116+
const [, { toggle, clearSelection }] = result.current;
117+
toggle(123);
118+
const [selected2] = result.current;
119+
expect(selected2).toEqual([123]);
120+
clearSelection();
121+
const [selected3] = result.current;
122+
expect(selected3).toEqual([]);
123+
});
124+
it('should not fail on empty selection', () => {
125+
const { result } = renderHook(() => useRecordSelection('foo'), {
126+
wrapper,
127+
});
128+
const [, { clearSelection }] = result.current;
129+
clearSelection();
130+
const [selected] = result.current;
131+
expect(selected).toEqual([]);
70132
});
71-
const [, { toggle, clearSelection }] = result.current;
72-
toggle(123);
73-
const [selected2] = result.current;
74-
expect(selected2).toEqual([123]);
75-
clearSelection();
76-
const [selected3] = result.current;
77-
expect(selected3).toEqual([]);
78133
});
79134
});

0 commit comments

Comments
 (0)