@@ -168,6 +168,55 @@ describe('search-box()', () => {
168
168
} ) ;
169
169
} ) ;
170
170
171
+ context ( 'input event listenner' , ( ) => {
172
+ let input ;
173
+ beforeEach ( ( ) => {
174
+ container = document . createElement ( 'div' ) ;
175
+ input = createHTMLNodeFromString ( '<input />' ) ;
176
+ input . addEventListener = sinon . spy ( ) ;
177
+ } ) ;
178
+
179
+ function simulateInputEvent ( ) {
180
+ // Given
181
+ helper . state . query = 'foo' ;
182
+ // When
183
+ widget . init ( initialState , helper ) ;
184
+ // Then
185
+ expect ( input . addEventListener . called ) . toEqual ( true ) ;
186
+ expect ( input . addEventListener . args [ 1 ] . length ) . toEqual ( 3 ) ;
187
+ expect ( input . addEventListener . args [ 1 ] [ 0 ] ) . toEqual ( 'input' ) ;
188
+ let fn = input . addEventListener . args [ 1 ] [ 1 ] ;
189
+
190
+ return fn ( { currentTarget : { value : 'test' } } ) ;
191
+ }
192
+
193
+ context ( 'instant search' , ( ) => {
194
+ beforeEach ( ( ) => {
195
+ widget = searchBox ( { container, autofocus : 'auto' } ) ;
196
+ widget . getInput = sinon . stub ( ) . returns ( input ) ;
197
+ } ) ;
198
+
199
+ it ( 'performs a search on any change' , ( ) => {
200
+ simulateInputEvent ( ) ;
201
+ expect ( helper . setQuery . calledOnce ) . toBe ( true ) ;
202
+ expect ( helper . search . called ) . toBe ( true ) ;
203
+ } ) ;
204
+ } ) ;
205
+
206
+ context ( 'non-instant search' , ( ) => {
207
+ beforeEach ( ( ) => {
208
+ widget = searchBox ( { container, autofocus : 'auto' , searchOnEnterKeyPressOnly : true } ) ;
209
+ widget . getInput = sinon . stub ( ) . returns ( input ) ;
210
+ } ) ;
211
+
212
+ it ( 'does not performs (will be handle by keyup event)' , ( ) => {
213
+ simulateInputEvent ( ) ;
214
+ expect ( helper . setQuery . calledOnce ) . toBe ( true ) ;
215
+ expect ( helper . search . called ) . toBe ( false ) ;
216
+ } ) ;
217
+ } ) ;
218
+ } ) ;
219
+
171
220
context ( 'keyup' , ( ) => {
172
221
let input ;
173
222
beforeEach ( ( ) => {
@@ -176,25 +225,30 @@ describe('search-box()', () => {
176
225
input . addEventListener = sinon . spy ( ) ;
177
226
} ) ;
178
227
228
+ function simulateKeyUpEvent ( args ) {
229
+ // Given
230
+ helper . state . query = 'foo' ;
231
+ // When
232
+ widget . init ( initialState , helper ) ;
233
+ // Then
234
+ expect ( input . addEventListener . called ) . toEqual ( true ) ;
235
+ expect ( input . addEventListener . args [ 0 ] . length ) . toEqual ( 2 ) ;
236
+ expect ( input . addEventListener . args [ 0 ] [ 0 ] ) . toEqual ( 'keyup' ) ;
237
+ let fn = input . addEventListener . args [ 0 ] [ 1 ] ;
238
+
239
+ return fn ( args ) ;
240
+ }
241
+
179
242
context ( 'instant search' , ( ) => {
180
243
beforeEach ( ( ) => {
181
244
widget = searchBox ( { container, autofocus : 'auto' } ) ;
182
245
widget . getInput = sinon . stub ( ) . returns ( input ) ;
183
246
} ) ;
184
247
185
- it ( 'performs the search on keyup' , ( ) => {
186
- // Given
187
- helper . state . query = 'foo' ;
188
- // When
189
- widget . init ( initialState , helper ) ;
190
- // Then
191
- expect ( input . addEventListener . called ) . toEqual ( true ) ;
192
- expect ( input . addEventListener . args [ 0 ] . length ) . toEqual ( 2 ) ;
193
- expect ( input . addEventListener . args [ 0 ] [ 0 ] ) . toEqual ( 'keyup' ) ;
194
- let fn = input . addEventListener . args [ 0 ] [ 1 ] ;
195
- fn ( { } ) ;
248
+ it ( 'do not perform the search on keyup event (should be done by input event)' , ( ) => {
249
+ simulateKeyUpEvent ( { } ) ;
196
250
expect ( helper . setQuery . calledOnce ) . toBe ( true ) ;
197
- expect ( helper . search . calledOnce ) . toBe ( true ) ;
251
+ expect ( helper . search . called ) . toBe ( false ) ;
198
252
} ) ;
199
253
} ) ;
200
254
@@ -204,32 +258,14 @@ describe('search-box()', () => {
204
258
widget . getInput = sinon . stub ( ) . returns ( input ) ;
205
259
} ) ;
206
260
207
- it ( 'performs the search on <ENTER>' , ( ) => {
208
- // Given
209
- helper . state . query = 'foo' ;
210
- // When
211
- widget . init ( initialState , helper ) ;
212
- // Then
213
- expect ( input . addEventListener . called ) . toEqual ( true ) ;
214
- expect ( input . addEventListener . args [ 0 ] . length ) . toEqual ( 2 ) ;
215
- expect ( input . addEventListener . args [ 0 ] [ 0 ] ) . toEqual ( 'keyup' ) ;
216
- let fn = input . addEventListener . args [ 0 ] [ 1 ] ;
217
- fn ( { keyCode : 13 } ) ;
261
+ it ( 'performs the search on keyup if <ENTER>' , ( ) => {
262
+ simulateKeyUpEvent ( { keyCode : 13 } ) ;
218
263
expect ( helper . setQuery . calledOnce ) . toBe ( true ) ;
219
264
expect ( helper . search . calledOnce ) . toBe ( true ) ;
220
265
} ) ;
221
266
222
- it ( 'doesn\'t perform the search on keyup' , ( ) => {
223
- // Given
224
- helper . state . query = 'foo' ;
225
- // When
226
- widget . init ( initialState , helper ) ;
227
- // Then
228
- expect ( input . addEventListener . called ) . toEqual ( true ) ;
229
- expect ( input . addEventListener . args [ 0 ] . length ) . toEqual ( 2 ) ;
230
- expect ( input . addEventListener . args [ 0 ] [ 0 ] ) . toEqual ( 'keyup' ) ;
231
- let fn = input . addEventListener . args [ 0 ] [ 1 ] ;
232
- fn ( { } ) ;
267
+ it ( 'doesn\'t perform the search on keyup if not <ENTER>' , ( ) => {
268
+ simulateKeyUpEvent ( { } ) ;
233
269
expect ( helper . setQuery . calledOnce ) . toBe ( true ) ;
234
270
expect ( helper . search . calledOnce ) . toBe ( false ) ;
235
271
} ) ;
0 commit comments