/*
* 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.displayer.client;
import org.dashbuilder.dataset.DataSet;
import org.dashbuilder.dataset.group.DataSetGroup;
import org.dashbuilder.dataset.sort.SortOrder;
import org.dashbuilder.displayer.DisplayerSettings;
import org.dashbuilder.displayer.DisplayerSettingsFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.dashbuilder.dataset.ExpenseReportsData.*;
import static org.dashbuilder.dataset.group.AggregateFunctionType.*;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class DisplayerFilterTest extends AbstractDisplayerTest {
DisplayerSettings byDepartment = DisplayerSettingsFactory.newPieChartSettings()
.dataset(EXPENSES)
.group(COLUMN_DEPARTMENT)
.column(COLUMN_DEPARTMENT)
.column(COLUMN_AMOUNT, SUM)
.filterOn(false, true, true)
.buildSettings();
DisplayerSettings allRows = DisplayerSettingsFactory.newTableSettings()
.dataset(EXPENSES)
.filterOn(true, false, true)
.sort(COLUMN_DEPARTMENT, SortOrder.ASCENDING)
.buildSettings();
@Test
public void testDrawRequired() {
AbstractDisplayer allRowsTable = (AbstractDisplayer) displayerLocator.lookupDisplayer(allRows);
allRowsTable.filterUpdate(COLUMN_DEPARTMENT, 0);
DataSet dataSet = allRowsTable.getDataSetHandler().getLastDataSet();
assertNull(dataSet);
}
@Test
public void testNotifications() {
AbstractDisplayer deptPieChart = (AbstractDisplayer) displayerLocator.lookupDisplayer(byDepartment);
DisplayerListener listener = mock(DisplayerListener.class);
deptPieChart.addListener(listener);
deptPieChart.draw();
deptPieChart.filterUpdate(COLUMN_DEPARTMENT, 0);
verify(listener).onFilterEnabled(eq(deptPieChart), any(DataSetGroup.class));
verify(listener, never()).onRedraw(deptPieChart);
deptPieChart.filterReset();
verify(listener).onFilterReset(eq(deptPieChart), anyList());
verify(listener, never()).onRedraw(deptPieChart);
}
@Test
public void testDrillDown() {
AbstractDisplayer allRowsTable = (AbstractDisplayer) displayerLocator.lookupDisplayer(allRows);
DisplayerListener listener = mock(DisplayerListener.class);
allRowsTable.addListener(listener);
allRowsTable.draw();
// Filter by "Engineering"
reset(listener);
allRowsTable.filterUpdate(COLUMN_DEPARTMENT, 0);
DataSet dataSet = allRowsTable.getDataSetHandler().getLastDataSet();
assertEquals(dataSet.getRowCount(), 19);
verify(listener).onDataLookup(allRowsTable);
verify(listener).onRedraw(allRowsTable);
}
@Test
public void testFilterNotAllowed() {
AbstractDisplayer allRowsTable = (AbstractDisplayer) displayerLocator.lookupDisplayer(
DisplayerSettingsFactory.newTableSettings()
.dataset(EXPENSES)
.filterOff(true)
.buildSettings());
DisplayerListener listener = mock(DisplayerListener.class);
allRowsTable.addListener(listener);
allRowsTable.draw();
reset(listener);
allRowsTable.filterUpdate(COLUMN_DEPARTMENT, 0);
DataSet dataSet = allRowsTable.getDataSetHandler().getLastDataSet();
assertEquals(dataSet.getRowCount(), 50);
verify(listener, never()).onDataLookup(allRowsTable);
verify(listener, never()).onRedraw(allRowsTable);
}
}