/it/kew/src/test/java/org/kuali/rice/kew/engine/SubProcessRoutingTest.java

https://github.com/sbower/kuali-rice-1 · Java · 116 lines · 85 code · 14 blank · 17 comment · 6 complexity · 57e5f2d35f96c848f203464aade49f3b MD5 · raw file

  1. /*
  2. * Copyright 2005-2007 The Kuali Foundation
  3. *
  4. *
  5. * Licensed under the Educational Community License, Version 2.0 (the "License");
  6. * you may not use this file except in compliance with the License.
  7. * You may obtain a copy of the License at
  8. *
  9. * http://www.opensource.org/licenses/ecl2.php
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. package org.kuali.rice.kew.engine;
  18. import static org.junit.Assert.assertEquals;
  19. import static org.junit.Assert.assertFalse;
  20. import static org.junit.Assert.assertNotNull;
  21. import static org.junit.Assert.assertTrue;
  22. import java.util.Iterator;
  23. import java.util.List;
  24. import org.junit.Test;
  25. import org.kuali.rice.kew.actionrequest.ActionRequestValue;
  26. import org.kuali.rice.kew.api.WorkflowDocument;
  27. import org.kuali.rice.kew.api.WorkflowDocumentFactory;
  28. import org.kuali.rice.kew.api.document.node.RouteNodeInstance;
  29. import org.kuali.rice.kew.service.KEWServiceLocator;
  30. import org.kuali.rice.kew.test.KEWTestCase;
  31. import org.kuali.rice.kew.test.TestUtilities;
  32. import org.kuali.rice.kew.util.KEWConstants;
  33. public class SubProcessRoutingTest extends KEWTestCase {
  34. private static final String DOCUMENT_TYPE_NAME = "SubProcessDocType";
  35. private static final String SUB_PROCESS_NODE = "MySubProcess";
  36. private static final String ACKNOWLEDGE_NODE = "Acknowledge";
  37. private static final String APPROVE_NODE = "Approve";
  38. protected void loadTestData() throws Exception {
  39. loadXmlFile("EngineConfig.xml");
  40. }
  41. @Test public void testSubProcessRoute() throws Exception {
  42. WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("ewestfal"), DOCUMENT_TYPE_NAME);
  43. document.saveDocumentData();
  44. assertTrue("Document should be initiated", document.isInitiated());
  45. assertEquals("Should be no action requests.", 0, document.getRootActionRequests().size());
  46. TestUtilities.assertAtNode(document, "Initial");
  47. document.route("");
  48. assertTrue("Document shoule be ENROUTE.", document.isEnroute());
  49. List actionRequests = KEWServiceLocator.getActionRequestService().findPendingByDoc(document.getDocumentId());
  50. assertEquals("Incorrect pending action requests.", 2, actionRequests.size());
  51. boolean isAck = false;
  52. boolean isApprove = false;
  53. for (Iterator iterator = actionRequests.iterator(); iterator.hasNext();) {
  54. ActionRequestValue request = (ActionRequestValue) iterator.next();
  55. org.kuali.rice.kew.engine.node.RouteNodeInstance nodeInstance = request.getNodeInstance();
  56. assertNotNull("Node instance should be non null.", nodeInstance);
  57. if (request.getPrincipalId().equals(getPrincipalIdForName("bmcgough"))) {
  58. isAck = true;
  59. assertEquals("Wrong request type.", KEWConstants.ACTION_REQUEST_ACKNOWLEDGE_REQ, request.getActionRequested());
  60. assertEquals("Wrong node.", ACKNOWLEDGE_NODE, nodeInstance.getRouteNode().getRouteNodeName());
  61. assertNotNull("Should be in a sub process.", nodeInstance.getProcess());
  62. assertEquals("Wrong sub process.", SUB_PROCESS_NODE, nodeInstance.getProcess().getRouteNode().getRouteNodeName());
  63. assertFalse("Sub process should be non-initial.", nodeInstance.getProcess().isInitial());
  64. assertFalse("Sub process should be non-active.", nodeInstance.getProcess().isActive());
  65. assertFalse("Sub process should be non-complete.", nodeInstance.getProcess().isComplete());
  66. } else if (request.getPrincipalId().equals(getPrincipalIdForName("temay"))) {
  67. isApprove = true;
  68. assertEquals("Wrong request type.", KEWConstants.ACTION_REQUEST_APPROVE_REQ, request.getActionRequested());
  69. assertEquals("Wrong node.", APPROVE_NODE, request.getNodeInstance().getRouteNode().getRouteNodeName());
  70. assertNotNull("Should be in a sub process.", request.getNodeInstance().getProcess());
  71. assertEquals("Wrong sub process.", SUB_PROCESS_NODE, request.getNodeInstance().getProcess().getRouteNode().getRouteNodeName());
  72. assertFalse("Sub process should be non-initial.", nodeInstance.getProcess().isInitial());
  73. assertFalse("Sub process should be non-active.", nodeInstance.getProcess().isActive());
  74. assertFalse("Sub process should be non-complete.", nodeInstance.getProcess().isComplete());
  75. }
  76. }
  77. assertTrue(isAck);
  78. assertTrue(isApprove);
  79. document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("bmcgough"), document.getDocumentId());
  80. assertTrue("Should have acknowledge.", document.isAcknowledgeRequested());
  81. document.acknowledge("");
  82. document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("temay"), document.getDocumentId());
  83. document.approve("");
  84. // find the subprocess and assert it is complete, not active, and not initial
  85. boolean foundSubProcess = false;
  86. List<RouteNodeInstance> nodeInstances = document.getRouteNodeInstances();
  87. for (int index = 0; index < nodeInstances.size(); index++) {
  88. RouteNodeInstance instanceVO = nodeInstances.get(index);
  89. if (instanceVO.getName().equals(SUB_PROCESS_NODE)) {
  90. foundSubProcess = true;
  91. assertFalse("Sub process should be non-initial.", instanceVO.isInitial());
  92. assertFalse("Sub process should be non-active.", instanceVO.isActive());
  93. assertTrue("Sub process should be complete.", instanceVO.isComplete());
  94. }
  95. }
  96. assertTrue("Could not locate sub process node.", foundSubProcess);
  97. document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document.getDocumentId());
  98. document.approve("");
  99. document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("ewestfal"), document.getDocumentId());
  100. assertTrue("Document should be final.", document.isFinal());
  101. }
  102. }