1+ import React from 'react' ;
2+ import { fireEvent , render , screen } from '@testing-library/react' ;
3+ import { Filter } from '../Filter' ;
4+
5+ describe ( 'Filter' , ( ) => {
6+ const mockOnChange = jest . fn ( ) ;
7+ const filterData = [
8+ {
9+ 'labelName' : 'AirPlane' ,
10+ } ,
11+ {
12+ 'labelName' : 'Car' ,
13+ } ,
14+ {
15+ 'labelName' : 'AirCar' ,
16+ } ,
17+ ] ;
18+
19+ test ( 'Validate if filter is rendering' , ( ) => {
20+ const filter = render ( < Filter
21+ onChange = { mockOnChange }
22+ filterData = { filterData }
23+ availableFilters = { [ {
24+ label : 'Annotation results' ,
25+ path : 'labelName' ,
26+ type : 'String' ,
27+ } ,
28+ {
29+ label : 'Confidence score' ,
30+ path : 'score' ,
31+ type : 'Number' ,
32+ } ] }
33+ /> ) ;
34+
35+ const whereText = filter . getByText ( 'Filter' ) ;
36+
37+ expect ( whereText ) . toBeDefined ( ) ;
38+ } ) ;
39+
40+ test ( 'Should delete row when delete button is clicked' , ( ) => {
41+ const filter = render ( < Filter
42+ onChange = { mockOnChange }
43+ filterData = { filterData }
44+ availableFilters = { [ {
45+ label : 'Annotation results' ,
46+ path : 'labelName' ,
47+ type : 'String' ,
48+ } ,
49+ {
50+ label : 'Confidence score' ,
51+ path : 'score' ,
52+ type : 'Number' ,
53+ } ] }
54+ /> ) ;
55+
56+ const FilterButton = filter . getByText ( 'Filter' ) ;
57+
58+ fireEvent . click ( FilterButton ) ;
59+
60+ const AddButton = filter . getByText ( 'Add Filter' ) ;
61+
62+ fireEvent . click ( AddButton ) ;
63+ fireEvent . click ( AddButton ) ;
64+
65+ const selectBox = filter . getByTestId ( 'logic-dropdown' ) ;
66+
67+ expect ( selectBox . textContent ) . toBe ( 'And' ) ;
68+
69+ fireEvent . click ( selectBox ) ;
70+ fireEvent . click ( screen . getByText ( 'Or' ) ) ;
71+
72+ expect ( selectBox . textContent ) . toBe ( 'Or' ) ;
73+
74+ fireEvent . click ( screen . getByTestId ( 'delete-row-1' ) ) ;
75+
76+ expect ( filter . getAllByTestId ( 'filter-row' ) ) . toHaveLength ( 1 ) ;
77+ } ) ;
78+
79+ test ( 'Should filter the content' , ( ) => {
80+ let filteredContent : any ;
81+
82+ const filter = render ( < Filter
83+ onChange = { value => {
84+ filteredContent = value ;
85+ } }
86+ filterData = { filterData }
87+ availableFilters = { [ {
88+ label : 'Annotation results' ,
89+ path : 'labelName' ,
90+ type : 'String' ,
91+ } ,
92+ {
93+ label : 'Confidence score' ,
94+ path : 'score' ,
95+ type : 'Number' ,
96+ } ] }
97+ /> ) ;
98+
99+ const FilterButton = filter . getByText ( 'Filter' ) ;
100+
101+ fireEvent . click ( FilterButton ) ;
102+
103+ expect ( screen . getByText ( 'No filters applied' ) ) . toBeDefined ( ) ;
104+
105+ const AddButton = filter . getByText ( 'Add Filter' ) ;
106+
107+ fireEvent . click ( AddButton ) ;
108+
109+ const fieldDropdown = filter . getByTestId ( 'field-dropdown' ) ;
110+ const operationDropdown = filter . getByTestId ( 'operation-dropdown' ) ;
111+
112+ fireEvent . click ( operationDropdown ) ;
113+ fireEvent . click ( screen . getByText ( 'not contains' ) ) ;
114+
115+ const filterInput = filter . getByTestId ( 'filter-input' ) ;
116+
117+ expect ( filterInput ) . toBeDefined ( ) ;
118+
119+ expect ( fieldDropdown . textContent ) . toBe ( 'Annotation results' ) ;
120+ expect ( operationDropdown . textContent ) . toBe ( 'not contains' ) ;
121+
122+ fireEvent . change ( filterInput , { target : { value : 'Plane' } } ) ;
123+
124+
125+ expect ( filteredContent ) . toStrictEqual ( [ { labelName : 'Car' } , { labelName : 'AirCar' } ] ) ;
126+ } ) ;
127+ } ) ;
0 commit comments