/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dashbuilder.renderer.client.table;
import org.dashbuilder.common.client.error.ClientRuntimeError;
import org.dashbuilder.dataset.ColumnType;
import org.dashbuilder.dataset.filter.FilterFactory;
import org.dashbuilder.dataset.sort.SortOrder;
import org.dashbuilder.displayer.DisplayerSettings;
import org.dashbuilder.displayer.DisplayerSettingsFactory;
import org.dashbuilder.displayer.client.AbstractDisplayerTest;
import org.dashbuilder.displayer.client.DisplayerListener;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.mvp.Command;
import static org.dashbuilder.dataset.ExpenseReportsData.*;
import static org.dashbuilder.dataset.group.AggregateFunctionType.*;
import static org.dashbuilder.dataset.sort.SortOrder.*;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class TableDisplayerTest extends AbstractDisplayerTest {
public TableDisplayer createTableDisplayer(DisplayerSettings settings) {
return initDisplayer(new TableDisplayer(mock(TableDisplayer.View.class)), settings);
}
@Mock
DisplayerListener displayerListener;
@Mock
Command selectCommand;
@Test
public void testTableDraw() {
DisplayerSettings allRows = DisplayerSettingsFactory.newTableSettings()
.dataset(EXPENSES)
.tableOrderDefault(COLUMN_DEPARTMENT, SortOrder.DESCENDING)
.tableOrderEnabled(true)
.tablePageSize(10)
.tableWidth(1000)
.filterOn(true, true, true)
.buildSettings();
TableDisplayer table = createTableDisplayer(allRows);
TableDisplayer.View tableView = table.getView();
table.draw();
verify(tableView).setWidth(1000);
verify(tableView).setSortEnabled(true);
verify(tableView).setTotalRows(50);
verify(tableView).createTable(10);
verify(tableView).addColumn(ColumnType.NUMBER, COLUMN_ID, COLUMN_ID, 0, false, true);
verify(tableView).addColumn(ColumnType.LABEL, COLUMN_CITY, COLUMN_CITY, 1, true, true);
verify(tableView).addColumn(ColumnType.LABEL, COLUMN_DEPARTMENT, COLUMN_DEPARTMENT, 2, true, true);
verify(tableView).addColumn(ColumnType.LABEL, COLUMN_EMPLOYEE, COLUMN_EMPLOYEE, 3, true, true);
verify(tableView).addColumn(ColumnType.DATE, COLUMN_DATE, COLUMN_DATE, 4, false, true);
verify(tableView).addColumn(ColumnType.NUMBER, COLUMN_AMOUNT, COLUMN_AMOUNT, 5, false, true);
verify(tableView).gotoFirstPage();
}
@Test
public void testEmptyTableDraw() {
DisplayerSettings allRows = DisplayerSettingsFactory.newTableSettings()
.dataset(EXPENSES)
.filter(COLUMN_ID, FilterFactory.isNull())
.tablePageSize(10)
.buildSettings();
TableDisplayer table = createTableDisplayer(allRows);
TableDisplayer.View tableView = table.getView();
table.draw();
verify(tableView).createTable(10);
verify(tableView).setTotalRows(0);
verify(tableView).setPagerEnabled(false);
verify(tableView, never()).setPagerEnabled(true);
reset(tableView);
table.redraw();
verify(tableView, never()).setPagerEnabled(true);
}
@Test
public void testTableSort() {
DisplayerSettings allRows = DisplayerSettingsFactory.newTableSettings()
.dataset(EXPENSES)
.tablePageSize(5)
.tableOrderDefault(COLUMN_ID, SortOrder.DESCENDING)
.buildSettings();
// Sorted by ID descending by default
TableDisplayer table = createTableDisplayer(allRows);
TableDisplayer.View tableView = table.getView();
table.draw();
assertEquals(table.getDataSetHandler().getLastDataSet().getValueAt(0, 0), 50d);
// Sort disabled (no effect)
allRows.setTableSortEnabled(false);
table = createTableDisplayer(allRows);
tableView = table.getView();
table.draw();
reset(tableView);
table.sortBy(COLUMN_ID, SortOrder.DESCENDING);
verify(tableView, never()).redrawTable();
assertEquals(table.getDataSetHandler().getLastDataSet().getValueAt(0, 0), 50d);
// Sort enabled
allRows.setTableSortEnabled(true);
table = createTableDisplayer(allRows);
tableView = table.getView();
table.draw();
reset(tableView);
table.sortBy(COLUMN_ID, SortOrder.ASCENDING);
verify(tableView).redrawTable();
assertEquals(table.getDataSetHandler().getLastDataSet().getValueAt(0, 0), 1d);
}
@Test
public void testSelectCellDisabled() {
DisplayerSettings allRows = DisplayerSettingsFactory.newTableSettings()
.dataset(EXPENSES)
.tablePageSize(5)
.tableOrderDefault(COLUMN_ID, SortOrder.DESCENDING)
.filterOff(false)
.buildSettings();
TableDisplayer table = createTableDisplayer(allRows);
TableDisplayer.View view = table.getView();
table.addListener(displayerListener);
table.addOnCellSelectedCommand(selectCommand);
table.draw();
reset(view);
reset(displayerListener);
table.selectCell(COLUMN_DEPARTMENT, 3);
verify(selectCommand, never()).execute();
verify(view, never()).gotoFirstPage();
verify(view, never()).addFilterValue(anyString());
verify(displayerListener, never()).onRedraw(table);
assertNull(table.getSelectedCellColumn());
assertNull(table.getSelectedCellRow());
}
@Test
public void testSelectCellNoDrillDown() {
DisplayerSettings allRows = DisplayerSettingsFactory.newTableSettings()
.dataset(EXPENSES)
.tablePageSize(5)
.tableOrderDefault(COLUMN_ID, SortOrder.DESCENDING)
.filterOn(false, true, true)
.buildSettings();
TableDisplayer table = createTableDisplayer(allRows);
TableDisplayer.View view = table.getView();
table.addListener(displayerListener);
table.addOnCellSelectedCommand(selectCommand);
table.draw();
reset(view);
reset(displayerListener);
table.selectCell(COLUMN_DEPARTMENT, 3);
verify(selectCommand).execute();
verify(view, never()).gotoFirstPage();
verify(view).addFilterValue(anyString());
verify(displayerListener, never()).onRedraw(table);
assertEquals(table.getSelectedCellColumn(), COLUMN_DEPARTMENT);
assertEquals(table.getSelectedCellRow(), new Integer(3));
}
@Test
public void testSelectCellDrillDown() {
DisplayerSettings allRows = DisplayerSettingsFactory.newTableSettings()
.dataset(EXPENSES)
.tablePageSize(5)
.tableOrderDefault(COLUMN_ID, SortOrder.DESCENDING)
.filterOn(true, true, true)
.buildSettings();
TableDisplayer table = createTableDisplayer(allRows);
TableDisplayer.View view = table.getView();
table.addListener(displayerListener);
table.addOnCellSelectedCommand(selectCommand);
table.draw();
reset(view);
reset(displayerListener);
table.selectCell(COLUMN_DEPARTMENT, 3);
verify(view, atLeastOnce()).gotoFirstPage();
verify(view).redrawTable();
verify(view, atLeastOnce()).addFilterValue(anyString());
verify(view).setTotalRows(11);
verify(displayerListener).onRedraw(table);
verify(selectCommand).execute();
assertEquals(table.getSelectedCellColumn(), COLUMN_DEPARTMENT);
assertEquals(table.getSelectedCellRow(), new Integer(3));
}
@Test
public void testSelectCellReset() {
DisplayerSettings allRows = DisplayerSettingsFactory.newTableSettings()
.dataset(EXPENSES)
.tablePageSize(5)
.tableOrderDefault(COLUMN_ID, SortOrder.DESCENDING)
.filterOn(false, true, true)
.buildSettings();
TableDisplayer table = createTableDisplayer(allRows);
TableDisplayer.View view = table.getView();
table.addListener(displayerListener);
table.addOnCellSelectedCommand(selectCommand);
table.draw();
table.selectCell(COLUMN_DEPARTMENT, 3);
reset(view);
reset(selectCommand);
reset(displayerListener);
table.selectCell(COLUMN_DEPARTMENT, 3);
verify(selectCommand).execute();
verify(view, never()).gotoFirstPage();
verify(view, never()).addFilterValue(anyString());
verify(displayerListener, never()).onRedraw(table);
assertNull(table.getSelectedCellColumn());
assertNull(table.getSelectedCellRow());
}
@Test
public void testSelectCellCommands() {
DisplayerSettings allRows = DisplayerSettingsFactory.newTableSettings()
.dataset(EXPENSES)
.tablePageSize(5)
.tableOrderDefault(COLUMN_ID, SortOrder.DESCENDING)
.filterOn(false, true, true)
.buildSettings();
TableDisplayer table = createTableDisplayer(allRows);
TableDisplayer.View view = table.getView();
table.addListener(displayerListener);
table.addOnCellSelectedCommand(selectCommand);
final Command selectedCommand = mock(Command.class);
table.addOnCellSelectedCommand(selectedCommand);
table.draw();
table.selectCell(COLUMN_DEPARTMENT, 3);
verify(selectCommand).execute();
verify(selectedCommand).execute();
}
@Test
public void test_DASHBUILDE_20_Fix() {
DisplayerSettings groupedTable = DisplayerSettingsFactory.newTableSettings()
.dataset(EXPENSES)
.group(COLUMN_CITY)
.column(COLUMN_CITY, "City")
.column(COUNT, "#Expenses").format("Number of expenses", "#,##0")
.column(COLUMN_AMOUNT, MIN).format("Min", "$ #,###")
.column(COLUMN_AMOUNT, MIN).format("Min", "$ #,###")
.column(COLUMN_AMOUNT, MIN).format("Min", "$ #,###")
.column(COLUMN_AMOUNT, MIN).format("Min", "$ #,###")
.tablePageSize(10)
.tableOrderEnabled(true)
.tableOrderDefault(COLUMN_CITY, DESCENDING)
.filterOn(false, true, true)
.buildSettings();
TableDisplayer table = createTableDisplayer(groupedTable);
table.addListener(displayerListener);
table.draw();
table.sortBy("#Expenses", ASCENDING);
verify(displayerListener, never()).onError(eq(table), any(ClientRuntimeError.class));
}
}