virool-pivot
Version:
A web-based exploratory visualization UI for Druid.io
259 lines (258 loc) • 16.6 kB
JavaScript
"use strict";
var chai_1 = require("chai");
var immutable_class_1 = require("immutable-class");
var chronoshift_1 = require("chronoshift");
var granularity_1 = require("./granularity");
var plywood_1 = require("plywood");
var WallTime = require('chronoshift').WallTime;
if (!WallTime.rules) {
var tzData = require("chronoshift/lib/walltime/walltime-data.js");
WallTime.init(tzData.rules, tzData.zones);
}
describe('Granularity', function () {
it('fromJSes appropriately', function () {
var timeBucketAction1 = granularity_1.granularityFromJS({
action: 'timeBucket',
duration: 'P1W',
timezone: 'America/Tijuana'
});
chai_1.expect(timeBucketAction1 instanceof plywood_1.TimeBucketAction).to.equal(true);
chai_1.expect(timeBucketAction1.timezone.toString()).to.equal('America/Tijuana');
chai_1.expect(timeBucketAction1.duration).to.deep.equal(chronoshift_1.Duration.fromJS('P1W'));
var timeBucketAction2 = granularity_1.granularityFromJS('PT1H');
chai_1.expect(timeBucketAction2 instanceof plywood_1.TimeBucketAction).to.equal(true);
chai_1.expect(timeBucketAction2.timezone).to.equal(undefined);
chai_1.expect(timeBucketAction2.duration).to.deep.equal(chronoshift_1.Duration.fromJS('PT1H'));
var numberBucketAction1 = granularity_1.granularityFromJS({
action: 'numberBucket',
size: 5,
offset: 1
});
chai_1.expect(numberBucketAction1 instanceof plywood_1.NumberBucketAction).to.equal(true);
chai_1.expect(numberBucketAction1.size).to.equal(5);
chai_1.expect(numberBucketAction1.offset).to.equal(1);
var numberBucketAction2 = granularity_1.granularityFromJS(5);
chai_1.expect(numberBucketAction2 instanceof plywood_1.NumberBucketAction).to.equal(true);
chai_1.expect(numberBucketAction2.size).to.equal(5);
chai_1.expect(numberBucketAction2.offset).to.equal(0);
});
it('to strings appropriately', function () {
var timeBucketAction1 = granularity_1.granularityFromJS({
action: 'timeBucket',
duration: 'P1W',
timezone: 'America/Tijuana'
});
var timeBucketAction2 = granularity_1.granularityFromJS({
action: 'timeBucket',
duration: 'P1W',
timezone: 'America/Tijuana'
});
var timeBucketAction3 = granularity_1.granularityFromJS({
action: 'timeBucket',
duration: 'P1W',
timezone: 'Asia/Kathmandu'
});
var timeBucketAction4 = granularity_1.granularityFromJS({
action: 'timeBucket',
duration: 'P1D',
timezone: 'Asia/Kathmandu'
});
chai_1.expect(granularity_1.granularityToString(timeBucketAction1)).to.equal('P1W');
chai_1.expect(granularity_1.granularityToString(timeBucketAction2)).to.equal('P1W');
chai_1.expect(granularity_1.granularityToString(timeBucketAction3)).to.equal('P1W');
chai_1.expect(granularity_1.granularityToString(timeBucketAction4)).to.equal('P1D');
var numberBucketAction1 = granularity_1.granularityFromJS({
action: 'numberBucket',
size: 5,
offset: 1
});
var numberBucketAction2 = granularity_1.granularityFromJS({
action: 'numberBucket',
size: 5,
offset: 1
});
var numberBucketAction3 = granularity_1.granularityFromJS({
action: 'numberBucket',
size: 300000
});
var numberBucketAction4 = granularity_1.granularityFromJS(2);
chai_1.expect(granularity_1.granularityToString(numberBucketAction1)).to.equal('5');
chai_1.expect(granularity_1.granularityToString(numberBucketAction2)).to.equal('5');
chai_1.expect(granularity_1.granularityToString(numberBucketAction3)).to.equal('300000');
chai_1.expect(granularity_1.granularityToString(numberBucketAction4)).to.equal('2');
});
it('equals appropriately', function () {
var timeBucketAction1 = granularity_1.granularityFromJS({
action: 'timeBucket',
duration: 'P1W',
timezone: 'America/Tijuana'
});
var timeBucketAction2 = granularity_1.granularityFromJS({
action: 'timeBucket',
duration: 'P1W',
timezone: 'America/Tijuana'
});
var timeBucketAction3 = granularity_1.granularityFromJS({
action: 'timeBucket',
duration: 'P1W',
timezone: 'Asia/Kathmandu'
});
var timeBucketAction4 = granularity_1.granularityFromJS({
action: 'timeBucket',
duration: 'P1D',
timezone: 'Asia/Kathmandu'
});
chai_1.expect(granularity_1.granularityEquals(timeBucketAction1, timeBucketAction2)).to.equal(true);
chai_1.expect(granularity_1.granularityEquals(timeBucketAction2, timeBucketAction3)).to.equal(false);
chai_1.expect(granularity_1.granularityEquals(timeBucketAction3, timeBucketAction4)).to.equal(false);
var numberBucketAction1 = granularity_1.granularityFromJS({
action: 'numberBucket',
size: 5,
offset: 1
});
var numberBucketAction2 = granularity_1.granularityFromJS({
action: 'numberBucket',
size: 5,
offset: 1
});
var numberBucketAction3 = granularity_1.granularityFromJS({
action: 'numberBucket',
size: 5
});
var numberBucketAction4 = granularity_1.granularityFromJS(5);
chai_1.expect(granularity_1.granularityEquals(numberBucketAction1, numberBucketAction2)).to.equal(true);
chai_1.expect(granularity_1.granularityEquals(numberBucketAction2, numberBucketAction3)).to.equal(false);
chai_1.expect(granularity_1.granularityEquals(numberBucketAction3, numberBucketAction4)).to.equal(true);
});
it('updatesBucketSize appropriately, preserves original non size properties', function () {
var numberBucketAction1 = granularity_1.granularityFromJS({
action: 'numberBucket',
size: 5,
offset: 1
});
var numberBucketAction2 = granularity_1.granularityFromJS({
action: 'numberBucket',
size: 10,
offset: 0
});
var numberBucketAction3 = granularity_1.granularityFromJS({
action: 'numberBucket',
size: 10,
offset: 1
});
chai_1.expect(granularity_1.granularityEquals(granularity_1.updateBucketSize(numberBucketAction1, numberBucketAction2), numberBucketAction3)).to.equal(true);
var timeBucketAction1 = granularity_1.granularityFromJS({
action: 'timeBucket',
duration: 'P1W',
timezone: 'America/Tijuana'
});
var timeBucketAction2 = granularity_1.granularityFromJS({
action: 'timeBucket',
duration: 'P1M',
timezone: null
});
var timeBucketAction3 = granularity_1.granularityFromJS({
action: 'timeBucket',
duration: 'P1M',
timezone: 'America/Tijuana'
});
chai_1.expect(granularity_1.granularityEquals(granularity_1.updateBucketSize(timeBucketAction1, timeBucketAction2), timeBucketAction3)).to.equal(true);
});
it('getGranularities appropriately for time', function () {
var defaults = granularity_1.getGranularities('time');
var expectedDefaults = ['P1W', 'P1D', 'PT1H', 'PT5M', 'PT1M'].map(granularity_1.granularityFromJS);
chai_1.expect(immutable_class_1.immutableArraysEqual(defaults, expectedDefaults), 'time defaults are returned').to.equal(true);
var coarse = granularity_1.getGranularities('time', null, true);
var expectedCoarseDefaults = ['P1M', 'P1W', 'P1D', 'PT12H', 'PT6H', 'PT1H', 'PT5M', 'PT1M'].map(granularity_1.granularityFromJS);
chai_1.expect(immutable_class_1.immutableArraysEqual(coarse, expectedCoarseDefaults), 'coarse time defaults are returned').to.equal(true);
var bucketedBy = granularity_1.getGranularities('time', granularity_1.granularityFromJS('PT12H'), false);
var expectedDefaults = ['PT12H', 'P1D', 'P1W', 'P1M', 'P3M'].map(granularity_1.granularityFromJS);
chai_1.expect(immutable_class_1.immutableArraysEqual(bucketedBy, expectedDefaults), 'bucketed by returns larger granularities').to.equal(true);
});
it('getGranularities appropriately for number', function () {
var defaults = granularity_1.getGranularities('number');
var expectedDefaults = [0.1, 1, 10, 100, 1000].map(granularity_1.granularityFromJS);
chai_1.expect(immutable_class_1.immutableArraysEqual(defaults, expectedDefaults), 'number defaults are returned').to.equal(true);
var bucketedBy = granularity_1.getGranularities('number', granularity_1.granularityFromJS(100), false);
var expectedGrans = [100, 500, 1000, 5000, 10000].map(granularity_1.granularityFromJS);
chai_1.expect(immutable_class_1.immutableArraysEqual(bucketedBy, expectedGrans), 'bucketed by returns larger granularities').to.equal(true);
});
it('getDefaultGranularityForKind appropriately for number', function () {
var defaultNumber = granularity_1.getDefaultGranularityForKind('number');
var expected = granularity_1.granularityFromJS(10);
chai_1.expect(granularity_1.granularityEquals(defaultNumber, expected)).to.equal(true);
var bucketedBy = granularity_1.getDefaultGranularityForKind('number', granularity_1.granularityFromJS(50));
expected = granularity_1.granularityFromJS(50);
chai_1.expect(granularity_1.granularityEquals(bucketedBy, expected), 'default will bucket by provided bucketedBy amount').to.equal(true);
var customGrans = granularity_1.getDefaultGranularityForKind('number', null, [100, 500, 1000, 5000, 10000].map(granularity_1.granularityFromJS));
expected = granularity_1.granularityFromJS(1000);
chai_1.expect(granularity_1.granularityEquals(customGrans, expected), 'default will bucket according to provided customs').to.equal(true);
});
it('getDefaultGranularityForKind appropriately for time', function () {
var defaultNumber = granularity_1.getDefaultGranularityForKind('time');
var expected = granularity_1.granularityFromJS('P1D');
chai_1.expect(granularity_1.granularityEquals(defaultNumber, expected)).to.equal(true);
var bucketedBy = granularity_1.getDefaultGranularityForKind('time', granularity_1.granularityFromJS('P1W'));
expected = granularity_1.granularityFromJS('P1W');
chai_1.expect(granularity_1.granularityEquals(bucketedBy, expected), 'default will bucket by provided bucketedBy amount').to.equal(true);
var customGrans = granularity_1.getDefaultGranularityForKind('time', null, ['PT1H', 'PT8H', 'PT12H', 'P1D', 'P1W'].map(granularity_1.granularityFromJS));
expected = granularity_1.granularityFromJS('PT12H');
chai_1.expect(granularity_1.granularityEquals(customGrans, expected), 'default will bucket according to provided customs').to.equal(true);
});
it('getsBestBucketUnit appropriately for time defaults depending on coarse flag', function () {
var month = 'P1M';
var week = 'P1W';
var day = 'P1D';
var twelveHours = 'PT12H';
var sixHours = 'PT6H';
var oneHour = 'PT1H';
var fiveMinutes = 'PT5M';
var oneMinute = 'PT1M';
var yearLength = new plywood_1.TimeRange({ start: new Date('1994-02-24T00:00:00.000Z'), end: new Date('1995-02-25T00:00:00.000Z') });
chai_1.expect(granularity_1.getBestBucketUnitForRange(yearLength, false).toString()).to.equal(week);
chai_1.expect(granularity_1.getBestBucketUnitForRange(yearLength, true).toString()).to.equal(month);
var monthLength = new plywood_1.TimeRange({ start: new Date('1995-02-24T00:00:00.000Z'), end: new Date('1995-03-25T00:00:00.000Z') });
chai_1.expect(granularity_1.getBestBucketUnitForRange(monthLength, false).toString()).to.equal(day);
chai_1.expect(granularity_1.getBestBucketUnitForRange(monthLength, true).toString()).to.equal(week);
var sevenDaysLength = new plywood_1.TimeRange({ start: new Date('1995-02-20T00:00:00.000Z'), end: new Date('1995-02-28T00:00:00.000Z') });
chai_1.expect(granularity_1.getBestBucketUnitForRange(sevenDaysLength, false).toString()).to.equal(oneHour);
chai_1.expect(granularity_1.getBestBucketUnitForRange(sevenDaysLength, true).toString()).to.equal(day);
var threeDaysLength = new plywood_1.TimeRange({ start: new Date('1995-02-20T00:00:00.000Z'), end: new Date('1995-02-24T00:00:00.000Z') });
chai_1.expect(granularity_1.getBestBucketUnitForRange(sevenDaysLength, false).toString()).to.equal(oneHour);
chai_1.expect(granularity_1.getBestBucketUnitForRange(threeDaysLength, true).toString()).to.equal(twelveHours);
var dayLength = new plywood_1.TimeRange({ start: new Date('1995-02-24T00:00:00.000Z'), end: new Date('1995-02-25T00:00:00.000Z') });
chai_1.expect(granularity_1.getBestBucketUnitForRange(dayLength, false).toString()).to.equal(oneHour);
chai_1.expect(granularity_1.getBestBucketUnitForRange(dayLength, true).toString()).to.equal(sixHours);
var fourHours = new plywood_1.TimeRange({ start: new Date('1995-02-24T00:00:00.000Z'), end: new Date('1995-02-24T04:00:00.000Z') });
chai_1.expect(granularity_1.getBestBucketUnitForRange(fourHours, false).toString()).to.equal(fiveMinutes);
chai_1.expect(granularity_1.getBestBucketUnitForRange(fourHours, true).toString()).to.equal(oneHour);
var fortyFiveMin = new plywood_1.TimeRange({ start: new Date('1995-02-24T00:00:00.000Z'), end: new Date('1995-02-24T00:45:00.000Z') });
chai_1.expect(granularity_1.getBestBucketUnitForRange(fortyFiveMin, false).toString()).to.equal(oneMinute);
chai_1.expect(granularity_1.getBestBucketUnitForRange(fortyFiveMin, true).toString()).to.equal(fiveMinutes);
});
it('getsBestBucketUnit appropriately for time with bucketing and custom granularities', function () {
var sixHours = 'PT6H';
var oneHour = 'PT1H';
var week = 'P1W';
var dayLength = new plywood_1.TimeRange({ start: new Date('1995-02-24T00:00:00.000Z'), end: new Date('1995-02-25T00:00:00.000Z') });
chai_1.expect(granularity_1.getBestBucketUnitForRange(dayLength, false).toString()).to.equal(oneHour);
chai_1.expect(granularity_1.getBestBucketUnitForRange(dayLength, false, granularity_1.granularityFromJS('PT6H')).toString()).to.equal(sixHours);
var yearLength = new plywood_1.TimeRange({ start: new Date('1994-02-24T00:00:00.000Z'), end: new Date('1995-02-25T00:00:00.000Z') });
chai_1.expect(granularity_1.getBestBucketUnitForRange(yearLength, false, granularity_1.granularityFromJS('PT6H')).toString()).to.equal(week);
var customs = ['PT1H', 'PT8H', 'PT12H', 'P1D', 'P1W'].map(granularity_1.granularityFromJS);
chai_1.expect(granularity_1.getBestBucketUnitForRange(dayLength, false, null, customs).toString()).to.equal(oneHour);
var fortyFiveMin = new plywood_1.TimeRange({ start: new Date('1995-02-24T00:00:00.000Z'), end: new Date('1995-02-24T00:45:00.000Z') });
chai_1.expect(granularity_1.getBestBucketUnitForRange(fortyFiveMin, false, null, customs).toString()).to.equal(oneHour);
});
it('getsBestBucketUnit appropriately for number defaults with bucketing and custom granularities', function () {
var ten = new plywood_1.NumberRange({ start: 0, end: 10 });
var thirtyOne = new plywood_1.NumberRange({ start: 0, end: 31 });
var hundred = new plywood_1.NumberRange({ start: 0, end: 100 });
chai_1.expect(granularity_1.getBestBucketUnitForRange(ten, false)).to.equal(1);
chai_1.expect(granularity_1.getBestBucketUnitForRange(thirtyOne, false)).to.equal(10);
chai_1.expect(granularity_1.getBestBucketUnitForRange(hundred, false)).to.equal(10);
chai_1.expect(granularity_1.getBestBucketUnitForRange(hundred, false, granularity_1.granularityFromJS(50))).to.equal(50);
var customs = [-5, 0.25, 0.5, 0.78, 5].map(granularity_1.granularityFromJS);
chai_1.expect(granularity_1.getBestBucketUnitForRange(ten, false, null, customs)).to.equal(5);
});
});