@@ -23,7 +23,7 @@ describe('InputFilter', () => {
23
23
let divContainer : HTMLDivElement ;
24
24
let filter : InputFilter ;
25
25
let filterArguments : FilterArguments ;
26
- let spyGetHeaderRow ;
26
+ let spyGetHeaderRow : any ;
27
27
let mockColumn : Column ;
28
28
29
29
beforeEach ( ( ) => {
@@ -47,7 +47,7 @@ describe('InputFilter', () => {
47
47
} ) ;
48
48
49
49
it ( 'should throw an error when trying to call init without any arguments' , ( ) => {
50
- expect ( ( ) => filter . init ( null ) ) . toThrowError ( '[Angular-SlickGrid] A filter must always have an "init()" with valid arguments.' ) ;
50
+ expect ( ( ) => filter . init ( null as any ) ) . toThrowError ( '[Angular-SlickGrid] A filter must always have an "init()" with valid arguments.' ) ;
51
51
} ) ;
52
52
53
53
it ( 'should initialize the filter' , ( ) => {
@@ -61,101 +61,143 @@ describe('InputFilter', () => {
61
61
62
62
it ( 'should have a placeholder when defined in its column definition' , ( ) => {
63
63
const testValue = 'test placeholder' ;
64
- mockColumn . filter . placeholder = testValue ;
64
+ mockColumn . filter ! . placeholder = testValue ;
65
65
66
66
filter . init ( filterArguments ) ;
67
- const filterElm = divContainer . querySelector < HTMLInputElement > ( 'input.filter-duration' ) ;
67
+ const filterElm = divContainer . querySelector ( 'input.filter-duration' ) as HTMLInputElement ;
68
68
69
69
expect ( filterElm . placeholder ) . toBe ( testValue ) ;
70
70
} ) ;
71
71
72
- it ( 'should call "setValues" and expect that value to be in the callback when triggered' , ( ) => {
73
- const spyCallback = jest . spyOn ( filterArguments , 'callback' ) ;
72
+ describe ( 'setValues method' , ( ) => {
73
+ it ( 'should call "setValues" and expect that value to be in the callback when triggered' , ( ) => {
74
+ const spyCallback = jest . spyOn ( filterArguments , 'callback' ) ;
74
75
75
- filter . init ( filterArguments ) ;
76
- filter . setValues ( 'abc' ) ;
77
- const filterElm = divContainer . querySelector < HTMLInputElement > ( 'input.filter-duration' ) ;
76
+ filter . init ( filterArguments ) ;
77
+ filter . setValues ( 'abc' ) ;
78
+ const filterElm = divContainer . querySelector ( 'input.filter-duration' ) as HTMLInputElement ;
78
79
79
- filterElm . focus ( ) ;
80
- filterElm . dispatchEvent ( new ( window . window as any ) . Event ( 'input' , { keyCode : 97 , bubbles : true , cancelable : true } ) ) ;
81
- const filterFilledElms = divContainer . querySelectorAll < HTMLInputElement > ( 'input.filter-duration.filled' ) ;
80
+ filterElm . focus ( ) ;
81
+ filterElm . dispatchEvent ( new ( window . window as any ) . Event ( 'input' , { keyCode : 97 , bubbles : true , cancelable : true } ) ) ;
82
+ const filterFilledElms = divContainer . querySelectorAll < HTMLInputElement > ( 'input.filter-duration.filled' ) ;
82
83
83
- expect ( filterFilledElms . length ) . toBe ( 1 ) ;
84
- expect ( spyCallback ) . toHaveBeenCalledWith ( expect . anything ( ) , { columnDef : mockColumn , operator : '' , searchTerms : [ 'abc' ] , shouldTriggerQuery : true } ) ;
85
- } ) ;
84
+ expect ( filterFilledElms . length ) . toBe ( 1 ) ;
85
+ expect ( spyCallback ) . toHaveBeenCalledWith ( expect . anything ( ) , { columnDef : mockColumn , operator : '' , searchTerms : [ 'abc' ] , shouldTriggerQuery : true } ) ;
86
+ } ) ;
86
87
87
- it ( 'should call "setValues" and expect that value to be in the callback when triggered by ENTER key' , ( ) => {
88
- const spyCallback = jest . spyOn ( filterArguments , 'callback' ) ;
88
+ it ( 'should call "setValues" and expect that value to be in the callback when triggered by ENTER key' , ( ) => {
89
+ const spyCallback = jest . spyOn ( filterArguments , 'callback' ) ;
89
90
90
- filter . init ( filterArguments ) ;
91
- filter . setValues ( 'abc' ) ;
92
- const filterElm = divContainer . querySelector < HTMLInputElement > ( 'input.filter-duration' ) ;
91
+ filter . init ( filterArguments ) ;
92
+ filter . setValues ( 'abc' ) ;
93
+ const filterElm = divContainer . querySelector ( 'input.filter-duration' ) as HTMLInputElement ;
93
94
94
- filterElm . focus ( ) ;
95
- const event = new ( window . window as any ) . Event ( 'keyup' , { bubbles : true , cancelable : true } ) ;
96
- event . key = 'Enter' ;
97
- filterElm . dispatchEvent ( event ) ;
98
- const filterFilledElms = divContainer . querySelectorAll < HTMLInputElement > ( 'input.filter-duration.filled' ) ;
95
+ filterElm . focus ( ) ;
96
+ const event = new ( window . window as any ) . Event ( 'keyup' , { bubbles : true , cancelable : true } ) ;
97
+ event . key = 'Enter' ;
98
+ filterElm . dispatchEvent ( event ) ;
99
+ const filterFilledElms = divContainer . querySelectorAll < HTMLInputElement > ( 'input.filter-duration.filled' ) ;
99
100
100
- expect ( filterFilledElms . length ) . toBe ( 1 ) ;
101
- expect ( spyCallback ) . toHaveBeenCalledWith ( expect . anything ( ) , { columnDef : mockColumn , operator : '' , searchTerms : [ 'abc' ] , shouldTriggerQuery : true } ) ;
102
- } ) ;
101
+ expect ( filterFilledElms . length ) . toBe ( 1 ) ;
102
+ expect ( spyCallback ) . toHaveBeenCalledWith ( expect . anything ( ) , { columnDef : mockColumn , operator : '' , searchTerms : [ 'abc' ] , shouldTriggerQuery : true } ) ;
103
+ } ) ;
103
104
104
- it ( 'should call "setValues" and expect that value NOT to be in the callback when triggered by a keyup event that is NOT the ENTER key' , ( ) => {
105
- const spyCallback = jest . spyOn ( filterArguments , 'callback' ) ;
105
+ it ( 'should call "setValues" and expect that value NOT to be in the callback when triggered by a keyup event that is NOT the ENTER key' , ( ) => {
106
+ const spyCallback = jest . spyOn ( filterArguments , 'callback' ) ;
106
107
107
- filter . init ( filterArguments ) ;
108
- filter . setValues ( 'abc' ) ;
109
- const filterElm = divContainer . querySelector < HTMLInputElement > ( 'input.filter-duration' ) ;
108
+ filter . init ( filterArguments ) ;
109
+ filter . setValues ( 'abc' ) ;
110
+ const filterElm = divContainer . querySelector ( 'input.filter-duration' ) as HTMLInputElement ;
110
111
111
- filterElm . focus ( ) ;
112
- const event = new ( window . window as any ) . Event ( 'keyup' , { bubbles : true , cancelable : true } ) ;
113
- event . key = 'a' ;
114
- filterElm . dispatchEvent ( event ) ;
115
- const filterFilledElms = divContainer . querySelectorAll < HTMLInputElement > ( 'input.filter-duration.filled' ) ;
112
+ filterElm . focus ( ) ;
113
+ const event = new ( window . window as any ) . Event ( 'keyup' , { bubbles : true , cancelable : true } ) ;
114
+ event . key = 'a' ;
115
+ filterElm . dispatchEvent ( event ) ;
116
+ const filterFilledElms = divContainer . querySelectorAll < HTMLInputElement > ( 'input.filter-duration.filled' ) ;
116
117
117
- expect ( filterFilledElms . length ) . toBe ( 0 ) ;
118
- expect ( spyCallback ) . not . toHaveBeenCalled ( ) ;
119
- } ) ;
118
+ expect ( filterFilledElms . length ) . toBe ( 0 ) ;
119
+ expect ( spyCallback ) . not . toHaveBeenCalled ( ) ;
120
+ } ) ;
120
121
121
- it ( 'should call "setValues" an operator and with extra spaces at the beginning of the searchTerms and trim value when "enableFilterTrimWhiteSpace" is enabled in grid options' , ( ) => {
122
- gridOptionMock . enableFilterTrimWhiteSpace = true ;
123
- const spyCallback = jest . spyOn ( filterArguments , 'callback' ) ;
122
+ it ( 'should call "setValues" an operator and with extra spaces at the beginning of the searchTerms and trim value when "enableFilterTrimWhiteSpace" is enabled in grid options' , ( ) => {
123
+ gridOptionMock . enableFilterTrimWhiteSpace = true ;
124
+ const spyCallback = jest . spyOn ( filterArguments , 'callback' ) ;
124
125
125
- filter . init ( filterArguments ) ;
126
- filter . setValues ( ' abc ' , 'EQ' ) ;
127
- const filterElm = divContainer . querySelector < HTMLInputElement > ( 'input.filter-duration' ) ;
126
+ filter . init ( filterArguments ) ;
127
+ filter . setValues ( ' abc ' , 'EQ' ) ;
128
+ const filterElm = divContainer . querySelector ( 'input.filter-duration' ) as HTMLInputElement ;
128
129
129
- filterElm . focus ( ) ;
130
- filterElm . dispatchEvent ( new ( window . window as any ) . Event ( 'input' , { keyCode : 97 , bubbles : true , cancelable : true } ) ) ;
131
- const filterFilledElms = divContainer . querySelectorAll < HTMLInputElement > ( 'input.filter-duration.filled' ) ;
130
+ filterElm . focus ( ) ;
131
+ filterElm . dispatchEvent ( new ( window . window as any ) . Event ( 'input' , { keyCode : 97 , bubbles : true , cancelable : true } ) ) ;
132
+ const filterFilledElms = divContainer . querySelectorAll < HTMLInputElement > ( 'input.filter-duration.filled' ) ;
132
133
133
- expect ( filterFilledElms . length ) . toBe ( 1 ) ;
134
- expect ( spyCallback ) . toHaveBeenCalledWith ( expect . anything ( ) , { columnDef : mockColumn , operator : 'EQ' , searchTerms : [ 'abc' ] , shouldTriggerQuery : true } ) ;
135
- } ) ;
134
+ expect ( filterFilledElms . length ) . toBe ( 1 ) ;
135
+ expect ( spyCallback ) . toHaveBeenCalledWith ( expect . anything ( ) , { columnDef : mockColumn , operator : 'EQ' , searchTerms : [ 'abc' ] , shouldTriggerQuery : true } ) ;
136
+ } ) ;
136
137
137
- it ( 'should call "setValues" with extra spaces at the beginning of the searchTerms and trim value when "enableTrimWhiteSpace" is enabled in the column filter' , ( ) => {
138
- gridOptionMock . enableFilterTrimWhiteSpace = false ;
139
- mockColumn . filter . enableTrimWhiteSpace = true ;
140
- const spyCallback = jest . spyOn ( filterArguments , 'callback' ) ;
138
+ it ( 'should call "setValues" with extra spaces at the beginning of the searchTerms and trim value when "enableTrimWhiteSpace" is enabled in the column filter' , ( ) => {
139
+ gridOptionMock . enableFilterTrimWhiteSpace = false ;
140
+ mockColumn . filter ! . enableTrimWhiteSpace = true ;
141
+ const spyCallback = jest . spyOn ( filterArguments , 'callback' ) ;
141
142
142
- filter . init ( filterArguments ) ;
143
- filter . setValues ( ' abc ' ) ;
144
- const filterElm = divContainer . querySelector < HTMLInputElement > ( 'input.filter-duration' ) ;
143
+ filter . init ( filterArguments ) ;
144
+ filter . setValues ( ' abc ' ) ;
145
+ const filterElm = divContainer . querySelector ( 'input.filter-duration' ) as HTMLInputElement ;
145
146
146
- filterElm . focus ( ) ;
147
- filterElm . dispatchEvent ( new ( window . window as any ) . Event ( 'input' , { keyCode : 97 , bubbles : true , cancelable : true } ) ) ;
148
- const filterFilledElms = divContainer . querySelectorAll < HTMLInputElement > ( 'input.filter-duration.filled' ) ;
147
+ filterElm . focus ( ) ;
148
+ filterElm . dispatchEvent ( new ( window . window as any ) . Event ( 'input' , { keyCode : 97 , bubbles : true , cancelable : true } ) ) ;
149
+ const filterFilledElms = divContainer . querySelectorAll < HTMLInputElement > ( 'input.filter-duration.filled' ) ;
150
+
151
+ expect ( filterFilledElms . length ) . toBe ( 1 ) ;
152
+ expect ( spyCallback ) . toHaveBeenCalledWith ( expect . anything ( ) , { columnDef : mockColumn , operator : '' , searchTerms : [ 'abc' ] , shouldTriggerQuery : true } ) ;
153
+ } ) ;
154
+
155
+ it ( 'should call "setValues" and include an operator and expect the operator to show up in the output search string shown in the filter input text value' , ( ) => {
156
+ filter . init ( filterArguments ) ;
157
+
158
+ filter . setValues ( 'abc' , '<>' ) ;
159
+ expect ( filter . getValue ( ) ) . toBe ( '<>abc' ) ;
160
+
161
+ filter . setValues ( 'abc' , '!=' ) ;
162
+ expect ( filter . getValue ( ) ) . toBe ( '!=abc' ) ;
163
+
164
+ filter . setValues ( 'abc' , '=' ) ;
165
+ expect ( filter . getValue ( ) ) . toBe ( '=abc' ) ;
166
+
167
+ filter . setValues ( 'abc' , '==' ) ;
168
+ expect ( filter . getValue ( ) ) . toBe ( '==abc' ) ;
169
+
170
+ filter . setValues ( 123 , '<' ) ;
171
+ expect ( filter . getValue ( ) ) . toBe ( '<123' ) ;
172
+
173
+ filter . setValues ( 123 , '<=' ) ;
174
+ expect ( filter . getValue ( ) ) . toBe ( '<=123' ) ;
175
+
176
+ filter . setValues ( 123 , '>' ) ;
177
+ expect ( filter . getValue ( ) ) . toBe ( '>123' ) ;
178
+
179
+ filter . setValues ( 123 , '>=' ) ;
180
+ expect ( filter . getValue ( ) ) . toBe ( '>=123' ) ;
181
+
182
+ filter . setValues ( 'abc' , 'EndsWith' ) ;
183
+ expect ( filter . getValue ( ) ) . toBe ( '*abc' ) ;
184
+
185
+ filter . setValues ( 'abc' , '*z' ) ;
186
+ expect ( filter . getValue ( ) ) . toBe ( '*abc' ) ;
187
+
188
+ filter . setValues ( 'abc' , 'StartsWith' ) ;
189
+ expect ( filter . getValue ( ) ) . toBe ( 'abc*' ) ;
149
190
150
- expect ( filterFilledElms . length ) . toBe ( 1 ) ;
151
- expect ( spyCallback ) . toHaveBeenCalledWith ( expect . anything ( ) , { columnDef : mockColumn , operator : '' , searchTerms : [ 'abc' ] , shouldTriggerQuery : true } ) ;
191
+ filter . setValues ( 'abc' , 'a*' ) ;
192
+ expect ( filter . getValue ( ) ) . toBe ( 'abc*' ) ;
193
+ } ) ;
152
194
} ) ;
153
195
154
196
it ( 'should trigger the callback method when user types something in the input' , ( ) => {
155
197
const spyCallback = jest . spyOn ( filterArguments , 'callback' ) ;
156
198
157
199
filter . init ( filterArguments ) ;
158
- const filterElm = divContainer . querySelector < HTMLInputElement > ( 'input.filter-duration' ) ;
200
+ const filterElm = divContainer . querySelector ( 'input.filter-duration' ) as HTMLInputElement ;
159
201
160
202
filterElm . focus ( ) ;
161
203
filterElm . value = 'a' ;
@@ -168,7 +210,7 @@ describe('InputFilter', () => {
168
210
filterArguments . searchTerms = [ 'xyz' ] ;
169
211
170
212
filter . init ( filterArguments ) ;
171
- const filterElm = divContainer . querySelector < HTMLInputElement > ( 'input.filter-duration' ) ;
213
+ const filterElm = divContainer . querySelector ( 'input.filter-duration' ) as HTMLInputElement ;
172
214
173
215
expect ( filterElm . value ) . toBe ( 'xyz' ) ;
174
216
} ) ;
@@ -177,7 +219,7 @@ describe('InputFilter', () => {
177
219
filterArguments . searchTerms = [ '' ] ;
178
220
179
221
filter . init ( filterArguments ) ;
180
- const filterElm = divContainer . querySelector < HTMLInputElement > ( 'input.filter-duration' ) ;
222
+ const filterElm = divContainer . querySelector ( 'input.filter-duration' ) as HTMLInputElement ;
181
223
const filterFilledElms = divContainer . querySelectorAll < HTMLInputElement > ( 'input.filter-duration.filled' ) ;
182
224
183
225
expect ( filterElm . value ) . toBe ( '' ) ;
@@ -190,7 +232,7 @@ describe('InputFilter', () => {
190
232
191
233
filter . init ( filterArguments ) ;
192
234
filter . clear ( ) ;
193
- const filterElm = divContainer . querySelector < HTMLInputElement > ( 'input.filter-duration' ) ;
235
+ const filterElm = divContainer . querySelector ( 'input.filter-duration' ) as HTMLInputElement ;
194
236
const filterFilledElms = divContainer . querySelectorAll < HTMLInputElement > ( 'input.filter-duration.filled' ) ;
195
237
196
238
expect ( filterElm . value ) . toBe ( '' ) ;
@@ -204,7 +246,7 @@ describe('InputFilter', () => {
204
246
205
247
filter . init ( filterArguments ) ;
206
248
filter . clear ( false ) ;
207
- const filterElm = divContainer . querySelector < HTMLInputElement > ( 'input.filter-duration' ) ;
249
+ const filterElm = divContainer . querySelector ( 'input.filter-duration' ) as HTMLInputElement ;
208
250
const filterFilledElms = divContainer . querySelectorAll < HTMLInputElement > ( 'input.filter-duration.filled' ) ;
209
251
210
252
0 commit comments