UNPKG

@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

202 lines (171 loc) 6.31 kB
var angular = require('angular'); var expect = require('expect.js'); var ngMock = require('ngMock'); var _ = require('lodash'); var $ = require('jquery'); var d3 = require('d3'); // Data var series = require('fixtures/vislib/mock_data/date_histogram/_series'); var seriesPosNeg = require('fixtures/vislib/mock_data/date_histogram/_series_pos_neg'); var seriesNeg = require('fixtures/vislib/mock_data/date_histogram/_series_neg'); var termsColumns = require('fixtures/vislib/mock_data/terms/_columns'); //var histogramRows = require('fixtures/vislib/mock_data/histogram/_rows'); var stackedSeries = require('fixtures/vislib/mock_data/date_histogram/_stacked_series'); // tuple, with the format [description, mode, data] var dataTypesArray = [ ['series', 'stacked', series], ['series with positive and negative values', 'stacked', seriesPosNeg], ['series with negative values', 'stacked', seriesNeg], ['terms columns', 'grouped', termsColumns], // ['histogram rows', 'percentage', histogramRows], ['stackedSeries', 'stacked', stackedSeries], ]; dataTypesArray.forEach(function (dataType, i) { var name = dataType[0]; var mode = dataType[1]; var data = dataType[2]; describe('Vislib Column Chart Test Suite for ' + name + ' Data', function () { var vis; var visLibParams = { type: 'histogram', addLegend: true, addTooltip: true, mode: mode }; beforeEach(ngMock.module('kibana')); beforeEach(ngMock.inject(function (Private) { vis = Private(require('fixtures/vislib/_vis_fixture'))(visLibParams); vis.on('brush', _.noop); vis.render(data); })); afterEach(function () { $(vis.el).remove(); vis = null; }); describe('stackData method', function () { var stackedData; var isStacked; beforeEach(function () { vis.handler.charts.forEach(function (chart) { stackedData = chart.stackData(chart.chartData); isStacked = stackedData.every(function (arr) { return arr.every(function (d) { return _.isNumber(d.y0); }); }); }); }); it('should append a d.y0 key to the data object', function () { expect(isStacked).to.be(true); }); }); describe('addBars method', function () { it('should append rects', function () { var numOfSeries; var numOfValues; var product; vis.handler.charts.forEach(function (chart) { numOfSeries = chart.chartData.series.length; numOfValues = chart.chartData.series[0].values.length; product = numOfSeries * numOfValues; expect($(chart.chartEl).find('.series rect')).to.have.length(product); }); }); }); describe('updateBars method', function () { beforeEach(function () { vis.handler._attr.mode = 'grouped'; vis.render(vis.data); }); it('should returned grouped bars', function () { vis.handler.charts.forEach(function (chart) {}); }); }); describe('addBarEvents method', function () { function checkChart(chart) { var rect = $(chart.chartEl).find('.series rect').get(0); // check for existance of stuff and things return { click: !!rect.__onclick, mouseOver: !!rect.__onmouseover, // D3 brushing requires that a g element is appended that // listens for mousedown events. This g element includes // listeners, however, I was not able to test for the listener // function being present. I will need to update this test // in the future. brush: !!d3.select('.brush')[0][0] }; } it('should attach the brush if data is a set of ordered dates', function () { vis.handler.charts.forEach(function (chart) { var has = checkChart(chart); var ordered = vis.handler.data.get('ordered'); var date = Boolean(ordered && ordered.date); expect(has.brush).to.be(date); }); }); it('should attach a click event', function () { vis.handler.charts.forEach(function (chart) { var has = checkChart(chart); expect(has.click).to.be(true); }); }); it('should attach a hover event', function () { vis.handler.charts.forEach(function (chart) { var has = checkChart(chart); expect(has.mouseOver).to.be(true); }); }); }); describe('draw method', function () { it('should return a function', function () { vis.handler.charts.forEach(function (chart) { expect(_.isFunction(chart.draw())).to.be(true); }); }); it('should return a yMin and yMax', function () { vis.handler.charts.forEach(function (chart) { var yAxis = chart.handler.yAxis; expect(yAxis.domain[0]).to.not.be(undefined); expect(yAxis.domain[1]).to.not.be(undefined); }); }); it('should render a zero axis line', function () { vis.handler.charts.forEach(function (chart) { var yAxis = chart.handler.yAxis; if (yAxis.yMin < 0 && yAxis.yMax > 0) { expect($(chart.chartEl).find('line.zero-line').length).to.be(1); } }); }); }); describe('containerTooSmall error', function () { beforeEach(function () { $(vis.el).height(0); $(vis.el).width(0); }); it('should throw an error', function () { vis.handler.charts.forEach(function (chart) { expect(function () { chart.render(); }).to.throwError(); }); }); }); describe('defaultYExtents is true', function () { beforeEach(function () { vis._attr.defaultYExtents = true; vis.render(data); }); it('should return yAxis extents equal to data extents', function () { vis.handler.charts.forEach(function (chart) { var yAxis = chart.handler.yAxis; var min = vis.handler.data.getYMin(); var max = vis.handler.data.getYMax(); expect(yAxis.domain[0]).to.equal(min); expect(yAxis.domain[1]).to.equal(max); }); }); }); }); });