/* * 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.widgets.group; import java.util.List; import javax.enterprise.event.Event; import org.dashbuilder.dataset.ColumnType; import org.dashbuilder.dataset.DataSetMetadata; import org.dashbuilder.dataset.group.AggregateFunctionType; import org.dashbuilder.dataset.group.GroupFunction; import org.dashbuilder.displayer.client.events.GroupFunctionChangedEvent; import org.dashbuilder.displayer.client.events.GroupFunctionDeletedEvent; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import static org.mockito.Mockito.*; import static org.junit.Assert.*; @RunWith(MockitoJUnitRunner.class) public class ColumnFunctionEditorTest { @Mock ColumnFunctionEditor.View view; @Mock ColumnDetailsEditor columnDetailsEditor; @Mock Event<GroupFunctionChangedEvent> changeEvent; @Mock Event<GroupFunctionDeletedEvent> deleteEvent; @Mock DataSetMetadata metadata; ColumnFunctionEditor presenter; @Before public void init() { presenter = new ColumnFunctionEditor(view, columnDetailsEditor, changeEvent, deleteEvent); when(metadata.getNumberOfColumns()).thenReturn(3); when(metadata.getColumnId(0)).thenReturn("column1"); when(metadata.getColumnId(1)).thenReturn("column2"); when(metadata.getColumnId(2)).thenReturn("column3"); when(metadata.getColumnType(0)).thenReturn(ColumnType.LABEL); when(metadata.getColumnType(1)).thenReturn(ColumnType.NUMBER); when(metadata.getColumnType(2)).thenReturn(ColumnType.DATE); when(metadata.getColumnType("column1")).thenReturn(ColumnType.LABEL); when(metadata.getColumnType("column2")).thenReturn(ColumnType.NUMBER); when(metadata.getColumnType("column3")).thenReturn(ColumnType.DATE); } @Test public void testViewInitialization() { GroupFunction groupFunction = new GroupFunction("column1", "column1", null); presenter.init(metadata, groupFunction, null, "Title", false, false); verify(view).setDeleteOptionEnabled(false); verify(view, never()).setDeleteOptionEnabled(true); verify(view).setColumnSelectorTitle("Title"); verify(view).clearColumnSelector(); verify(view, times(3)).addColumnItem(anyString()); verify(view).setSelectedColumnIndex(0); verify(view).setFunctionSelectorEnabled(false); verify(view, never()).setFunctionSelectorEnabled(true); } @Test public void testLabelTarget() { GroupFunction groupFunction = new GroupFunction("column1", "column1", null); presenter.init(metadata, groupFunction, ColumnType.LABEL, "Title", true, true); verify(view).clearColumnSelector(); verify(view, times(1)).addColumnItem(anyString()); verify(view).setSelectedColumnIndex(0); verify(view).setFunctionSelectorEnabled(false); verify(view, never()).setFunctionSelectorEnabled(true); } @Test public void testNumericTarget() { GroupFunction groupFunction = new GroupFunction("column1", "column1", null); presenter.init(metadata, groupFunction, ColumnType.NUMBER, "Title", true, true); verify(view).clearColumnSelector(); verify(view, times(3)).addColumnItem(anyString()); verify(view).setSelectedColumnIndex(0); verify(view).setFunctionSelectorEnabled(true); verify(view, never()).setVoidFunctionEnabled(true); verify(view, times(presenter.getSupportedFunctionTypes().size())).addFunctionItem(any(AggregateFunctionType.class)); verify(view, never()).setSelectedFunctionIndex(anyInt()); } @Test public void testUnspecifiedTarget() { GroupFunction groupFunction = new GroupFunction("column1", "column1", AggregateFunctionType.COUNT); presenter.init(metadata, groupFunction, null, "Title", true, true); verify(view).clearColumnSelector(); verify(view, times(3)).addColumnItem(anyString()); verify(view).setSelectedColumnIndex(0); List<AggregateFunctionType> supportedFunctions = presenter.getSupportedFunctionTypes(); verify(view).setFunctionSelectorEnabled(true); verify(view).setVoidFunctionEnabled(true); verify(view, times(supportedFunctions.size())).addFunctionItem(any(AggregateFunctionType.class)); verify(view).setSelectedFunctionIndex(anyInt()); } @Test public void testSelectColumn() { when(view.getSelectedColumnId()).thenReturn("column2"); GroupFunction groupFunction = new GroupFunction("column1", "column1", AggregateFunctionType.COUNT); presenter.init(metadata, groupFunction, null, "Title", true, true); presenter.onColumnSelected(); assertEquals(presenter.getGroupFunction().getSourceId(), "column2"); verify(changeEvent).fire(any(GroupFunctionChangedEvent.class)); } @Test public void testUpdateFunctionsAvailable() { GroupFunction groupFunction = new GroupFunction("column1", "column1", AggregateFunctionType.COUNT); presenter.init(metadata, groupFunction, null, "Title", true, true); List<AggregateFunctionType> typeListColumn1 = presenter.getSupportedFunctionTypes(); List<AggregateFunctionType> typeListLabel = presenter.getSupportedFunctionTypes(ColumnType.LABEL); assertEquals(typeListColumn1.size(), typeListLabel.size()); verify(view).clearFunctionSelector(); verify(view, times(typeListLabel.size())).addFunctionItem(any(AggregateFunctionType.class)); reset(view); when(view.getSelectedColumnId()).thenReturn("column2"); presenter.onColumnSelected(); List<AggregateFunctionType> typeListColumn2 = presenter.getSupportedFunctionTypes(); List<AggregateFunctionType> typeListNumber = presenter.getSupportedFunctionTypes(ColumnType.NUMBER); assertEquals(typeListColumn2.size(), typeListNumber.size()); assertEquals(presenter.getGroupFunction().getSourceId(), "column2"); verify(view).clearFunctionSelector(); verify(view, times(typeListNumber.size())).addFunctionItem(any(AggregateFunctionType.class)); verify(changeEvent).fire(any(GroupFunctionChangedEvent.class)); } @Test public void testSelectFunction() { when(view.getSelectedFunctionIndex()).thenReturn(1); GroupFunction groupFunction = new GroupFunction("column1", "column1", AggregateFunctionType.COUNT); presenter.init(metadata, groupFunction, null, "Title", true, true); presenter.onFunctionSelected(); List<AggregateFunctionType> supportedFunctions = presenter.getSupportedFunctionTypes(); assertEquals(presenter.getGroupFunction().getFunction(), supportedFunctions.get(1)); verify(changeEvent).fire(any(GroupFunctionChangedEvent.class)); } @Test public void testDelete() { GroupFunction groupFunction = new GroupFunction("column1", "column1", AggregateFunctionType.COUNT); presenter.init(metadata, groupFunction, null, "Title", true, true); presenter.delete(); verify(deleteEvent).fire(any(GroupFunctionDeletedEvent.class)); } }