package org.dashbuilder.client.widgets.dataset.editor.sql; import java.util.Arrays; import com.google.gwtmockito.GwtMockitoTestRunner; import org.dashbuilder.common.client.editor.ValueBoxEditor; import org.dashbuilder.common.client.editor.list.DropDownEditor; import org.dashbuilder.dataprovider.DataSetProviderType; import org.dashbuilder.dataset.def.SQLDataSetDef; import org.dashbuilder.dataset.def.SQLDataSourceDef; import org.dashbuilder.dataset.service.SQLProviderServices; import org.gwtbootstrap3.client.ui.constants.Placement; import org.jboss.errai.common.client.api.Caller; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.uberfire.mocks.CallerMock; import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.*; @RunWith(GwtMockitoTestRunner.class) public class SQLDataSetDefAttributesEditorTest { @Mock DropDownEditor dataSource; @Mock ValueBoxEditor<String> dbSchema; @Mock ValueBoxEditor<String> dbTable; @Mock ValueBoxEditor<String> dbSQL; @Mock SQLProviderServices sqlProviderServices; @Mock SQLDataSetDefAttributesEditor.View view; Caller<SQLProviderServices> sqlProviderServicesCaller; SQLDataSetDefAttributesEditor presenter; SQLDataSourceDef dataSourceDef = new SQLDataSourceDef("test", "test"); @Before public void setup() { when(sqlProviderServices.getDataSourceDefs()).thenReturn(Arrays.asList(dataSourceDef)); sqlProviderServicesCaller = new CallerMock<>(sqlProviderServices); presenter = new SQLDataSetDefAttributesEditor(dataSource, dbSchema, dbTable, dbSQL, sqlProviderServicesCaller, view); } @Test public void testInit() { presenter.init(); verify(view, times(1)).init(presenter); verify(view, times(1)).initWidgets(any(DropDownEditor.View.class), any(ValueBoxEditor.View.class), any(ValueBoxEditor.View.class) ,any(ValueBoxEditor.View.class)); verify(dataSource, times(1)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbSchema, times(1)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbTable, times(1)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbSQL, times(1)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(view, times(1)).query(); verify(view, times(0)).table(); verify(sqlProviderServices).getDataSourceDefs(); verify(dataSource).setEntries(any()); verify(dataSource).setSelectHint(anyString()); } @Test public void testDataSource() { assertEquals(dataSource, presenter.dataSource()); } @Test public void testDbSchema() { assertEquals(dbSchema, presenter.dbSchema()); } @Test public void testDbTable() { assertEquals(dbTable, presenter.dbTable()); } @Test public void testDbSQL() { assertEquals(dbSQL, presenter.dbSQL()); } @Test public void testSetValueUsingTable() { final SQLDataSetDef dataSetDef = mock(SQLDataSetDef.class); when(dataSetDef.getUUID()).thenReturn("uuid1"); when(dataSetDef.getName()).thenReturn("name1"); when(dataSetDef.getProvider()).thenReturn(DataSetProviderType.SQL); when(dataSetDef.getDbTable()).thenReturn("table1"); when(dataSetDef.getDbSQL()).thenReturn(null); presenter.setValue(dataSetDef); assertEquals(false, presenter.isUsingQuery()); verify(view, times(1)).table(); verify(view, times(0)).init(presenter); verify(view, times(0)).initWidgets(any(DropDownEditor.View.class), any(ValueBoxEditor.View.class), any(ValueBoxEditor.View.class) ,any(ValueBoxEditor.View.class)); verify(dataSource, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbSchema, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbTable, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbSQL, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(view, times(0)).query(); } @Test public void testSetValueUsingQuery() { final SQLDataSetDef dataSetDef = mock(SQLDataSetDef.class); when(dataSetDef.getUUID()).thenReturn("uuid1"); when(dataSetDef.getName()).thenReturn("name1"); when(dataSetDef.getProvider()).thenReturn(DataSetProviderType.SQL); when(dataSetDef.getDbTable()).thenReturn(null); when(dataSetDef.getDbSQL()).thenReturn("query1"); presenter.setValue(dataSetDef); assertEquals(true, presenter.isUsingQuery()); verify(view, times(1)).query(); verify(view, times(0)).init(presenter); verify(view, times(0)).initWidgets(any(DropDownEditor.View.class), any(ValueBoxEditor.View.class), any(ValueBoxEditor.View.class) ,any(ValueBoxEditor.View.class)); verify(dataSource, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbSchema, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbTable, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(dbSQL, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(view, times(0)).table(); } }