package org.dashbuilder.client.widgets.dataset.editor.workflow; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.validation.ConstraintViolation; import com.google.gwt.editor.client.SimpleBeanEditorDriver; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.validation.client.impl.ConstraintViolationImpl; import com.google.gwtmockito.GwtMockitoTestRunner; import org.dashbuilder.client.widgets.dataset.event.CancelRequestEvent; import org.dashbuilder.client.widgets.dataset.event.SaveRequestEvent; import org.dashbuilder.client.widgets.dataset.event.TestDataSetRequestEvent; import org.dashbuilder.common.client.error.ClientRuntimeError; import org.dashbuilder.dataprovider.DataSetProviderType; import org.dashbuilder.dataset.DataSet; import org.dashbuilder.dataset.DataSetLookup; import org.dashbuilder.dataset.client.DataSetClientServices; import org.dashbuilder.dataset.client.DataSetReadyCallback; import org.dashbuilder.dataset.def.DataSetDef; import org.jboss.errai.ioc.client.container.SyncBeanManager; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.uberfire.mocks.EventSourceMock; import org.uberfire.mvp.Command; import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.*; @RunWith(GwtMockitoTestRunner.class) public class DataSetEditorWorkflowTest extends AbstractDataSetWorkflowTest { public static final String UUID = "uuid1"; public static final String NAME = "name1"; @Mock SyncBeanManager beanManager; @Mock EventSourceMock<SaveRequestEvent> saveRequestEvent; @Mock EventSourceMock<TestDataSetRequestEvent> testDataSetEvent; @Mock EventSourceMock<CancelRequestEvent> cancelRequestEvent; @Mock DataSetClientServices clientServices; @Mock DataSetDef dataSetDef; @Mock DataSet dataSet; @Mock SimpleBeanEditorDriver driver; @Mock DataSetEditorWorkflow.View view; private DataSetEditorWorkflow presenter; @Before public void setup() throws Exception { super.setup(); presenter = new DataSetEditorWorkflow(clientServices, validatorProvider, beanManager, saveRequestEvent, testDataSetEvent, cancelRequestEvent, view) { }; presenter.dataSetDef = this.dataSetDef; when(dataSetDef.getUUID()).thenReturn(UUID); when(dataSetDef.getName()).thenReturn(NAME); when(dataSetDef.getProvider()).thenReturn(DataSetProviderType.BEAN); when(dataSet.getUUID()).thenReturn(UUID); when(dataSet.getRowCount()).thenReturn(0); when(dataSetDef.clone()).thenReturn(dataSetDef); doAnswer(new Answer<Void>() { @Override public Void answer(final InvocationOnMock invocationOnMock) throws Throwable { DataSetReadyCallback callback = (DataSetReadyCallback) invocationOnMock.getArguments()[2]; callback.callback(dataSet); return null; } }).when(clientServices).lookupDataSet(any(dataSetDef.getClass()), any(DataSetLookup.class), any(DataSetReadyCallback.class)); } @Test public void testInit() { presenter.init(); verify(view, times(1)).init(presenter); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).clearButtons(); verify(view, times(0)).clearView(); } @Test public void testClear() { presenter.dataSetDef = this.dataSetDef; final Command c = mock(Command.class); presenter.flushCommand = c; presenter.stepValidator = c; presenter.clear(); assertNull(presenter.getDataSetDef()); assertNull(presenter.flushCommand); assertNull(presenter.stepValidator); assertTrue(presenter.violations.isEmpty()); verify(view, times(1)).clearView(); verify(view, times(0)).init(presenter); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).clearButtons(); } // Expect RuntimeException!!! @Test(expected = RuntimeException.class) public void testDoTestDataSetNotEdited() { presenter.dataSetDef = null; final DataSetEditorWorkflow.TestDataSetCallback testDataSetCallback = mock(DataSetEditorWorkflow.TestDataSetCallback.class); presenter.testDataSet(testDataSetCallback); } @Test public void testDoTestDataSet() throws Exception { final DataSetEditorWorkflow.TestDataSetCallback testDataSetCallback = mock(DataSetEditorWorkflow.TestDataSetCallback.class); presenter.testDataSet(testDataSetCallback); verify(dataSetDef, times(1)).setAllColumnsEnabled(true); verify(dataSetDef, times(1)).setColumns(null); verify(dataSetDef, times(1)).setDataSetFilter(null); verify(dataSetDef, times(1)).clone(); verify(dataSetDef, times(1)).setCacheEnabled(false); verify(testDataSetCallback, times(1)).onSuccess(dataSet); verify(testDataSetCallback, times(0)).onError(any(ClientRuntimeError.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).clearButtons(); verify(view, times(0)).clearView(); } @Test public void testFlush() { final Command c = mock(Command.class); presenter.flushCommand = c; presenter.flush(); verify(c, times(1)).execute(); verify(view, times(0)).init(presenter); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).clearButtons(); verify(view, times(0)).clearView(); } @Test public void testShowNextButton() { presenter.showNextButton(); verify(view, times(1)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).clearButtons(); verify(view, times(0)).clearView(); } @Test public void testShowTestButton() { presenter.showTestButton(); verify(view, times(1)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).clearButtons(); verify(view, times(0)).clearView(); } @Test public void testShowBackButton() { presenter.showBackButton(); verify(view, times(1)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).clearButtons(); verify(view, times(0)).clearView(); } @Test public void testClearButtons() { presenter.clearButtons(); verify(view, times(1)).clearButtons(); verify(view, times(0)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).clearView(); } @Test public void testNoHasErrors() { final Collection violations = mock(Collection.class); when(violations.isEmpty()).thenReturn(true); presenter.violations = violations; assertFalse(presenter.hasErrors()); verify(view, times(0)).clearButtons(); verify(view, times(0)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).clearView(); } @Test public void testHasErrors() { final Collection violations = mock(Collection.class); when(violations.isEmpty()).thenReturn(false); presenter.violations = violations; assertTrue(presenter.hasErrors()); verify(view, times(0)).clearButtons(); verify(view, times(0)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).clearView(); } @Test public void testFlushDriver() { final Collection violations = mock(Collection.class); when(violations.isEmpty()).thenReturn(true); presenter.violations = violations; final Command c = mock(Command.class); presenter.stepValidator = c; presenter.flush(driver); verify(driver, times(1)).flush(); verify(c, times(1)).execute(); assertFalse(presenter.hasErrors()); verify(view, times(0)).clearButtons(); verify(view, times(0)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).clearView(); } @Test public void testAddViolations() { presenter.violations.clear(); ConstraintViolationImpl v1 = mock(ConstraintViolationImpl.class); List<ConstraintViolation> _violations = new ArrayList<ConstraintViolation>(); _violations.add(v1); presenter.addViolations(_violations); assertTrue(presenter.hasErrors()); verify(view, times(0)).clearButtons(); verify(view, times(0)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).clearView(); } @Test public void testButtonCommand() { final Command c = mock(Command.class); presenter.flushCommand = c; presenter.testButtonCommand.execute(); verify(c, times(1)).execute(); verify(testDataSetEvent, times(1)).fire(any(TestDataSetRequestEvent.class)); verify(saveRequestEvent, times(0)).fire(any(SaveRequestEvent.class)); verify(cancelRequestEvent, times(0)).fire(any(CancelRequestEvent.class)); verify(view, times(0)).clearButtons(); verify(view, times(0)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).clearView(); } @Test public void testSaveButtonCommand() { final Command c = mock(Command.class); presenter.flushCommand = c; presenter.saveButtonCommand.execute(); verify(c, times(1)).execute(); verify(saveRequestEvent, times(1)).fire(any(SaveRequestEvent.class)); verify(testDataSetEvent, times(0)).fire(any(TestDataSetRequestEvent.class)); verify(cancelRequestEvent, times(0)).fire(any(CancelRequestEvent.class)); verify(view, times(0)).clearButtons(); verify(view, times(0)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).clearView(); } @Test public void testCancelButtonCommand() { presenter.cancelButtonCommand.execute(); verify(cancelRequestEvent, times(1)).fire(any(CancelRequestEvent.class)); verify(saveRequestEvent, times(0)).fire(any(SaveRequestEvent.class)); verify(testDataSetEvent, times(0)).fire(any(TestDataSetRequestEvent.class)); verify(view, times(0)).clearButtons(); verify(view, times(0)).addButton(anyString(), anyString(), anyBoolean(), any(Command.class)); verify(view, times(0)).add(any(IsWidget.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).clearView(); } }