/*
* Copyright 2014 Effektif GmbH.
*
* 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 com.effektif.workflow.test;
import static org.junit.Assert.assertEquals;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Assert;
import com.effektif.workflow.api.workflowinstance.ActivityInstance;
import com.effektif.workflow.api.workflowinstance.ScopeInstance;
import com.effektif.workflow.api.workflowinstance.WorkflowInstance;
/**
* @author Tom Baeyens
*/
public class TestHelper {
public static void assertTextPresent(String expected, String actual) {
if (actual==null || !actual.contains(expected)) {
Assert.fail("Expected "+expected+" but was "+actual);
}
}
public static ActivityInstance findActivityInstanceOpen(WorkflowInstance workflowInstance, Object activityDefinitionId) {
return findActivityInstanceOpen(workflowInstance.getActivityInstances(), activityDefinitionId);
}
static ActivityInstance findActivityInstanceOpen(List<? extends ActivityInstance> activityInstances, Object activityDefinitionId) {
if (activityInstances!=null) {
for (ActivityInstance activityInstance: activityInstances) {
ActivityInstance theOne = findActivityInstanceOpen(activityInstance, activityDefinitionId);
if (theOne!=null) {
return theOne;
}
}
}
return null;
}
static ActivityInstance findActivityInstanceOpen(ActivityInstance activityInstance, Object activityDefinitionId) {
if (activityDefinitionId.equals(activityInstance.getActivityId())) {
return activityInstance;
}
return findActivityInstanceOpen(activityInstance.getActivityInstances(), activityDefinitionId);
}
public static void assertOpen(WorkflowInstance workflowInstance, String... expectedActivityNames) {
Map<String,Integer> expectedActivityCounts = new HashMap<String, Integer>();
if (expectedActivityNames!=null) {
for (String expectedActivityName: expectedActivityNames) {
Integer count = expectedActivityCounts.get(expectedActivityName);
expectedActivityCounts.put(expectedActivityName, count!=null ? count+1 : 1);
}
}
Map<String,Integer> activityCounts = new HashMap<String, Integer>();
scanActivityCounts(workflowInstance, activityCounts);
assertEquals(expectedActivityCounts, activityCounts);
}
static void scanActivityCounts(ScopeInstance scopeInstance, Map<String, Integer> activityCounts) {
List< ? extends ActivityInstance> activityInstances = scopeInstance.getActivityInstances();
if (activityInstances!=null) {
for (ActivityInstance activityInstance : activityInstances) {
if (!activityInstance.isEnded()) {
Object activityId = activityInstance.getActivityId();
Integer count = activityCounts.get(activityId);
activityCounts.put(activityId.toString(), count != null ? count + 1 : 1);
scanActivityCounts(activityInstance, activityCounts);
}
}
}
}
}