/*
* 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.fields.variablesEditor;
import javax.enterprise.event.Event;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwtmockito.GwtMock;
import com.google.gwtmockito.GwtMockito;
import org.gwtbootstrap3.client.ui.Button;
import org.gwtbootstrap3.client.ui.TextBox;
import org.gwtbootstrap3.client.ui.ValueListBox;
import org.gwtbootstrap3.client.ui.constants.IconType;
import org.jboss.errai.databinding.client.api.DataBinder;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.stunner.bpmn.client.forms.fields.model.Variable;
import org.kie.workbench.common.stunner.bpmn.client.forms.fields.model.VariableRow;
import org.kie.workbench.common.stunner.bpmn.client.forms.widgets.ComboBox;
import org.kie.workbench.common.stunner.bpmn.client.forms.widgets.VariableNameTextBox;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.runners.MockitoJUnitRunner;
import org.uberfire.mocks.EventSourceMock;
import org.uberfire.workbench.events.NotificationEvent;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class VariableListItemWidgetViewImplTest {
private static final String VARIABLE_NAME = "variableName";
private static final String CUST_DATA_TYPE_NAME = "custDataTypeName";
private static final String DATA_TYPE_NAME = "dataTypeName";
@GwtMock
private DataBinder<VariableRow> variableRow;
@GwtMock
private VariableNameTextBox name;
@GwtMock
private Button deleteButton;
private TextBox customDataType;
private ValueListBox<String> dataType;
private ComboBox dataTypeComboBox;
private ComboBox processVarComboBox;
@GwtMock
private KeyDownEvent keyDownEvent;
private Event<NotificationEvent> notification = mock(EventSourceMock.class);
@Captor
private ArgumentCaptor<KeyDownHandler> keyDownHandlerCaptor;
@Captor
private ArgumentCaptor<BlurHandler> blurHandlerCaptor;
private VariableListItemWidgetViewImpl view;
@Before
public void setUp() throws Exception {
GwtMockito.initMocks(this);
customDataType = mock(TextBox.class);
dataType = mock(ValueListBox.class);
dataTypeComboBox = mock(ComboBox.class);
processVarComboBox = mock(ComboBox.class);
view = mock(VariableListItemWidgetViewImpl.class);
view.variableRow = variableRow;
view.name = name;
view.deleteButton = deleteButton;
view.customDataType = customDataType;
view.dataType = dataType;
view.dataTypeComboBox = dataTypeComboBox;
view.notification = notification;
doCallRealMethod().when(view).init();
doCallRealMethod().when(view).getCustomDataType();
doCallRealMethod().when(view).setCustomDataType(anyString());
doCallRealMethod().when(view).getModel();
doCallRealMethod().when(view).setModel(any(VariableRow.class));
doCallRealMethod().when(view).getModelValue(any(ValueListBox.class));
doCallRealMethod().when(view).setTextBoxModelValue(any(TextBox.class),
anyString());
doCallRealMethod().when(view).setListBoxModelValue(any(ValueListBox.class),
anyString());
doCallRealMethod().when(view).getDataTypeDisplayName();
doCallRealMethod().when(view).setDataTypeDisplayName(anyString());
doCallRealMethod().when(view).getVariableType();
doCallRealMethod().when(view).setParentWidget(any(VariablesEditorWidgetView.Presenter.class));
doCallRealMethod().when(view).isDuplicateName(anyString());
doCallRealMethod().when(view).handleDeleteButton(any(ClickEvent.class));
VariableRow row = new VariableRow();
doReturn(row).when(variableRow).getModel();
}
@Test
public void testSetProcessVarCustomDataType() {
VariableRow row = new VariableRow();
row.setName(VARIABLE_NAME);
row.setCustomDataType(CUST_DATA_TYPE_NAME);
row.setDataTypeDisplayName(null);
row.setVariableType(Variable.VariableType.PROCESS);
doReturn(row).when(variableRow).getModel();
view.setModel(row);
verify(variableRow,
times(1)).setModel(row);
verify(deleteButton,
times(1)).setIcon(IconType.TRASH);
verify(customDataType,
times(1)).setValue(CUST_DATA_TYPE_NAME);
verify(dataType,
times(1)).setValue(CUST_DATA_TYPE_NAME);
}
@Test
public void testSetProcessVarDataType() {
VariableRow row = new VariableRow();
row.setName(VARIABLE_NAME);
row.setCustomDataType(null);
row.setDataTypeDisplayName(DATA_TYPE_NAME);
row.setVariableType(Variable.VariableType.PROCESS);
doReturn(row).when(variableRow).getModel();
view.setModel(row);
verify(variableRow,
times(1)).setModel(row);
verify(deleteButton,
times(1)).setIcon(IconType.TRASH);
verify(customDataType,
never()).setValue(DATA_TYPE_NAME);
verify(dataType,
times(1)).setValue(DATA_TYPE_NAME);
}
@Test
public void testSetTextBoxModelValueCustomDataType() {
assertNull(view.getModel().getCustomDataType());
view.setTextBoxModelValue(customDataType,
"abc");
assertEquals("abc",
view.getModel().getCustomDataType());
assertEquals("abc",
view.getModelValue(dataType));
}
@Test
public void testSetListBoxModelValueDataType() {
assertNull(view.getModel().getDataTypeDisplayName());
view.setListBoxModelValue(dataType,
"abc");
assertEquals("abc",
view.getModel().getDataTypeDisplayName());
assertNull(view.getModel().getCustomDataType());
assertEquals("abc",
view.getModelValue(dataType));
}
@Test
public void testDataTypeHandlerSpace() {
view.init();
verify(customDataType,
times(1)).addKeyDownHandler(keyDownHandlerCaptor.capture());
KeyDownHandler handler = keyDownHandlerCaptor.getValue();
doReturn(Integer.valueOf(' ')).when(keyDownEvent).getNativeKeyCode();
handler.onKeyDown(keyDownEvent);
verify(keyDownEvent,
times(1)).preventDefault();
}
@Test
public void testDataTypeHandlerAlphabetical() {
view.init();
verify(customDataType,
times(1)).addKeyDownHandler(keyDownHandlerCaptor.capture());
KeyDownHandler handler = keyDownHandlerCaptor.getValue();
doReturn(Integer.valueOf('a')).when(keyDownEvent).getNativeKeyCode();
handler.onKeyDown(keyDownEvent);
verify(keyDownEvent,
never()).preventDefault();
}
@Test
public void testNameBlurHandler() {
VariablesEditorWidgetView.Presenter parent = mock(VariablesEditorWidgetView.Presenter.class);
when(parent.isDuplicateName(anyString())).thenReturn(true);
doReturn("anyName").when(name).getText();
view.setParentWidget(parent);
view.init();
verify(name,
times(1)).addBlurHandler(blurHandlerCaptor.capture());
BlurHandler handler = blurHandlerCaptor.getValue();
handler.onBlur(mock(BlurEvent.class));
verify(parent,
times(1)).isDuplicateName("anyName");
verify(notification,
times(1)).fire(new NotificationEvent(null,
NotificationEvent.NotificationType.ERROR));
verify(name,
times(1)).setValue("");
}
@Test
public void testHandleDeleteButton() {
VariablesEditorWidgetView.Presenter widget = mock(VariablesEditorWidgetView.Presenter.class);
VariableRow model = mock(VariableRow.class);
when(view.getModel()).thenReturn(model);
view.setParentWidget(widget);
view.handleDeleteButton(null);
verify(widget).removeVariable(model);
}
}