/*
* Copyright 2017 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.gateway;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.kie.workbench.common.forms.dynamic.model.config.SelectorData;
import org.kie.workbench.common.forms.dynamic.service.shared.FormRenderingContext;
import org.kie.workbench.common.stunner.bpmn.client.forms.util.ContextUtils;
import org.kie.workbench.common.stunner.bpmn.definition.ExclusiveDatabasedGateway;
import org.kie.workbench.common.stunner.bpmn.definition.ScriptTask;
import org.kie.workbench.common.stunner.bpmn.definition.SequenceFlow;
import org.kie.workbench.common.stunner.bpmn.definition.UserTask;
import org.kie.workbench.common.stunner.bpmn.definition.property.general.BPMNGeneralSet;
import org.kie.workbench.common.stunner.bpmn.definition.property.general.Name;
import org.kie.workbench.common.stunner.bpmn.definition.property.general.TaskGeneralSet;
import org.kie.workbench.common.stunner.core.client.api.SessionManager;
import org.kie.workbench.common.stunner.core.graph.Edge;
import org.kie.workbench.common.stunner.core.graph.Node;
import org.kie.workbench.common.stunner.core.graph.content.view.ViewConnector;
import org.kie.workbench.common.stunner.core.graph.impl.NodeImpl;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.jgroups.util.Util.assertEquals;
import static org.junit.Assert.*;
@RunWith(PowerMockRunner.class)
@PrepareForTest(ContextUtils.class)
public class DefaultRouteFormProviderTest {
@Mock
SessionManager canvasSessionManager;
@Mock
FormRenderingContext context;
@Mock
ExclusiveDatabasedGateway gateway;
@Mock
DefaultRouteFormProvider defaultRouteFormProvider;
Node gatewayNode = new NodeImpl<>("node1");
@Mock
Edge edge1;
@Mock
Edge edge2;
@Mock
Edge edge3;
@Mock
Edge edge4;
@Mock
Edge edge5;
@Mock
ViewConnector edge1ViewConnector;
@Mock
ViewConnector edge2ViewConnector;
@Mock
ViewConnector edge3ViewConnector;
@Mock
ViewConnector edge4ViewConnector;
@Mock
ViewConnector edge5ViewConnector;
@Before
public void setUp() throws Exception {
PowerMockito.mockStatic(ContextUtils.class);
PowerMockito.when(ContextUtils.getModel(Mockito.any(FormRenderingContext.class))).
thenReturn(gateway);
Mockito.when(defaultRouteFormProvider.getExclusiveDatabasedGatewayNode(Mockito.any(ExclusiveDatabasedGateway.class))).
thenReturn(gatewayNode);
Mockito.doCallRealMethod().when(defaultRouteFormProvider).getSelectorData(Mockito.any(FormRenderingContext.class));
Mockito.doCallRealMethod().when(defaultRouteFormProvider).getGatewayOutEdges(Mockito.any(FormRenderingContext.class));
Mockito.when(edge1.getUUID()).thenReturn("Edge1");
Mockito.when(edge2.getUUID()).thenReturn("Edge2");
Mockito.when(edge3.getUUID()).thenReturn("Edge3");
Mockito.when(edge4.getUUID()).thenReturn("Edge4");
Mockito.when(edge5.getUUID()).thenReturn("Edge5");
Mockito.when(edge1.getContent()).thenReturn(edge1ViewConnector);
Mockito.when(edge2.getContent()).thenReturn(edge2ViewConnector);
Mockito.when(edge3.getContent()).thenReturn(edge3ViewConnector);
Mockito.when(edge4.getContent()).thenReturn(edge4ViewConnector);
Mockito.when(edge5.getContent()).thenReturn(edge5ViewConnector);
Mockito.when(edge1ViewConnector.getDefinition()).thenReturn(new SequenceFlow(new BPMNGeneralSet("sequence"),
null,
null,
null));
Mockito.when(edge2ViewConnector.getDefinition()).thenReturn(new SequenceFlow(new BPMNGeneralSet("sequence"),
null,
null,
null));
Mockito.when(edge3ViewConnector.getDefinition()).thenReturn(new SequenceFlow(new BPMNGeneralSet("sequence"),
null,
null,
null));
Mockito.when(edge4ViewConnector.getDefinition()).thenReturn(new SequenceFlow(new BPMNGeneralSet("sequence"),
null,
null,
null));
Mockito.when(edge5ViewConnector.getDefinition()).thenReturn(new SequenceFlow(new BPMNGeneralSet("sequence"),
null,
null,
null));
UserTask userTask1 = new UserTask(new TaskGeneralSet(new Name("UserTask1"),
null),
null,
null,
null,
null,
null,
null);
UserTask userTask2 = new UserTask(new TaskGeneralSet(new Name("UserTask2"),
null),
null,
null,
null,
null,
null,
null);
ScriptTask scriptTask3 = new ScriptTask(new TaskGeneralSet(new Name("ScriptTask3"),
null),
null,
null,
null,
null,
null,
null);
ExclusiveDatabasedGateway gateway4 = new ExclusiveDatabasedGateway(new BPMNGeneralSet("Gateway4"),
null,
null,
null,
null);
// Test object with empty name
ExclusiveDatabasedGateway gateway5 = new ExclusiveDatabasedGateway(new BPMNGeneralSet(""),
null,
null,
null,
null);
Mockito.when(defaultRouteFormProvider.getEdgeTarget(edge1)).thenReturn(userTask1);
Mockito.when(defaultRouteFormProvider.getEdgeTarget(edge2)).thenReturn(userTask2);
Mockito.when(defaultRouteFormProvider.getEdgeTarget(edge3)).thenReturn(scriptTask3);
Mockito.when(defaultRouteFormProvider.getEdgeTarget(edge4)).thenReturn(gateway4);
Mockito.when(defaultRouteFormProvider.getEdgeTarget(edge5)).thenReturn(gateway5);
}
@Test
public void testGetSelectorData() {
gatewayNode.getOutEdges().add(edge1);
gatewayNode.getOutEdges().add(edge2);
gatewayNode.getOutEdges().add(edge3);
gatewayNode.getOutEdges().add(edge4);
gatewayNode.getOutEdges().add(edge5);
SelectorData selectorData = defaultRouteFormProvider.getSelectorData(context);
Map<String, String> values = selectorData.getValues();
assertTrue(values.size() == 5);
assertEquals("UserTask1",
values.get("sequence : Edge1"));
assertEquals("UserTask2",
values.get("sequence : Edge2"));
assertEquals("ScriptTask3",
values.get("sequence : Edge3"));
assertEquals("Gateway4",
values.get("sequence : Edge4"));
assertEquals("Exclusive Gateway",
values.get("sequence : Edge5"));
}
}