@@ -4,6 +4,7 @@ import expect from 'expect';
44import jsdom from 'mocha-jsdom' ;
55import algoliasearchHelper from 'algoliasearch-helper' ;
66import utils from '../utils' ;
7+ import isEmpty from 'lodash/lang/isEmpty' ;
78
89describe ( 'getContainerNode' , ( ) => {
910 jsdom ( { useEach : true } ) ;
@@ -440,3 +441,139 @@ describe('getRefinements', function() {
440441 expect ( utils . getRefinements ( results , helper . state ) ) . toInclude ( expected [ 4 ] ) ;
441442 } ) ;
442443} ) ;
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