/******************************************************************************* * 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.start; import com.google.gwt.core.client.Callback; import com.google.inject.Provider; import org.eclipse.che.api.core.model.workspace.WorkspaceStatus; import org.eclipse.che.api.workspace.shared.dto.WorkspaceConfigDto; import org.eclipse.che.api.workspace.shared.dto.WorkspaceDto; import org.eclipse.che.ide.context.BrowserAddress; import org.eclipse.che.ide.workspace.DefaultWorkspaceComponent; import org.eclipse.che.ide.workspace.WorkspaceComponent; import org.eclipse.che.ide.api.component.Component; import org.eclipse.che.ide.workspace.WorkspaceWidgetFactory; import org.eclipse.che.ide.workspace.create.CreateWorkspacePresenter; import org.eclipse.che.ide.workspace.start.workspacewidget.WorkspaceWidget; 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 org.mockito.runners.MockitoJUnitRunner; import java.util.Arrays; import java.util.List; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** * @author Dmitry Shnurenko */ @RunWith(MockitoJUnitRunner.class) public class StartWorkspacePresenterTest { //constructor mocks @Mock private StartWorkspaceView view; @Mock private Provider<WorkspaceComponent> wsComponentProvider; @Mock private WorkspaceWidgetFactory widgetFactory; @Mock private CreateWorkspacePresenter createWorkspacePresenter; @Mock private BrowserAddress browserAddress; //additional mocks @Mock private WorkspaceDto workspaceDto; @Mock private WorkspaceConfigDto workspaceConfigDto; @Mock private WorkspaceWidget widget; @Mock private DefaultWorkspaceComponent workspaceComponent; @Mock private Callback<Component, Exception> callback; @InjectMocks private StartWorkspacePresenter presenter; @Before public void setUp() throws Exception { when(workspaceDto.getConfig()).thenReturn(workspaceConfigDto); } @Test public void delegateShouldBeSet() { verify(view).setDelegate(presenter); } @Test public void dialogStartWorkspaceShouldBeShown() { when(browserAddress.getWorkspaceName()).thenReturn("test"); when(widgetFactory.create(workspaceDto)).thenReturn(widget); presenter.show(Arrays.asList(workspaceDto), callback); verify(browserAddress).getWorkspaceName(); verify(widgetFactory).create(workspaceDto); verify(widget).setDelegate(presenter); verify(view).addWorkspace(widget); verify(view).setWsName(anyString()); verify(view).show(); } @Test public void workspaceWithExistingNameShouldBeSelected() { when(browserAddress.getWorkspaceName()).thenReturn("test"); when(wsComponentProvider.get()).thenReturn(workspaceComponent); when(widgetFactory.create(workspaceDto)).thenReturn(widget); when(workspaceConfigDto.getName()).thenReturn("test"); presenter.show(Arrays.asList(workspaceDto), callback); presenter.onStartWorkspaceClicked(); verify(wsComponentProvider).get(); verify(workspaceComponent).startWorkspace(workspaceDto, callback); verify(view).hide(); } @Test public void onCreateWorkspaceButtonShouldBeClicked() { when(browserAddress.getWorkspaceName()).thenReturn("test"); when(widgetFactory.create(workspaceDto)).thenReturn(widget); presenter.show(Arrays.asList(workspaceDto), callback); presenter.onCreateWorkspaceClicked(); verify(view).hide(); verify(createWorkspacePresenter).show(Matchers.<List<WorkspaceDto>>anyObject(), eq(callback)); } @Test public void workspaceWidgetShouldBeSelected() { when(workspaceConfigDto.getDefaultEnv()).thenReturn("text"); presenter.onWorkspaceSelected(workspaceDto); verify(workspaceConfigDto).getDefaultEnv(); verify(view).setWsName("text"); verify(view).setEnableStartButton(true); verify(view, never()).hide(); } @Test public void workspaceShouldBeStartedWhenRunningWsWasSelected() { when(workspaceDto.getStatus()).thenReturn(WorkspaceStatus.RUNNING); when(workspaceConfigDto.getDefaultEnv()).thenReturn("test"); when(wsComponentProvider.get()).thenReturn(workspaceComponent); presenter.onWorkspaceSelected(workspaceDto); verify(wsComponentProvider).get(); verify(workspaceComponent).setCurrentWorkspace(eq(workspaceDto)); verify(view).hide(); } @Test public void selectedWorkspaceShouldBeStarted() { when(widgetFactory.create(workspaceDto)).thenReturn(widget); when(workspaceConfigDto.getDefaultEnv()).thenReturn("text"); when(browserAddress.getWorkspaceName()).thenReturn("test"); when(wsComponentProvider.get()).thenReturn(workspaceComponent); presenter.show(Arrays.asList(workspaceDto), callback); presenter.onWorkspaceSelected(workspaceDto); reset(workspaceDto); presenter.onStartWorkspaceClicked(); verify(wsComponentProvider).get(); verify(workspaceComponent).startWorkspace(workspaceDto, callback); verify(view).hide(); } }