/*
* 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.Arrays;
import java.util.List;
import java.util.Map;
import com.google.gwtmockito.GwtMock;
import com.google.gwtmockito.GwtMockito;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.stunner.bpmn.client.forms.fields.model.AssignmentBaseTest;
import org.kie.workbench.common.stunner.bpmn.client.forms.util.StringUtils;
import org.kie.workbench.common.stunner.bpmn.definition.BPMNDefinition;
import org.kie.workbench.common.stunner.bpmn.definition.BusinessRuleTask;
import org.kie.workbench.common.stunner.bpmn.definition.EndNoneEvent;
import org.kie.workbench.common.stunner.bpmn.definition.EndTerminateEvent;
import org.kie.workbench.common.stunner.bpmn.definition.SequenceFlow;
import org.kie.workbench.common.stunner.bpmn.definition.StartNoneEvent;
import org.kie.workbench.common.stunner.bpmn.definition.UserTask;
import org.kie.workbench.common.stunner.bpmn.definition.property.general.Name;
import org.kie.workbench.common.stunner.bpmn.definition.property.general.TaskGeneralSet;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
@RunWith(PowerMockRunner.class)
@PrepareForTest(StringUtils.class)
public class AssignmentsEditorWidgetTest extends AssignmentBaseTest {
private static final String TASK_NAME = "Get Address";
private static final String ASSIGNMENTS_INFO = "|input1:com.test.Employee,input2:String,input3:String,input4:String,Skippable||output1:com.test.Employee,output2:String|[din]employee->input1,[din]input2=ab%7Ccd%7Cef,[din]input3=yes,[din]input4=%22Hello%22+then+%22Goodbye%22,[dout]output1->employee,[dout]output2->reason";
public static final String DATA_INPUT = "input1:com.test.Employee";
public static final String DATA_INPUT_SET = "input1:com.test.Employee,input2:String,input3:String,input4:String,Skippable";
public static final String DATA_OUTPUT = "output1:com.test.Employee";
public static final String DATA_OUTPUT_SET = "output1:com.test.Employee,output2:String";
public static final String PROCESS_VARS = "employee:java.lang.String,reason:java.lang.String,performance:java.lang.String";
public static final String ASSIGNMENTS_SINGLE_INPUT = "[din]employee->input1";
public static final String ASSIGNMENTS_SINGLE_OUTPUT = "[dout]output1->employee";
public static final String ASSIGNMENTS_MULTIPLE = "[din]employee->input1,[din]input2=ab%7Ccd%7Cef,[din]input3=yes,[din]input4=%22Hello%22+then+%22Goodbye%22,[dout]output1->employee,[dout]output2->reason";
public static final List<String> DATATYPES = new ArrayList<String>(Arrays.asList("myorg.myproject1.Cardboard",
"yourorg.materials.Paper",
"org.documents.Articles"));
public static final String FORMATTED_DATATYPES = "Articles [org.documents]:org.documents.Articles,Cardboard [myorg.myproject1]:myorg.myproject1.Cardboard,Paper [yourorg.materials]:yourorg.materials.Paper";
@GwtMock
private AssignmentsEditorWidget widget;
@GwtMock
private ActivityDataIOEditor activityDataIOEditor;
@GwtMock
private ActivityDataIOEditorView activityDataIOEditorView;
@Mock
UserTask userTask;
@Mock
BusinessRuleTask businessRuleTask;
@Mock
StartNoneEvent startNoneEvent;
@Mock
EndTerminateEvent endTerminateEvent;
@Mock
EndNoneEvent endNoneEvent;
@Mock
SequenceFlow sequenceFlow;
@Mock
TaskGeneralSet taskGeneralSet;
@Mock
Name taskName;
@Captor
private ArgumentCaptor<String> taskNameCaptor;
@Captor
private ArgumentCaptor<Boolean> hasInputVarsCaptor;
@Captor
private ArgumentCaptor<Boolean> isSingleInputVarCaptor;
@Captor
private ArgumentCaptor<Boolean> hasOutputVarsCaptor;
@Captor
private ArgumentCaptor<Boolean> isSingleOutputVarCaptor;
@Before
public void setUp() throws Exception {
super.setUp();
GwtMockito.initMocks(this);
widget.activityDataIOEditor = activityDataIOEditor;
activityDataIOEditor.view = activityDataIOEditorView;
doCallRealMethod().when(widget).parseAssignmentsInfo();
doCallRealMethod().when(widget).getVariableCountsString(anyString(),
anyString(),
anyString(),
anyString(),
anyString(),
anyString(),
anyString());
doCallRealMethod().when(widget).showAssignmentsDialog();
doCallRealMethod().when(widget).showDataIOEditor(anyString());
doCallRealMethod().when(widget).setBPMNModel(any(BPMNDefinition.class));
doCallRealMethod().when(widget).formatDataTypes(any(List.class));
doCallRealMethod().when(widget).getTaskName();
doCallRealMethod().when(widget).getDisallowedPropertyNames();
when(userTask.getGeneral()).thenReturn(taskGeneralSet);
when(taskGeneralSet.getName()).thenReturn(taskName);
when(taskName.getValue()).thenReturn(TASK_NAME);
doCallRealMethod().when(userTask).hasInputVars();
doCallRealMethod().when(userTask).isSingleInputVar();
doCallRealMethod().when(userTask).hasOutputVars();
doCallRealMethod().when(userTask).isSingleOutputVar();
doCallRealMethod().when(businessRuleTask).hasInputVars();
doCallRealMethod().when(businessRuleTask).isSingleInputVar();
doCallRealMethod().when(businessRuleTask).hasOutputVars();
doCallRealMethod().when(businessRuleTask).isSingleOutputVar();
doCallRealMethod().when(startNoneEvent).hasInputVars();
doCallRealMethod().when(startNoneEvent).isSingleInputVar();
doCallRealMethod().when(startNoneEvent).hasOutputVars();
doCallRealMethod().when(startNoneEvent).isSingleOutputVar();
doCallRealMethod().when(endTerminateEvent).hasInputVars();
doCallRealMethod().when(endTerminateEvent).isSingleInputVar();
doCallRealMethod().when(endTerminateEvent).hasOutputVars();
doCallRealMethod().when(endTerminateEvent).isSingleOutputVar();
doCallRealMethod().when(endNoneEvent).hasInputVars();
doCallRealMethod().when(endNoneEvent).isSingleInputVar();
doCallRealMethod().when(endNoneEvent).hasOutputVars();
doCallRealMethod().when(endNoneEvent).isSingleOutputVar();
doCallRealMethod().when(activityDataIOEditor).configureDialog(anyString(),
anyBoolean(),
anyBoolean(),
anyBoolean(),
anyBoolean());
widget.setBPMNModel(userTask);
}
@After
public void tearDown() {
super.tearDown();
}
@Test
public void testParseAssignmentsInfo() {
widget.assignmentsInfo = ASSIGNMENTS_INFO;
Map<String, String> assignmentsProperties = widget.parseAssignmentsInfo();
assertEquals(DATA_INPUT_SET,
assignmentsProperties.get("datainputset"));
assertEquals(DATA_OUTPUT_SET,
assignmentsProperties.get("dataoutputset"));
assertEquals(ASSIGNMENTS_MULTIPLE,
assignmentsProperties.get("assignments"));
}
@Test
public void testGetVariableCountsString() {
String variableCountsString = widget.getVariableCountsString(null,
DATA_INPUT_SET,
null,
DATA_OUTPUT_SET,
PROCESS_VARS,
ASSIGNMENTS_MULTIPLE,
widget.getDisallowedPropertyNames());
assertEquals("4 Data_Inputs, 2 Data_Outputs",
variableCountsString);
}
@Test
public void testShowAssignmentsDialog() {
widget.setBPMNModel(userTask);
widget.assignmentsInfo = ASSIGNMENTS_INFO;
Map<String, String> assignmentsProperties = widget.parseAssignmentsInfo();
widget.showAssignmentsDialog();
verify(widget).getDataTypes();
}
@Test
public void testShowDataIOEditor() {
widget.showDataIOEditor(null);
verify(activityDataIOEditor).configureDialog(taskNameCaptor.capture(),
hasInputVarsCaptor.capture(),
isSingleInputVarCaptor.capture(),
hasOutputVarsCaptor.capture(),
isSingleOutputVarCaptor.capture());
assertEquals(TASK_NAME,
taskNameCaptor.getValue());
assertEquals(true,
hasInputVarsCaptor.getValue());
assertEquals(false,
isSingleInputVarCaptor.getValue());
assertEquals(true,
hasOutputVarsCaptor.getValue());
assertEquals(false,
isSingleOutputVarCaptor.getValue());
}
@Test
public void testFormatDataTypes() {
String formattedDataTypes = widget.formatDataTypes(DATATYPES);
assertEquals(FORMATTED_DATATYPES,
formattedDataTypes);
}
@Test
public void testGetTaskName() {
String taskName = widget.getTaskName();
assertEquals(TASK_NAME,
taskName);
}
@Test
public void testSetBPMNModelUserTask() {
widget.setBPMNModel(userTask);
assertEquals(true,
widget.hasInputVars);
assertEquals(false,
widget.isSingleInputVar);
assertEquals(true,
widget.hasOutputVars);
assertEquals(false,
widget.isSingleOutputVar);
String assignmentsInfoString = widget.getVariableCountsString(null,
DATA_INPUT_SET,
null,
DATA_OUTPUT_SET,
PROCESS_VARS,
ASSIGNMENTS_MULTIPLE,
widget.getDisallowedPropertyNames());
assertEquals("4 Data_Inputs, 2 Data_Outputs",
assignmentsInfoString);
}
@Test
public void testSetBPMNModelBusinessRuleTask() {
widget.setBPMNModel(businessRuleTask);
assertEquals(true,
widget.hasInputVars);
assertEquals(false,
widget.isSingleInputVar);
assertEquals(true,
widget.hasOutputVars);
assertEquals(false,
widget.isSingleOutputVar);
String assignmentsInfoString = widget.getVariableCountsString(null,
DATA_INPUT_SET,
null,
DATA_OUTPUT_SET,
PROCESS_VARS,
ASSIGNMENTS_MULTIPLE,
widget.getDisallowedPropertyNames());
assertEquals("5 Data_Inputs, 2 Data_Outputs",
assignmentsInfoString);
}
@Test
public void testSetBPMNModelStartNoneEvent() {
widget.setBPMNModel(startNoneEvent);
assertEquals(false,
widget.hasInputVars);
assertEquals(false,
widget.isSingleInputVar);
assertEquals(true,
widget.hasOutputVars);
assertEquals(true,
widget.isSingleOutputVar);
String assignmentsInfoString = widget.getVariableCountsString(null,
null,
DATA_OUTPUT,
null,
PROCESS_VARS,
ASSIGNMENTS_SINGLE_OUTPUT,
widget.getDisallowedPropertyNames());
assertEquals("1 Data_Output",
assignmentsInfoString);
}
@Test
public void testSetBPMNModelEndTerminateEvent() {
widget.setBPMNModel(endTerminateEvent);
assertEquals(true,
widget.hasInputVars);
assertEquals(true,
widget.isSingleInputVar);
assertEquals(false,
widget.hasOutputVars);
assertEquals(false,
widget.isSingleOutputVar);
String assignmentsInfoString = widget.getVariableCountsString(DATA_INPUT,
null,
null,
null,
PROCESS_VARS,
ASSIGNMENTS_SINGLE_OUTPUT,
widget.getDisallowedPropertyNames());
assertEquals("1 Data_Input",
assignmentsInfoString);
}
@Test
public void testSetBPMNModelEndNoneEvent() {
widget.setBPMNModel(endNoneEvent);
assertEquals(true,
widget.hasInputVars);
assertEquals(true,
widget.isSingleInputVar);
assertEquals(false,
widget.hasOutputVars);
assertEquals(false,
widget.isSingleOutputVar);
String assignmentsInfoString = widget.getVariableCountsString(DATA_INPUT,
null,
null,
null,
PROCESS_VARS,
ASSIGNMENTS_SINGLE_OUTPUT,
widget.getDisallowedPropertyNames());
assertEquals("1 Data_Input",
assignmentsInfoString);
}
@Test
public void testSetBPMNModelNoDataIO() {
widget.setBPMNModel(sequenceFlow);
assertEquals(false,
widget.hasInputVars);
assertEquals(false,
widget.isSingleInputVar);
assertEquals(false,
widget.hasOutputVars);
assertEquals(false,
widget.isSingleOutputVar);
}
}