1
1
import * as React from 'react' ;
2
2
import expect from 'expect' ;
3
- import { render , fireEvent , screen } from '@testing-library/react' ;
3
+ import { render , fireEvent , screen , waitFor } from '@testing-library/react' ;
4
4
import { createTheme } from '@mui/material/styles' ;
5
5
6
6
import { AdminContext } from '../../AdminContext' ;
7
7
import { FilterButton } from './FilterButton' ;
8
8
import { TextInput } from '../../input' ;
9
+ import { Basic } from './FilterButton.stories' ;
9
10
10
11
const theme = createTheme ( ) ;
11
12
@@ -44,25 +45,6 @@ describe('<FilterButton />', () => {
44
45
expect ( queryByText ( 'Name' ) ) . toBeNull ( ) ;
45
46
} ) ;
46
47
47
- it ( 'should not display the filter button if all filters are shown and there is no filter value' , ( ) => {
48
- render (
49
- < AdminContext theme = { theme } >
50
- < FilterButton
51
- { ...defaultProps }
52
- filters = { [
53
- < TextInput source = "title" label = "Title" /> ,
54
- < TextInput source = "customer.name" label = "Name" /> ,
55
- ] }
56
- displayedFilters = { {
57
- title : true ,
58
- 'customer.name' : true ,
59
- } }
60
- />
61
- </ AdminContext >
62
- ) ;
63
- expect ( screen . queryByLabelText ( 'ra.action.add_filter' ) ) . toBeNull ( ) ;
64
- } ) ;
65
-
66
48
it ( 'should display the filter button if all filters are shown and there is a filter value' , ( ) => {
67
49
render (
68
50
< AdminContext theme = { theme } >
@@ -91,7 +73,7 @@ describe('<FilterButton />', () => {
91
73
const hiddenFilter = (
92
74
< TextInput source = "Returned" label = "Returned" disabled = { true } />
93
75
) ;
94
- const { getByRole , getByLabelText } = render (
76
+ const { getByLabelText , queryByText } = render (
95
77
< AdminContext theme = { theme } >
96
78
< FilterButton
97
79
{ ...defaultProps }
@@ -102,12 +84,45 @@ describe('<FilterButton />', () => {
102
84
103
85
fireEvent . click ( getByLabelText ( 'ra.action.add_filter' ) ) ;
104
86
105
- const disabledFilter = getByRole ( 'menuitem ') ;
87
+ const disabledFilter = queryByText ( 'Returned' ) ?. closest ( 'li ') ;
106
88
107
89
expect ( disabledFilter ) . not . toBeNull ( ) ;
108
- expect ( disabledFilter . getAttribute ( 'aria-disabled' ) ) . toEqual (
90
+ expect ( disabledFilter ? .getAttribute ( 'aria-disabled' ) ) . toEqual (
109
91
'true'
110
92
) ;
111
93
} ) ;
94
+
95
+ it ( 'should remove all filters when the "Clear all filters" button is clicked' , async ( ) => {
96
+ render ( < Basic /> ) ;
97
+
98
+ // First, check we don't have a clear filters option yet
99
+ await screen . findByText ( 'Add filter' ) ;
100
+ fireEvent . click ( screen . getByText ( 'Add filter' ) ) ;
101
+
102
+ await screen . findByText ( 'Title' , { selector : 'li > span' } ) ;
103
+ expect ( screen . queryByDisplayValue ( 'Remove all filters' ) ) . toBeNull ( ) ;
104
+
105
+ // Then we apply a filter
106
+ fireEvent . click (
107
+ screen . getByText ( 'Title' , { selector : 'li > span' } )
108
+ ) ;
109
+ await screen . findByDisplayValue (
110
+ 'Accusantium qui nihil voluptatum quia voluptas maxime ab similique'
111
+ ) ;
112
+
113
+ // Then we clear all filters
114
+ fireEvent . click ( screen . getByText ( 'Add filter' ) ) ;
115
+ await screen . findByText ( 'Remove all filters' ) ;
116
+ fireEvent . click ( screen . getByText ( 'Remove all filters' ) ) ;
117
+
118
+ // We check that the previously applied filter has been removed
119
+ await waitFor ( ( ) => {
120
+ expect (
121
+ screen . queryByDisplayValue (
122
+ 'Accusantium qui nihil voluptatum quia voluptas maxime ab similique'
123
+ )
124
+ ) . toBeNull ( ) ;
125
+ } ) ;
126
+ } ) ;
112
127
} ) ;
113
128
} ) ;
0 commit comments