package org.activiti.crystalball.generator;
/*
* #%L
* simulator
* %%
* Copyright (C) 2012 - 2013 crystalball
* %%
* 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.
* #L%
*/
import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.task.Task;
import org.apache.commons.io.FileUtils;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ProcessInstancesGeneratorTest extends PluggableActivitiTestCase {
private static String PROCESS_KEY = "threetasksprocess";
private List<String> processInstanceIds;
protected void setUp() throws Exception {
super.setUp();
repositoryService
.createDeployment()
.addClasspathResource(
"org/activiti/crystalball/simulator/ThreeTasksProcess.bpmn")
.deploy();
processInstanceIds = new ArrayList<String>();
for (int i = 0; i < 4; i++) {
processInstanceIds.add(runtimeService.startProcessInstanceByKey(
PROCESS_KEY, "BUSINESS-KEY-" + i).getId());
}
// init identity service
identityService.saveGroup( identityService.newGroup("Group1") );
identityService.saveGroup( identityService.newGroup("Group2") );
identityService.saveGroup( identityService.newGroup("Group3") );
identityService.saveUser( identityService.newUser("user1") );
identityService.saveUser( identityService.newUser("user2") );
identityService.saveUser( identityService.newUser("user3") );
identityService.createMembership("user1", "Group1");
identityService.createMembership("user2", "Group2");
identityService.createMembership("user3", "Group3");
}
protected void tearDown() throws Exception {
for (org.activiti.engine.repository.Deployment deployment : repositoryService
.createDeploymentQuery().list()) {
repositoryService.deleteDeployment(deployment.getId(), true);
}
identityService.deleteMembership("user1", "Group1");
identityService.deleteMembership("user2", "Group2");
identityService.deleteMembership("user3", "Group3");
identityService.deleteUser( "user1");
identityService.deleteUser( "user2");
identityService.deleteUser( "user3");
identityService.deleteGroup( "Group1");
identityService.deleteGroup( "Group2");
identityService.deleteGroup( "Group3");
super.tearDown();
}
/**
* Generate ProcessInstances reports for started ThreeTask process. <br/>
* The first report should have <a href="https://raw.github.com/gro-mar/activiti/crystalball/master/simulator/src/test/resources/org/activiti/crystalball/generator/ProcessInstanceMonitor-1.png">4 tasks on the first node<a>.<br/>
* 3 tasks are completed - <a href="https://raw.github.com/gro-mar/activiti/crystalball/master/simulator/src/test/resources/org/activiti/crystalball/generator/ProcessInstanceMonitor-2.png">1 task on the first node 3 tasks on the second.<a><br/>
* 3 tasks from the 2nd node are completed - <a href="https://raw.github.com/gro-mar/activiti/crystalball/master/simulator/src/test/resources/org/activiti/crystalball/generator/ProcessInstanceMonitor-3.png">1 task on the first node 3 tasks on the 3rd<a>.<br/>
* 3 tasks from the 3rd node are completed - <a href="https://raw.github.com/gro-mar/activiti/crystalball/master/simulator/src/test/resources/org/activiti/crystalball/generator/ProcessInstanceMonitor-4.png">1 task on the first node remains<a>
* @throws IOException
*/
public void testGenerateProcessDefinition() throws IOException {
ProcessInstancesGenerator monitor = new ProcessInstancesGenerator();
monitor.setRepositoryService(repositoryService);
monitor.setRuntimeService(runtimeService);
List<ColorInterval> highlightColorIntervalList = new ArrayList<ColorInterval>();
highlightColorIntervalList.add( new ColorInterval(1, Color.red));
monitor.setHighlightColorIntervalList(highlightColorIntervalList);
String processDefinitionId = repositoryService.createProcessDefinitionQuery().processDefinitionKey( PROCESS_KEY).singleResult().getId();
monitor.generateReport( processDefinitionId, null, null, "target/ProcessInstanceMonitor-1.png");
File expectedFile = new File("src/test/resources/org/activiti/crystalball/generator/ProcessInstanceMonitor-1.png" );
File generatedFile = new File("target/ProcessInstanceMonitor-1.png" );
assertTrue(FileUtils.contentEquals(expectedFile, generatedFile));
// move 3 tasks forward
List<Task> taskList = taskService.createTaskQuery().taskCandidateUser("user1").list();
for (int i = 0; i < 3; i++) {
Task t = taskList.get(i);
taskService.claim( t.getId(), "user1" );
taskService.complete(t.getId());
}
monitor.generateReport( processDefinitionId, null, null, "target/ProcessInstanceMonitor-2.png");
expectedFile = new File("src/test/resources/org/activiti/crystalball/generator/ProcessInstanceMonitor-2.png" );
generatedFile = new File("target/ProcessInstanceMonitor-2.png" );
assertTrue(FileUtils.contentEquals(expectedFile, generatedFile));
// move 3 tasks forward
taskList = taskService.createTaskQuery().taskCandidateUser("user2").list();
for (Task t : taskList) {
taskService.claim( t.getId(), "user2" );
taskService.complete(t.getId());
}
monitor.generateReport( processDefinitionId, null, null, "target/ProcessInstanceMonitor-3.png");
expectedFile = new File("src/test/resources/org/activiti/crystalball/generator/ProcessInstanceMonitor-3.png" );
generatedFile = new File("target/ProcessInstanceMonitor-3.png" );
assertTrue(FileUtils.contentEquals(expectedFile, generatedFile));
// move 3 tasks forward
taskList = taskService.createTaskQuery().taskCandidateUser("user3").list();
for (Task t : taskList) {
taskService.claim( t.getId(), "user3" );
taskService.complete(t.getId());
}
monitor.generateReport( processDefinitionId, null, null, "target/ProcessInstanceMonitor-4.png");
expectedFile = new File("src/test/resources/org/activiti/crystalball/generator/ProcessInstanceMonitor-4.png" );
generatedFile = new File("target/ProcessInstanceMonitor-4.png" );
assertTrue(FileUtils.contentEquals(expectedFile, generatedFile));
}
public void testGenerateHistoricInstances() throws IOException {
HistoricInstancesGenerator monitor = new HistoricInstancesGenerator();
monitor.setRepositoryService(repositoryService);
monitor.setHistoryService(historyService);
List<ColorInterval> highlightColorIntervalList = new ArrayList<ColorInterval>();
highlightColorIntervalList.add( new ColorInterval(4, Color.green));
highlightColorIntervalList.add( new ColorInterval(1,3, Color.yellow));
highlightColorIntervalList.add( new ColorInterval(0,0, Color.red));
monitor.setHighlightColorIntervalList(highlightColorIntervalList);
String processDefinitionId = repositoryService.createProcessDefinitionQuery().processDefinitionKey( PROCESS_KEY).singleResult().getId();
monitor.generateReport( processDefinitionId, null, null, "target/HistoricInstanceMonitor-1.png");
File expectedFile = new File("src/test/resources/org/activiti/crystalball/generator/HistoricInstanceMonitor-1.png" );
File generatedFile = new File("target/HistoricInstanceMonitor-1.png" );
assertTrue(FileUtils.contentEquals(expectedFile, generatedFile));
// move 3 tasks forward
List<Task> taskList = taskService.createTaskQuery().taskCandidateUser("user1").list();
for (int i = 0; i < 3; i++) {
Task t = taskList.get(i);
taskService.claim( t.getId(), "user1" );
taskService.complete(t.getId());
}
monitor.generateReport( processDefinitionId, null, null, "target/HistoricInstanceMonitor-2.png");
expectedFile = new File("src/test/resources/org/activiti/crystalball/generator/HistoricInstanceMonitor-2.png" );
generatedFile = new File("target/HistoricInstanceMonitor-2.png" );
assertTrue(FileUtils.contentEquals(expectedFile, generatedFile));
// move 3 tasks forward
taskList = taskService.createTaskQuery().taskCandidateUser("user2").list();
for (Task t : taskList) {
taskService.claim( t.getId(), "user2" );
taskService.complete(t.getId());
}
monitor.generateReport( processDefinitionId, null, null, "target/HistoricInstanceMonitor-3.png");
expectedFile = new File("src/test/resources/org/activiti/crystalball/generator/HistoricInstanceMonitor-3.png" );
generatedFile = new File("target/HistoricInstanceMonitor-3.png" );
assertTrue(FileUtils.contentEquals(expectedFile, generatedFile));
// move 3 tasks forward
taskList = taskService.createTaskQuery().taskCandidateUser("user3").list();
for (Task t : taskList) {
taskService.claim( t.getId(), "user3" );
taskService.complete(t.getId());
}
monitor.generateReport( processDefinitionId, null, null, "target/HistoricInstanceMonitor-4.png");
expectedFile = new File("src/test/resources/org/activiti/crystalball/generator/HistoricInstanceMonitor-4.png" );
generatedFile = new File("target/HistoricInstanceMonitor-4.png" );
assertTrue(FileUtils.contentEquals(expectedFile, generatedFile));
}
}