/******************************************************************************* * 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.ext.git.client.add; import org.eclipse.che.api.promises.client.Operation; import org.eclipse.che.ide.api.machine.DevMachine; import org.eclipse.che.ide.api.resources.Container; import org.eclipse.che.ide.api.resources.File; import org.eclipse.che.ide.api.resources.Project; import org.eclipse.che.ide.api.resources.Resource; import org.eclipse.che.ide.ext.git.client.BaseTest; import org.eclipse.che.ide.ext.git.client.outputconsole.GitOutputConsole; import org.eclipse.che.ide.resource.Path; import org.junit.Test; import org.mockito.Mock; import static org.eclipse.che.ide.api.notification.StatusNotification.DisplayMode.FLOAT_MODE; import static org.eclipse.che.ide.api.notification.StatusNotification.Status.FAIL; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; /** * Testing {@link AddToIndexPresenter} functionality. * * @author Andrey Plotnikov * @author Vlad Zhukovskyi * @author Igor Vinokur */ public class AddToIndexPresenterTest extends BaseTest { private static final String MESSAGE = "message"; private static final String FOLDER_NAME = "folder name"; private static final String FILE_NAME = "file name"; @Mock private AddToIndexView view; @Mock private GitOutputConsole console; private AddToIndexPresenter presenter; @Override public void disarm() { super.disarm(); presenter = new AddToIndexPresenter(view, appContext, constant, gitOutputConsoleFactory, processesPanelPresenter, service, notificationManager); when(appContext.getResources()).thenReturn(new Resource[]{}); when(appContext.getDevMachine()).thenReturn(mock(DevMachine.class)); when(appContext.getRootProject()).thenReturn(mock(Project.class)); when(voidPromise.then(any(Operation.class))).thenReturn(voidPromise); when(voidPromise.catchError(any(Operation.class))).thenReturn(voidPromise); when(service.add(any(DevMachine.class), any(Path.class), anyBoolean(), any(Path[].class))).thenReturn(voidPromise); when(gitOutputConsoleFactory.create(anyString())).thenReturn(console); } @Test public void shouldSetFolderMessageToViewAndShowDialog() throws Exception { Container folder = mock(Container.class); when(folder.getName()).thenReturn(FOLDER_NAME); when(appContext.getResource()).thenReturn(folder); when(appContext.getResources()).thenReturn(new Resource[]{folder}); when(constant.addToIndexFolder(FOLDER_NAME)).thenReturn(MESSAGE); presenter.showDialog(); verify(constant).addToIndexFolder(eq(FOLDER_NAME)); verify(view).setMessage(eq(MESSAGE)); verify(view).setUpdated(eq(false)); verify(view).showDialog(); } @Test public void shouldSetFileMessageToViewAndShowDialog() throws Exception { File file = mock(File.class); when(file.getName()).thenReturn(FILE_NAME); when(appContext.getResource()).thenReturn(file); when(appContext.getResources()).thenReturn(new Resource[]{file}); when(constant.addToIndexFile(FILE_NAME)).thenReturn(MESSAGE); presenter.showDialog(); verify(constant).addToIndexFile(eq(FILE_NAME)); verify(view).setMessage(eq(MESSAGE)); verify(view).setUpdated(eq(false)); verify(view).showDialog(); } @Test public void shouldSetMultiSelectionMessageToViewAndShowDialog() throws Exception { File file1 = mock(File.class); File file2 = mock(File.class); when(file1.getName()).thenReturn(FILE_NAME + "1"); when(file2.getName()).thenReturn(FILE_NAME + "2"); when(appContext.getResource()).thenReturn(file2); when(appContext.getResources()).thenReturn(new Resource[]{file1, file2}); when(constant.addToIndexMultiSelect()).thenReturn(MESSAGE); presenter.showDialog(); verify(constant).addToIndexMultiSelect(); verify(view).setMessage(eq(MESSAGE)); verify(view).setUpdated(eq(false)); verify(view).showDialog(); } @Test public void shouldAddToIndexWhenAddButtonClicked() throws Exception { when(constant.addSuccess()).thenReturn(MESSAGE); presenter.onAddClicked(); verify(voidPromise).then(voidPromiseCaptor.capture()); voidPromiseCaptor.getValue().apply(null); verify(console).print(eq(MESSAGE)); verify(notificationManager).notify(MESSAGE); } @Test public void shouldPrintErrorWhenFailedAddToIndex() throws Exception { when(constant.addFailed()).thenReturn(MESSAGE); presenter.onAddClicked(); verify(voidPromise).catchError(promiseErrorCaptor.capture()); promiseErrorCaptor.getValue().apply(null); verify(console).printError(eq(MESSAGE)); verify(notificationManager).notify(eq(MESSAGE), eq(FAIL), eq(FLOAT_MODE)); } @Test public void testOnCancelClicked() throws Exception { presenter.onCancelClicked(); verify(view).close(); } }