package org.activiti.kickstart.service; import java.io.InputStream; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.test.ActivitiTestCase; import org.activiti.kickstart.diagram.ProcessDiagramGenerator; import org.activiti.kickstart.dto.KickstartForm; import org.activiti.kickstart.dto.KickstartFormProperty; import org.activiti.kickstart.dto.KickstartMailTask; import org.activiti.kickstart.dto.KickstartScriptTask; import org.activiti.kickstart.dto.KickstartServiceTask; import org.activiti.kickstart.dto.KickstartUserTask; import org.activiti.kickstart.dto.KickstartWorkflow; import org.junit.Test; public class KickstartServiceImplTest extends ActivitiTestCase { protected Bpmn20MarshallingService marshallingService = new MarshallingServiceImpl(); @Test public void testSimpleUserTask() throws Exception { KickstartWorkflow dto = createSimpleUserTaskWorkflow(); String bpmn = marshallingService.marshallWorkflow(dto); // System.out.println(bpmn); assertTrue(bpmn.indexOf("userTask ") > - 1); assertFalse(bpmn.indexOf("serviceTask ") > - 1); } @Test public void testSimpleUserTaskImage() throws Exception { KickstartWorkflow dto = createSimpleUserTaskWorkflow(); ProcessDiagramGenerator generator = new ProcessDiagramGenerator(dto, marshallingService); InputStream in = generator.execute(); assertNotNull(in); // createFile(in, "c:/temp/user.png"); } private KickstartWorkflow createSimpleUserTaskWorkflow() { KickstartWorkflow dto = new KickstartWorkflow(); dto.setName("One User Task Workflow"); dto.setDescription("Simple workflow definition containing one user task"); KickstartUserTask taskDto = new KickstartUserTask(); taskDto.setName("My First User task"); taskDto.setDescription("Desc first User task"); KickstartForm form = new KickstartForm(); KickstartFormProperty property = new KickstartFormProperty(); property.setProperty("name"); property.setType("text"); form.addFormProperty(property); taskDto.setForm(form); dto.addTask(taskDto); return dto; } @Test public void testSimpleServiceTask() throws Exception { KickstartWorkflow dto = createSimpleServiceTaskWorkflow(); String bpmn = marshallingService.marshallWorkflow(dto); //System.out.println(bpmn); assertTrue(bpmn.indexOf("serviceTask ") > - 1); assertTrue(bpmn.indexOf(":expression=\"#{my.favorite.expression}\"") > - 1); assertTrue(bpmn.indexOf(":class=\"de.test.MyClass\"") > - 1); assertTrue(bpmn.indexOf(":delegateExpression=\"#{myDelegateExpression}\"") > - 1); } @Test public void testSimpleServiceTaskImage() throws Exception { KickstartWorkflow dto = createSimpleServiceTaskWorkflow(); ProcessDiagramGenerator generator = new ProcessDiagramGenerator(dto, marshallingService); InputStream in = generator.execute(); assertNotNull(in); // createFile(in, "c:/temp/service.png"); } private KickstartWorkflow createSimpleServiceTaskWorkflow() { KickstartWorkflow dto = new KickstartWorkflow(); dto.setName("One Service Task Workflow"); dto.setDescription("Simple workflow definition containing one service task"); KickstartServiceTask task = new KickstartServiceTask(); task.setName("My First Service task"); task.setDescription("Desc first Service task"); task.setDelegateExpression("#{myDelegateExpression}"); task.setClassName("de.test.MyClass"); task.setExpression("#{my.favorite.expression}"); dto.addTask(task); return dto; } @Test public void testSimpleEmailTask() throws Exception { KickstartWorkflow dto = createSimpleEmailTaskWorkflow(); String bpmn = marshallingService.marshallWorkflow(dto); //System.out.println(bpmn); assertTrue(bpmn.indexOf("serviceTask ") > - 1); assertTrue(bpmn.indexOf(":type=\"mail\"") > - 1); assertTrue(bpmn.indexOf("name=\"to\"") > - 1); assertTrue(bpmn.indexOf(":string>test@mycompany.com</") > - 1); } @Test public void testSimpleEmailTaskWithAllFields() throws Exception { KickstartWorkflow dto = new KickstartWorkflow(); dto.setName("One Mail Task Workflow"); dto.setDescription("Simple workflow definition containing one mail task"); KickstartMailTask task = new KickstartMailTask(); task.setId("myId"); task.setName("My First Mail task"); task.setDescription("Desc first Mail task"); task.getTo().setStringValue("you@yourcompany.com"); task.getTo().setExpression("${to_email}"); task.getFrom().setStringValue("me@mycompany.com"); task.getFrom().setExpression("${from_email}"); task.getSubject().setStringValue("my subject string"); task.getSubject().setExpression("${my.subject.expression}"); task.getCc().setStringValue("my cc string"); task.getCc().setExpression("${my.cc.expression}"); task.getBcc().setStringValue("my bcc string"); task.getBcc().setExpression("${my.bcc.expression}"); task.getHtml().setStringValue("my html string"); task.getHtml().setExpression("${my.html.expression}"); task.getText().setStringValue("my text string"); task.getText().setExpression("${my.text.expression}"); dto.addTask(task); String bpmn = marshallingService.marshallWorkflow(dto); //System.out.println(bpmn); assertTrue(bpmn.indexOf("serviceTask ") > - 1); assertTrue(bpmn.indexOf(":type=\"mail\"") > - 1); assertTrue(bpmn.indexOf("name=\"to\"") > - 1); assertTrue(containsStringValue(bpmn, "you@yourcompany.com")); assertTrue(containsExpression(bpmn, "${to_email}")); assertTrue(bpmn.indexOf("name=\"from\"") > - 1); assertTrue(containsStringValue(bpmn, "me@mycompany.com")); assertTrue(containsExpression(bpmn, "${from_email}")); assertTrue(bpmn.indexOf("name=\"subject\"") > - 1); assertTrue(containsStringValue(bpmn, "my subject string")); assertTrue(containsExpression(bpmn, "${my.subject.expression}")); assertTrue(bpmn.indexOf("name=\"cc\"") > - 1); assertTrue(containsStringValue(bpmn, "my cc string")); assertTrue(containsExpression(bpmn, "${my.cc.expression}")); assertTrue(bpmn.indexOf("name=\"bcc\"") > - 1); assertTrue(containsStringValue(bpmn, "my bcc string")); assertTrue(containsExpression(bpmn, "${my.bcc.expression}")); assertTrue(bpmn.indexOf("name=\"html\"") > - 1); assertTrue(containsStringValue(bpmn, "my html string")); assertTrue(containsExpression(bpmn, "${my.html.expression}")); assertTrue(bpmn.indexOf("name=\"text\"") > - 1); assertTrue(containsStringValue(bpmn, "my text string")); assertTrue(containsExpression(bpmn, "${my.text.expression}")); } private boolean containsStringValue(String completeString, String strToCheck) { return completeString.indexOf(":string>" + strToCheck +"</") > - 1; } private boolean containsExpression(String completeString, String strToCheck) { return completeString.indexOf(":expression>" + strToCheck +"</") > - 1; } @Test public void testEmailTaskWithSomeFieldsOnly() throws Exception { KickstartWorkflow dto = new KickstartWorkflow(); dto.setName("One Mail Task Workflow"); dto.setDescription("Simple workflow definition containing one mail task"); KickstartMailTask task = new KickstartMailTask(); task.setId("myId"); task.setName("My First Mail task"); task.setDescription("Desc first Mail task"); task.getTo().setStringValue("you@yourcompany.com"); task.getSubject().setStringValue("my subject string"); task.getHtml().setExpression("${my.html.expression}"); task.getText().setStringValue("my text string"); dto.addTask(task); String bpmn = marshallingService.marshallWorkflow(dto); //System.out.println(bpmn); assertTrue(bpmn.indexOf("serviceTask ") > - 1); assertTrue(bpmn.indexOf(":type=\"mail\"") > - 1); assertTrue(bpmn.indexOf("name=\"to\"") > - 1); assertTrue(containsStringValue(bpmn, "you@yourcompany.com")); assertEquals(-1, bpmn.indexOf("name=\"from\"")); assertTrue(bpmn.indexOf("name=\"subject\"") > - 1); assertTrue(containsStringValue(bpmn, "my subject string")); assertEquals(-1, bpmn.indexOf("name=\"cc\"")); assertEquals(-1, bpmn.indexOf("name=\"bcc\"")); assertTrue(bpmn.indexOf("name=\"html\"") > - 1); assertTrue(containsExpression(bpmn, "${my.html.expression}")); assertTrue(bpmn.indexOf("name=\"text\"") > - 1); assertTrue(containsStringValue(bpmn, "my text string")); } @Test public void testSimpleEmailTaskImage() throws Exception { KickstartWorkflow dto = createSimpleEmailTaskWorkflow(); ProcessDiagramGenerator generator = new ProcessDiagramGenerator(dto, marshallingService); InputStream in = generator.execute(); assertNotNull(in); } private KickstartWorkflow createSimpleEmailTaskWorkflow() { KickstartWorkflow dto = new KickstartWorkflow(); dto.setName("One Mail Task Workflow"); dto.setDescription("Simple workflow definition containing one mail task"); KickstartMailTask task = new KickstartMailTask(); task.setId("myId"); task.setName("My First Mail task"); task.setDescription("Desc first Mail task"); task.getTo().setStringValue("test@mycompany.com"); task.getText().setStringValue("My text content"); dto.addTask(task); return dto; } @Test public void testDeployAndFindUserTaskWorkflow() throws Exception { KickstartWorkflow dto = createSimpleUserTaskWorkflow(); KickstartServiceFactory kickstartServiceFactory = new KickstartServiceFactory(); KickstartService service = kickstartServiceFactory.createActivitiStandaloneKickStartService(); String bpmn = marshallingService.marshallWorkflow(dto); System.out.println(bpmn); String deploymentId = service.deployWorkflow(dto, null); String pid = getDeployedProcessDefinitionId(deploymentId); KickstartWorkflow deployedDto = service.findWorkflowById(pid); assertEquals(dto.getName(), deployedDto.getName()); assertEquals(dto.getDescription(), deployedDto.getDescription()); assertTrue("Task should be a UserTask", deployedDto.getTasks().get(0) instanceof KickstartUserTask); KickstartUserTask task = (KickstartUserTask) deployedDto.getTasks().get(0); assertEquals("task_1", task.getId()); assertEquals("My First User task", task.getName()); assertEquals("Desc first User task", task.getDescription()); } @Test public void testDeployAndFindServiceTaskWorkflow() throws Exception { KickstartWorkflow dto = createSimpleServiceTaskWorkflow(); KickstartServiceFactory kickstartServiceFactory = new KickstartServiceFactory(); KickstartService service = kickstartServiceFactory.createActivitiStandaloneKickStartService(); String deploymentId = service.deployWorkflow(dto, null); String pid = getDeployedProcessDefinitionId(deploymentId); KickstartWorkflow deployedDto = service.findWorkflowById(pid); assertEquals(dto.getName(), deployedDto.getName()); assertEquals(dto.getDescription(), deployedDto.getDescription()); assertTrue("Task should be a ServiceTask", deployedDto.getTasks().get(0) instanceof KickstartServiceTask); KickstartServiceTask task = (KickstartServiceTask) deployedDto.getTasks().get(0); assertEquals("task_1", task.getId()); assertEquals("#{myDelegateExpression}", task.getDelegateExpression()); assertEquals("#{my.favorite.expression}", task.getExpression()); assertEquals("de.test.MyClass", task.getClassName()); } @Test public void testDeployAndFindEmailTaskWorkflowWithSomeElements() throws Exception { KickstartWorkflow dto = createSimpleEmailTaskWorkflow(); KickstartServiceFactory kickstartServiceFactory = new KickstartServiceFactory(); KickstartService service = kickstartServiceFactory.createActivitiStandaloneKickStartService(); String deploymentId = service.deployWorkflow(dto, null); String pid = getDeployedProcessDefinitionId(deploymentId); KickstartWorkflow deployedDto = service.findWorkflowById(pid); assertEquals(dto.getName(), deployedDto.getName()); assertEquals(dto.getDescription(), deployedDto.getDescription()); assertTrue("Task should be a MailTaskDto", deployedDto.getTasks().get(0) instanceof KickstartMailTask); KickstartMailTask task = (KickstartMailTask) deployedDto.getTasks().get(0); assertEquals("task_1", task.getId()); assertEquals("test@mycompany.com", task.getTo().getStringValue()); assertEquals("My text content", task.getText().getStringValue()); assertEquals(null, task.getFrom().getStringValue()); assertEquals(null, task.getFrom().getExpression()); assertEquals(null, task.getSubject().getStringValue()); assertEquals(null, task.getSubject().getExpression()); assertEquals(null, task.getCc().getStringValue()); assertEquals(null, task.getCc().getExpression()); assertEquals(null, task.getBcc().getStringValue()); assertEquals(null, task.getBcc().getExpression()); assertEquals(null, task.getHtml().getStringValue()); assertEquals(null, task.getHtml().getExpression()); } @Test public void testDeployAndFindEmailTaskWorkflowWithAllElements() throws Exception { KickstartWorkflow dto = new KickstartWorkflow(); dto.setName("One Mail Task Workflow"); dto.setDescription("Simple workflow definition containing one mail task"); KickstartMailTask taskDto = new KickstartMailTask(); taskDto.setName("My Email Task"); taskDto.setDescription("my email task description"); taskDto.getTo().setStringValue("you@yourcompany.com"); taskDto.getTo().setExpression("${to_email}"); taskDto.getFrom().setStringValue("me@mycompany.com"); taskDto.getFrom().setExpression("${from_email}"); taskDto.getSubject().setStringValue("my subject string"); taskDto.getSubject().setExpression("${my.subject.expression}"); taskDto.getCc().setStringValue("my cc string"); taskDto.getCc().setExpression("${my.cc.expression}"); taskDto.getBcc().setStringValue("my bcc string"); taskDto.getBcc().setExpression("${my.bcc.expression}"); taskDto.getHtml().setStringValue("my html string"); taskDto.getHtml().setExpression("${my.html.expression}"); taskDto.getText().setStringValue("my text string"); taskDto.getText().setExpression("${my.text.expression}"); dto.addTask(taskDto); KickstartServiceFactory kickstartServiceFactory = new KickstartServiceFactory(); KickstartService service = kickstartServiceFactory.createActivitiStandaloneKickStartService(); String deploymentId = service.deployWorkflow(dto, null); String pid = getDeployedProcessDefinitionId(deploymentId); KickstartWorkflow deployedDto = service.findWorkflowById(pid); assertEquals(dto.getName(), deployedDto.getName()); assertEquals(dto.getDescription(), deployedDto.getDescription()); assertTrue("Task should be a MailTaskDto", deployedDto.getTasks().get(0) instanceof KickstartMailTask); KickstartMailTask task = (KickstartMailTask) deployedDto.getTasks().get(0); assertEquals("task_1", task.getId()); assertEquals("you@yourcompany.com", task.getTo().getStringValue()); assertEquals("${to_email}", task.getTo().getExpression()); assertEquals("me@mycompany.com", task.getFrom().getStringValue()); assertEquals("${from_email}", task.getFrom().getExpression()); assertEquals("my subject string", task.getSubject().getStringValue()); assertEquals("${my.subject.expression}", task.getSubject().getExpression()); assertEquals("my cc string", task.getCc().getStringValue()); assertEquals("${my.cc.expression}", task.getCc().getExpression()); assertEquals("my bcc string", task.getBcc().getStringValue()); assertEquals("${my.bcc.expression}", task.getBcc().getExpression()); assertEquals("my html string", task.getHtml().getStringValue()); assertEquals("${my.html.expression}", task.getHtml().getExpression()); assertEquals("my text string", task.getText().getStringValue()); assertEquals("${my.text.expression}", task.getText().getExpression()); } private String getDeployedProcessDefinitionId(final String deploymentId) { ProcessDefinition process = processEngine.getRepositoryService() .createProcessDefinitionQuery() .deploymentId(deploymentId) .singleResult(); return process.getId(); } @Test public void testTwoParallelServiceTasks() throws Exception { KickstartWorkflow dto = new KickstartWorkflow(); dto.setName("One Service Task Workflow"); dto.setDescription("Simple workflow definition containing one service task"); KickstartServiceTask task1 = new KickstartServiceTask(); task1.setId("myFirstId"); task1.setName("My First Service task"); task1.setDescription("Desc first Service task"); task1.setDelegateExpression("#{myFirstDelegateExpression}"); task1.setClassName("de.test.MyFirstClass"); task1.setExpression("#{my.favorite.first.expression}"); dto.addTask(task1); KickstartServiceTask task2 = new KickstartServiceTask(); task2.setId("mySecondId"); task2.setName("My Second Service task"); task2.setDescription("Desc Second Service task"); task2.setDelegateExpression("#{mySecondDelegateExpression}"); task2.setClassName("de.test.MySecondClass"); task2.setExpression("#{my.favorite.second.expression}"); task2.setStartWithPrevious(true); dto.addTask(task2); ProcessDiagramGenerator generator = new ProcessDiagramGenerator(dto, marshallingService); InputStream in = generator.execute(); assertNotNull(in); // createFile(in, "c:/temp/parallel.png"); String bpmn = marshallingService.marshallWorkflow(dto); //System.out.println(bpmn); assertTrue(bpmn.indexOf("serviceTask ") > - 1); assertTrue(bpmn.indexOf(":delegateExpression=\"#{myFirstDelegateExpression}\"") > - 1); assertTrue(bpmn.indexOf(":delegateExpression=\"#{mySecondDelegateExpression}\"") > - 1); } @Test public void testSimpleScriptTask() throws Exception { // <scriptTask id="theScriptTask" name="Execute script" scriptFormat="juel" activiti:resultVariableName="myVar"> // <script>#{echo}</script> // </scriptTask> KickstartWorkflow dto = createSimpleScriptTask(); String bpmn = marshallingService.marshallWorkflow(dto); //System.out.println(bpmn); assertTrue(bpmn.indexOf("scriptTask ") > - 1); assertTrue(bpmn.indexOf("scriptFormat=\"juel\"") > - 1); assertTrue(bpmn.indexOf(":resultVariableName=\"myVar\"") > - 1); // assertTrue(bpmn.indexOf("<script>#{echo}</script>") > - 1); } @Test public void testSimpleScriptTaskImage() throws Exception { KickstartWorkflow dto = createSimpleScriptTask(); ProcessDiagramGenerator generator = new ProcessDiagramGenerator(dto, marshallingService); InputStream in = generator.execute(); assertNotNull(in); // createFile(in, "c:/temp/script.png"); } private KickstartWorkflow createSimpleScriptTask() { KickstartWorkflow dto = new KickstartWorkflow(); dto.setName("One Script Task Workflow"); dto.setDescription("Simple workflow definition containing one script task"); KickstartScriptTask scriptDto = new KickstartScriptTask(); scriptDto.setId("theScriptTask"); scriptDto.setName("Execute script"); scriptDto.setScriptFormat("juel"); scriptDto.setResultVariableName("myVar"); scriptDto.setScript("#{echo}"); dto.addTask(scriptDto); return dto; } @Test public void testDeployAndFindScriptTaskWorkflow() throws Exception { KickstartWorkflow dto = createSimpleScriptTask(); KickstartServiceFactory kickstartServiceFactory = new KickstartServiceFactory(); KickstartService service = kickstartServiceFactory.createActivitiStandaloneKickStartService(); String deploymentId = service.deployWorkflow(dto, null); String pid = getDeployedProcessDefinitionId(deploymentId); KickstartWorkflow deployedDto = service.findWorkflowById(pid); assertEquals(dto.getName(), deployedDto.getName()); assertEquals(dto.getDescription(), deployedDto.getDescription()); assertTrue("Task should be a ScriptTask", deployedDto.getTasks().get(0) instanceof KickstartScriptTask); KickstartScriptTask task = (KickstartScriptTask) deployedDto.getTasks().get(0); assertEquals("task_1", task.getId()); assertEquals("juel", task.getScriptFormat()); assertEquals("myVar", task.getResultVariableName()); assertEquals("#{echo}", task.getScript()); } // private void createFile(final InputStream imageStream, final String fileName) throws Exception { // File f = new File(fileName); // if (f.exists()) { // f.delete(); // } // OutputStream out = new FileOutputStream(f); // byte[] buf = new byte[1024]; // int len; // while ((len = imageStream.read(buf)) > 0) { // out.write(buf, 0, len); // } // out.close(); // imageStream.close(); // } }