@@ -4,6 +4,7 @@ import expect from 'expect';
4
4
import jsdom from 'mocha-jsdom' ;
5
5
import algoliasearchHelper from 'algoliasearch-helper' ;
6
6
import utils from '../utils' ;
7
+ import isEmpty from 'lodash/lang/isEmpty' ;
7
8
8
9
describe ( 'getContainerNode' , ( ) => {
9
10
jsdom ( { useEach : true } ) ;
@@ -440,3 +441,139 @@ describe('getRefinements', function() {
440
441
expect ( utils . getRefinements ( results , helper . state ) ) . toInclude ( expected [ 4 ] ) ;
441
442
} ) ;
442
443
} ) ;
444
+
445
+ describe ( 'clearRefinementsFromState' , ( ) => {
446
+ let helper ;
447
+ let state ;
448
+
449
+ beforeEach ( ( ) => {
450
+ helper = algoliasearchHelper ( { } , 'my_index' , {
451
+ facets : [ 'facet1' , 'facet2' , 'numericFacet1' , 'facetExclude1' ] ,
452
+ disjunctiveFacets : [ 'disjunctiveFacet1' , 'numericDisjunctiveFacet' ] ,
453
+ hierarchicalFacets : [ {
454
+ name : 'hierarchicalFacet1' ,
455
+ attributes : [ 'hierarchicalFacet1.lvl0' , 'hierarchicalFacet1.lvl1' ] ,
456
+ separator : ' > '
457
+ } ]
458
+ } ) ;
459
+ helper
460
+ . toggleRefinement ( 'facet1' , 'facet1val1' )
461
+ . toggleRefinement ( 'facet1' , 'facet1val2' )
462
+ . toggleRefinement ( 'facet2' , 'facet2val1' )
463
+ . toggleRefinement ( 'facet2' , 'facet2val2' )
464
+ . toggleRefinement ( 'disjunctiveFacet1' , 'facet1val1' )
465
+ . toggleRefinement ( 'disjunctiveFacet1' , 'facet1val2' )
466
+ . toggleExclude ( 'facetExclude1' , 'facetExclude1val1' )
467
+ . toggleExclude ( 'facetExclude1' , 'facetExclude1val2' )
468
+ . addNumericRefinement ( 'numericFacet1' , '>' , '1' )
469
+ . addNumericRefinement ( 'numericFacet1' , '>' , '2' )
470
+ . addNumericRefinement ( 'numericDisjunctiveFacet1' , '>' , '1' )
471
+ . addNumericRefinement ( 'numericDisjunctiveFacet1' , '>' , '2' )
472
+ . toggleRefinement ( 'hierarchicalFacet1' , 'hierarchicalFacet1lvl0val1' )
473
+ . addTag ( 'tag1' )
474
+ . addTag ( 'tag2' ) ;
475
+ state = helper . state ;
476
+ } ) ;
477
+
478
+ context ( 'without arguments' , ( ) => {
479
+ it ( 'should clear everything' , ( ) => {
480
+ let newState = utils . clearRefinementsFromState ( state ) ;
481
+ expect ( isEmpty ( newState . facetsRefinements ) ) . toBe ( true , 'state shouldn\'t have facetsRefinements' ) ;
482
+ expect ( isEmpty ( newState . facetsExcludes ) ) . toBe ( true , 'state shouldn\'t have facetsExcludes' ) ;
483
+ expect ( isEmpty ( newState . disjunctiveFacetsRefinements ) ) . toBe ( true , 'state shouldn\'t have disjunctiveFacetsRefinements' ) ;
484
+ expect ( isEmpty ( newState . hierarchicalFacetsRefinements ) ) . toBe ( true , 'state shouldn\'t have hierarchicalFacetsRefinements' ) ;
485
+ expect ( isEmpty ( newState . numericRefinements ) ) . toBe ( true , 'state shouldn\'t have numericRefinements' ) ;
486
+ expect ( isEmpty ( newState . tagRefinements ) ) . toBe ( true , 'state shouldn\'t have tagRefinements' ) ;
487
+ } ) ;
488
+ } ) ;
489
+
490
+ it ( 'should clear one facet' , ( ) => {
491
+ let newState = utils . clearRefinementsFromState ( state , [ 'facet1' ] ) ;
492
+ expect ( isEmpty ( newState . facetsRefinements ) ) . toBe ( false , 'state should have facetsRefinements' ) ;
493
+ expect ( isEmpty ( newState . facetsExcludes ) ) . toBe ( false , 'state should have facetsExcludes' ) ;
494
+ expect ( isEmpty ( newState . disjunctiveFacetsRefinements ) ) . toBe ( false , 'state should have disjunctiveFacetsRefinements' ) ;
495
+ expect ( isEmpty ( newState . hierarchicalFacetsRefinements ) ) . toBe ( false , 'state should have hierarchicalFacetsRefinements' ) ;
496
+ expect ( isEmpty ( newState . numericRefinements ) ) . toBe ( false , 'state should have numericRefinements' ) ;
497
+ expect ( isEmpty ( newState . tagRefinements ) ) . toBe ( false , 'state should have tagRefinements' ) ;
498
+ } ) ;
499
+
500
+ it ( 'should clear facets' , ( ) => {
501
+ let newState = utils . clearRefinementsFromState ( state , [ 'facet1' , 'facet2' ] ) ;
502
+ expect ( isEmpty ( newState . facetsRefinements ) ) . toBe ( true , 'state shouldn\'t have facetsRefinements' ) ;
503
+ expect ( isEmpty ( newState . facetsExcludes ) ) . toBe ( false , 'state should have facetsExcludes' ) ;
504
+ expect ( isEmpty ( newState . disjunctiveFacetsRefinements ) ) . toBe ( false , 'state should have disjunctiveFacetsRefinements' ) ;
505
+ expect ( isEmpty ( newState . hierarchicalFacetsRefinements ) ) . toBe ( false , 'state should have hierarchicalFacetsRefinements' ) ;
506
+ expect ( isEmpty ( newState . numericRefinements ) ) . toBe ( false , 'state should have numericRefinements' ) ;
507
+ expect ( isEmpty ( newState . tagRefinements ) ) . toBe ( false , 'state should have tagRefinements' ) ;
508
+ } ) ;
509
+
510
+ it ( 'should clear excludes' , ( ) => {
511
+ let newState = utils . clearRefinementsFromState ( state , [ 'facetExclude1' ] ) ;
512
+ expect ( isEmpty ( newState . facetsRefinements ) ) . toBe ( false , 'state should have facetsRefinements' ) ;
513
+ expect ( isEmpty ( newState . facetsExcludes ) ) . toBe ( true , 'state shouldn\'t have facetsExcludes' ) ;
514
+ expect ( isEmpty ( newState . disjunctiveFacetsRefinements ) ) . toBe ( false , 'state should have disjunctiveFacetsRefinements' ) ;
515
+ expect ( isEmpty ( newState . hierarchicalFacetsRefinements ) ) . toBe ( false , 'state should have hierarchicalFacetsRefinements' ) ;
516
+ expect ( isEmpty ( newState . numericRefinements ) ) . toBe ( false , 'state should have numericRefinements' ) ;
517
+ expect ( isEmpty ( newState . tagRefinements ) ) . toBe ( false , 'state should have tagRefinements' ) ;
518
+ } ) ;
519
+
520
+ it ( 'should clear disjunctive facets' , ( ) => {
521
+ let newState = utils . clearRefinementsFromState ( state , [ 'disjunctiveFacet1' ] ) ;
522
+ expect ( isEmpty ( newState . facetsRefinements ) ) . toBe ( false , 'state should have facetsRefinements' ) ;
523
+ expect ( isEmpty ( newState . facetsExcludes ) ) . toBe ( false , 'state should have facetsExcludes' ) ;
524
+ expect ( isEmpty ( newState . disjunctiveFacetsRefinements ) ) . toBe ( true , 'state shouldn\'t have disjunctiveFacetsRefinements' ) ;
525
+ expect ( isEmpty ( newState . hierarchicalFacetsRefinements ) ) . toBe ( false , 'state should have hierarchicalFacetsRefinements' ) ;
526
+ expect ( isEmpty ( newState . numericRefinements ) ) . toBe ( false , 'state should have numericRefinements' ) ;
527
+ expect ( isEmpty ( newState . tagRefinements ) ) . toBe ( false , 'state should have tagRefinements' ) ;
528
+ } ) ;
529
+
530
+ it ( 'should clear hierarchical facets' , ( ) => {
531
+ let newState = utils . clearRefinementsFromState ( state , [ 'hierarchicalFacet1' ] ) ;
532
+ expect ( isEmpty ( newState . facetsRefinements ) ) . toBe ( false , 'state should have facetsRefinements' ) ;
533
+ expect ( isEmpty ( newState . facetsExcludes ) ) . toBe ( false , 'state should have facetsExcludes' ) ;
534
+ expect ( isEmpty ( newState . disjunctiveFacetsRefinements ) ) . toBe ( false , 'state should have disjunctiveFacetsRefinements' ) ;
535
+ expect ( isEmpty ( newState . hierarchicalFacetsRefinements ) ) . toBe ( true , 'state shouldn\'t have hierarchicalFacetsRefinements' ) ;
536
+ expect ( isEmpty ( newState . numericRefinements ) ) . toBe ( false , 'state should have numericRefinements' ) ;
537
+ expect ( isEmpty ( newState . tagRefinements ) ) . toBe ( false , 'state should have tagRefinements' ) ;
538
+ } ) ;
539
+
540
+ it ( 'should clear one numeric facet' , ( ) => {
541
+ let newState = utils . clearRefinementsFromState ( state , [ 'numericFacet1' ] ) ;
542
+ expect ( isEmpty ( newState . facetsRefinements ) ) . toBe ( false , 'state should have facetsRefinements' ) ;
543
+ expect ( isEmpty ( newState . facetsExcludes ) ) . toBe ( false , 'state should have facetsExcludes' ) ;
544
+ expect ( isEmpty ( newState . disjunctiveFacetsRefinements ) ) . toBe ( false , 'state should have disjunctiveFacetsRefinements' ) ;
545
+ expect ( isEmpty ( newState . hierarchicalFacetsRefinements ) ) . toBe ( false , 'state should have hierarchicalFacetsRefinements' ) ;
546
+ expect ( isEmpty ( newState . numericRefinements ) ) . toBe ( false , 'state should have numericRefinements' ) ;
547
+ expect ( isEmpty ( newState . tagRefinements ) ) . toBe ( false , 'state should have tagRefinements' ) ;
548
+ } ) ;
549
+
550
+ it ( 'should clear one numeric facet' , ( ) => {
551
+ let newState = utils . clearRefinementsFromState ( state , [ 'numericDisjunctiveFacet1' ] ) ;
552
+ expect ( isEmpty ( newState . facetsRefinements ) ) . toBe ( false , 'state should have facetsRefinements' ) ;
553
+ expect ( isEmpty ( newState . facetsExcludes ) ) . toBe ( false , 'state should have facetsExcludes' ) ;
554
+ expect ( isEmpty ( newState . disjunctiveFacetsRefinements ) ) . toBe ( false , 'state should have disjunctiveFacetsRefinements' ) ;
555
+ expect ( isEmpty ( newState . hierarchicalFacetsRefinements ) ) . toBe ( false , 'state should have hierarchicalFacetsRefinements' ) ;
556
+ expect ( isEmpty ( newState . numericRefinements ) ) . toBe ( false , 'state should have numericRefinements' ) ;
557
+ expect ( isEmpty ( newState . tagRefinements ) ) . toBe ( false , 'state should have tagRefinements' ) ;
558
+ } ) ;
559
+
560
+ it ( 'should clear numeric facets' , ( ) => {
561
+ let newState = utils . clearRefinementsFromState ( state , [ 'numericFacet1' , 'numericDisjunctiveFacet1' ] ) ;
562
+ expect ( isEmpty ( newState . facetsRefinements ) ) . toBe ( false , 'state should have facetsRefinements' ) ;
563
+ expect ( isEmpty ( newState . facetsExcludes ) ) . toBe ( false , 'state should have facetsExcludes' ) ;
564
+ expect ( isEmpty ( newState . disjunctiveFacetsRefinements ) ) . toBe ( false , 'state should have disjunctiveFacetsRefinements' ) ;
565
+ expect ( isEmpty ( newState . hierarchicalFacetsRefinements ) ) . toBe ( false , 'state should have hierarchicalFacetsRefinements' ) ;
566
+ expect ( isEmpty ( newState . numericRefinements ) ) . toBe ( true , 'state shouldn\'t have numericRefinements' ) ;
567
+ expect ( isEmpty ( newState . tagRefinements ) ) . toBe ( false , 'state should have tagRefinements' ) ;
568
+ } ) ;
569
+
570
+ it ( 'should clear tags' , ( ) => {
571
+ let newState = utils . clearRefinementsFromState ( state , [ '_tags' ] ) ;
572
+ expect ( isEmpty ( newState . facetsRefinements ) ) . toBe ( false , 'state should have facetsRefinements' ) ;
573
+ expect ( isEmpty ( newState . facetsExcludes ) ) . toBe ( false , 'state should have facetsExcludes' ) ;
574
+ expect ( isEmpty ( newState . disjunctiveFacetsRefinements ) ) . toBe ( false , 'state should have disjunctiveFacetsRefinements' ) ;
575
+ expect ( isEmpty ( newState . hierarchicalFacetsRefinements ) ) . toBe ( false , 'state should have hierarchicalFacetsRefinements' ) ;
576
+ expect ( isEmpty ( newState . numericRefinements ) ) . toBe ( false , 'state should have numericRefinements' ) ;
577
+ expect ( isEmpty ( newState . tagRefinements ) ) . toBe ( true , 'state shouldn\'t have tagRefinements' ) ;
578
+ } ) ;
579
+ } ) ;
0 commit comments