[jbpm-commits] JBoss JBPM SVN: r5627 - in jbpm4/trunk/modules: test-db/src/test/java/org/jbpm/test/task and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Sep 10 09:45:52 EDT 2009


Author: jbarrez
Date: 2009-09-10 09:45:51 -0400 (Thu, 10 Sep 2009)
New Revision: 5627

Modified:
   jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/task/Task.java
   jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/task/TaskQueryTest.java
Log:
Test case for JBPM-2535
Also added progress getter/setter to Task interface

Modified: jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/task/Task.java
===================================================================
--- jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/task/Task.java	2009-09-10 10:21:20 UTC (rev 5626)
+++ jbpm4/trunk/modules/api/src/main/java/org/jbpm/api/task/Task.java	2009-09-10 13:45:51 UTC (rev 5627)
@@ -24,6 +24,7 @@
 import java.io.Serializable;
 import java.util.Date;
 
+import org.jbpm.api.JbpmException;
 import org.jbpm.api.TaskService;
 import org.jbpm.api.history.HistoryTask;
 
@@ -91,6 +92,21 @@
    * Updates like this require you to invoke {@link TaskService#saveTask(Task)} afterwards. */
   void setPriority(int priority);
   
+  /** 
+   * The progress of this task. This is a data item for user purposes and 
+   * doesn't influence the functionality of the engine.
+   */
+  Integer getProgress();
+  
+  /**
+   * Change the progress of this task.
+   * Updates like this require you to invoke {@link TaskService#saveTask(Task)} afterwards.
+   * 
+   * <b>IMPORTANT</b>: Only values between 0 and 100 are accepted. 
+   *                   Using other values will cause a {@link JbpmException}.
+   */
+  void setProgress(Integer progress);
+  
   /** reference to the execution or null if this task is unrelated to an execution */
   String getExecutionId();
   

Modified: jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/task/TaskQueryTest.java
===================================================================
--- jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/task/TaskQueryTest.java	2009-09-10 10:21:20 UTC (rev 5626)
+++ jbpm4/trunk/modules/test-db/src/test/java/org/jbpm/test/task/TaskQueryTest.java	2009-09-10 13:45:51 UTC (rev 5627)
@@ -21,11 +21,19 @@
  */
 package org.jbpm.test.task;
 
+import java.lang.reflect.Method;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
 import org.jbpm.api.TaskQuery;
 import org.jbpm.api.task.Task;
+import org.jbpm.pvm.internal.model.ExecutionImpl;
+import org.jbpm.pvm.internal.task.TaskImpl;
+import org.jbpm.pvm.internal.util.ReflectUtil;
 import org.jbpm.test.JbpmTestCase;
 
 
@@ -41,10 +49,8 @@
 	task.setPriority(Integer.MAX_VALUE);
 	task.setDescription("make sure the test fails if property names are incorrect");
 	task.setDuedate(new Date());
-	String writeTestTaskId = taskService.saveTask(task);
+	String taskId = taskService.saveTask(task);
 	
-	//TaskQuery taskQuery = taskService.createTaskQuery();
-	
     checkProperty(taskService.createTaskQuery(), task, TaskQuery.PROPERTY_ASSIGNEE);
     checkProperty(taskService.createTaskQuery(), task, TaskQuery.PROPERTY_CREATEDATE);
     checkProperty(taskService.createTaskQuery(), task, TaskQuery.PROPERTY_DUEDATE);
@@ -52,7 +58,7 @@
     checkProperty(taskService.createTaskQuery(), task, TaskQuery.PROPERTY_PRIORITY);
     checkProperty(taskService.createTaskQuery(), task, TaskQuery.PROPERTY_PROGRESS);
     
-	taskService.deleteTaskCascade(writeTestTaskId);
+	taskService.deleteTaskCascade(taskId);
   }
   
   private void checkProperty(TaskQuery taskQuery, Task task, String propertyName) {
@@ -63,29 +69,8 @@
   }
 
   public void testSimplestTaskQuery() {
-    Task task = taskService.newTask();
-    task.setName("do laundry");
-    task.setAssignee("johndoe");
-    task.setPriority(3);
-    String laudryTaskId = taskService.saveTask(task);
+    List<Task> tasks = createTestTasks();
 
-    task = taskService.newTask();
-    task.setName("change dyper");
-    task.setAssignee("johndoe");
-    task.setPriority(1);
-    String dyperTaskId = taskService.saveTask(task);
-
-    task = taskService.newTask();
-    task.setName("start new business");
-    task.setAssignee("joesmoe");
-    task.setPriority(4);
-    String startBusinessTaskId = taskService.saveTask(task);
-
-    task = taskService.newTask();
-    task.setName("find venture capital");
-    task.setPriority(4);
-    String capitalTaskId = taskService.saveTask(task);
-
     List<Task> taskList = taskService
       .createTaskQuery()
       .list();
@@ -98,52 +83,178 @@
 
     assertEquals(4, taskList.size());
     
-    taskService.deleteTaskCascade(capitalTaskId);
-    taskService.deleteTaskCascade(startBusinessTaskId);
-    taskService.deleteTaskCascade(dyperTaskId);
-    taskService.deleteTaskCascade(laudryTaskId);
+    deleteTasks(tasks);
   }
 
-  public void testSimplestTaskQuerySortBy() {
-    Task task = taskService.newTask();
-    task.setName("do laundry");
-    task.setAssignee("johndoe");
-    task.setPriority(3);
-    String laudryTaskId = taskService.saveTask(task);
+  public void testOrderByName() {
+    testOrderBy(TaskQuery.PROPERTY_NAME, 
+            new String[] {"change dyper", "do laundry", "find venture capital", "start new business"});
+  }
+  
+  public void testOrderByAssignee() {
+    testOrderBy(TaskQuery.PROPERTY_ASSIGNEE, new String[] {null, "Joram", "Koen", "Tom"});
+  }
+  
+  public void testOrderByCreateTime() {
+    testOrderByResultsInNaturalOrdening(TaskQuery.PROPERTY_CREATEDATE, 4);
+  }
+  
+  public void testOrderByDueDate() {
+    testOrderByResultsInNaturalOrdening(TaskQuery.PROPERTY_DUEDATE, 4);
+  }
+  
+  public void testOrderByPriority() {
+    testOrderByResultsInNaturalOrdening(TaskQuery.PROPERTY_PRIORITY, 4);
+  }
+  
+  public void testOrderByProgress() {
+    testOrderBy(TaskQuery.PROPERTY_PROGRESS, new Integer[] {2, 15, 75, 99});
+  }
+  
+  
+  /* -------------------------------------------------------------------
+   * HELPER METHODS
+   * ------------------------------------------------------------------- */
+  
+  private List<Task> createTestTasks() {
+    List<Task> result = new ArrayList<Task>();
 
-    task = taskService.newTask();
-    task.setName("change dyper");
-    task.setAssignee("johndoe");
-    task.setPriority(1);
-    String dyperTaskId = taskService.saveTask(task);
+    Task task1 = taskService.newTask();
+    task1.setName("do laundry");
+    task1.setAssignee("Tom");
+    task1.setPriority(3);
+    task1.setDuedate(stringToDate("10/10/1985"));
+    task1.setProgress(15);
 
-    task = taskService.newTask();
-    task.setName("start new business");
-    task.setAssignee("joesmoe");
-    task.setPriority(4);
-    String startBusinessTaskId = taskService.saveTask(task);
+    Task task2 = taskService.newTask();
+    task2.setName("change dyper");
+    task2.setAssignee("Koen");
+    task2.setPriority(1);
+    task2.setDuedate(stringToDate("28/06/1989"));
+    task2.setProgress(2);
+    
+    Task task3 = taskService.newTask();
+    task3.setName("start new business");
+    task3.setAssignee("Joram");
+    task3.setPriority(4);
+    task3.setProgress(75);
 
-    task = taskService.newTask();
-    task.setName("find venture capital");
-    task.setPriority(7);
-    String capitalTaskId = taskService.saveTask(task);
-
-    List<Task> taskList = taskService
-      .createTaskQuery()
-      .orderAsc(TaskQuery.PROPERTY_NAME)
-      .list();
-    assertNotNull(taskList);
+    Task task4 = taskService.newTask();
+    task4.setName("find venture capital");
+    task4.setPriority(7);
+    task4.setDuedate(stringToDate("09/09/2009"));
+    task4.setProgress(99);
     
-    assertEquals("change dyper",         taskList.get(0).getName());
-    assertEquals("do laundry",           taskList.get(1).getName());
-    assertEquals("find venture capital", taskList.get(2).getName());
-    assertEquals("start new business",   taskList.get(3).getName());
+    for (Task t : new Task[] {task1, task2, task3, task4}) {
+      taskService.saveTask(t);
+      result.add(t);
+    }
+    
+    return result;
+  }
+  
+  /**
+   * Convience method:
+   *  - Creates a task query with order asc/desc on the given <i>property</i> param.
+   *  - Loops over both result lists and checks if the elements
+   *    are in the order as given by the <i>expectedValues</i> param.
+   */
+  private void testOrderBy(String property, Object[] expectedValues) {
+    List<Task> tasks = createTestTasks();
 
-    assertEquals(4, taskList.size());
+    List<Task> taskListAsc = taskService.createTaskQuery().orderAsc(property).list();
+    List<Task> taskListDesc = taskService.createTaskQuery().orderDesc(property).list();
 
-    taskService.deleteTaskCascade(capitalTaskId);
-    taskService.deleteTaskCascade(startBusinessTaskId);
-    taskService.deleteTaskCascade(dyperTaskId);
-    taskService.deleteTaskCascade(laudryTaskId);
+    assertNotNull(taskListAsc);
+    assertEquals(expectedValues.length, taskListAsc.size());
+
+    assertNotNull(taskListDesc);
+    assertEquals(expectedValues.length, taskListDesc.size());
+    
+    for (int i = 0; i < expectedValues.length; i++) {
+      
+      Object realValueAsc = null;
+      Object realValueDesc = null;
+      
+      try {
+        
+        realValueAsc = invokeGetterOnTask(property, taskListAsc.get(i));
+        realValueDesc = invokeGetterOnTask(property, taskListDesc.get((taskListDesc.size() -1) - i));
+        
+      } catch (Exception e) {
+        fail(e.getMessage());
+      } 
+      
+      assertEquals("Incorrect order by ASC for property " + property, expectedValues[i], realValueAsc);
+      assertEquals("Incorrect order by ASC for property " + property, expectedValues[i], realValueAsc);
+      
+    }
+    
+    deleteTasks(tasks);
   }
+  
+  /**
+   * Creates a taskquery for tasks, orderd on the given property.
+   * The resulting list is checked asc/desc for natural order.
+   * 
+   * Note property must implement Comparable!
+   */
+  @SuppressWarnings("unchecked")
+  private void testOrderByResultsInNaturalOrdening(String property, int expectedNrOfResults) {
+    List<Task> tasks = createTestTasks();
+    List<Task> taskListAsc = taskService.createTaskQuery().orderAsc(property).list();
+    List<Task> taskListDesc = taskService.createTaskQuery().orderDesc(property).list();
+    
+    assertEquals(expectedNrOfResults, taskListAsc.size());
+    assertEquals(expectedNrOfResults, taskListDesc.size());
+    
+    if (expectedNrOfResults > 1) {
+      
+      for (int i = 1; i < taskListAsc.size(); i++) {
+        
+        // ascending check
+        Comparable c1 = (Comparable) invokeGetterOnTask(property, taskListAsc.get(i - 1));
+        Comparable c2 = (Comparable) invokeGetterOnTask(property, taskListAsc.get(i));
+        if (c1 != null && c2 != null) {
+          assertTrue(c1.compareTo(c2) <= 0); // c1 <= c2 when ascending
+        }
+        
+        // ascending check
+        Comparable c3 = (Comparable) invokeGetterOnTask(property, taskListDesc.get(i - 1));
+        Comparable c4 = (Comparable) invokeGetterOnTask(property, taskListDesc.get(i));
+        if (c3 != null && c4 != null) {
+          assertTrue(c3.compareTo(c4) >= 0); // c3 >= c4 when ascending
+        }
+        
+      }
+    }
+    
+    deleteTasks(tasks);
+  }
+  
+  private Object invokeGetterOnTask(String property, Task task) {
+    Method getter = ReflectUtil.getMethod(TaskImpl.class, 
+            "get" + property.substring(0, 1).toUpperCase() + property.substring(1), null);
+    try {
+      return getter.invoke(task);
+    } catch (Exception e) {
+      throw new RuntimeException("Couldn't invoke getter for property " + property);
+    }
+  }
+  
+  private void deleteTasks(List<Task> tasks) {
+    for (Task t : tasks) {
+      taskService.deleteTaskCascade(t.getId());
+    }
+  }
+  
+  private Date stringToDate(String dateString) {
+    DateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy");
+    try {
+      return dateFormat.parse(dateString);
+    } catch (ParseException e) {
+      throw new RuntimeException("Couldn't convert " + dateString);
+    }
+  }
+  
 }



More information about the jbpm-commits mailing list