package betsy.bpmn.model;
import java.nio.file.Paths;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import betsy.bpmn.engines.AbstractBPMNEngine;
import betsy.common.model.AbstractTestSuite;
public class BPMNTestSuite extends AbstractTestSuite<AbstractBPMNEngine, BPMNProcess> {
/**
* Factory method for a list of engines and processes.
*
* @param engines a list of engines to be included in the test suite
* @param processes a list of processes to be included in the test suite
* @param testFolderName
* @return a test suite where each engine tests all passed processes
*/
public static BPMNTestSuite createTests(List<AbstractBPMNEngine> engines, final List<BPMNProcess> processes, String testFolderName) {
BPMNTestSuite test = new BPMNTestSuite();
test.setPath(Paths.get(testFolderName));
for (AbstractBPMNEngine engine : engines) {
List<BPMNProcess> clonedProcesses = processes.stream().map(BPMNProcess::createCopyWithoutEngine).collect(Collectors.toList());
// link them
for (BPMNProcess process : clonedProcesses) {
process.setEngine(engine);
engine.getProcesses().add(process);
}
// set parentFolder
engine.setParentFolder(test.getPath());
}
test.setEngines(engines);
test.setProcessesCount(getProcessesCount(engines));
Collections.shuffle(engines);
for (AbstractBPMNEngine engine : engines) {
Collections.shuffle(engine.getProcesses());
}
return test;
}
public static int getProcessesCount(List<AbstractBPMNEngine> engines) {
int result = 0;
for (AbstractBPMNEngine engine : engines) {
result += engine.getProcesses().size();
}
return result;
}
}