cancel
Showing results for 
Search instead for 
Did you mean: 

exclusiveTest with local variable

tomi87
Champ in-the-making
Champ in-the-making
Hello I need some help for my test.
At first I'm really not sure if this test to test a XOR gate with this code is working:


package org.bpmwithactiviti.Part1ApplicationTest;
import static org.junit.Assert.*;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.task.Task;
import org.activiti.engine.test.ActivitiRule;
import org.activiti.engine.test.Deployment;
import org.junit.Rule;
import org.junit.Test;

public class XORAdvisorOrNot {
   @Rule
   public ActivitiRule activitiRule = new ActivitiRule();
   @Test
   // deploys process with form properties
   @Deployment(resources = { "Part1Application.bpmn20.xml" })
   public void testProjectDecision() {

      // Test with input == true
       RuntimeService runtimeService = activitiRule.getRuntimeService();
       runtimeService.startProcessInstanceByKey("decideToBeTheAdvisorForTheStudent");
       runtimeService.setVariableLocal("requestAccepted", "Do you accepted this request?", "Yes");
     
       TaskService taskService = activitiRule.getTaskService();
      
       Task task = taskService.createTaskQuery().singleResult();
       assertEquals("XORAdvisorOrNot", task.getId());
       task = taskService.createTaskQuery().singleResult();
       assertEquals("PG1a", task.getId());
      taskService.complete(task.getId());
         
       // Test with input == false
       runtimeService.startProcessInstanceByKey("decideToBeTheAdvisorForTheStudent");
       runtimeService.setVariableLocal("requestAccepted", "Do you accepted this request?", "Yes");
      
       task = taskService.createTaskQuery().singleResult();
       assertEquals("XORAdvisorOrNot", task.getId());
       task = taskService.createTaskQuery().singleResult();
       assertEquals("searchAProfessorAsAdvisor", task.getId());
      taskService.complete(task.getId());
   }
}
Part1Application.bpm20.xml
<process id="part1Application">

<userTask id="decideToBeTheAdvisorForTheStudent" name="decide to be the advisor for the student"
         activiti:candidateGroups="AdvisorGroup">
         <documentation>advisor</documentation>
      
         <extensionElements>
            <activiti:formProperty id="requestAccepted"
               name="Do you accepted this request?" required="true" type="enum">
               <activiti:value id="true" name="Yes" />
               <activiti:value id="false" name="No" />
            </activiti:formProperty>
            <activiti:formProperty id="comments" name="Comments">
            </activiti:formProperty>
         </extensionElements>
   </userTask>
   <sequenceFlow id="flow103" name="" sourceRef="decideToBeTheAdvisorForTheStudent" targetRef="XORAdvisorOrNot">      </sequenceFlow>
      <exclusiveGateway id="XORAdvisorOrNot" name="" />
      <sequenceFlow id="flow104" name="request is accepted" sourceRef="XORAdvisorOrNot" targetRef="PG1a">
         <conditionExpression xsi:type="tFormalExpression">${requestAccepted == true}</conditionExpression>
      </sequenceFlow>
      <sequenceFlow id="flow105" name="request is refused"
         sourceRef="XORAdvisorOrNot" targetRef="searchAProfessorAsAdvisor">
         <conditionExpression xsi:type="tFormalExpression">${requestAccepted == false}</conditionExpression>
      </sequenceFlow>

Second, if I start this test I get a error message:

org.activiti.engine.ActivitiException: no processes deployed with key 'decideToBeTheAdvisorForTheStudent'
at org.activiti.engine.impl.persistence.deploy.DeploymentCache.findDeployedLatestProcessDefinitionByKey(DeploymentCache.java:63)
   at org.activiti.engine.impl.cmd.StartProcessInstanceCmd.execute(StartProcessInstanceCmd.java:58)
   at org.activiti.engine.impl.cmd.StartProcessInstanceCmd.execute(StartProcessInstanceCmd.java:31)
   at org.activiti.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24)
   at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:42)
   at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33)
   at org.activiti.engine.impl.RuntimeServiceImpl.startProcessInstanceByKey(RuntimeServiceImpl.java:47)
   at org.bpmwithactiviti.Part1ApplicationTest.XORAdvisorOrNot.testProjectDecision(XORAdvisorOrNot.java:35)
   …
How can I deploy this user case? What should I change?
5 REPLIES 5

trademak
Star Contributor
Star Contributor
Hi,

You have a process id of part1Application so you should use that key to start the process instance.

Best regards,

tomi87
Champ in-the-making
Champ in-the-making
ok like this:
@Rule
//public ActivitiRule activitiRule = new ActivitiRule("activiti.cfg-mem.xml");
public ActivitiRule activitiRule = new ActivitiRule();

@Test
// deploys process with form properties
@Deployment(resources = { "Part1Application.bpmn20.xml" })
public void testProjectDecision() {

 
  // Test with input == true
  RuntimeService runtimeService = activitiRule.getRuntimeService();
     runtimeService.startProcessInstanceByKey("part1Application");
     runtimeService.setVariableLocal("requestAccepted", "Do you accepted this request?", "Yes");
   
     TaskService taskService = activitiRule.getTaskService();
    
     Task task = taskService.createTaskQuery().singleResult();
     assertEquals("XORAdvisorOrNot", task.getId());
     task = taskService.createTaskQuery().singleResult();
     assertEquals("PG1a", task.getId());
  taskService.complete(task.getId());
 
 
  // Test with input == false
  runtimeService.startProcessInstanceByKey("part1Application");
     runtimeService.setVariableLocal("requestAccepted", "Do you accepted this request?", "Yes");
    
     task = taskService.createTaskQuery().singleResult();
     assertEquals("XORAdvisorOrNot", task.getId());
     task = taskService.createTaskQuery().singleResult();
     assertEquals("searchAProfessorAsAdvisor", task.getId());
  taskService.complete(task.getId());
}
}

But how can I start from the usertask "decideToBeTheAdvisorForTheStudent" ? Because I just want to test the XOR and the both following tasks.

The code from "Part1Application.bpmn20.xml" is the following:


<process id="part1Application">
  <startEvent id="start">
   <extensionElements>
    <activiti:formProperty id="studentName" name="Studenten Name"
     required="true" type="string" />
    <activiti:formProperty id="emailAddress" name="Email address"
     required="true" type="string" />
    <activiti:formProperty id="dateFrom" name="Date from"
     required="true" type="long" />
    <activiti:formProperty id="dateToo" name="Date too"
     required="true" type="long" />
    <activiti:formProperty id="homeCountry" name="Home Country"
     required="true" type="string" />
    <activiti:formProperty id="homeUniversity"
     name="Home University" required="true" type="string" />
    <activiti:formProperty id="homeDepartment"
     name="Home Department" required="true" type="string" />
    <activiti:formProperty id="targetUniversity"
     name="Target University" required="true" type="string" />
    <activiti:formProperty id="targetDepartment"
     name="Target Department" required="true" type="string" />
    <activiti:formProperty id="research" name="Research"
     required="true" type="string" />
    <activiti:formProperty id="courseEnrollment"
     name="Course Enrollment" required="true" type="string" />
    <activiti:formProperty id="project" name="With project"
     required="true" type="boolean" />
   </extensionElements>
  </startEvent>
  <sequenceFlow id="flow114" sourceRef="start" targetRef="createRequest"></sequenceFlow>
  <serviceTask id="createRequest" name="Create Request"
   activiti:class="org.process1.CreateStudentApp"></serviceTask>
  <sequenceFlow id="flow129" sourceRef="createRequest"
   targetRef="PG1aa"></sequenceFlow>
  <parallelGateway id="PG1aa" name=""></parallelGateway>
  <sequenceFlow id="flow116" name="" sourceRef="PG1aa"
   targetRef="requestOfEnrollingIsGivenToTheChairman"></sequenceFlow>
  <userTask id="requestOfEnrollingIsGivenToTheChairman" name="request of enrolling is given to the chairman"
   activiti:candidateGroups="DoEE C">
   <documentation>chairman</documentation>
  </userTask>
  <sequenceFlow id="flow117" name=""
   sourceRef="requestOfEnrollingIsGivenToTheChairman" targetRef="sendInformationToTheOoEE"></sequenceFlow>
  <userTask id="sendInformationToTheOoEE"
   name="send information to the office of electrical engineering"
   activiti:candidateGroups="DoEE C">
   <documentation>chairman</documentation>
  </userTask>
  <sequenceFlow id="flow68" sourceRef="sendInformationToTheOoEE"
   targetRef="PG1bb"></sequenceFlow>

  <!– XOR Project or not –>
  <sequenceFlow id="flow115" name="" sourceRef="PG1aa"
   targetRef="XORAProjectOrNot"></sequenceFlow>
  <exclusiveGateway id="XORAProjectOrNot" name="" />
  <sequenceFlow id="flow63" name="Project" sourceRef="XORAProjectOrNot"
   targetRef="sendInformationsFromTheProfessors">
   <conditionExpression xsi:type="tFormalExpression">${StudentAppInfo.project == true}</conditionExpression>
  </sequenceFlow>
  <sequenceFlow id="flow69" name="No Project" sourceRef="XORAProjectOrNot"
   targetRef="XORBProjectOrNot">
   <conditionExpression xsi:type="tFormalExpression">${StudentAppInfo.project == false}</conditionExpression>
  </sequenceFlow>

  <!– Send a email with a list of advisor to the student –>
  <userTask id="sendInformationsFromTheProfessors" name="send informations from the professors"
   activiti:candidateGroups="DoEE O">
   <extensionElements>
   <activiti:formProperty id="advisorList" name="Advisors"/>
   </extensionElements>
    </userTask>
  <sequenceFlow id="flow1" name=""
   sourceRef="sendInformationsFromTheProfessors" targetRef="searchAProfessorAsAdvisor"></sequenceFlow>

  <userTask id="searchAProfessorAsAdvisor" name="search a professor as advisor"
   activiti:candidateGroups="student">
   <documentation>Student</documentation>
   <extensionElements>
    <!– displays the customer name and set field to read-only –>
    <activiti:formProperty id="advisorList" name="List of advisors"
     expression="${advisorList}" writable="false" />
    <activiti:formProperty id="advisorName" name="Advisor"/>
   </extensionElements> 
  </userTask>
  <sequenceFlow id="flow2" name="" sourceRef="searchAProfessorAsAdvisor"
   targetRef="askTheProfessorIfHeWouldBeAdvisor"></sequenceFlow>
  <userTask id="askTheProfessorIfHeWouldBeAdvisor" name="ask the professor if he would be advisor"
   activiti:candidateGroups="student">
   <documentation>Student</documentation>
  </userTask>
  <sequenceFlow id="flow102" name=""
   sourceRef="askTheProfessorIfHeWouldBeAdvisor" targetRef="decideToBeTheAdvisorForTheStudent"></sequenceFlow>
  <userTask id="decideToBeTheAdvisorForTheStudent" name="decide to be the advisor for the student"
   activiti:candidateGroups="AdvisorGroup">
   <documentation>advisor</documentation>
 
   <extensionElements>
    <!– displays the customer name and set field to read-only –>
    <activiti:formProperty id="studentName" name="Student name"
     expression="${StudentAppInfo.studentName}" writable="false" />

    <activiti:formProperty id="homeCountry" name="Home Country"
     expression="StudentAppInfo.homeCountry" writable="false" />

    <activiti:formProperty id="research" name="Research"
     expression="StudentAppInfo.research" writable="false" />

    <activiti:formProperty id="dateFrom" name="Date from"
     expression="StudentAppInfo.dateFrom" writable="false" />

    <activiti:formProperty id="dateToo" name="Date too"
     expression="StudentAppInfo.dateToo" writable="false" />

    <activiti:formProperty id="homeUniversity"
     name="Home University" expression="StudentAppInfo.homeUniversity"
     writable="false" />

    <activiti:formProperty id="homeDepartment"
     name="Home Department" expression="StudentAppInfo.homeDepartment"
     writable="false" />

    <!– Defines new requestApproved process variable –>
    <activiti:formProperty id="requestAccepted"
     name="Do you accepted this request?" required="true" type="enum">
     <activiti:value id="true" name="Yes" />
     <activiti:value id="false" name="No" />
    </activiti:formProperty>
    <activiti:formProperty id="comments" name="Comments"/>
   </extensionElements>
  </userTask>
  <sequenceFlow id="flow103" name=""
   sourceRef="decideToBeTheAdvisorForTheStudent" targetRef="XORAdvisorOrNot"></sequenceFlow>
  <exclusiveGateway id="XORAdvisorOrNot" name="" />
  <sequenceFlow id="flow104" name="request is accepted"
   sourceRef="XORAdvisorOrNot" targetRef="PG1a">
   <conditionExpression xsi:type="tFormalExpression">${requestAccepted
    == true}</conditionExpression>
  </sequenceFlow>
  <sequenceFlow id="flow105" name="request is refused"
   sourceRef="XORAdvisorOrNot" targetRef="searchAProfessorAsAdvisor">
   <conditionExpression xsi:type="tFormalExpression">${requestAccepted
    == false}</conditionExpression>
  </sequenceFlow>

  <parallelGateway id="PG1a" name=""></parallelGateway>
  <sequenceFlow id="flow61" name="" sourceRef="PG1a"
   targetRef="sendThisInfoToTheChairman"></sequenceFlow>
  <sequenceFlow id="flow106" name="" sourceRef="PG1a"
   targetRef="sendInfoToTheOoEE"></sequenceFlow>
  <userTask id="sendThisInfoToTheChairman" name="send this information to the chairman"
   activiti:candidateGroups="AdvisorGroup">
   <documentation>advisor</documentation>
  </userTask>
  <sequenceFlow id="flow7" name="" sourceRef="sendThisInfoToTheChairman"
   targetRef="PG1b"></sequenceFlow>
  <userTask id="sendInfoToTheOoEE" name="send info to the Office of EE" activiti:candidateGroups="AdvisorGroup">
      <documentation>advisor</documentation>
   <documentation>chairman</documentation>
  </userTask>
  <sequenceFlow id="flow107" name="" sourceRef="sendInfoToTheOoEE"
   targetRef="PG1b"></sequenceFlow>
  <parallelGateway id="PG1b" name=""></parallelGateway>
  <sequenceFlow id="flow124" name="" sourceRef="PG1b"
   targetRef="XORBProjectOrNot"></sequenceFlow>
  
  <exclusiveGateway id="XORBProjectOrNot" name=""></exclusiveGateway>
  <sequenceFlow id="flow125" name="" sourceRef="XORBProjectOrNot"
   targetRef="PG1bb"></sequenceFlow>
  <parallelGateway id="PG1bb" name=""></parallelGateway>
  <sequenceFlow id="flow126" name="" sourceRef="PG1bb"
   targetRef="certificateTheEnrollingOfTheUniversity"></sequenceFlow>

  <userTask id="certificateTheEnrollingOfTheUniversity" name="certificate the enrolling of the university"
   activiti:candidateGroups="DoEE C">
   <documentation>chairman</documentation>
  </userTask>
   <sequenceFlow id="flow71" sourceRef="certificateTheEnrollingOfTheUniversity" targetRef="studentGetTheCertificate"></sequenceFlow>
   
    <userTask id="studentGetTheCertificate" name="student get the certificate" activiti:candidateGroups="student">
      <documentation>Student</documentation>

    </userTask>
     <sequenceFlow id="flow130" sourceRef="studentGetTheCertificate" targetRef= "end"></sequenceFlow>  
  <endEvent id="end" />
 
</process>
</definitions>

tomi87
Champ in-the-making
Champ in-the-making
Or should I have to devide  the "Part1Application.bpmn20.xml" into separate parts, so that I can write a test for each ".bpmn20.xml" file. Like this:
{startForm, CreateStartform}  {UserTask,XOR,UserTask,UserTask}

tomi87
Champ in-the-making
Champ in-the-making
I need help for this. =(

frederikherema1
Star Contributor
Star Contributor
You can't expect the forum users to help you write your code. There is no need to divide your process into separate parts, you can, for example, create a unit-test for each possible "path" in your process.

Second, when you start a process, you should specify the process-definition key, NOT the id of the UserTask (decideToBeTheAdvisorForTheStudent, in your case). I suggest reading through the http://activiti.org/userguide/index.html#10minutetutorial and looking into the API-section of the user guide first.