package org.dashbuilder.common.client.editor.list; import com.google.gwt.editor.client.EditorError; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeUri; import org.dashbuilder.common.client.editor.AbstractEditorTest; import org.dashbuilder.common.client.event.ValueChangeEvent; import org.dashbuilder.dataprovider.DataSetProviderType; import org.gwtbootstrap3.client.ui.constants.Placement; import org.junit.Assert; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.uberfire.mocks.EventSourceMock; import org.uberfire.mvp.Command; import java.util.ArrayList; import java.util.Collection; import java.util.List; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; import static org.junit.Assert.assertNull; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.*; public abstract class ImageListEditorTest extends AbstractEditorTest { @Mock EventSourceMock<ValueChangeEvent<DataSetProviderType>> valueChangeEvent; protected final Collection<DataSetProviderType> expectedTypes = new ArrayList<DataSetProviderType>(4); protected final List<ImageListEditor<DataSetProviderType>.Entry> expectedEntries = new ArrayList<ImageListEditor<org.dashbuilder.dataprovider.DataSetProviderType>.Entry>(4); protected ImageListEditor<DataSetProviderType> presenter; protected ImageListEditorView<DataSetProviderType> view; public void initExpectedValues() { // Currently expected provider types supported. expectedTypes.add(DataSetProviderType.BEAN); expectedTypes.add(DataSetProviderType.CSV); expectedTypes.add(DataSetProviderType.SQL); expectedTypes.add(DataSetProviderType.ELASTICSEARCH); expectedEntries.addAll(mockEntries()); } public void testClear() throws Exception { presenter.entries.addAll(expectedEntries); presenter.value = DataSetProviderType.BEAN; presenter.clear(); assertTrue(presenter.entries.isEmpty()); assertNull(presenter.value); verify(view, times(1)).clear(); verify(view, times(0)).init(any(ImageListEditor.class)); verify(view, times(0)).clearError(); verify(view, times(0)).showError(any(SafeHtml.class)); verify(view, times(0)).add(any(SafeUri.class), anyString(), anyString(), any(SafeHtml.class), any(SafeHtml.class), anyBoolean(), any(Command.class)); } public void testInit() throws Exception { presenter.init(); verify(view, times(1)).init(presenter); verify(view, times(0)).clear(); verify(view, times(0)).clearError(); verify(view, times(0)).showError(any(SafeHtml.class)); verify(view, times(0)).add(any(SafeUri.class), anyString(), anyString(), any(SafeHtml.class), any(SafeHtml.class), anyBoolean(), any(Command.class)); } public void testNewEntry() throws Exception { ImageListEditor<DataSetProviderType>.Entry expectedEntry = mockEntry(DataSetProviderType.BEAN); ImageListEditor<DataSetProviderType>.Entry actualEntry = presenter.newEntry(expectedEntry.getValue(), expectedEntry.getUri(), expectedEntry.getHeading(), expectedEntry.getText()); Assert.assertEquals(expectedEntry.getHeading(), actualEntry.getHeading()); Assert.assertEquals(expectedEntry.getText(), actualEntry.getText()); Assert.assertEquals(expectedEntry.getUri(), actualEntry.getUri()); Assert.assertEquals(expectedEntry.getValue(), actualEntry.getValue()); } public void testSetEntries() throws Exception { presenter.setEntries(expectedEntries); assertShowElements(); } public void testClearErrors() throws Exception { List<EditorError> errors = new ArrayList<EditorError>(); presenter.showErrors(errors); verify(view, times(0)).clear(); verify(view, times(0)).init(any(ImageListEditor.class)); verify(view, times(1)).clearError(); verify(view, times(0)).showError(any(SafeHtml.class)); verify(view, times(0)).add(any(SafeUri.class), anyString(), anyString(), any(SafeHtml.class), any(SafeHtml.class), anyBoolean(), any(Command.class)); } 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(0)).clear(); verify(view, times(0)).init(any(ImageListEditor.class)); verify(view, times(0)).clearError(); verify(view, times(0)).add(any(SafeUri.class), anyString(), anyString(), any(SafeHtml.class), any(SafeHtml.class), anyBoolean(), any(Command.class)); verify(view, times(1)).showError(errorSafeHtmlCaptor.capture()); final SafeHtml value = errorSafeHtmlCaptor.getValue(); Assert.assertEquals("m1\nm2", value.asString()); } 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)).clearError(); verify(view, times(0)).showError(any(SafeHtml.class)); verify(view, times(0)).init(presenter); } public void testSetValueWithoutEvents() throws Exception { final DataSetProviderType value = DataSetProviderType.BEAN; presenter.entries.addAll(expectedEntries); presenter.setValue(value, false); Assert.assertEquals(value, presenter.value); assertShowElements(); } public void testSetValueWithEvents() throws Exception { final DataSetProviderType oldValue = DataSetProviderType.SQL; final DataSetProviderType newValue = DataSetProviderType.BEAN; presenter.value = oldValue; presenter.entries.addAll(expectedEntries); presenter.setValue(newValue, true); Assert.assertEquals(newValue, presenter.value); assertShowElements(); verify( valueChangeEvent, times( 1 ) ).fire(any(ValueChangeEvent.class)); } protected void assertShowElements() { verify(view, times(0)).init(any(ImageListEditor.class)); verify(view, times(0)).clearError(); verify(view, times(0)).showError(any(SafeHtml.class)); verify(view, times(1)).clear(); verify(view, times(4)).add(any(SafeUri.class), anyString(), anyString(), any(SafeHtml.class), any(SafeHtml.class), anyBoolean(), any(Command.class)); Assert.assertEquals(expectedEntries, presenter.entries); } protected List<ImageListEditor<DataSetProviderType>.Entry> mockEntries() { List<ImageListEditor<DataSetProviderType>.Entry> result = new ArrayList<ImageListEditor<org.dashbuilder.dataprovider.DataSetProviderType>.Entry>(4); result.add(mockEntry(DataSetProviderType.BEAN)); result.add(mockEntry(DataSetProviderType.CSV)); result.add(mockEntry(DataSetProviderType.SQL)); result.add(mockEntry(DataSetProviderType.ELASTICSEARCH)); return result; } protected static ImageListEditor<DataSetProviderType>.Entry mockEntry(DataSetProviderType type) { final String name = type.getName(); final SafeUri uri = mock(SafeUri.class); final SafeHtml safeHtml = mock(SafeHtml.class); doReturn(name).when(safeHtml).asString(); ImageListEditor<DataSetProviderType>.Entry entry = mock(ImageListEditor.Entry.class); doReturn(type).when(entry).getValue(); doReturn(safeHtml).when(entry).getHeading(); doReturn(safeHtml).when(entry).getText(); doReturn(uri).when(entry).getUri(); return entry; } }