/*
* 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.assignmentsEditor;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.google.gwtmockito.GwtMock;
import com.google.gwtmockito.GwtMockito;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.stunner.bpmn.client.forms.fields.model.AssignmentRow;
import org.kie.workbench.common.stunner.bpmn.client.forms.fields.model.Variable;
import org.kie.workbench.common.stunner.bpmn.client.forms.util.ListBoxValues;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class ActivityDataIOEditorWidgetTest {
private AssignmentRow assignmentRowOne = new AssignmentRow("aBc",
null,
null,
null,
"aBc",
"AbC");
private AssignmentRow assignmentRowTwo = new AssignmentRow("aBc",
null,
null,
null,
"aBc",
"abc");
private AssignmentRow assignmentRowThree = new AssignmentRow("def",
null,
null,
null,
"def",
null);
private AssignmentListItemWidgetViewImpl assignWidgetOne;
private AssignmentListItemWidgetViewImpl assignWidgetTwo;
private AssignmentListItemWidgetViewImpl assignWidgetThree;
@GwtMock
private ActivityDataIOEditorWidgetView view;
@Captor
private ArgumentCaptor<List<AssignmentRow>> captor;
@Spy
@InjectMocks
private ActivityDataIOEditorWidget widget = new ActivityDataIOEditorWidget();
private List<AssignmentRow> rows;
@Before
public void initTestCase() {
GwtMockito.initMocks(this);
assignWidgetOne = mock(AssignmentListItemWidgetViewImpl.class);
assignWidgetTwo = mock(AssignmentListItemWidgetViewImpl.class);
assignWidgetThree = mock(AssignmentListItemWidgetViewImpl.class);
rows = new ArrayList<AssignmentRow>();
rows.add(assignmentRowOne);
rows.add(assignmentRowTwo);
rows.add(assignmentRowThree);
when(view.getAssignmentRows()).thenReturn(rows);
when(view.getAssignmentsCount()).thenReturn(rows.size());
when(view.getAssignmentWidget(0)).thenReturn(assignWidgetOne);
when(view.getAssignmentWidget(1)).thenReturn(assignWidgetTwo);
when(view.getAssignmentWidget(2)).thenReturn(assignWidgetThree);
}
@Test
public void testInit() {
widget.init();
verify(view).init(widget);
}
@Test
public void testAddHandlerSingleFull() {
widget.setIsSingleVar(true);
widget.handleAddClick();
verify(view).showOnlySingleEntryAllowed();
verify(view,
never()).getAssignmentWidget(anyInt());
}
@Test
public void testAddHandlerSingle() {
rows.clear();
when(view.getAssignmentRows()).thenReturn(rows);
when(view.getAssignmentsCount()).thenReturn(1);
widget.setIsSingleVar(true);
widget.handleAddClick();
verify(view,
never()).showOnlySingleEntryAllowed();
verify(view).getAssignmentWidget(0);
verify(view,
never()).getAssignmentWidget(1);
verify(view,
never()).getAssignmentWidget(2);
}
@Test
public void testAddHandlerMultiple() {
rows.remove(assignmentRowThree);
when(view.getAssignmentRows()).thenReturn(rows);
when(view.getAssignmentsCount()).thenReturn(3);
widget.setIsSingleVar(false);
widget.handleAddClick();
verify(view,
never()).showOnlySingleEntryAllowed();
verify(view,
never()).getAssignmentWidget(0);
verify(view,
never()).getAssignmentWidget(1);
verify(view).getAssignmentWidget(2);
}
@Test
public void testSingleVarInput() {
widget.setVariableType(Variable.VariableType.INPUT);
widget.setIsSingleVar(true);
verify(view).setProcessVarAsSource();
verify(view).setTableTitleInputSingle();
}
@Test
public void testMultipleVarInput() {
widget.setVariableType(Variable.VariableType.INPUT);
widget.setIsSingleVar(false);
verify(view).setProcessVarAsSource();
verify(view).setTableTitleInputMultiple();
}
@Test
public void testSingleVarOutput() {
widget.setVariableType(Variable.VariableType.OUTPUT);
widget.setIsSingleVar(true);
verify(view).setProcessVarAsTarget();
verify(view).setTableTitleOutputSingle();
}
@Test
public void testMultipleVarOutput() {
widget.setVariableType(Variable.VariableType.OUTPUT);
widget.setIsSingleVar(false);
verify(view).setProcessVarAsTarget();
verify(view).setTableTitleOutputMultiple();
}
@Test
public void testRemoveAssignmentEmpty() {
widget.removeAssignment(assignmentRowOne);
widget.removeAssignment(assignmentRowTwo);
widget.removeAssignment(assignmentRowThree);
verify(view).setNoneDisplayStyle();
assertEquals(0,
view.getAssignmentRows().size());
}
@Test
public void testRemoveAssignmentNonEmpty() {
widget.removeAssignment(assignmentRowOne);
widget.removeAssignment(assignmentRowThree);
verify(view,
never()).setNoneDisplayStyle();
assertEquals(1,
view.getAssignmentRows().size());
assertEquals(assignmentRowTwo,
view.getAssignmentRows().get(0));
}
@Test
public void testSetDataEmpty() {
rows.clear();
widget.setData(rows);
verify(view).setNoneDisplayStyle();
verify(view).setAssignmentRows(captor.capture());
assertEquals(0,
captor.getValue().size());
verify(view,
never()).getAssignmentWidget(anyInt());
}
@Test
public void testSetDataNonEmpty() {
widget.setData(rows);
verify(view).setTableDisplayStyle();
verify(view).setAssignmentRows(captor.capture());
assertEquals(3,
captor.getValue().size());
assertTrue(captor.getValue().contains(assignmentRowOne));
assertTrue(captor.getValue().contains(assignmentRowTwo));
assertTrue(captor.getValue().contains(assignmentRowThree));
verify(view,
times(3)).getAssignmentWidget(0);
verify(view,
times(3)).getAssignmentWidget(1);
verify(view,
times(3)).getAssignmentWidget(2);
verify(assignWidgetOne).setParentWidget(widget);
verify(assignWidgetOne).setDisallowedNames(new HashSet<String>(),
"");
verify(assignWidgetOne).setAllowDuplicateNames(true,
"");
verify(assignWidgetTwo).setParentWidget(widget);
verify(assignWidgetTwo).setDisallowedNames(new HashSet<String>(),
"");
verify(assignWidgetTwo).setAllowDuplicateNames(true,
"");
verify(assignWidgetThree).setParentWidget(widget);
verify(assignWidgetThree).setDisallowedNames(new HashSet<String>(),
"");
verify(assignWidgetThree).setAllowDuplicateNames(true,
"");
}
@Test
public void testSetDataComplex() {
Set<String> disallowed = new HashSet<String>();
disallowed.add("abc");
widget.setDisallowedNames(disallowed,
"message1");
widget.setAllowDuplicateNames(false,
"message2");
widget.setData(rows);
verify(view).setTableDisplayStyle();
verify(view).setAssignmentRows(captor.capture());
assertEquals(1,
captor.getValue().size());
assertEquals(assignmentRowThree,
captor.getValue().get(0));
assertEquals("def",
captor.getValue().get(0).getName());
assertEquals("def",
captor.getValue().get(0).getProcessVar());
verify(view,
times(4)).getAssignmentWidget(0); //setData:3 + setDisallowed:1
verify(view).getAssignmentWidget(1);
verify(view).getAssignmentWidget(2);
//there should be assignWidgetThree but is not because of test initialization in @Before
verify(assignWidgetOne).setParentWidget(widget);
verify(assignWidgetOne,
times(2)).setDisallowedNames(disallowed,
"message1");
verify(assignWidgetOne).setAllowDuplicateNames(false,
"message2");
}
@Test
public void testGetData() {
List<AssignmentRow> rows = widget.getData();
assertEquals(3,
rows.size());
assertEquals(assignmentRowOne,
rows.get(0));
assertEquals(assignmentRowTwo,
rows.get(1));
assertEquals(assignmentRowThree,
rows.get(2));
}
@Test
public void testGetDataWithHiddenNotMatch() {
Set<String> disallowed = new HashSet<String>();
disallowed.add("x");
widget.setDisallowedNames(disallowed,
"message");
widget.setData(rows);
List<AssignmentRow> result = widget.getData();
assertEquals(rows,
result);
}
@Test
public void testGetDataWithHiddenMatch() {
Set<String> disallowed = new HashSet<String>();
disallowed.add("abc");
widget.setDisallowedNames(disallowed,
"message");
widget.setData(rows);
List<AssignmentRow> result = widget.getData();
assertEquals(3,
result.size());
assertTrue(result.contains(assignmentRowOne));
assertTrue(result.contains(assignmentRowTwo));
assertTrue(result.contains(assignmentRowThree));
assertNotEquals(rows,
result);
}
@Test
public void testDataTypes() {
ListBoxValues types = mock(ListBoxValues.class);
widget.setDataTypes(types);
verify(view).getAssignmentWidget(0);
verify(view).getAssignmentWidget(1);
verify(view).getAssignmentWidget(2);
verify(assignWidgetOne).setDataTypes(types);
verify(assignWidgetTwo).setDataTypes(types);
verify(assignWidgetThree).setDataTypes(types);
}
@Test
public void testProcessVariables() {
ListBoxValues variables = mock(ListBoxValues.class);
widget.setProcessVariables(variables);
verify(view).getAssignmentWidget(0);
verify(view).getAssignmentWidget(1);
verify(view).getAssignmentWidget(2);
verify(assignWidgetOne).setProcessVariables(variables);
verify(assignWidgetTwo).setProcessVariables(variables);
verify(assignWidgetThree).setProcessVariables(variables);
}
@Test
public void testSetDisallowedNames() {
Set<String> names = mock(new HashSet<String>().getClass());
widget.setDisallowedNames(names,
"message");
verify(view).getAssignmentWidget(0);
verify(view).getAssignmentWidget(1);
verify(view).getAssignmentWidget(2);
verify(assignWidgetOne).setDisallowedNames(names,
"message");
verify(assignWidgetTwo).setDisallowedNames(names,
"message");
verify(assignWidgetThree).setDisallowedNames(names,
"message");
}
@Test
public void testIsDuplicateName() {
assertFalse(widget.isDuplicateName(null));
assertFalse(widget.isDuplicateName(""));
assertTrue(widget.isDuplicateName(" aBc"));
assertTrue(widget.isDuplicateName("aBc "));
assertTrue(widget.isDuplicateName(" aBc "));
assertTrue(widget.isDuplicateName(" aBc"));
assertFalse(widget.isDuplicateName(" "));
assertTrue(widget.isDuplicateName("aBc"));
assertFalse(widget.isDuplicateName("def"));
assertFalse(widget.isDuplicateName("q"));
}
@Test
public void testSetIsVisible() {
widget.setIsVisible(true);
verify(view).setVisible(true);
widget.setIsVisible(false);
verify(view).setVisible(false);
}
}