blob: a81ea58578f50c0fe86d365d3b411f498e20cedf [file] [log] [blame]
/*
* Copyright (c) 2010-2020 BSI Business Systems Integration AG.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* BSI Business Systems Integration AG - initial API and implementation
*/
import {ChartTableControl} from '../../../src/index';
/* global sandboxSession, createSimpleModel*/
describe('ChartTableControl', () => {
let $sandbox, session, chartTableControl, helper, $div;
beforeEach(() => {
$div = $('<div></div>');
setFixtures(sandbox());
session = sandboxSession();
$sandbox = $('#sandbox');
helper = new scout.TableSpecHelper(session);
jasmine.clock().install();
});
afterEach(() => {
jasmine.clock().uninstall();
});
function createModelFromTable(table) {
let model = createSimpleModel('ChartTableControl', session);
let defaults = {
enabled: true,
visible: true,
selected: true,
table: table
};
model = $.extend({}, defaults, model);
return model;
}
function createModel(rows, columns) {
let tableModel = helper.createModelFixture(rows, columns);
let table = helper.createTable(tableModel);
return createModelFromTable(table);
}
function createChartTableControl(model) {
chartTableControl = new ChartTableControl();
chartTableControl.init(model);
chartTableControl.table._setTableControls([chartTableControl]);
return chartTableControl;
}
describe('renderDefaultChart', () => {
it('does not draw a chart, if there are multiple columns in the table before all are removed', () => {
chartTableControl = createChartTableControl(createModel(2, 2));
chartTableControl.table.render();
expectEmptyChart(false);
chartTableControl.table.columns = [];
chartTableControl._tableUpdatedHandler();
jasmine.clock().tick();
expectEmptyChart(true);
});
it('does not draw a chart, if there are no columns', () => {
chartTableControl = createChartTableControl(createModel(0, 0));
chartTableControl.table.render();
expectEmptyChart(true);
});
it('draws a chart for a single column', () => {
chartTableControl = createChartTableControl(createModel(1, 1));
chartTableControl.table.render();
expectEmptyChart(false);
});
it('draws a chart for multiple columns', () => {
chartTableControl = createChartTableControl(createModel(2, 2));
chartTableControl.table.render();
expectEmptyChart(false);
});
it('draws a chart with date grouping for a date column', () => {
let columns = helper.createModelColumns(1, 'DateColumn');
let c0 = helper.createModelCell(0, new Date());
let rows = [helper.createModelRow(null, [c0])];
let model = helper.createModel(columns, rows);
let table = helper.createTable(model);
chartTableControl = createChartTableControl(createModelFromTable(table));
chartTableControl._renderContent($div);
expect(chartTableControl.chartGroup1.id).toBe(columns[0].id); // first column selected
expect(chartTableControl.chartGroup1.modifier).toBe(256); // with date modifier
expectEmptyChart(false);
});
it('renders header texts that contain HTML as plain text', () => {
let model = createModel(1, 1);
let firstCol = model.table.columns[0];
firstCol.headerHtmlEnabled = true;
firstCol.text = '<b>Plain</b><br>Text';
chartTableControl = createChartTableControl(model);
chartTableControl._renderContent($sandbox);
let $result = $sandbox.find('.select-axis.selected');
expect($result.length).toBe(2);
expect($result.get(0).innerHTML).toBe('Plain Text');
});
});
describe('renderAfterColumnUpdate', () => {
it('does not draw a chart, if columns are updated, but rows are not updated yet', () => {
chartTableControl = createChartTableControl(createModel(2, 1));
// remove first column
chartTableControl.table.columns.shift();
// rows are not yet updated
chartTableControl._renderContent($div);
expectEmptyChart(true);
});
});
function expectEmptyChart(empty) {
expect(chartTableControl.chart).toBeDefined();
expect(((((chartTableControl.chart.config.data || {}).datasets || [])[0] || {}).data || []).length === 0).toBe(empty);
}
});