Skip to content

Commit 6c50a2c

Browse files
committed
add test
1 parent 7271d36 commit 6c50a2c

1 file changed

Lines changed: 110 additions & 0 deletions

File tree

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
import * as React from 'react';
2+
import expect from 'expect';
3+
import { render, screen, fireEvent } from '@testing-library/react';
4+
import { ListContextProvider, ListControllerResult } from 'ra-core';
5+
6+
import { SavedQueryFilterListItem } from './SavedQueryFilterListItem';
7+
8+
const defaultListContext: ListControllerResult = {
9+
data: [],
10+
displayedFilters: {},
11+
filterValues: {},
12+
hasNextPage: false,
13+
hasPreviousPage: false,
14+
hideFilter: () => {},
15+
isFetching: false,
16+
isLoading: false,
17+
onSelect: () => {},
18+
onToggleItem: () => {},
19+
onUnselectItems: () => {},
20+
page: 1,
21+
perPage: 10,
22+
refetch: () => {},
23+
resource: 'posts',
24+
selectedIds: [],
25+
setFilters: () => {},
26+
setPage: () => {},
27+
setPerPage: () => {},
28+
setSort: () => {},
29+
showFilter: () => {},
30+
sort: { field: 'id', order: 'ASC' },
31+
total: 0,
32+
error: null,
33+
isPending: false,
34+
onSelectAll: () => {},
35+
};
36+
37+
const savedQuery = {
38+
label: 'My Saved Query',
39+
value: {
40+
filter: { status: 'published' },
41+
displayedFilters: [],
42+
sort: { field: 'title', order: 'ASC' as const },
43+
perPage: 25,
44+
},
45+
};
46+
47+
describe('<SavedQueryFilterListItem />', () => {
48+
it('should display the item label', () => {
49+
render(
50+
<ListContextProvider value={defaultListContext}>
51+
<SavedQueryFilterListItem
52+
label={savedQuery.label}
53+
value={savedQuery.value}
54+
/>
55+
</ListContextProvider>
56+
);
57+
expect(screen.queryByText('My Saved Query')).not.toBeNull();
58+
});
59+
60+
it('should call setFilters and setPage when the item is clicked and not selected', () => {
61+
const setFilters = jest.fn();
62+
const setPage = jest.fn();
63+
64+
render(
65+
<ListContextProvider
66+
value={{ ...defaultListContext, setFilters, setPage }}
67+
>
68+
<SavedQueryFilterListItem
69+
label={savedQuery.label}
70+
value={savedQuery.value}
71+
/>
72+
</ListContextProvider>
73+
);
74+
75+
fireEvent.click(screen.getByText('My Saved Query'));
76+
expect(setFilters).toHaveBeenCalledWith(
77+
savedQuery.value.filter,
78+
savedQuery.value.displayedFilters
79+
);
80+
expect(setPage).toHaveBeenCalledWith(1);
81+
});
82+
83+
it('should call setFilters with empty objects and setPage when the item is clicked and already selected', () => {
84+
const setFilters = jest.fn();
85+
const setPage = jest.fn();
86+
87+
render(
88+
<ListContextProvider
89+
value={{
90+
...defaultListContext,
91+
filterValues: savedQuery.value.filter,
92+
sort: savedQuery.value.sort,
93+
perPage: savedQuery.value.perPage,
94+
displayedFilters: savedQuery.value.displayedFilters,
95+
setFilters,
96+
setPage,
97+
}}
98+
>
99+
<SavedQueryFilterListItem
100+
label={savedQuery.label}
101+
value={savedQuery.value}
102+
/>
103+
</ListContextProvider>
104+
);
105+
106+
fireEvent.click(screen.getByText('My Saved Query'));
107+
expect(setFilters).toHaveBeenCalledWith({}, {});
108+
expect(setPage).toHaveBeenCalledWith(1);
109+
});
110+
});

0 commit comments

Comments
 (0)