/*******************************************************************************
* 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.command.valueproviders;
import com.google.web.bindery.event.shared.EventBus;
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.promises.client.Operation;
import org.eclipse.che.api.promises.client.Promise;
import org.eclipse.che.api.workspace.shared.dto.ProjectConfigDto;
import org.eclipse.che.ide.api.app.AppContext;
import org.eclipse.che.ide.api.app.CurrentProject;
import org.eclipse.che.ide.api.event.project.CloseCurrentProjectEvent;
import org.eclipse.che.ide.api.event.project.ProjectReadyEvent;
import org.eclipse.che.ide.extension.machine.client.machine.events.MachineStateEvent;
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.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/** @author Artem Zatsarynnyi */
@RunWith(MockitoJUnitRunner.class)
public class CurrentProjectPathProviderTest {
private static final String PROJECTS_ROOT = "/projects";
private static final String PROJECT_PATH = "/my_project";
@Mock
private EventBus eventBus;
@Mock
private AppContext appContext;
@Mock
private MachineServiceClient machineServiceClient;
@InjectMocks
private CurrentProjectPathProvider currentProjectPathProvider;
@Mock
private Promise<MachineDto> machinePromise;
@Captor
private ArgumentCaptor<Operation<MachineDto>> machineCaptor;
@Before
public void setUp() {
CurrentProject currentProjectMock = mock(CurrentProject.class);
when(appContext.getCurrentProject()).thenReturn(currentProjectMock);
ProjectConfigDto projectConfig = mock(ProjectConfigDto.class);
when(projectConfig.getPath()).thenReturn(PROJECT_PATH);
when(currentProjectMock.getProjectConfig()).thenReturn(projectConfig);
}
@Test
public void shouldBeRegisteredOnEventBus() throws Exception {
verify(eventBus).addHandler(MachineStateEvent.TYPE, currentProjectPathProvider);
verify(eventBus).addHandler(ProjectReadyEvent.TYPE, currentProjectPathProvider);
}
@Test
public void shouldReturnEmptyValueAfterClosingProject() throws Exception {
currentProjectPathProvider.onCloseCurrentProject(mock(CloseCurrentProjectEvent.class));
assertTrue(currentProjectPathProvider.getValue().isEmpty());
}
@Test
public void shouldReturnPathAfterRunningMachine() throws Exception {
MachineStateDto machineMock = mock(MachineStateDto.class);
MachineStateEvent machineStateEvent = mock(MachineStateEvent.class);
CurrentProject currentProject = mock(CurrentProject.class);
ProjectConfigDto projectConfig = mock(ProjectConfigDto.class);
when(appContext.getCurrentProject()).thenReturn(currentProject);
when(currentProject.getProjectConfig()).thenReturn(projectConfig);
when(machineMock.isDev()).thenReturn(Boolean.TRUE);
when(machineStateEvent.getMachineState()).thenReturn(machineMock);
when(machineMock.isDev()).thenReturn(true);
currentProjectPathProvider.onMachineRunning(machineStateEvent);
verify(appContext, times(2)).getCurrentProject();
verify(currentProject).getProjectConfig();
verify(projectConfig).getPath();
}
@Test
public void shouldReturnEmptyValueAfterDestroyingMachine() throws Exception {
final MachineStateDto machineMock = mock(MachineStateDto.class);
when(machineMock.isDev()).thenReturn(Boolean.FALSE);
final MachineStateEvent machineStateEvent = mock(MachineStateEvent.class);
when(machineStateEvent.getMachineState()).thenReturn(machineMock);
currentProjectPathProvider.onMachineDestroyed(machineStateEvent);
assertTrue(currentProjectPathProvider.getValue().isEmpty());
}
}