/******************************************************************************* * Copyright (c) 2012-2016 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.extension.machine.client.perspective.widgets.recipe.editor; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwtmockito.GwtMockitoTestRunner; import org.eclipse.che.ide.api.editor.EditorPartPresenter; import org.eclipse.che.ide.extension.machine.client.MachineLocalizationConstant; import org.eclipse.che.ide.extension.machine.client.MachineResources; import org.eclipse.che.ide.extension.machine.client.inject.factories.WidgetsFactory; import org.eclipse.che.ide.extension.machine.client.perspective.widgets.recipe.editor.button.EditorButtonWidget; import org.eclipse.che.ide.extension.machine.client.perspective.widgets.recipe.editor.button.EditorButtonWidgetImpl; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import java.util.List; import static org.eclipse.che.ide.extension.machine.client.perspective.widgets.recipe.editor.button.EditorButtonWidgetImpl.Background.BLUE; import static org.eclipse.che.ide.extension.machine.client.perspective.widgets.recipe.editor.button.EditorButtonWidgetImpl.Background.GREY; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** * @author Valeriy Svydenko */ @RunWith(GwtMockitoTestRunner.class) public class RecipeEditorViewImplTest { private static final String CREATE = "CREATE"; private static final String CLONE = "CLONE"; private static final String SAVE = "SAVE"; private static final String DELETE = "DELETE"; private static final String CANCEL = "CANCEL"; @Mock private MachineResources resources; @Mock private MachineLocalizationConstant locale; @Mock private WidgetsFactory widgetFactory; @Mock private EditorButtonWidget newButtonWidget; @Mock private EditorButtonWidget cloneButtonWidget; @Mock private EditorButtonWidget saveButtonWidget; @Mock private EditorButtonWidget cancelButtonWidget; @Mock private EditorButtonWidget deleteButtonWidget; @Mock private RecipeEditorView.ActionDelegate delegate; @Mock private EditorPartPresenter editor; @Captor private ArgumentCaptor<EditorButtonWidget.ActionDelegate> captor; private RecipeEditorViewImpl view; @Before public void setUp() throws Exception { when(locale.editorButtonNew()).thenReturn(CREATE); when(locale.editorButtonClone()).thenReturn(CLONE); when(locale.editorButtonSave()).thenReturn(SAVE); when(locale.editorButtonDelete()).thenReturn(DELETE); when(locale.editorButtonCancel()).thenReturn(CANCEL); when(widgetFactory.createEditorButton(CREATE, BLUE)).thenReturn(newButtonWidget); when(widgetFactory.createEditorButton(CLONE, GREY)).thenReturn(cloneButtonWidget); when(widgetFactory.createEditorButton(SAVE, GREY)).thenReturn(saveButtonWidget); when(widgetFactory.createEditorButton(DELETE, GREY)).thenReturn(deleteButtonWidget); when(widgetFactory.createEditorButton(CANCEL, GREY)).thenReturn(cancelButtonWidget); view = new RecipeEditorViewImpl(resources, locale, widgetFactory); view.setDelegate(delegate); } @Test public void buttonsShouldBeAdded() throws Exception { EditorButtonWidget.ActionDelegate createDelegate = buttonShouldBeCreated(CREATE, BLUE, newButtonWidget, newButtonWidget); createDelegate.onButtonClicked(); verify(delegate).onNewButtonClicked(); EditorButtonWidget.ActionDelegate cloneDelegate = buttonShouldBeCreated(CLONE, GREY, cloneButtonWidget, cloneButtonWidget); cloneDelegate.onButtonClicked(); verify(delegate).onCloneButtonClicked(); EditorButtonWidget.ActionDelegate saveDelegate = buttonShouldBeCreated(SAVE, GREY, saveButtonWidget, saveButtonWidget); saveDelegate.onButtonClicked(); verify(delegate).onSaveButtonClicked(); EditorButtonWidget.ActionDelegate deleteDelegate = buttonShouldBeCreated(CANCEL, GREY, cancelButtonWidget, cancelButtonWidget); deleteDelegate.onButtonClicked(); verify(delegate).onCancelButtonClicked(); EditorButtonWidget.ActionDelegate cancelDelegate = buttonShouldBeCreated(DELETE, GREY, deleteButtonWidget, deleteButtonWidget); cancelDelegate.onButtonClicked(); verify(delegate).onCancelButtonClicked(); } private EditorButtonWidget.ActionDelegate buttonShouldBeCreated(String title, EditorButtonWidgetImpl.Background background, EditorButtonWidget button, EditorButtonWidget buttonWidget) { verify(widgetFactory).createEditorButton(title, background); verify(buttonWidget).setDelegate(captor.capture()); verify(view.buttonsPanel).add(button); return captor.getValue(); } @Test public void buttonSaveShouldBeEnable() { view.setEnableSaveButton(true); verify(saveButtonWidget).setEnable(true); } @Test public void buttonSaveShouldNotBeEnable() { view.setEnableSaveButton(false); verify(saveButtonWidget).setEnable(false); } @Test public void buttonCancelShouldBeEnable() { view.setEnableCancelButton(true); verify(cancelButtonWidget).setEnable(true); } @Test public void buttonCancelShouldNotBeEnable() { view.setEnableCancelButton(false); verify(cancelButtonWidget).setEnable(false); } @Test public void buttonDeleteShouldBeEnable() { view.setEnableDeleteButton(true); verify(deleteButtonWidget).setEnable(true); } @Test public void buttonDeleteShouldNotBeEnable() { view.setEnableDeleteButton(false); verify(deleteButtonWidget).setEnable(false); } @Test public void buttonCloneShouldBeEnable() { view.setEnableCloneButton(true); verify(cloneButtonWidget).setEnable(true); } @Test public void buttonCloneShouldNotBeEnable() { view.setEnableCloneButton(false); verify(cloneButtonWidget).setEnable(false); } @Test public void buttonSaveShouldBeVisible() { view.setVisibleSaveButton(true); verify(saveButtonWidget).setVisible(true); } @Test public void buttonSaveShouldNotBeVisible() { view.setVisibleSaveButton(false); verify(saveButtonWidget).setVisible(false); } @Test public void buttonDeleteShouldBeVisible() { view.setVisibleSaveButton(true); verify(saveButtonWidget).setVisible(true); } @Test public void buttonDeleteShouldNotBeVisible() { view.setVisibleDeleteButton(false); verify(deleteButtonWidget).setVisible(false); } @Test public void buttonCancelShouldBeVisible() { view.setVisibleCancelButton(true); verify(cancelButtonWidget).setVisible(true); } @Test public void buttonCancelShouldNotBeVisible() { view.setVisibleCancelButton(false); verify(cancelButtonWidget).setVisible(false); } @Test public void scriptUrlShouldBeReturned() throws Exception { view.getScriptUrl(); verify(view.scriptUrl).getText(); } @Test public void editorShouldBeShowed() throws Exception { view.showEditor(editor); verify(editor).go(view.editorPanel); } @Test public void saveAndCancelButtonsShouldBeEnabledIfTagsAreChanging() throws Exception { KeyUpEvent keyUpEvent = mock(KeyUpEvent.class); view.onTextInputted(keyUpEvent); verify(cancelButtonWidget).setEnable(true); verify(saveButtonWidget).setEnable(true); } @Test public void buttonsPanelShouldBeHided() throws Exception { view.hideButtonsPanel(); verify(view.recipePanel).setWidgetHidden(view.buttonsPanel, true); } @Test public void tagsShouldBeReturned1() throws Exception { String tags = "t1 t2 t3"; when(view.tags.getText()).thenReturn(tags); List<String> actualTags = view.getTags(); assertTrue(actualTags.contains("t1")); assertTrue(actualTags.contains("t2")); assertTrue(actualTags.contains("t3")); assertEquals(3, actualTags.size()); } @Test public void tagsShouldBeReturned2() throws Exception { String tags = " "; when(view.tags.getText()).thenReturn(tags); List<String> actualTags = view.getTags(); assertTrue(actualTags.isEmpty()); } @Test public void tagsShouldBeReturned3() throws Exception { String tags = "t1"; when(view.tags.getText()).thenReturn(tags); List<String> actualTags = view.getTags(); assertTrue(actualTags.contains("t1")); assertEquals(1, actualTags.size()); } }