fixed time comparison logic in discover, wrote tests to prove it.

This commit is contained in:
Spencer Alger 2014-08-07 14:44:48 -07:00
parent 9c68fe0de3
commit 1bec508c1f
4 changed files with 139 additions and 2 deletions

View file

@ -53,6 +53,7 @@ define(function (require) {
var segmentedFetch = $scope.segmentedFetch = Private(require('apps/discover/_segmented_fetch'));
var HitSortFn = Private(require('apps/discover/_hit_sort_fn'));
var diffTimePickerValues = Private(require('utils/diff_time_picker_vals'));
var notify = new Notifier({
location: 'Discover'
@ -146,8 +147,7 @@ define(function (require) {
// TODO: Switch this to watching time.string when we implement it
$scope.$watchCollection('globalState.time', function (newTime, oldTime) {
// don't fetch unless there was a previous value and the values are not loosly equal
if (!_.isUndefined(oldTime) && !angular.equals(newTime, oldTime)) $scope.fetch();
if (diffTimePickerValues(newTime, oldTime)) $scope.fetch();
});
$scope.$watch('state.sort', function (sort) {

View file

@ -0,0 +1,25 @@
define(function (require) {
return function DiffTimePickerValuesFn() {
var _ = require('lodash');
var angular = require('angular');
var valueOf = function (o) {
if (o) return o.valueOf();
};
return function (rangeA, rangeB) {
if (_.isObject(rangeA) && _.isObject(rangeB)) {
if (
valueOf(rangeA.to) !== valueOf(rangeB.to)
|| valueOf(rangeA.from) !== valueOf(rangeB.from)
) {
return true;
}
} else {
return !angular.equals(rangeA, rangeB);
}
return false;
};
};
});

View file

@ -77,6 +77,7 @@
'specs/factories/base_object',
'specs/state_management/state',
'specs/utils/diff_object',
'specs/utils/diff_time_picker_vals',
'specs/factories/events'
], function (kibana, sinon) {
kibana.load(function () {

View file

@ -0,0 +1,111 @@
define(function (require) {
var moment = require('moment');
require('angular').module('DiffTimePickerValues', ['kibana']);
describe('Diff Time Picker Values', function () {
var diffTimePickerValues;
beforeEach(module('DiffTimePickerValues'));
beforeEach(inject(function (Private) {
diffTimePickerValues = Private(require('utils/diff_time_picker_vals'));
}));
it('accepts two undefined values', function () {
var diff = diffTimePickerValues(undefined, undefined);
expect(diff).to.be(false);
});
describe('datemath ranges', function () {
it('knows a match', function () {
var diff = diffTimePickerValues(
{
to: 'now',
from: 'now-7d'
},
{
to: 'now',
from: 'now-7d'
}
);
expect(diff).to.be(false);
});
it('knows a difference', function () {
var diff = diffTimePickerValues(
{
to: 'now',
from: 'now-7d'
},
{
to: 'now',
from: 'now-1h'
}
);
expect(diff).to.be(true);
});
});
describe('a datemath range, and a moment range', function () {
it('is always different', function () {
var diff = diffTimePickerValues(
{
to: moment(),
from: moment()
},
{
to: 'now',
from: 'now-1h'
}
);
expect(diff).to.be(true);
});
});
describe('moment ranges', function () {
it('uses the time value of moments for comparison', function () {
var to = moment();
var from = moment().add(1, 'day');
var diff = diffTimePickerValues(
{
to: to.clone(),
from: from.clone()
},
{
to: to.clone(),
from: from.clone()
}
);
expect(diff).to.be(false);
});
it('fails if any to or from is different', function () {
var to = moment();
var from = moment().add(1, 'day');
var from2 = moment().add(2, 'day');
var diff = diffTimePickerValues(
{
to: to.clone(),
from: from.clone()
},
{
to: to.clone(),
from: from2.clone()
}
);
expect(diff).to.be(true);
});
});
it('does not fall apart with unusual values', function () {
var diff = diffTimePickerValues({}, {});
expect(diff).to.be(false);
});
});
});