/* 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.activiti.cdi.test.bpmn;
import static org.junit.Assert.assertEquals;
import java.util.HashMap;
import javax.inject.Inject;
import javax.inject.Named;
import org.activiti.cdi.BusinessProcess;
import org.activiti.cdi.test.CdiActivitiTestCase;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.JavaDelegate;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.test.Deployment;
import org.junit.Test;
public class SignalEventTest extends CdiActivitiTestCase {
@Named
public static class SignalReceivedDelegate implements JavaDelegate {
@Inject
private BusinessProcess businessProcess;
public void execute(DelegateExecution execution) {
businessProcess.setVariable("processName", "catchSignal-visited (was " + businessProcess.getVariable("processName") + ")");
}
}
@Named
public static class SendSignalDelegate implements JavaDelegate {
@Inject
private RuntimeService runtimeService;
@Inject
private BusinessProcess businessProcess;
public void execute(DelegateExecution execution) throws Exception {
businessProcess.setVariable("processName", "throwSignal-visited (was " + businessProcess.getVariable("processName") + ")");
String signalProcessInstanceId = (String) execution.getVariable("signalProcessInstanceId");
String executionId = runtimeService.createExecutionQuery().processInstanceId(signalProcessInstanceId).signalEventSubscriptionName("alert").singleResult().getId();
runtimeService.signalEventReceived("alert", executionId);
}
}
@Test
@Deployment(resources = {"org/activiti/cdi/test/bpmn/SignalEventTests.catchAlertSignalBoundaryWithReceiveTask.bpmn20.xml",
"org/activiti/cdi/test/bpmn/SignalEventTests.throwAlertSignalWithDelegate.bpmn20.xml"})
public void testSignalCatchBoundaryWithVariables() {
HashMap<String, Object> variables1 = new HashMap<String, Object>();
variables1.put("processName", "catchSignal");
ProcessInstance piCatchSignal = runtimeService.startProcessInstanceByKey("catchSignal", variables1);
HashMap<String, Object> variables2 = new HashMap<String, Object>();
variables2.put("processName", "throwSignal");
variables2.put("signalProcessInstanceId", piCatchSignal.getProcessInstanceId());
ProcessInstance piThrowSignal = runtimeService.startProcessInstanceByKey("throwSignal", variables2);
assertEquals(1, runtimeService.createExecutionQuery().processInstanceId(piCatchSignal.getProcessInstanceId()).activityId("receiveTask").count());
assertEquals(1, runtimeService.createExecutionQuery().processInstanceId(piThrowSignal.getProcessInstanceId()).activityId("receiveTask").count());
assertEquals("catchSignal-visited (was catchSignal)", runtimeService.getVariable(piCatchSignal.getId(), "processName"));
assertEquals("throwSignal-visited (was throwSignal)", runtimeService.getVariable(piThrowSignal.getId(), "processName"));
// clean up
runtimeService.signal(piCatchSignal.getId());
runtimeService.signal(piThrowSignal.getId());
}
}