@spalger/kibana
Version:
Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic
226 lines (195 loc) • 5.71 kB
JavaScript
var d3 = require('d3');
var angular = require('angular');
var _ = require('lodash');
var $ = require('jquery');
var ngMock = require('ngMock');
var expect = require('expect.js');
describe('Vislib xAxis Class Test Suite', function () {
var XAxis;
var Data;
var xAxis;
var el;
var fixture;
var dataObj;
var data = {
hits: 621,
label: '',
ordered: {
date: true,
interval: 30000,
max: 1408734982458,
min: 1408734082458
},
series: [
{
values: [
{
x: 1408734060000,
y: 8
},
{
x: 1408734090000,
y: 23
},
{
x: 1408734120000,
y: 30
},
{
x: 1408734150000,
y: 28
},
{
x: 1408734180000,
y: 36
},
{
x: 1408734210000,
y: 30
},
{
x: 1408734240000,
y: 26
},
{
x: 1408734270000,
y: 22
},
{
x: 1408734300000,
y: 29
},
{
x: 1408734330000,
y: 24
}
]
}
],
xAxisFormatter: function (thing) {
return new Date(thing);
},
xAxisLabel: 'Date Histogram',
yAxisLabel: 'Count'
};
beforeEach(ngMock.module('kibana'));
beforeEach(ngMock.inject(function (Private) {
Data = Private(require('ui/vislib/lib/data'));
XAxis = Private(require('ui/vislib/lib/x_axis'));
el = d3.select('body').append('div')
.attr('class', 'x-axis-wrapper')
.style('height', '40px');
fixture = el.append('div')
.attr('class', 'x-axis-div');
dataObj = new Data(data, {});
xAxis = new XAxis({
el: $('.x-axis-div')[0],
xValues: dataObj.xValues(),
ordered: dataObj.get('ordered'),
xAxisFormatter: dataObj.get('xAxisFormatter'),
_attr: {
margin: { top: 0, right: 0, bottom: 0, left: 0 }
}
});
}));
afterEach(function () {
fixture.remove();
el.remove();
});
describe('render Method', function () {
beforeEach(function () {
xAxis.render();
});
it('should append an svg to div', function () {
expect(el.selectAll('svg').length).to.be(1);
});
it('should append a g element to the svg', function () {
expect(el.selectAll('svg').select('g').length).to.be(1);
});
it('should append ticks with text', function () {
expect(!!el.selectAll('svg').selectAll('.tick text')).to.be(true);
});
});
describe('getScale, getDomain, getTimeDomain, getOrdinalDomain, and getRange Methods', function () {
var ordered;
var timeScale;
var timeDomain;
var ordinalScale;
var ordinalDomain;
var width;
var range;
beforeEach(function () {
timeScale = xAxis.getScale();
timeDomain = xAxis.getDomain(timeScale);
range = xAxis.getRange(timeDomain, width);
xAxis.ordered = {};
ordinalScale = xAxis.getScale();
ordinalDomain = ordinalScale.domain(['this', 'should', 'be', 'an', 'array']);
width = $('.x-axis-div').width();
});
it('should return a function', function () {
expect(_.isFunction(timeScale)).to.be(true);
expect(_.isFunction(ordinalScale)).to.be(true);
});
it('should return the correct domain', function () {
expect(_.isDate(timeDomain.domain()[0])).to.be(true);
expect(_.isDate(timeDomain.domain()[1])).to.be(true);
});
it('should return the min and max dates', function () {
expect(timeDomain.domain()[0].toDateString()).to.be(new Date(1408734060000).toDateString());
expect(timeDomain.domain()[1].toDateString()).to.be(new Date(1408734330000).toDateString());
});
it('should return an ordinal scale', function () {
expect(ordinalDomain.domain()[0]).to.be('this');
expect(ordinalDomain.domain()[4]).to.be('array');
});
it('should return an array of values', function () {
expect(_.isArray(ordinalDomain.domain())).to.be(true);
});
it('should return the correct range', function () {
expect(range.range()[0]).to.be(0);
expect(range.range()[1]).to.be(width);
});
});
describe('getXScale Method', function () {
var width;
var xScale;
beforeEach(function () {
width = $('.x-axis-div').width();
xScale = xAxis.getXScale(width);
});
it('should return a function', function () {
expect(_.isFunction(xScale)).to.be(true);
});
it('should return a domain', function () {
expect(_.isDate(xScale.domain()[0])).to.be(true);
expect(_.isDate(xScale.domain()[1])).to.be(true);
});
it('should return a range', function () {
expect(xScale.range()[0]).to.be(0);
expect(xScale.range()[1]).to.be(width);
});
});
describe('getXAxis Method', function () {
var width;
var axis;
beforeEach(function () {
width = $('.x-axis-div').width();
xAxis.getXAxis(width);
});
it('should create an xAxis function on the xAxis class', function () {
expect(_.isFunction(xAxis.xAxis)).to.be(true);
});
it('should create an xScale function on the xAxis class', function () {
expect(_.isFunction(xAxis.xScale)).to.be(true);
});
it('should create an xAxisFormatter function on the xAxis class', function () {
expect(_.isFunction(xAxis.xAxisFormatter)).to.be(true);
});
});
describe('draw Method', function () {
it('should be a function', function () {
expect(_.isFunction(xAxis.draw())).to.be(true);
});
});
});