/*******************************************************************************
* Copyright (c) 2012-2017 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.workspace.create;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwtmockito.GwtMockitoTestRunner;
import org.eclipse.che.api.machine.shared.dto.recipe.RecipeDescriptor;
import org.eclipse.che.ide.CoreLocalizationConstant;
import org.eclipse.che.ide.workspace.WorkspaceWidgetFactory;
import org.eclipse.che.ide.workspace.create.CreateWorkspaceView.ActionDelegate;
import org.eclipse.che.ide.workspace.create.CreateWorkspaceView.HidePopupCallBack;
import org.eclipse.che.ide.workspace.create.recipewidget.RecipeWidget;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Matchers;
import org.mockito.Mock;
import java.util.Arrays;
import java.util.List;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Answers.RETURNS_DEEP_STUBS;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* @author Dmitry Shnurenko
*/
@RunWith(GwtMockitoTestRunner.class)
public class CreateWorkspaceViewImplTest {
//constructor mocks
@Mock
private CoreLocalizationConstant locale;
@Mock(answer = RETURNS_DEEP_STUBS)
private org.eclipse.che.ide.Resources resources;
@Mock
private FlowPanel tagsPanel;
@Mock
private WorkspaceWidgetFactory tagFactory;
@Mock
private PopupPanel popupPanel;
//additional mocks
@Mock
private RecipeDescriptor descriptor;
@Mock
private RecipeWidget tag;
@Mock
private ActionDelegate delegate;
@Mock
private KeyUpEvent keyUpEvent;
@Mock
private ClickEvent clickEvent;
@InjectMocks
private CreateWorkspaceViewImpl view;
@Before
public void setUp() {
view.setDelegate(delegate);
}
@Test
public void popupPanelShouldBeSettingUp() {
verify(resources.coreCss()).createWsTagsPopup();
}
@Test
public void nameShouldBeSet() {
verify(view.wsName).setText(anyString());
verify(locale).createWsDefaultName();
}
@Test
public void placeholdersShouldBeSet() {
verify(locale).placeholderChoosePredefined();
verify(locale).placeholderInputRecipeUrl();
verify(locale).placeholderFindByTags();
}
@Test
public void workspaceNameShouldBeSet() {
view.setWorkspaceName("test");
verify(view.wsName).setText("test");
}
@Test
public void recipeUrlShouldBeReturned() {
view.getRecipeUrl();
verify(view.recipeURL).getText();
}
@Test
public void tagsShouldBeReturned() {
when(view.tags.getValue()).thenReturn("test test ");
List<String> tags = view.getTags();
assertThat("test", is(equalTo(tags.get(0))));
}
@Test
public void workspaceNameShouldBeReturned() {
view.getWorkspaceName();
verify(view.wsName).getText();
}
@Test
public void recipesShouldBeShown() {
when(tagFactory.create(descriptor)).thenReturn(tag);
view.showFoundByTagRecipes(Arrays.asList(descriptor));
verify(tagsPanel).clear();
verify(tagFactory).create(descriptor);
verify(tag).setDelegate(view);
verify(view.tags).getAbsoluteLeft();
verify(view.tags).getAbsoluteTop();
verify(view.tags).getOffsetHeight();
}
@Test
public void predefinedRecipesShouldBeShown() {
when(tagFactory.create(descriptor)).thenReturn(tag);
view.showPredefinedRecipes(Arrays.asList(descriptor));
verify(view.predefinedRecipes).getAbsoluteLeft();
verify(view.predefinedRecipes).getAbsoluteTop();
verify(view.predefinedRecipes).getOffsetHeight();
}
@Test
public void predefinedRecipeShouldBeSelected() {
when(tag.getRecipeUrl()).thenReturn("url");
when(tag.getTagName()).thenReturn("tag_name");
view.onPredefineRecipesClicked(clickEvent);
view.onTagClicked(tag);
verify(tag).getRecipeUrl();
verify(view.recipeURL).setText("url");
verify(view.predefinedRecipes).setText("tag_name");
verify(view.tags).setText("");
verify(delegate).onRecipeUrlChanged();
}
@Test
public void recipeFoundViaTagShouldBeSelected() {
when(tag.getRecipeUrl()).thenReturn("url");
when(tag.getTagName()).thenReturn("tag_name");
view.onTagsChanged(keyUpEvent);
view.onTagClicked(tag);
verify(tag).getRecipeUrl();
verify(view.recipeURL).setText("url");
verify(view.predefinedRecipes).setText("");
verify(view.tags).setText("");
verify(delegate).onRecipeUrlChanged();
}
@Test
public void urlErrorVisibilityShouldBeChanged() {
view.setVisibleUrlError(true);
verify(view.recipeUrlError).setVisible(true);
}
@Test
public void tagsErrorVisibilityShouldBeChanged() {
view.setVisibleTagsError(true);
verify(view.tagsError).setVisible(true);
}
@Test
public void nameErrorShouldBeShown() {
view.showValidationNameError("error");
verify(view.nameError).setVisible(true);
verify(view.nameError).setText("error");
}
@Test
public void nameErrorShouldNotBeShown() {
view.showValidationNameError("");
verify(view.nameError).setVisible(false);
verify(view.nameError).setText("");
}
@Test
public void tagsShouldBeChanged() {
when(view.tags.getText()).thenReturn("test");
view.onTagsChanged(keyUpEvent);
verify(view.tags).getText();
verify(view.tagsError).setVisible(true);
verify(delegate).onTagsChanged(Matchers.<HidePopupCallBack>anyObject());
}
@Test
public void onTagsTextBoxShouldBeClicked() {
when(view.tags.getText()).thenReturn("test");
view.onTagsClicked(clickEvent);
verify(view.tags).getText();
verify(view.tagsError).setVisible(true);
verify(delegate).onTagsChanged(Matchers.<HidePopupCallBack>anyObject());
}
@Test
public void recipeUrlShouldBeChanged() {
view.onRecipeUrlChanged(keyUpEvent);
verify(delegate).onRecipeUrlChanged();
}
@Test
public void workspaceNameShouldBeChanged() {
view.onWorkspaceNameChanged(keyUpEvent);
verify(delegate).onNameChanged();
}
@Test
public void predefinedRecipeShouldBeClicked() {
view.onPredefineRecipesClicked(clickEvent);
verify(delegate).onPredefinedRecipesClicked();
}
}