/*******************************************************************************
* 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.projectimport.wizard;
import org.eclipse.che.api.core.model.project.ProjectConfig;
import org.eclipse.che.api.promises.client.Function;
import org.eclipse.che.api.promises.client.Operation;
import org.eclipse.che.api.promises.client.Promise;
import org.eclipse.che.ide.CoreLocalizationConstant;
import org.eclipse.che.ide.api.app.AppContext;
import org.eclipse.che.ide.api.project.MutableProjectConfig;
import org.eclipse.che.ide.api.project.wizard.ImportProjectNotificationSubscriberFactory;
import org.eclipse.che.ide.api.project.wizard.ProjectNotificationSubscriber;
import org.eclipse.che.ide.api.resources.Container;
import org.eclipse.che.ide.api.resources.Project;
import org.eclipse.che.ide.api.wizard.Wizard;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
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.verify;
import static org.mockito.Mockito.when;
/**
* @author Dmitry Shnurenko
* @author Vlad Zhukovskyi
*/
@RunWith(MockitoJUnitRunner.class)
public class ProjectImporterTest {
//constructors mocks
@Mock
private CoreLocalizationConstant localizationConstant;
@Mock
private ImportProjectNotificationSubscriberFactory subscriberFactory;
@Mock
private AppContext appContext;
@Mock
private ProjectResolver resolver;
//additional mocks
@Mock
private ProjectNotificationSubscriber subscriber;
@Mock
private MutableProjectConfig projectConfig;
@Mock
private MutableProjectConfig.MutableSourceStorage source;
@Mock
private Wizard.CompleteCallback completeCallback;
@Mock
private Container workspaceRoot;
@Mock
private Project.ProjectRequest importRequest;
@Mock
private Promise<Project> importPromise;
@Mock
private Project importedProject;
@Captor
private ArgumentCaptor<Function<Project, Promise<Project>>> importProjectCaptor;
private ProjectImporter importer;
@Before
public void setUp() {
when(appContext.getWorkspaceRoot()).thenReturn(workspaceRoot);
when(workspaceRoot.importProject()).thenReturn(importRequest);
when(importRequest.withBody(any(ProjectConfig.class))).thenReturn(importRequest);
when(importRequest.send()).thenReturn(importPromise);
when(importPromise.thenPromise(any(Function.class))).thenReturn(importPromise);
when(projectConfig.getPath()).thenReturn("/foo");
when(projectConfig.getSource()).thenReturn(source);
when(subscriberFactory.createSubscriber()).thenReturn(subscriber);
when(projectConfig.getSource()).thenReturn(source);
when(importPromise.catchErrorPromise(any(Function.class))).thenReturn(importPromise);
when(importPromise.then(any(Function.class))).thenReturn(importPromise);
when(importPromise.then(any(Operation.class))).thenReturn(importPromise);
importer = new ProjectImporter(localizationConstant,
subscriberFactory,
appContext,
resolver,
null,
null);
}
@Test
public void importShouldBeSuccessAndProjectStartsResolving() throws Exception {
importer.importProject(completeCallback, projectConfig);
verify(importPromise).thenPromise(importProjectCaptor.capture());
importProjectCaptor.getValue().apply(importedProject);
verify(subscriber).onSuccess();
verify(resolver).resolve(eq(importedProject));
}
}