diff --git a/packages/compass-query-bar/src/stores/query-bar-store.js b/packages/compass-query-bar/src/stores/query-bar-store.js index c6ea717bb3d..4b7037ee81b 100644 --- a/packages/compass-query-bar/src/stores/query-bar-store.js +++ b/packages/compass-query-bar/src/stores/query-bar-store.js @@ -5,7 +5,7 @@ import assert from 'assert'; import diff from 'object-diff'; import { clone, - contains, + includes, every, get, has, @@ -508,7 +508,7 @@ const configureStore = (options = {}) => { if (has(field, '$in')) { // add value to $in array if it is not present yet const inArray = filter[args.field].$in; - if (!contains(inArray, args.value)) { + if (!includes(inArray, args.value)) { filter[args.field].$in.push(args.value); this.setQuery({ filter: filter }, true); } diff --git a/packages/compass-query-bar/test/renderer/query-bar-store.spec.js b/packages/compass-query-bar/test/renderer/query-bar-store.spec.js index c2de1690e7e..33eac076dc2 100644 --- a/packages/compass-query-bar/test/renderer/query-bar-store.spec.js +++ b/packages/compass-query-bar/test/renderer/query-bar-store.spec.js @@ -605,6 +605,71 @@ describe('QueryBarStore [Store]', function() { }); }); + describe('addDistinctValue', function() { + afterEach(function() { + unsubscribe(); + }); + + it('should add a distinct value to the filter state', function(done) { + unsubscribe = store.listen(state => { + expect(state.filter.name).to.equal('pineapple'); + done(); + }); + + store.addDistinctValue({ + field: 'name', + value: 'pineapple' + }); + }); + + it('should start a $in if the field already exists with one primitive', function(done) { + expect(store.state.userTyping).to.be.false; + + store.addDistinctValue({ + field: 'name', + value: 'winter' + }); + + unsubscribe = store.listen(state => { + expect(state.filter.name).to.deep.equal({ + $in: ['winter', 'tomatoes'] + }); + + done(); + }); + + store.addDistinctValue({ + field: 'name', + value: 'tomatoes' + }); + }); + + it('should add a value to an array if it already exists', function(done) { + expect(store.state.userTyping).to.be.false; + + store.addDistinctValue({ + field: 'name', + value: 'e.t.' + }); + store.addDistinctValue({ + field: 'name', + value: 'phone' + }); + + unsubscribe = store.listen(state => { + expect(state.filter.name).to.deep.equal({ + $in: ['e.t.', 'phone', 'home'] + }); + done(); + }); + + store.addDistinctValue({ + field: 'name', + value: 'home' + }); + }); + }); + describe('setQueryString', function() { afterEach(function() { unsubscribe();