/******************************************************************************* * 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.machine.create; import org.eclipse.che.api.machine.gwt.client.MachineManager; import org.eclipse.che.api.machine.gwt.client.MachineServiceClient; import org.eclipse.che.api.machine.shared.dto.MachineDto; import org.eclipse.che.api.machine.shared.dto.MachineStateDto; import org.eclipse.che.api.project.gwt.client.ProjectTypeServiceClient; import org.eclipse.che.api.promises.client.Operation; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.ide.api.app.AppContext; import org.eclipse.che.ide.extension.machine.client.inject.factories.EntityFactory; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** @author Artem Zatsarynny */ @RunWith(MockitoJUnitRunner.class) public class CreateMachinePresenterTest { private final static String RECIPE_URL = "http://www.host.com/recipe"; private final static String MACHINE_NAME = "machine"; private final static String SOME_TEXT = "someText"; @Mock private CreateMachineView view; @Mock private MachineManager machineManager; @Mock private AppContext appContext; @Mock private ProjectTypeServiceClient projectTypeServiceClient; @Mock private MachineServiceClient machineServiceClient; @Mock private EntityFactory entityFactory; @InjectMocks private CreateMachinePresenter presenter; @Mock private Promise<MachineStateDto> machineDescriptorPromise; @Captor private ArgumentCaptor<Operation<MachineStateDto>> machineCaptor; @Before public void setUp() { when(view.getRecipeURL()).thenReturn(RECIPE_URL); when(view.getMachineName()).thenReturn(MACHINE_NAME); } @Test public void shouldSetActionDelegate() throws Exception { verify(view).setDelegate(presenter); } @Test public void viewShouldBeShown() throws Exception { presenter.showDialog(); verify(view).show(); verify(view).setCreateButtonState(false); verify(view).setReplaceButtonState(false); verify(view).setMachineName(""); verify(view).setRecipeURL(""); verify(view).setErrorHint(false); verify(view).setTags(""); } @Test public void buttonsShouldBeDisabledWhenNameIsEmpty() throws Exception { when(view.getMachineName()).thenReturn(""); presenter.onNameChanged(); verify(view).setCreateButtonState(eq(false)); verify(view).setReplaceButtonState(eq(false)); } @Test public void buttonsShouldBeEnabledWhenNameIsNotEmpty() throws Exception { presenter.onNameChanged(); verify(view).setCreateButtonState(eq(true)); verify(view).setReplaceButtonState(eq(true)); } @Test public void shouldCreateMachine() throws Exception { presenter.onCreateClicked(); verify(view).getRecipeURL(); verify(view).getMachineName(); verify(machineManager).startMachine(eq(RECIPE_URL), eq(MACHINE_NAME)); verify(view).close(); } @Test public void shouldReplaceDevMachine() throws Exception { when(appContext.getDevMachineId()).thenReturn(SOME_TEXT); when(machineServiceClient.getMachineState(SOME_TEXT)).thenReturn(machineDescriptorPromise); presenter.onReplaceDevMachineClicked(); verify(view).getMachineName(); verify(view).getRecipeURL(); verify(appContext, times(2)).getDevMachineId(); verify(machineServiceClient).getMachineState(SOME_TEXT); verify(machineDescriptorPromise).then(machineCaptor.capture()); machineCaptor.getValue().apply(mock(MachineDto.class)); verify(machineManager).destroyMachine(any(MachineStateDto.class)); verify(machineManager).startDevMachine(eq(RECIPE_URL), eq(MACHINE_NAME)); verify(view).close(); } @Test public void shouldStartNewDevMachine() throws Exception { when(appContext.getDevMachineId()).thenReturn(null); when(machineServiceClient.getMachineState(SOME_TEXT)).thenReturn(machineDescriptorPromise); presenter.onReplaceDevMachineClicked(); verify(view).getMachineName(); verify(view).getRecipeURL(); verify(appContext).getDevMachineId(); verify(machineManager).startDevMachine(eq(RECIPE_URL), eq(MACHINE_NAME)); verify(view).close(); verify(machineServiceClient, never()).getMachine(SOME_TEXT); verify(machineManager, never()).destroyMachine(any(MachineStateDto.class)); verify(machineManager).startDevMachine(eq(RECIPE_URL), eq(MACHINE_NAME)); } @Test public void shouldCloseView() throws Exception { presenter.onCancelClicked(); verify(view).close(); } }