package org.dashbuilder.dataset.editor.client.screens;
import com.google.gwtmockito.GwtMockitoTestRunner;
import org.dashbuilder.client.widgets.dataset.event.EditDataSetEvent;
import org.dashbuilder.client.widgets.dataset.event.ErrorEvent;
import org.dashbuilder.client.widgets.dataset.explorer.DataSetExplorer;
import org.dashbuilder.dataset.def.DataSetDef;
import org.dashbuilder.dataset.service.DataSetDefVfsServices;
import org.jboss.errai.common.client.api.Caller;
import org.jboss.errai.common.client.api.RemoteCallback;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.uberfire.backend.vfs.Path;
import org.uberfire.client.mvp.PlaceManager;
import org.uberfire.client.workbench.widgets.common.ErrorPopupPresenter;
import org.uberfire.mocks.CallerMock;
import org.uberfire.mocks.EventSourceMock;
import org.uberfire.mvp.PlaceRequest;
import org.uberfire.mvp.impl.PathPlaceRequest;
import org.uberfire.workbench.events.NotificationEvent;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.*;
@RunWith(GwtMockitoTestRunner.class)
public class DataSetDefExplorerScreenTest {
@Mock PlaceRequest placeRequest;
@Mock PlaceManager placeManager;
@Mock EventSourceMock<NotificationEvent> notification;
@Mock ErrorPopupPresenter errorPopupPresenter;
@Mock DataSetExplorer explorerWidget;
@Mock DataSetDefVfsServices dataSetDefVfsServices;
@Mock Caller<DataSetDefVfsServices> services;
@InjectMocks
DataSetDefExplorerScreen presenter;
@Before
public void setup() throws Exception {
presenter.services = services;
assertEquals(explorerWidget, presenter.getView());
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocationOnMock) throws Throwable {
RemoteCallback callback = (RemoteCallback) invocationOnMock.getArguments()[0];
callback.callback(mock(Path.class));
return null;
}
}).when(services).call(any(RemoteCallback.class));
}
@Test
public void testNewDataSet() {
presenter.newDataSet();
verify(placeManager, times(1)).goTo("DataSetDefWizard");
}
// Cannot mock constructor for PathPlaceRequest, but having the classcast exception when mocking it implies that placeManager#goTo is called....
@Test(expected = ClassCastException.class)
public void testOnEditDataSetEvent() {
final DataSetDef def = mock(DataSetDef.class);
final EditDataSetEvent editDataSetEvent = mock(EditDataSetEvent.class);
when(editDataSetEvent.getDef()).thenReturn(def);
presenter.onEditDataSetEvent(editDataSetEvent);
verify(placeManager, times(1)).goTo(any(PathPlaceRequest.class));
}
@Test
public void testOnErrorEvent() {
final ErrorEvent errorDataSetEvent = mock(ErrorEvent.class);
when(errorDataSetEvent.getMessage()).thenReturn("errorMessage");
presenter.onErrorEvent(errorDataSetEvent);
verify(errorPopupPresenter, times(1)).showMessage("errorMessage");
}
}