package org.dashbuilder.common.client.editor.file; import com.google.gwt.editor.client.EditorError; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwtmockito.GwtMockitoTestRunner; import org.dashbuilder.common.client.editor.AbstractEditorTest; import org.dashbuilder.common.client.event.ValueChangeEvent; import org.gwtbootstrap3.client.ui.constants.Placement; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.uberfire.mocks.EventSourceMock; import org.uberfire.workbench.events.NotificationEvent; import java.util.ArrayList; import java.util.List; import static junit.framework.Assert.assertEquals; 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 FileUploadEditorTest extends AbstractEditorTest { @Mock FileUploadEditor.View view; @Mock EventSourceMock<ValueChangeEvent<String>> valueChangeEvent; @Mock EventSourceMock<NotificationEvent> workbenchNotificationEvent; private FileUploadEditor presenter; @Before public void setup() { // The presenter instance to test. presenter = new FileUploadEditor(valueChangeEvent, workbenchNotificationEvent, view); assertEquals(view.asWidget(), presenter.asWidget()); } @Test public void testInit() throws Exception { presenter.init(); assertEquals(view.asWidget(), presenter.asWidget()); verify(view, times(1)).init(presenter); verify(view, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(view, times(1)).setFileUploadName(anyString()); verify(view, times(0)).setFileUploadVisible(anyBoolean()); verify(view, times(0)).setFileLabelText(anyString()); verify(view, times(0)).setFileLabelVisible(anyBoolean()); verify(view, times(1)).setLoadingImageVisible(false); verify(view, times(0)).getFileName(); verify(view, times(0)).setFormAction(anyString()); verify(view, times(0)).submit(); verify(view, times(0)).showError(any(SafeHtml.class)); verify(view, times(0)).clearError(); } @Test public void testConfigure() throws Exception { FileUploadEditor.FileUploadEditorCallback callback = mock(FileUploadEditor.FileUploadEditorCallback.class); presenter.configure("f1", callback); assertEquals(view.asWidget(), presenter.asWidget()); assertEquals(callback, presenter.callback); verify(view, times(0)).init(presenter); verify(view, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(view, times(1)).setFileUploadName("f1"); verify(view, times(0)).setFileUploadVisible(anyBoolean()); verify(view, times(0)).setFileLabelText(anyString()); verify(view, times(0)).setFileLabelVisible(anyBoolean()); verify(view, times(0)).setLoadingImageVisible(false); verify(view, times(0)).getFileName(); verify(view, times(0)).setFormAction(anyString()); verify(view, times(0)).submit(); verify(view, times(0)).showError(any(SafeHtml.class)); verify(view, times(0)).clearError(); } @Test public void testClearErrors() throws Exception { List<EditorError> errors = new ArrayList<EditorError>(); presenter.showErrors(errors); verify(view, times(1)).clearError(); verify(view, times(0)).init(presenter); verify(view, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(view, times(0)).setFileUploadName(anyString()); verify(view, times(0)).setFileUploadVisible(anyBoolean()); verify(view, times(0)).setFileLabelText(anyString()); verify(view, times(0)).setFileLabelVisible(anyBoolean()); verify(view, times(0)).setLoadingImageVisible(anyBoolean()); verify(view, times(0)).getFileName(); verify(view, times(0)).setFormAction(anyString()); verify(view, times(0)).submit(); verify(view, times(0)).showError(any(SafeHtml.class)); } @Test public void testShowErrors() throws Exception { EditorError e1 = mockEditorError(presenter, "m1"); EditorError e2 = mockEditorError(presenter, "m2"); List<EditorError> errors = new ArrayList<EditorError>(2); errors.add(e1); errors.add(e2); presenter.showErrors(errors); final ArgumentCaptor<SafeHtml> errorSafeHtmlCaptor = ArgumentCaptor.forClass(SafeHtml.class); verify(view, times(1)).showError(errorSafeHtmlCaptor.capture()); verify(view, times(0)).init(presenter); verify(view, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(view, times(0)).setFileUploadName(anyString()); verify(view, times(0)).setFileUploadVisible(anyBoolean()); verify(view, times(0)).setFileLabelText(anyString()); verify(view, times(0)).setFileLabelVisible(anyBoolean()); verify(view, times(0)).setLoadingImageVisible(anyBoolean()); verify(view, times(0)).getFileName(); verify(view, times(0)).setFormAction(anyString()); verify(view, times(0)).submit(); verify(view, times(0)).clearError(); } @Test public void testAddHelpContent() throws Exception { final String title = "title"; final String content = "content"; final Placement p = Placement.BOTTOM; presenter.addHelpContent(title, content, p); verify(view, times(1)).addHelpContent(title, content, p); verify(view, times(0)).init(presenter); verify(view, times(0)).setFileUploadName(anyString()); verify(view, times(0)).setFileUploadVisible(anyBoolean()); verify(view, times(0)).setFileLabelText(anyString()); verify(view, times(0)).setFileLabelVisible(anyBoolean()); verify(view, times(0)).setLoadingImageVisible(anyBoolean()); verify(view, times(0)).getFileName(); verify(view, times(0)).setFormAction(anyString()); verify(view, times(0)).submit(); verify(view, times(0)).showError(any(SafeHtml.class)); verify(view, times(0)).clearError(); } @Test public void testValueSet() throws Exception { final String newValue = "newValue"; when(view.getFileName()).thenReturn("fff"); presenter.setValue(newValue); assertEquals(newValue, presenter.getValue()); verify(view, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).setFileUploadName(anyString()); verify(view, times(0)).setFileUploadVisible(anyBoolean()); verify(view, times(0)).setFileLabelText(anyString()); verify(view, times(1)).setFileLabelVisible(false); verify(view, times(0)).setLoadingImageVisible(anyBoolean()); verify(view, times(1)).getFileName(); verify(view, times(0)).setFormAction(anyString()); verify(view, times(0)).submit(); verify(view, times(0)).showError(any(SafeHtml.class)); verify(view, times(0)).clearError(); } @Test public void testValueUnset() throws Exception { final String newValue = "newValue"; when(view.getFileName()).thenReturn(null); presenter.setValue(newValue); assertEquals(newValue, presenter.getValue()); verify(view, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).setFileUploadName(anyString()); verify(view, times(0)).setFileUploadVisible(anyBoolean()); verify(view, times(1)).setFileLabelText(newValue); verify(view, times(1)).setFileLabelVisible(true); verify(view, times(0)).setLoadingImageVisible(anyBoolean()); verify(view, times(1)).getFileName(); verify(view, times(0)).setFormAction(anyString()); verify(view, times(0)).submit(); verify(view, times(0)).showError(any(SafeHtml.class)); verify(view, times(0)).clearError(); } @Test public void testGetUploadFileName() throws Exception { FileUploadEditor.FileUploadEditorCallback callback = mock(FileUploadEditor.FileUploadEditorCallback.class); presenter.callback = callback; presenter.getUploadFileName(); verify(callback, times(1)).getUploadFileName(); verify(callback, times(0)).getUploadFileUrl(); } @Test public void testGetUploadFileUrl() throws Exception { FileUploadEditor.FileUploadEditorCallback callback = mock(FileUploadEditor.FileUploadEditorCallback.class); presenter.callback = callback; presenter.getUploadFileUrl(); verify(callback, times(1)).getUploadFileUrl(); verify(callback, times(0)).getUploadFileName(); } @Test public void testOnSubmitNull() throws Exception { when(view.getFileName()).thenReturn(null); final boolean result = presenter.onSubmit(); assertEquals(false, result); verify(view, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).setFileUploadName(anyString()); verify(view, times(0)).setFileUploadVisible(anyBoolean()); verify(view, times(0)).setFileLabelText(anyString()); verify(view, times(0)).setFileLabelVisible(anyBoolean()); verify(view, times(0)).setLoadingImageVisible(anyBoolean()); verify(view, times(1)).getFileName(); verify(view, times(0)).setFormAction(anyString()); verify(view, times(0)).submit(); verify(view, times(0)).showError(any(SafeHtml.class)); verify(view, times(0)).clearError(); } @Test public void testOnSubmit() throws Exception { when(view.getFileName()).thenReturn("ff"); final boolean result = presenter.onSubmit(); assertEquals(true, result); verify(view, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).setFileUploadName(anyString()); verify(view, times(1)).setFileUploadVisible(false); verify(view, times(0)).setFileLabelText(anyString()); verify(view, times(0)).setFileLabelVisible(anyBoolean()); verify(view, times(1)).setLoadingImageVisible(true); verify(view, times(1)).getFileName(); verify(view, times(0)).setFormAction(anyString()); verify(view, times(0)).submit(); verify(view, times(0)).showError(any(SafeHtml.class)); verify(view, times(0)).clearError(); } @Test public void testOnSubmitComplete() throws Exception { when(view.getFileName()).thenReturn("ff"); presenter.onSubmitComplete("OK"); assertEquals("ff", presenter.value); verify(view, times(0)).addHelpContent(anyString(), anyString(), any(Placement.class)); verify(view, times(0)).init(presenter); verify(view, times(0)).setFileUploadName(anyString()); verify(view, times(1)).setFileUploadVisible(true); verify(view, times(0)).setFileLabelText(anyString()); verify(view, times(0)).setFileLabelVisible(anyBoolean()); verify(view, times(1)).setLoadingImageVisible(false); verify(view, times(1)).getFileName(); verify(view, times(0)).setFormAction(anyString()); verify(view, times(0)).submit(); verify(view, times(0)).showError(any(SafeHtml.class)); verify(view, times(2)).clearError(); verify( workbenchNotificationEvent, times( 1 ) ).fire(any(NotificationEvent.class)); verify( valueChangeEvent, times( 1 ) ).fire(any(ValueChangeEvent.class)); } }