package org.dashbuilder.client.widgets.dataset.editor;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwtmockito.GwtMockitoTestRunner;
import org.dashbuilder.client.widgets.dataset.editor.column.DataSetDefColumnsEditor;
import org.dashbuilder.client.widgets.dataset.event.FilterChangedEvent;
import org.dashbuilder.dataprovider.DataSetProviderType;
import org.dashbuilder.dataset.def.DataSetDef;
import org.dashbuilder.dataset.filter.ColumnFilter;
import org.dashbuilder.dataset.filter.DataSetFilter;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import java.util.ArrayList;
import java.util.List;
import static org.jgroups.util.Util.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.*;
@RunWith(GwtMockitoTestRunner.class)
public class DataSetDefColumnsFilterEditorTest {
@Mock DataSetDefColumnsEditor columnsEditor;
@Mock DataSetDefFilterEditor dataSetFilterEditor;
@Mock DataSetDefColumnsFilterEditor.View view;
@Mock DataSetDef dataSetDef;
private DataSetDefColumnsFilterEditor tested;
@Before
public void setup() throws Exception {
when(dataSetDef.getUUID()).thenReturn("uuid1");
when(dataSetDef.getName()).thenReturn("name1");
when(dataSetDef.getProvider()).thenReturn(DataSetProviderType.BEAN);
tested = new DataSetDefColumnsFilterEditor(columnsEditor, dataSetFilterEditor, view);
}
@Test
public void testInit() throws Exception {
tested.init();
verify(view, times(1)).init(tested);
verify(view, times(1)).initWidgets(any(IsWidget.class), any(DataSetDefFilterEditor.View.class));
verify(view, times(0)).setMaxHeight(anyString());
}
@Test
public void testSetMaxHeight() throws Exception {
final String maxH = "100px";
tested.setMaxHeight(maxH);
verify(view, times(0)).init(tested);
verify(view, times(0)).initWidgets(any(IsWidget.class), any(DataSetDefFilterEditor.View.class));
verify(view, times(1)).setMaxHeight(maxH);
}
@Test
public void testColumnListEditor() throws Exception {
assertEquals(columnsEditor, tested.columnListEditor());
}
@Test
public void testDataSetFilterEditor() throws Exception {
assertEquals(dataSetFilterEditor, tested.dataSetFilter());
}
@Test
public void testSetAcceptableValues() throws Exception {
final List l = mock(List.class);
tested.setAcceptableValues(l);
verify(columnsEditor, times(1)).setAcceptableValues(l);
verify(view, times(0)).init(tested);
verify(view, times(0)).initWidgets(any(IsWidget.class), any(DataSetDefFilterEditor.View.class));
verify(view, times(0)).setMaxHeight(anyString());
}
@Test
public void testSetValue() throws Exception {
DataSetFilter newFilter = mock(DataSetFilter.class);
List<ColumnFilter> createColumnFilters = createColumnFilters("col1", "col2");
when(newFilter.getColumnFilterList()).thenReturn(createColumnFilters);
when(dataSetDef.getDataSetFilter()).thenReturn(newFilter);
tested.setValue(dataSetDef);
verify(columnsEditor, times(1)).onValueRestricted("col1");
verify(columnsEditor, times(1)).onValueRestricted("col2");
verify(columnsEditor, times(0)).onValueUnRestricted(anyString());
verify(columnsEditor, times(0)).setAcceptableValues(any(List.class));
verify(view, times(0)).init(tested);
verify(view, times(0)).initWidgets(any(IsWidget.class), any(DataSetDefFilterEditor.View.class));
verify(view, times(0)).setMaxHeight(anyString());
}
@Test
public void testOnFilterChangedEvent() throws Exception {
DataSetFilter oldFilter = mock(DataSetFilter.class);
List<ColumnFilter> oldCreateColumnFilters = createColumnFilters("col1", "col2", "col3");
when(oldFilter.getColumnFilterList()).thenReturn(oldCreateColumnFilters);
DataSetFilter newFilter = mock(DataSetFilter.class);
List<ColumnFilter> createColumnFilters = createColumnFilters("col2");
when(newFilter.getColumnFilterList()).thenReturn(createColumnFilters);
when(dataSetDef.getDataSetFilter()).thenReturn(newFilter);
FilterChangedEvent filterChangedEvent = mock(FilterChangedEvent.class);
when(filterChangedEvent.getContext()).thenReturn(dataSetFilterEditor);
when(filterChangedEvent.getOldFilter()).thenReturn(oldFilter);
when(filterChangedEvent.getFilter()).thenReturn(newFilter);
tested.onFilterChangedEvent(filterChangedEvent);
verify(columnsEditor, times(1)).onValueRestricted("col2");
verify(columnsEditor, times(1)).onValueUnRestricted("col1");
verify(columnsEditor, times(1)).onValueUnRestricted("col3");
verify(columnsEditor, times(0)).setAcceptableValues(any(List.class));
verify(view, times(0)).init(tested);
verify(view, times(0)).initWidgets(any(IsWidget.class), any(DataSetDefFilterEditor.View.class));
verify(view, times(0)).setMaxHeight(anyString());
}
private List<ColumnFilter> createColumnFilters(String... columns) {
List<ColumnFilter> result = new ArrayList<ColumnFilter>();
for (String column : columns) {
ColumnFilter cf = mock(ColumnFilter.class);
when(cf.getColumnId()).thenReturn(column);
result.add(cf);
}
return result;
}
}