/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kie.workbench.common.stunner.bpmn.client.forms.widgets;
import java.util.List;
import com.google.gwtmockito.GwtMockitoTestRunner;
import org.gwtbootstrap3.client.ui.TextBox;
import org.gwtbootstrap3.client.ui.ValueListBox;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.stunner.bpmn.client.forms.util.ListBoxValues;
import org.kie.workbench.common.stunner.bpmn.client.forms.util.StringUtils;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import static org.mockito.Mockito.*;
@RunWith(GwtMockitoTestRunner.class)
public class ComboBoxTest {
@Mock
ComboBoxView.ModelPresenter modelPresenter;
@Mock
ComboBoxView view;
@Mock
ListBoxValues listBoxValues;
@Mock
ValueListBox<String> listBox;
@Mock
TextBox textBox;
@Spy
@InjectMocks
ComboBox comboBox = new ComboBox();
final boolean processVarNotifyModelChanges = false;
private final boolean processVarQuoteStringValues = true;
private final boolean processVarAddCustomValues = true;
private final String processVarConstantPrompt = "Constant ...";
private final String processVarConstantPlaceholder = "Enter constant ...";
private final String processVarEditPrefix = "Edit ";
private final String processVarEditSuffix = " ...";
@Before
public void initMocks() {
when(listBoxValues.getEditPrefix()).thenReturn(processVarEditPrefix);
}
@Test
public void testInit() {
comboBox.init(modelPresenter,
processVarNotifyModelChanges,
listBox,
textBox,
processVarQuoteStringValues,
processVarAddCustomValues,
processVarConstantPrompt,
processVarConstantPlaceholder);
verify(view).init(comboBox,
modelPresenter,
listBox,
textBox,
processVarConstantPlaceholder);
}
@Test
public void testUpdateListBoxValues_Custom() {
comboBox.setShowCustomValues(true);
String customValue = "a custom value";
comboBox.updateListBoxValues(customValue);
verify(listBoxValues).update(customValue);
verify(view).setAcceptableValues(any(List.class));
}
@Test
public void testUpdateListBoxValues_NonCustom() {
comboBox.setShowCustomValues(false);
String customValue = "a custom value";
comboBox.updateListBoxValues(customValue);
verify(listBoxValues).getAcceptableValuesWithoutCustomValues();
verify(view).setAcceptableValues(any(List.class));
}
@Test
public void testListBoxValueChanged_CustomPrompt() {
comboBox.init(modelPresenter,
processVarNotifyModelChanges,
listBox,
textBox,
processVarQuoteStringValues,
processVarAddCustomValues,
processVarConstantPrompt,
processVarConstantPlaceholder);
comboBox.listBoxValueChanged(processVarConstantPrompt);
verify(view).setListBoxValue("");
verify(view).setListBoxModelValue("");
verify(view).setTextBoxValue("");
verify(view).setTextBoxModelValue("");
verify(view).setListBoxVisible(false);
verify(view).setTextBoxVisible(true);
verify(view).setTextBoxFocus(true);
}
@Test
public void testListBoxValueChanged_InvalidValue() {
comboBox.init(modelPresenter,
processVarNotifyModelChanges,
listBox,
textBox,
processVarQuoteStringValues,
processVarAddCustomValues,
processVarConstantPrompt,
processVarConstantPlaceholder);
comboBox.listBoxValueChanged("********");
verify(view).setListBoxValue("");
verify(view).setListBoxModelValue("");
verify(view).setTextBoxValue("");
verify(view).setTextBoxModelValue("");
}
@Test
public void testListBoxValueChanged_EditValueString() {
comboBox.init(modelPresenter,
processVarNotifyModelChanges,
listBox,
textBox,
processVarQuoteStringValues,
processVarAddCustomValues,
processVarConstantPrompt,
processVarConstantPlaceholder);
String constant = "a constant";
when(view.getModelValue()).thenReturn(constant);
comboBox.listBoxValueChanged(processVarEditPrefix + "\"" + constant + "\"" + processVarEditSuffix);
verify(view).setListBoxVisible(false);
verify(view).setTextBoxVisible(true);
verify(view).setTextBoxFocus(true);
verify(view).setTextBoxValue(constant);
verify(view,
times(0)).setListBoxValue(anyString());
}
@Test
public void testListBoxValueChanged_EditValueNumber() {
comboBox.init(modelPresenter,
processVarNotifyModelChanges,
listBox,
textBox,
processVarQuoteStringValues,
processVarAddCustomValues,
processVarConstantPrompt,
processVarConstantPlaceholder);
String constant = "123";
when(view.getModelValue()).thenReturn(constant);
comboBox.listBoxValueChanged(processVarEditPrefix + constant + processVarEditSuffix);
verify(view).setListBoxVisible(false);
verify(view).setTextBoxVisible(true);
verify(view).setTextBoxFocus(true);
verify(view).setTextBoxValue(constant);
verify(view,
times(0)).setListBoxValue(anyString());
}
@Test
public void testListBoxValueChanged_CustomValueString() {
comboBox.init(modelPresenter,
processVarNotifyModelChanges,
listBox,
textBox,
processVarQuoteStringValues,
processVarAddCustomValues,
processVarConstantPrompt,
processVarConstantPlaceholder);
String constant = "a constant";
String quotedConstant = StringUtils.createQuotedConstant(constant);
when(listBoxValues.isCustomValue(quotedConstant)).thenReturn(true);
when(listBoxValues.getValueForDisplayValue(quotedConstant)).thenReturn(quotedConstant);
comboBox.listBoxValueChanged(quotedConstant);
verify(view).setListBoxValue(quotedConstant);
verify(view).setListBoxModelValue(quotedConstant);
verify(view).setTextBoxValue(constant);
verify(view).setTextBoxModelValue(constant);
}
@Test
public void testListBoxValueChanged_CustomValueQString1() {
comboBox.init(modelPresenter,
processVarNotifyModelChanges,
listBox,
textBox,
processVarQuoteStringValues,
processVarAddCustomValues,
processVarConstantPrompt,
processVarConstantPlaceholder);
String constant = "\"hello\"";
String quotedConstant = StringUtils.createQuotedConstant(constant);
when(listBoxValues.isCustomValue(quotedConstant)).thenReturn(true);
when(listBoxValues.getValueForDisplayValue(quotedConstant)).thenReturn(quotedConstant);
comboBox.listBoxValueChanged(quotedConstant);
verify(view).setListBoxValue(quotedConstant);
verify(view).setListBoxModelValue(quotedConstant);
verify(view).setTextBoxValue(constant);
verify(view).setTextBoxModelValue(constant);
}
@Test
public void testListBoxValueChanged_CustomValueQString2() {
comboBox.init(modelPresenter,
processVarNotifyModelChanges,
listBox,
textBox,
processVarQuoteStringValues,
processVarAddCustomValues,
processVarConstantPrompt,
processVarConstantPlaceholder);
String constant = "greeting={\"hello\"}";
String quotedConstant = StringUtils.createQuotedConstant(constant);
when(listBoxValues.isCustomValue(quotedConstant)).thenReturn(true);
when(listBoxValues.getValueForDisplayValue(quotedConstant)).thenReturn(quotedConstant);
comboBox.listBoxValueChanged(quotedConstant);
verify(view).setListBoxValue(quotedConstant);
verify(view).setListBoxModelValue(quotedConstant);
verify(view).setTextBoxValue(constant);
verify(view).setTextBoxModelValue(constant);
}
@Test
public void testListBoxValueChanged_CustomValueNumber() {
comboBox.init(modelPresenter,
processVarNotifyModelChanges,
listBox,
textBox,
processVarQuoteStringValues,
processVarAddCustomValues,
processVarConstantPrompt,
processVarConstantPlaceholder);
String constant = "123";
when(listBoxValues.isCustomValue(constant)).thenReturn(true);
when(listBoxValues.getValueForDisplayValue(constant)).thenReturn(constant);
comboBox.listBoxValueChanged(constant);
verify(view).setListBoxValue(constant);
verify(view).setListBoxModelValue(constant);
verify(view).setTextBoxValue(constant);
verify(view).setTextBoxModelValue(constant);
}
@Test
public void testListBoxValueChanged_ExistingValueString() {
comboBox.init(modelPresenter,
processVarNotifyModelChanges,
listBox,
textBox,
processVarQuoteStringValues,
processVarAddCustomValues,
processVarConstantPrompt,
processVarConstantPlaceholder);
String value = "employee";
when(listBoxValues.isCustomValue(value)).thenReturn(false);
comboBox.listBoxValueChanged(value);
verify(view).setListBoxValue(value);
verify(view).setListBoxModelValue(value);
verify(view).setTextBoxValue("");
verify(view).setTextBoxModelValue("");
}
@Test
public void testListBoxValueChanged_ExistingValueNumber() {
comboBox.init(modelPresenter,
processVarNotifyModelChanges,
listBox,
textBox,
processVarQuoteStringValues,
processVarAddCustomValues,
processVarConstantPrompt,
processVarConstantPlaceholder);
String value = "123";
when(listBoxValues.isCustomValue(value)).thenReturn(false);
comboBox.listBoxValueChanged(value);
verify(view).setListBoxValue(value);
verify(view).setListBoxModelValue(value);
verify(view).setTextBoxValue("");
verify(view).setTextBoxModelValue("");
}
@Test
public void testTextBoxValueChanged_Empty() {
comboBox.init(modelPresenter,
processVarNotifyModelChanges,
listBox,
textBox,
processVarQuoteStringValues,
processVarAddCustomValues,
processVarConstantPrompt,
processVarConstantPlaceholder);
comboBox.textBoxValueChanged("");
verify(view).setListBoxValue("");
verify(view).setListBoxModelValue("");
verify(view).setTextBoxValue("");
verify(view).setTextBoxModelValue("");
verify(view).setTextBoxVisible(false);
verify(view).setListBoxVisible(true);
}
@Test
public void testTextBoxValueChanged_NonCustomValue() {
comboBox.init(modelPresenter,
processVarNotifyModelChanges,
listBox,
textBox,
processVarQuoteStringValues,
processVarAddCustomValues,
processVarConstantPrompt,
processVarConstantPlaceholder);
String value = "employee";
when(listBoxValues.getNonCustomValueForUserString(value)).thenReturn(value);
comboBox.textBoxValueChanged(value);
verify(view).setListBoxValue(value);
verify(view).setListBoxModelValue(value);
verify(view).setTextBoxValue("");
verify(view).setTextBoxModelValue("");
verify(view).setTextBoxVisible(false);
verify(view).setListBoxVisible(true);
}
@Test
public void testTextBoxValueChanged_CustomValue() {
comboBox.init(modelPresenter,
processVarNotifyModelChanges,
listBox,
textBox,
processVarQuoteStringValues,
processVarAddCustomValues,
processVarConstantPrompt,
processVarConstantPlaceholder);
String value = "something new";
String quotedValue = StringUtils.createQuotedConstant(value);
when(listBoxValues.getNonCustomValueForUserString(value)).thenReturn(null);
when(comboBox.addCustomValueToListBoxValues(value,
"")).thenReturn(quotedValue);
comboBox.textBoxValueChanged(value);
verify(comboBox,
times(2)).addCustomValueToListBoxValues(value,
"");
verify(view).setListBoxValue(quotedValue);
verify(view).setListBoxModelValue(quotedValue);
verify(view).setTextBoxValue(value);
verify(view).setTextBoxModelValue(value);
verify(view).setTextBoxVisible(false);
verify(view).setListBoxVisible(true);
}
}