Merge pull request #5899 from rashidkpc/fix/null-filters

Fix null filters
This commit is contained in:
Rashid Khan 2016-01-14 16:06:05 -07:00
commit 78d815b134
4 changed files with 52 additions and 3 deletions

View file

@ -6,6 +6,7 @@ define(function (require) {
this.on = _.noop;
this.off = _.noop;
this.save = sinon.stub();
this.replace = sinon.stub();
_.assign(this, defaults);
}

View file

@ -39,7 +39,8 @@ describe('get filters', function () {
beforeEach(function () {
filters = [
{ query: { match: { extension: { query: 'jpg', type: 'phrase' } } } },
{ query: { match: { '@tags': { query: 'info', type: 'phrase' } } } }
{ query: { match: { '@tags': { query: 'info', type: 'phrase' } } } },
null
];
});
@ -69,16 +70,40 @@ describe('get filters', function () {
expect(res[1].$state.store).to.be(storeNames.app);
});
it('should return filters from specific states', function () {
it('should return non-null filters from specific states', function () {
var states = [
[ globalState, queryFilter.getGlobalFilters ],
[ appState, queryFilter.getAppFilters ],
];
_.each(states, function (state) {
state[0].filters = filters;
state[0].filters = filters.slice(0);
expect(state[0].filters).to.contain(null);
var res = state[1]();
expect(res.length).to.be(state[0].filters.length);
expect(state[0].filters).to.not.contain(null);
});
});
it('should replace the state, not save it', function () {
var states = [
[ globalState, queryFilter.getGlobalFilters ],
[ appState, queryFilter.getAppFilters ],
];
expect(appState.save.called).to.be(false);
expect(appState.replace.called).to.be(false);
_.each(states, function (state) {
expect(state[0].save.called).to.be(false);
expect(state[0].replace.called).to.be(false);
state[0].filters = filters.slice(0);
var res = state[1]();
expect(state[0].save.called).to.be(false);
expect(state[0].replace.called).to.be(true);
});
});
});

View file

@ -39,7 +39,9 @@ describe('Query Filter', function () {
expect(queryFilter.pinFilter).to.be.a('function');
expect(queryFilter.pinAll).to.be.a('function');
});
});
});
describe('Actions', function () {

View file

@ -23,11 +23,19 @@ define(function (require) {
queryFilter.getAppFilters = function () {
var appState = getAppState();
if (!appState || !appState.filters) return [];
// Work around for https://github.com/elastic/kibana/issues/5896
appState.filters = validateStateFilters(appState);
return (appState.filters) ? _.map(appState.filters, appendStoreType('appState')) : [];
};
queryFilter.getGlobalFilters = function () {
if (!globalState.filters) return [];
// Work around for https://github.com/elastic/kibana/issues/5896
globalState.filters = validateStateFilters(globalState);
return _.map(globalState.filters, appendStoreType('globalState'));
};
@ -213,6 +221,19 @@ define(function (require) {
return queryFilter;
/**
* Rids filter list of null values and replaces state if any nulls are found
*/
function validateStateFilters(state) {
var compacted = _.compact(state.filters);
if (state.filters.length !== compacted.length) {
state.filters = compacted;
state.replace();
}
return state.filters;
}
/**
* Saves both app and global states, ensuring filters are persisted
* @returns {object} Resulting filter list, app and global combined