/*******************************************************************************
* 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.ui.dialogs.input;
import org.eclipse.che.ide.api.dialogs.InputValidator;
import org.eclipse.che.ide.ui.UILocalizationConstant;
import org.eclipse.che.ide.ui.dialogs.BaseTest;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* Testing {@link InputDialogPresenter} functionality.
*
* @author Artem Zatsarynnyi
* @author Roman Nikitenko
*/
public class InputDialogPresenterTest extends BaseTest {
private static final String CORRECT_INPUT_VALUE = "testInputValue";
private static final String INCORRECT_INPUT_VALUE = "test input value";
private static final String ERROR_MESSAGE = "ERROR";
@Mock
UILocalizationConstant localizationConstant;
@Mock
private InputDialogView view;
private InputDialogPresenter presenter;
@Before
@Override
public void setUp() {
super.setUp();
presenter = new InputDialogPresenter(view, TITLE, MESSAGE, inputCallback, cancelCallback, localizationConstant);
}
@Test
public void shouldCallCallbackOnCanceled() throws Exception {
presenter.cancelled();
verify(view).closeDialog();
verify(cancelCallback).cancelled();
}
@Test
public void shouldNotCallCallbackOnCanceled() throws Exception {
presenter = new InputDialogPresenter(view, TITLE, MESSAGE, inputCallback, null, localizationConstant);
presenter.cancelled();
verify(view).closeDialog();
verify(cancelCallback, never()).cancelled();
}
@Test
public void shouldCallCallbackOnAccepted() throws Exception {
presenter.accepted();
verify(view).closeDialog();
verify(view).getValue();
verify(inputCallback).accepted(anyString());
}
@Test
public void shouldNotCallCallbackOnAccepted() throws Exception {
presenter = new InputDialogPresenter(view, TITLE, MESSAGE, null, cancelCallback, localizationConstant);
presenter.accepted();
verify(view).closeDialog();
verify(inputCallback, never()).accepted(anyString());
}
@Test
public void shouldShowView() throws Exception {
when(view.getValue()).thenReturn(CORRECT_INPUT_VALUE);
presenter.show();
verify(view).showDialog();
}
@Test
public void shouldShowErrorHintWhenEmptyValue() throws Exception {
reset(view);
when(view.getValue()).thenReturn("");
presenter.inputValueChanged();
verify(view).showErrorHint(eq(""));
verify(view, never()).hideErrorHint();
verify(view, never()).setValue(anyString());
}
@Test
public void shouldShowErrorHintWhenValueIsIncorrect() throws Exception {
reset(view);
when(view.getValue()).thenReturn(INCORRECT_INPUT_VALUE);
InputValidator inputValidator = mock(InputValidator.class);
InputValidator.Violation violation = mock(InputValidator.Violation.class);
when(inputValidator.validate(INCORRECT_INPUT_VALUE)).thenReturn(violation);
when(violation.getMessage()).thenReturn(ERROR_MESSAGE);
presenter.withValidator(inputValidator);
presenter.inputValueChanged();
verify(view).showErrorHint(anyString());
verify(view, never()).hideErrorHint();
verify(view, never()).setValue(anyString());
}
@Test
public void shouldNotShowErrorHintWhenViolationHasCorrectValue() throws Exception {
reset(view);
when(view.getValue()).thenReturn(INCORRECT_INPUT_VALUE);
InputValidator inputValidator = mock(InputValidator.class);
InputValidator.Violation violation = mock(InputValidator.Violation.class);
when(inputValidator.validate(INCORRECT_INPUT_VALUE)).thenReturn(violation);
when(violation.getMessage()).thenReturn(null);
when(violation.getCorrectedValue()).thenReturn(CORRECT_INPUT_VALUE);
presenter.withValidator(inputValidator);
presenter.inputValueChanged();
verify(view, never()).showErrorHint(anyString());
verify(view).hideErrorHint();
verify(view).setValue(eq(CORRECT_INPUT_VALUE));
}
@Test
public void onEnterClickedWhenOkButtonInFocus() throws Exception {
reset(view);
when(view.isOkButtonInFocus()).thenReturn(true);
presenter.onEnterClicked();
verify(view, never()).showErrorHint(anyString());
verify(view).closeDialog();
verify(inputCallback).accepted(anyString());
}
@Test
public void onEnterClickedWhenCancelButtonInFocus() throws Exception {
reset(view);
when(view.isCancelButtonInFocus()).thenReturn(true);
presenter.onEnterClicked();
verify(view, never()).showErrorHint(anyString());
verify(inputCallback, never()).accepted(anyString());
verify(view).closeDialog();
verify(cancelCallback).cancelled();
}
@Test
public void onEnterClickedWhenInputValueIsCorrect() throws Exception {
reset(view);
when(view.getValue()).thenReturn(CORRECT_INPUT_VALUE);
InputValidator inputValidator = mock(InputValidator.class);
when(inputValidator.validate(CORRECT_INPUT_VALUE)).thenReturn(null);
presenter.withValidator(inputValidator);
presenter.onEnterClicked();
verify(view, never()).showErrorHint(anyString());
verify(view).hideErrorHint();
verify(view).closeDialog();
verify(inputCallback).accepted(eq(CORRECT_INPUT_VALUE));
}
@Test
public void onEnterClickedWhenInputValueIsIncorrect() throws Exception {
reset(view);
when(view.getValue()).thenReturn(INCORRECT_INPUT_VALUE);
InputValidator inputValidator = mock(InputValidator.class);
InputValidator.Violation violation = mock(InputValidator.Violation.class);
when(inputValidator.validate(INCORRECT_INPUT_VALUE)).thenReturn(violation);
when(violation.getMessage()).thenReturn(ERROR_MESSAGE);
presenter.withValidator(inputValidator);
presenter.onEnterClicked();
verify(view).showErrorHint(anyString());
verify(view, never()).hideErrorHint();
verify(view, never()).setValue(anyString());
verify(inputCallback, never()).accepted(anyString());
}
}