mirror of
https://github.com/elastic/kibana.git
synced 2025-04-23 09:19:04 -04:00
fixed time comparison logic in discover, wrote tests to prove it.
This commit is contained in:
parent
9c68fe0de3
commit
1bec508c1f
4 changed files with 139 additions and 2 deletions
|
@ -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) {
|
||||
|
|
25
src/kibana/utils/diff_time_picker_vals.js
Normal file
25
src/kibana/utils/diff_time_picker_vals.js
Normal 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;
|
||||
};
|
||||
};
|
||||
});
|
|
@ -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 () {
|
||||
|
|
111
test/unit/specs/utils/diff_time_picker_vals.js
Normal file
111
test/unit/specs/utils/diff_time_picker_vals.js
Normal 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);
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue