/******************************************************************************* * 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; import com.google.gwt.core.client.Callback; import com.google.web.bindery.event.shared.EventBus; import org.eclipse.che.api.core.model.machine.MachineStatus; 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.MachineStateDto; import org.eclipse.che.api.promises.client.Operation; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.api.workspace.shared.dto.UsersWorkspaceDto; import org.eclipse.che.ide.api.app.AppContext; import org.eclipse.che.ide.core.Component; 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 java.util.Collections; import java.util.List; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** @author Artem Zatsarynny */ @RunWith(MockitoJUnitRunner.class) public class MachineComponentTest { private static final String DEV_MACHINE_ID = "id"; private static final String TEXT = "A horse, a horse! My kingdom for a horse! Richard III"; @Mock private MachineServiceClient machineServiceClient; @Mock private AppContext appContext; @Mock private MachineManager machineManager; @Mock private Callback<Component, Exception> componentCallback; @Mock private MachineStateDto machineStateDescriptor; @Mock private EventBus eventBus; @InjectMocks private MachineComponent machineComponent; @Mock private Promise<List<MachineStateDto>> machinesPromise; @Mock private UsersWorkspaceDto usersWorkspaceDto; @Captor private ArgumentCaptor<Operation<List<MachineStateDto>>> machinesCaptor; @Test public void shouldUseRunningDevMachine() throws Exception { when(machineServiceClient.getMachinesStates(anyString())).thenReturn(machinesPromise); when(machinesPromise.then(any(Operation.class))).thenReturn(machinesPromise); when(machineStateDescriptor.isDev()).thenReturn(true); when(machineStateDescriptor.getStatus()).thenReturn(MachineStatus.RUNNING); when(machineStateDescriptor.getId()).thenReturn(DEV_MACHINE_ID); when(appContext.getWorkspace()).thenReturn(usersWorkspaceDto); when(usersWorkspaceDto.getId()).thenReturn(TEXT); machineComponent.start(componentCallback); verify(machineServiceClient).getMachinesStates(anyString()); verify(machinesPromise).then(machinesCaptor.capture()); machinesCaptor.getValue().apply(Collections.singletonList(machineStateDescriptor)); verify(machineStateDescriptor).isDev(); verify(machineStateDescriptor).getStatus(); verify(appContext).setDevMachineId(eq(DEV_MACHINE_ID)); verify(machineManager).onMachineRunning(eq(DEV_MACHINE_ID)); verify(componentCallback).onSuccess(eq(machineComponent)); } @Test public void shouldTransmitControlToMachineManager() throws Exception { when(machineServiceClient.getMachinesStates(anyString())).thenReturn(machinesPromise); when(machinesPromise.then(any(Operation.class))).thenReturn(machinesPromise); when(machineStateDescriptor.isDev()).thenReturn(true); when(machineStateDescriptor.getStatus()).thenReturn(MachineStatus.CREATING); when(machineStateDescriptor.getId()).thenReturn(DEV_MACHINE_ID); when(appContext.getWorkspace()).thenReturn(usersWorkspaceDto); when(usersWorkspaceDto.getId()).thenReturn(TEXT); machineComponent.start(componentCallback); verify(machineServiceClient).getMachinesStates(anyString()); verify(machinesPromise).then(machinesCaptor.capture()); machinesCaptor.getValue().apply(Collections.singletonList(machineStateDescriptor)); verify(machineStateDescriptor).isDev(); verify(machineStateDescriptor).getStatus(); verify(componentCallback).onSuccess(eq(machineComponent)); } }