@@ -83,7 +83,9 @@ describe('toggle()', () => {
83
83
transformData : undefined
84
84
} ;
85
85
helper = {
86
- hasRefinements : sinon . stub ( ) . returns ( false ) ,
86
+ state : {
87
+ isFacetRefined : sinon . stub ( ) . returns ( false )
88
+ } ,
87
89
removeFacetRefinement : sinon . spy ( ) ,
88
90
addFacetRefinement : sinon . spy ( ) ,
89
91
search : sinon . spy ( )
@@ -163,7 +165,9 @@ describe('toggle()', () => {
163
165
164
166
it ( 'when refined' , ( ) => {
165
167
helper = {
166
- hasRefinements : sinon . stub ( ) . returns ( true )
168
+ state : {
169
+ isFacetRefined : sinon . stub ( ) . returns ( true )
170
+ }
167
171
} ;
168
172
results = {
169
173
hits : [ { Hello : ', world!' } ] ,
@@ -198,12 +202,128 @@ describe('toggle()', () => {
198
202
expect ( helper . addFacetRefinement . calledOnce ) . toBe ( true ) ;
199
203
expect ( helper . addFacetRefinement . calledWithExactly ( facetName , true ) ) ;
200
204
helper . hasRefinements = sinon . stub ( ) . returns ( true ) ;
201
- ReactDOM . render . reset ( ) ;
202
- widget . render ( { results, helper} ) ;
203
- toggleRefinement = ReactDOM . render . firstCall . args [ 0 ] . props . toggleRefinement ;
204
- toggleRefinement ( ) ;
205
- expect ( helper . removeFacetRefinement . calledOnce ) . toBe ( true ) ;
206
- expect ( helper . removeFacetRefinement . calledWithExactly ( facetName , true ) ) ;
205
+ } ) ;
206
+ } ) ;
207
+
208
+ context ( 'toggleRefinement' , ( ) => {
209
+ let helper ;
210
+ let values ;
211
+
212
+ function toggleOn ( ) {
213
+ widget . toggleRefinement ( helper , false ) ;
214
+ }
215
+ function toggleOff ( ) {
216
+ widget . toggleRefinement ( helper , true ) ;
217
+ }
218
+
219
+ beforeEach ( ( ) => {
220
+ helper = {
221
+ removeFacetRefinement : sinon . spy ( ) ,
222
+ addFacetRefinement : sinon . spy ( ) ,
223
+ search : sinon . spy ( )
224
+ } ;
225
+ } ) ;
226
+
227
+ context ( 'default values' , ( ) => {
228
+ it ( 'toggle on should add filter to true' , ( ) => {
229
+ // Given
230
+ widget = toggle ( { container, facetName, label} ) ;
231
+
232
+ // When
233
+ toggleOn ( ) ;
234
+
235
+ // Then
236
+ expect ( helper . addFacetRefinement . calledWith ( facetName , true ) ) . toBe ( true ) ;
237
+ expect ( helper . removeFacetRefinement . called ) . toBe ( false ) ;
238
+ } ) ;
239
+ it ( 'toggle off should remove all filters' , ( ) => {
240
+ // Given
241
+ widget = toggle ( { container, facetName, label} ) ;
242
+
243
+ // When
244
+ toggleOff ( ) ;
245
+
246
+ // Then
247
+ expect ( helper . removeFacetRefinement . calledWith ( facetName , true ) ) . toBe ( true ) ;
248
+ expect ( helper . addFacetRefinement . called ) . toBe ( false ) ;
249
+ } ) ;
250
+ } ) ;
251
+ context ( 'specific values' , ( ) => {
252
+ it ( 'toggle on should change the refined value' , ( ) => {
253
+ // Given
254
+ values = { on : 'on' , off : 'off' } ;
255
+ widget = toggle ( { container, facetName, label, values} ) ;
256
+
257
+ // When
258
+ toggleOn ( ) ;
259
+
260
+ // Then
261
+ expect ( helper . removeFacetRefinement . calledWith ( facetName , 'off' ) ) . toBe ( true ) ;
262
+ expect ( helper . addFacetRefinement . calledWith ( facetName , 'on' ) ) . toBe ( true ) ;
263
+ } ) ;
264
+ it ( 'toggle off should change the refined value' , ( ) => {
265
+ // Given
266
+ values = { on : 'on' , off : 'off' } ;
267
+ widget = toggle ( { container, facetName, label, values} ) ;
268
+
269
+ // When
270
+ toggleOff ( ) ;
271
+
272
+ // Then
273
+ expect ( helper . removeFacetRefinement . calledWith ( facetName , 'on' ) ) . toBe ( true ) ;
274
+ expect ( helper . addFacetRefinement . calledWith ( facetName , 'off' ) ) . toBe ( true ) ;
275
+ } ) ;
276
+ } ) ;
277
+ } ) ;
278
+
279
+ context ( 'custom off value' , ( ) => {
280
+ it ( 'should add a refinement for custom off value on init' , ( ) => {
281
+ // Given
282
+ let values = { on : 'on' , off : 'off' } ;
283
+ widget = toggle ( { container, facetName, label, values} ) ;
284
+ let state = {
285
+ isFacetRefined : sinon . stub ( ) . returns ( false )
286
+ } ;
287
+ let helper = {
288
+ addFacetRefinement : sinon . spy ( )
289
+ } ;
290
+
291
+ // When
292
+ widget . init ( state , helper ) ;
293
+
294
+ // Then
295
+ expect ( helper . addFacetRefinement . calledWith ( facetName , 'off' ) ) . toBe ( true ) ;
296
+ } ) ;
297
+ it ( 'should not add a refinement for custom off value on init if already checked' , ( ) => {
298
+ // Given
299
+ let values = { on : 'on' , off : 'off' } ;
300
+ widget = toggle ( { container, facetName, label, values} ) ;
301
+ let state = {
302
+ isFacetRefined : sinon . stub ( ) . returns ( true )
303
+ } ;
304
+ let helper = {
305
+ addFacetRefinement : sinon . spy ( )
306
+ } ;
307
+
308
+ // When
309
+ widget . init ( state , helper ) ;
310
+
311
+ // Then
312
+ expect ( helper . addFacetRefinement . called ) . toBe ( false ) ;
313
+ } ) ;
314
+ it ( 'should not add a refinement for no custom off value on init' , ( ) => {
315
+ // Given
316
+ widget = toggle ( { container, facetName, label} ) ;
317
+ let state = { } ;
318
+ let helper = {
319
+ addFacetRefinement : sinon . spy ( )
320
+ } ;
321
+
322
+ // When
323
+ widget . init ( state , helper ) ;
324
+
325
+ // Then
326
+ expect ( helper . addFacetRefinement . called ) . toBe ( false ) ;
207
327
} ) ;
208
328
} ) ;
209
329
0 commit comments