/******************************************************************************* * 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.ext.java.client.refactoring.rename.wizard; import com.google.gwtmockito.GwtMockitoTestRunner; import com.google.web.bindery.event.shared.EventBus; import org.eclipse.che.api.promises.client.Function; import org.eclipse.che.api.promises.client.FunctionException; import org.eclipse.che.api.promises.client.Operation; import org.eclipse.che.api.promises.client.OperationException; import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.api.promises.client.PromiseError; 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.editor.EditorAgent; import org.eclipse.che.ide.api.editor.EditorInput; import org.eclipse.che.ide.api.editor.EditorPartPresenter; import org.eclipse.che.ide.api.notification.NotificationManager; import org.eclipse.che.ide.api.notification.StatusNotification; import org.eclipse.che.ide.api.project.tree.VirtualFile; import org.eclipse.che.ide.dto.DtoFactory; import org.eclipse.che.ide.ext.java.client.JavaLocalizationConstant; import org.eclipse.che.ide.ext.java.client.project.node.JavaFileNode; import org.eclipse.che.ide.ext.java.client.project.node.PackageNode; import org.eclipse.che.ide.ext.java.client.refactoring.RefactorInfo; import org.eclipse.che.ide.ext.java.client.refactoring.RefactoringUpdater; import org.eclipse.che.ide.ext.java.client.refactoring.move.MoveType; import org.eclipse.che.ide.ext.java.client.refactoring.move.RefactoredItemType; import org.eclipse.che.ide.ext.java.client.refactoring.preview.PreviewPresenter; import org.eclipse.che.ide.ext.java.client.refactoring.rename.wizard.similarnames.SimilarNamesConfigurationPresenter; import org.eclipse.che.ide.ext.java.client.refactoring.service.RefactoringServiceClient; import org.eclipse.che.ide.ext.java.shared.dto.refactoring.ChangeCreationResult; import org.eclipse.che.ide.ext.java.shared.dto.refactoring.ChangeInfo; import org.eclipse.che.ide.ext.java.shared.dto.refactoring.CreateRenameRefactoring; import org.eclipse.che.ide.ext.java.shared.dto.refactoring.RefactoringResult; import org.eclipse.che.ide.ext.java.shared.dto.refactoring.RefactoringSession; import org.eclipse.che.ide.ext.java.shared.dto.refactoring.RefactoringStatus; import org.eclipse.che.ide.ext.java.shared.dto.refactoring.RefactoringStatusEntry; import org.eclipse.che.ide.ext.java.shared.dto.refactoring.RenameRefactoringSession; import org.eclipse.che.ide.ext.java.shared.dto.refactoring.RenameSettings; import org.eclipse.che.ide.jseditor.client.texteditor.TextEditor; import org.eclipse.che.ide.part.explorer.project.ProjectExplorerPresenter; import org.eclipse.che.ide.ui.dialogs.CancelCallback; import org.eclipse.che.ide.ui.dialogs.ConfirmCallback; import org.eclipse.che.ide.ui.dialogs.DialogFactory; import org.eclipse.che.ide.ui.dialogs.confirm.ConfirmDialog; import org.eclipse.che.ide.ui.loaders.request.LoaderFactory; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Matchers; import org.mockito.Mock; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.NavigableMap; import java.util.TreeMap; import static org.eclipse.che.ide.ext.java.shared.dto.refactoring.CreateRenameRefactoring.RenameType.COMPILATION_UNIT; import static org.eclipse.che.ide.ext.java.shared.dto.refactoring.CreateRenameRefactoring.RenameType.JAVA_ELEMENT; import static org.eclipse.che.ide.ext.java.shared.dto.refactoring.CreateRenameRefactoring.RenameType.PACKAGE; 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.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(GwtMockitoTestRunner.class) public class RenamePresenterTest { private final static String PROJECT_PATH = "projectPath"; private final static String SESSION_ID = "sessionId"; private final static String TEXT = "text.text"; //variables for constructor @Mock private RenameView view; @Mock private SimilarNamesConfigurationPresenter similarNamesConfigurationPresenter; @Mock private JavaLocalizationConstant locale; @Mock private EventBus eventBus; @Mock private ProjectExplorerPresenter projectExplorer; @Mock private EditorAgent editorAgent; @Mock private RefactoringUpdater refactoringUpdater; @Mock private NotificationManager notificationManager; @Mock private AppContext appContext; @Mock private PreviewPresenter previewPresenter; @Mock private DtoFactory dtoFactory; @Mock private RefactoringServiceClient refactorService; @Mock private LoaderFactory loaderFactory; @Mock private JavaFileNode javaFileNode; @Mock private TextEditor activeEditor; @Mock private PackageNode packageNode; @Mock private RefactoringSession refactoringSession; @Mock private RenameSettings renameSettings; @Mock private RefactoringResult refactoringStatus; @Mock private CreateRenameRefactoring createRenameRefactoringDto; @Mock private CurrentProject currentProject; @Mock private ProjectConfigDto projectConfig; @Mock private PromiseError promiseError; @Mock private ChangeCreationResult changeCreationResult; @Mock private RenameRefactoringSession session; @Mock private DialogFactory dialogFactory; @Mock private Promise<RenameRefactoringSession> renameRefactoringSessionPromise; @Mock private Promise<Void> renameSettingsPromise; @Mock private Promise<ChangeCreationResult> changeCreationResultPromise; @Mock private Promise<RefactoringResult> refactoringStatusPromise; @Captor private ArgumentCaptor<Operation<RenameRefactoringSession>> renameRefactoringSessionCaptor; @Captor private ArgumentCaptor<Operation<PromiseError>> promiseErrorCaptor; @Captor private ArgumentCaptor<Function<Void, Promise<ChangeCreationResult>>> renameSettingsPromiseCaptor; @Captor private ArgumentCaptor<Operation<ChangeCreationResult>> changeCreationResultCaptor; @Captor private ArgumentCaptor<Operation<RefactoringResult>> refactoringStatusCaptor; private RenamePresenter renamePresenter; private RefactorInfo refactorInfo; @Before public void setUp() throws Exception { when(editorAgent.getActiveEditor()).thenReturn(activeEditor); when(dtoFactory.createDto(CreateRenameRefactoring.class)).thenReturn(createRenameRefactoringDto); when(dtoFactory.createDto(RefactoringSession.class)).thenReturn(refactoringSession); when(dtoFactory.createDto(RenameSettings.class)).thenReturn(renameSettings); when(refactoringSession.getSessionId()).thenReturn(SESSION_ID); when(appContext.getCurrentProject()).thenReturn(currentProject); when(currentProject.getProjectConfig()).thenReturn(projectConfig); when(javaFileNode.getParent()).thenReturn(javaFileNode); when(javaFileNode.getName()).thenReturn(TEXT); when(promiseError.getMessage()).thenReturn(TEXT); when(session.getOldName()).thenReturn(TEXT); when(projectConfig.getPath()).thenReturn(PROJECT_PATH); when(session.getSessionId()).thenReturn(SESSION_ID); when(refactorService.createRenameRefactoring(createRenameRefactoringDto)).thenReturn(renameRefactoringSessionPromise); List<?> selectedElements = Collections.singletonList(javaFileNode); refactorInfo = RefactorInfo.of(MoveType.REFACTOR_MENU, RefactoredItemType.COMPILATION_UNIT, selectedElements); when(session.getWizardType()).thenReturn(RenameRefactoringSession.RenameWizard.LOCAL_VARIABLE); when(renameRefactoringSessionPromise.then(Matchers.<Operation<RenameRefactoringSession>>anyObject())) .thenReturn(renameRefactoringSessionPromise); when(view.isUpdateDelegateUpdating()).thenReturn(true); when(view.isUpdateQualifiedNames()).thenReturn(true); when(view.isUpdateSimilarlyVariables()).thenReturn(true); when(similarNamesConfigurationPresenter.getMachStrategy()).thenReturn(RenameSettings.MachStrategy.SUFFIX); when(refactorService.setRenameSettings(renameSettings)).thenReturn(renameSettingsPromise); when(renameSettingsPromise.thenPromise(Matchers.<Function<Void, Promise<ChangeCreationResult>>>any())) .thenReturn(changeCreationResultPromise); when(refactorService.createChange(refactoringSession)).thenReturn(changeCreationResultPromise); when(changeCreationResultPromise.then(Matchers.<Operation<ChangeCreationResult>>any())).thenReturn(changeCreationResultPromise); when(changeCreationResultPromise.catchError(Matchers.<Operation<PromiseError>>anyObject())).thenReturn(changeCreationResultPromise); when(refactorService.applyRefactoring(refactoringSession)).thenReturn(refactoringStatusPromise); when(changeCreationResult.getStatus()).thenReturn(refactoringStatus); renamePresenter = new RenamePresenter(view, similarNamesConfigurationPresenter, locale, editorAgent, refactoringUpdater, appContext, notificationManager, previewPresenter, refactorService, dtoFactory, dialogFactory); } @Test public void wizardShouldNotBeShowIfRenameRefactoringObjectWasNotCreated() throws Exception { List<?> selectedElements = Collections.singletonList(javaFileNode); RefactorInfo refactorInfo = RefactorInfo.of(MoveType.REFACTOR_MENU, RefactoredItemType.COMPILATION_UNIT, selectedElements); renamePresenter.show(refactorInfo); verify(createRenameRefactoringDto).setRefactorLightweight(false); verify(createRenameRefactoringDto).setPath(anyString()); verify(createRenameRefactoringDto).setType(COMPILATION_UNIT); verify(createRenameRefactoringDto).setProjectPath(PROJECT_PATH); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).catchError(promiseErrorCaptor.capture()); promiseErrorCaptor.getValue().apply(promiseError); verify(notificationManager).notify(anyString(), anyString(), any(StatusNotification.Status.class), anyBoolean()); } @Test public void renameCompilationUnitWizardShouldBeShowCompilationUnit() throws Exception { when(session.getWizardType()).thenReturn(RenameRefactoringSession.RenameWizard.COMPILATION_UNIT); renamePresenter.show(refactorInfo); verifyPreparingRenameRefactoringDto(); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); verifyPreparingWizard(); verify(locale).renameCompilationUnitTitle(); verify(view).setTitle(anyString()); verify(view).setVisiblePatternsPanel(true); verify(view).setVisibleFullQualifiedNamePanel(true); verify(view).setVisibleSimilarlyVariablesPanel(true); verify(view).show(); } @Test public void renamePackageWizardShouldBeShow() throws Exception { when(session.getWizardType()).thenReturn(RenameRefactoringSession.RenameWizard.PACKAGE); renamePresenter.show(refactorInfo); verifyPreparingRenameRefactoringDto(); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); verifyPreparingWizard(); verify(locale).renamePackageTitle(); verify(view).setTitle(anyString()); verify(view).setVisiblePatternsPanel(true); verify(view).setVisibleFullQualifiedNamePanel(true); verify(view).setVisibleRenameSubpackagesPanel(true); verify(view).show(); } @Test public void renameTypeWizardShouldBeShow() throws Exception { when(session.getWizardType()).thenReturn(RenameRefactoringSession.RenameWizard.TYPE); renamePresenter.show(refactorInfo); verifyPreparingRenameRefactoringDto(); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); verifyPreparingWizard(); verify(locale).renameTypeTitle(); verify(view).setTitle(anyString()); verify(view).setVisiblePatternsPanel(true); verify(view).setVisibleFullQualifiedNamePanel(true); verify(view).setVisibleSimilarlyVariablesPanel(true); verify(view).show(); } @Test public void renameFieldWizardShouldBeShow() throws Exception { when(session.getWizardType()).thenReturn(RenameRefactoringSession.RenameWizard.FIELD); renamePresenter.show(refactorInfo); verifyPreparingRenameRefactoringDto(); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); verifyPreparingWizard(); verify(locale).renameFieldTitle(); verify(view).setTitle(anyString()); verify(view).setVisiblePatternsPanel(true); verify(view).show(); } @Test public void renameEnumConstantWizardShouldBeShow() throws Exception { when(session.getWizardType()).thenReturn(RenameRefactoringSession.RenameWizard.ENUM_CONSTANT); renamePresenter.show(refactorInfo); verifyPreparingRenameRefactoringDto(); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); verifyPreparingWizard(); verify(locale).renameEnumTitle(); verify(view).setTitle(anyString()); verify(view).setVisiblePatternsPanel(true); verify(view).show(); } @Test public void renameTypeParameterWizardShouldBeShow() throws Exception { when(session.getWizardType()).thenReturn(RenameRefactoringSession.RenameWizard.TYPE_PARAMETER); renamePresenter.show(refactorInfo); verifyPreparingRenameRefactoringDto(); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); verifyPreparingWizard(); verify(locale).renameTypeVariableTitle(); verify(view).setTitle(anyString()); verify(view).show(); } @Test public void renameMethodWizardShouldBeShow() throws Exception { when(session.getWizardType()).thenReturn(RenameRefactoringSession.RenameWizard.METHOD); renamePresenter.show(refactorInfo); verifyPreparingRenameRefactoringDto(); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); verifyPreparingWizard(); verify(locale).renameMethodTitle(); verify(view).setTitle(anyString()); verify(view).setVisibleKeepOriginalPanel(true); verify(view).show(); } @Test public void renameLocalVariableWizardShouldBeShow() throws Exception { renamePresenter.show(refactorInfo); verifyPreparingRenameRefactoringDto(); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); verifyPreparingWizard(); verify(locale).renameLocalVariableTitle(); verify(view).setTitle(anyString()); verify(view).show(); } @Test public void renameLocalVariableWizardShouldBeShowedIfRefactoringInfoIsNull() throws Exception { TextEditor editorPartPresenter = mock(TextEditor.class); EditorInput editorInput = mock(EditorInput.class); VirtualFile virtualFile = mock(VirtualFile.class); when(editorAgent.getActiveEditor()).thenReturn(editorPartPresenter); when(editorPartPresenter.getEditorInput()).thenReturn(editorInput); when(editorPartPresenter.getCursorOffset()).thenReturn(2); when(editorInput.getFile()).thenReturn(virtualFile); when(virtualFile.getName()).thenReturn(TEXT); renamePresenter.show((RefactorInfo)null); verify(createRenameRefactoringDto).setType(JAVA_ELEMENT); verify(createRenameRefactoringDto).setPath(anyString()); verify(createRenameRefactoringDto).setOffset(2); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); verifyPreparingWizard(); verify(locale).renameLocalVariableTitle(); verify(view).setTitle(anyString()); verify(view).show(); } @Test public void renameProjectWizardShouldBeShowAsCompilationUnit() throws Exception { List<?> selectedElements = Collections.singletonList(packageNode); refactorInfo = RefactorInfo.of(MoveType.REFACTOR_MENU, RefactoredItemType.COMPILATION_UNIT, selectedElements); when(session.getWizardType()).thenReturn(RenameRefactoringSession.RenameWizard.COMPILATION_UNIT); when(packageNode.getStorablePath()).thenReturn(TEXT); renamePresenter.show(refactorInfo); verify(createRenameRefactoringDto).setType(PACKAGE); verify(createRenameRefactoringDto).setPath(TEXT); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); verifyPreparingWizard(); verify(locale).renameCompilationUnitTitle(); verify(view).setTitle(anyString()); verify(view).show(); } private void verifyPreparingWizard() { verify(view).clearErrorLabel(); verify(view).setOldName(TEXT); verify(view).setEnableAcceptButton(false); verify(view).setEnablePreviewButton(false); verify(view).setVisiblePatternsPanel(false); verify(view).setVisibleFullQualifiedNamePanel(false); verify(view).setVisibleKeepOriginalPanel(false); verify(view).setVisibleRenameSubpackagesPanel(false); verify(view).setVisibleSimilarlyVariablesPanel(false); } private void verifyPreparingRenameRefactoringDto() { verify(createRenameRefactoringDto).setRefactorLightweight(false); verify(createRenameRefactoringDto).setPath(anyString()); verify(createRenameRefactoringDto).setType(COMPILATION_UNIT); verify(createRenameRefactoringDto).setProjectPath(PROJECT_PATH); } @Test public void changesShouldNotBeAppliedAndShowErrorMessage() throws Exception { RefactoringStatus refactoringStatus = mock(RefactoringStatus.class); when(refactoringStatus.getSeverity()).thenReturn(4); when(changeCreationResult.isCanShowPreviewPage()).thenReturn(false); when(changeCreationResult.getStatus()).thenReturn(refactoringStatus); renamePresenter.show(refactorInfo); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); renamePresenter.onAcceptButtonClicked(); verify(refactoringSession).setSessionId(SESSION_ID); verifyPreparingRenameSettingsDto(); verifyPreparingRenameChanges(); verify(changeCreationResultPromise).then(changeCreationResultCaptor.capture()); changeCreationResultCaptor.getValue().apply(changeCreationResult); verify(view).showErrorMessage(any()); } @Test public void changesShouldNotBeAppliedAndShowNotificationMessage() throws Exception { renamePresenter.show(refactorInfo); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); renamePresenter.onAcceptButtonClicked(); verify(refactoringSession).setSessionId(SESSION_ID); verifyPreparingRenameSettingsDto(); verifyPreparingRenameChanges(); verify(changeCreationResultPromise).catchError(promiseErrorCaptor.capture()); promiseErrorCaptor.getValue().apply(promiseError); verify(promiseError).getMessage(); verify(notificationManager).notify(anyString(), anyString(), any(StatusNotification.Status.class), anyBoolean()); } @Test public void changesShouldBeAppliedWithOkStatus() throws Exception { List<ChangeInfo> changes = new ArrayList<>(); when(refactoringStatus.getChanges()).thenReturn(changes); when(changeCreationResult.isCanShowPreviewPage()).thenReturn(true); when(refactoringStatus.getSeverity()).thenReturn(0); EditorPartPresenter openEditor = mock(EditorPartPresenter.class); NavigableMap<String, EditorPartPresenter> openEditors = new TreeMap<>(); EditorInput editorInput = mock(EditorInput.class); VirtualFile virtualFile = mock(VirtualFile.class); openEditors.put(TEXT, openEditor); when(editorAgent.getOpenedEditors()).thenReturn(openEditors); when(openEditor.getEditorInput()).thenReturn(editorInput); when(editorInput.getFile()).thenReturn(virtualFile); when(virtualFile.getPath()).thenReturn(TEXT); renamePresenter.show(refactorInfo); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); renamePresenter.onAcceptButtonClicked(); verify(refactoringSession).setSessionId(SESSION_ID); verifyPreparingRenameSettingsDto(); verifyPreparingRenameChanges(); verify(changeCreationResultPromise).then(changeCreationResultCaptor.capture()); changeCreationResultCaptor.getValue().apply(changeCreationResult); verify(refactorService).applyRefactoring(refactoringSession); verify(refactoringStatusPromise).then(refactoringStatusCaptor.capture()); refactoringStatusCaptor.getValue().apply(refactoringStatus); verify(refactoringStatus, times(2)).getSeverity(); verify(view).hide(); verify(refactoringUpdater).updateAfterRefactoring(refactorInfo, changes); } @Test public void changesShouldBeAppliedWithNotErrorStatus() throws Exception { when(changeCreationResult.isCanShowPreviewPage()).thenReturn(true); when(refactoringStatus.getSeverity()).thenReturn(0); EditorPartPresenter openEditor = mock(EditorPartPresenter.class); NavigableMap<String, EditorPartPresenter> openEditors = new TreeMap<>(); EditorInput editorInput = mock(EditorInput.class); VirtualFile virtualFile = mock(VirtualFile.class); openEditors.put(TEXT, openEditor); when(editorAgent.getOpenedEditors()).thenReturn(openEditors); when(openEditor.getEditorInput()).thenReturn(editorInput); when(editorInput.getFile()).thenReturn(virtualFile); when(virtualFile.getPath()).thenReturn(TEXT); renamePresenter.show(refactorInfo); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); renamePresenter.onAcceptButtonClicked(); verify(refactoringSession).setSessionId(SESSION_ID); verifyPreparingRenameSettingsDto(); verifyPreparingRenameChanges(); verify(changeCreationResultPromise).then(changeCreationResultCaptor.capture()); changeCreationResultCaptor.getValue().apply(changeCreationResult); verify(refactorService).applyRefactoring(refactoringSession); verify(refactoringStatusPromise).then(refactoringStatusCaptor.capture()); refactoringStatusCaptor.getValue().apply(refactoringStatus); verify(view).hide(); verify(refactoringUpdater).updateAfterRefactoring(eq(refactorInfo), Matchers.<List<ChangeInfo>>anyObject()); } @Test public void previewPageIsNotReadyAndShowErrorMessage() throws Exception { when(changeCreationResult.isCanShowPreviewPage()).thenReturn(false); when(changeCreationResult.getStatus()).thenReturn(refactoringStatus); when(refactoringStatus.getSeverity()).thenReturn(4); renamePresenter.show(refactorInfo); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); renamePresenter.onPreviewButtonClicked(); verify(refactoringSession).setSessionId(SESSION_ID); verifyPreparingRenameSettingsDto(); verifyPreparingRenameChanges(); verify(changeCreationResultPromise).then(changeCreationResultCaptor.capture()); changeCreationResultCaptor.getValue().apply(changeCreationResult); verify(view).showErrorMessage(refactoringStatus); } @Test public void previewPageIsNotReadyAndShowNotificationMessage() throws Exception { renamePresenter.show(refactorInfo); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); renamePresenter.onPreviewButtonClicked(); verify(refactoringSession).setSessionId(SESSION_ID); verifyPreparingRenameSettingsDto(); verifyPreparingRenameChanges(); verify(changeCreationResultPromise).catchError(promiseErrorCaptor.capture()); promiseErrorCaptor.getValue().apply(promiseError); verify(promiseError).getMessage(); verify(notificationManager).notify(anyString(), anyString(), any(StatusNotification.Status.class), anyBoolean()); } @Test public void previewPageShouldBeShow() throws Exception { when(changeCreationResult.isCanShowPreviewPage()).thenReturn(true); when(refactoringStatus.getSeverity()).thenReturn(0); renamePresenter.show(refactorInfo); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); renamePresenter.onPreviewButtonClicked(); verify(refactoringSession).setSessionId(SESSION_ID); verifyPreparingRenameSettingsDto(); verifyPreparingRenameChanges(); verify(changeCreationResultPromise).then(changeCreationResultCaptor.capture()); changeCreationResultCaptor.getValue().apply(changeCreationResult); verify(view).hide(); verify(previewPresenter).show(SESSION_ID, refactorInfo); verify(previewPresenter).setTitle(anyString()); } @Test public void warningDialogShouldBeDisplayedWhenRefactoringPerformsWithWarning() throws OperationException { renamePresenter.show(session); ConfirmDialog dialog = mock(ConfirmDialog.class); RefactoringStatusEntry statusEntry = mock(RefactoringStatusEntry.class); List<RefactoringStatusEntry> entries = Arrays.asList(statusEntry); when(refactoringStatus.getEntries()).thenReturn(entries); when(refactoringStatus.getSeverity()).thenReturn(2); when(dialogFactory.createConfirmDialog(anyString(), anyString(), anyString(), anyString(), Matchers.<ConfirmCallback>anyObject(), Matchers.<CancelCallback>anyObject())).thenReturn(dialog); renamePresenter.onAcceptButtonClicked(); verify(changeCreationResultPromise).then(changeCreationResultCaptor.capture()); changeCreationResultCaptor.getValue().apply(changeCreationResult); verify(dialogFactory).createConfirmDialog(anyString(), anyString(), anyString(), anyString(), Matchers.<ConfirmCallback>anyObject(), Matchers.<CancelCallback>anyObject()); verify(dialog).show(); } @Test public void previewPageShouldNotBeShow() throws Exception { when(changeCreationResult.isCanShowPreviewPage()).thenReturn(false); when(refactoringStatus.getSeverity()).thenReturn(4); renamePresenter.show(refactorInfo); verify(refactorService).createRenameRefactoring(createRenameRefactoringDto); verify(renameRefactoringSessionPromise).then(renameRefactoringSessionCaptor.capture()); renameRefactoringSessionCaptor.getValue().apply(session); renamePresenter.onPreviewButtonClicked(); verify(refactoringSession).setSessionId(SESSION_ID); verifyPreparingRenameSettingsDto(); verifyPreparingRenameChanges(); verify(changeCreationResultPromise).then(changeCreationResultCaptor.capture()); changeCreationResultCaptor.getValue().apply(changeCreationResult); verify(view).showErrorMessage(any()); } @Test public void focusShouldBeSetAfterClosingTheEditor() throws Exception { renamePresenter.onCancelButtonClicked(); verify(activeEditor).setFocus(); } private void verifyPreparingRenameSettingsDto() { verify(renameSettings).setDelegateUpdating(true); verify(view, times(2)).isUpdateDelegateUpdating(); verify(renameSettings).setUpdateSubpackages(anyBoolean()); verify(view).isUpdateSubpackages(); verify(renameSettings).setUpdateReferences(anyBoolean()); verify(view).isUpdateReferences(); verify(renameSettings).setUpdateQualifiedNames(true); verify(view, times(2)).isUpdateQualifiedNames(); verify(renameSettings).setFilePatterns(anyString()); verify(renameSettings).setUpdateTextualMatches(anyBoolean()); verify(view).isUpdateTextualOccurrences(); verify(renameSettings).setUpdateSimilarDeclarations(true); verify(view, times(2)).isUpdateSimilarlyVariables(); verify(renameSettings).setMachStrategy(3); verify(similarNamesConfigurationPresenter).getMachStrategy(); } private void verifyPreparingRenameChanges() throws FunctionException { verify(refactorService).setRenameSettings(renameSettings); verify(renameSettingsPromise).thenPromise(renameSettingsPromiseCaptor.capture()); renameSettingsPromiseCaptor.getValue().apply(any()); verify(refactorService).createChange(refactoringSession); } }