package org.dashbuilder.client.widgets.dataset.editor.workflow.create; import javax.validation.ConstraintViolation; import com.google.gwt.editor.client.SimpleBeanEditorDriver; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwtmockito.GwtMockitoTestRunner; import org.dashbuilder.client.widgets.dataset.editor.attributes.DataSetDefBasicAttributesEditor; import org.dashbuilder.client.widgets.dataset.editor.driver.DataSetDefBasicAttributesDriver; import org.dashbuilder.client.widgets.dataset.editor.workflow.AbstractDataSetWorkflowTest; import org.dashbuilder.client.widgets.dataset.editor.workflow.DataSetEditorWorkflow; 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.dataset.client.DataSetClientServices; import org.dashbuilder.dataset.def.DataSetDef; import org.jboss.errai.ioc.client.container.SyncBeanDef; 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.mockito.Mockito.*; @RunWith( GwtMockitoTestRunner.class ) public class DataSetBasicAttributesWorkflowTest extends AbstractDataSetWorkflowTest { @Mock SyncBeanManager beanManager; @Mock EventSourceMock<SaveRequestEvent> saveRequestEvent; @Mock EventSourceMock<TestDataSetRequestEvent> testDataSetEvent; @Mock EventSourceMock<CancelRequestEvent> cancelRequestEvent; @Mock DataSetClientServices clientServices; @Mock DataSetDefBasicAttributesEditor basicAttributesEditor; @Mock DataSetDefBasicAttributesDriver dataSetDefBasicAttributesDriver; @Mock SyncBeanDef<DataSetDefBasicAttributesDriver> simpleBeanEditorDriverSyncBeanDef; @Mock SyncBeanDef<DataSetDefBasicAttributesEditor> simpleEditorSyncBeanDef; @Mock DataSetEditorWorkflow.View view; private DataSetBasicAttributesWorkflow presenter; @Before public void setup() throws Exception { super.setup(); // Bean instantiation mocks. when( beanManager.lookupBean( DataSetDefBasicAttributesDriver.class ) ).thenReturn( simpleBeanEditorDriverSyncBeanDef ); when( simpleBeanEditorDriverSyncBeanDef.newInstance() ).thenAnswer( new Answer<DataSetDefBasicAttributesDriver>() { @Override public DataSetDefBasicAttributesDriver answer( InvocationOnMock invocationOnMock ) throws Throwable { return dataSetDefBasicAttributesDriver; } } ); when( beanManager.lookupBean( DataSetDefBasicAttributesEditor.class ) ).thenReturn( simpleEditorSyncBeanDef ); when( simpleEditorSyncBeanDef.newInstance() ).thenAnswer( new Answer<DataSetDefBasicAttributesEditor>() { @Override public DataSetDefBasicAttributesEditor answer( InvocationOnMock invocationOnMock ) throws Throwable { return basicAttributesEditor; } } ); presenter = new DataSetBasicAttributesWorkflow( clientServices, validatorProvider, beanManager, basicAttributesEditor, saveRequestEvent, testDataSetEvent, cancelRequestEvent, view ) { @Override protected Class<? extends SimpleBeanEditorDriver> getDriverClass() { return DataSetDefBasicAttributesDriver.class; } @Override protected Class getEditorClass() { return DataSetDefBasicAttributesEditor.class; } @Override protected Iterable<ConstraintViolation<?>> validate() { return null; } }; } @Test public void testBasicAttributesEdition() { DataSetDef def = mock( DataSetDef.class ); presenter.edit( def ).basicAttributesEdition(); verify( beanManager, times( 2 ) ).lookupBean( DataSetDefBasicAttributesDriver.class ); verify( dataSetDefBasicAttributesDriver, times( 2 ) ).initialize( basicAttributesEditor ); verify( dataSetDefBasicAttributesDriver, times( 2 ) ).edit( def ); verify( view, times( 2 ) ).clearView(); verify( view, times( 2 ) ).add( any( IsWidget.class ) ); verify( view, times( 0 ) ).init( presenter ); verify( view, times( 0 ) ).addButton( anyString(), anyString(), anyBoolean(), any( Command.class ) ); verify( view, times( 0 ) ).clearButtons(); } }