001 /** 002 * Copyright 2005-2011 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.kew.clientapp; 017 018 import org.junit.Test; 019 import org.kuali.rice.kew.actions.BlanketApproveTest; 020 import org.kuali.rice.kew.api.KewApiServiceLocator; 021 import org.kuali.rice.kew.api.WorkflowDocument; 022 import org.kuali.rice.kew.api.WorkflowDocumentFactory; 023 import org.kuali.rice.kew.api.document.Document; 024 import org.kuali.rice.kew.api.document.DocumentStatus; 025 import org.kuali.rice.kew.api.exception.WorkflowException; 026 import org.kuali.rice.kew.test.KEWTestCase; 027 import org.kuali.rice.kew.api.KewApiConstants; 028 import org.kuali.rice.kim.api.identity.Person; 029 import org.kuali.rice.kim.api.services.KimApiServiceLocator; 030 import org.kuali.rice.krad.UserSession; 031 import org.kuali.rice.krad.util.GlobalVariables; 032 import org.kuali.rice.test.BaselineTestCase.BaselineMode; 033 import org.kuali.rice.test.BaselineTestCase.Mode; 034 035 import static org.junit.Assert.*; 036 037 /** 038 * This is a description of what this class does - ewestfal don't forget to fill this in. 039 * 040 * @author Kuali Rice Team (rice.collab@kuali.org) 041 * 042 */ 043 @BaselineMode(Mode.CLEAR_DB) 044 public class WorkflowInfoTest extends KEWTestCase { 045 046 @Override 047 protected void loadTestData() { 048 // need this configuration to create a BlanketApproveParallelTest 049 loadXmlFile(BlanketApproveTest.class, "ActionsConfig.xml"); 050 } 051 052 /** 053 * Tests the loading of a RouteHeaderVO using the WorkflowInfo. 054 * 055 * Verifies that an NPE no longer occurrs as mentioned in KULRICE-765. 056 */ 057 @Test 058 public void testGetRouteHeader() throws Exception { 059 // ensure the UserSession is cleared out (could have been set up by other tests) 060 GlobalVariables.setUserSession(null); 061 String ewestfalPrincipalId = KimApiServiceLocator.getIdentityService().getPrincipalByPrincipalName("ewestfal") 062 .getPrincipalId(); 063 GlobalVariables.setUserSession(new UserSession("ewestfal")); 064 WorkflowDocument workflowDocument = WorkflowDocumentFactory.createDocument(ewestfalPrincipalId, 065 "TestDocumentType"); 066 String documentId = workflowDocument.getDocumentId(); 067 assertNotNull(documentId); 068 069 Document document = KewApiServiceLocator.getWorkflowDocumentService().getDocument(documentId); 070 assertNotNull(document); 071 072 assertEquals(documentId, document.getDocumentId()); 073 assertEquals(DocumentStatus.INITIATED, document.getStatus()); 074 } 075 076 @Test 077 public void testGetDocumentStatus() throws Exception { 078 // verify that a null document id throws an exception 079 try { 080 DocumentStatus status = KewApiServiceLocator.getWorkflowDocumentService().getDocumentStatus(null); 081 fail("A WorkflowException should have been thrown, instead returned status: " + status); 082 } catch (IllegalArgumentException e) {} 083 084 // verify that a bad document id throws an exception 085 try { 086 DocumentStatus status = KewApiServiceLocator.getWorkflowDocumentService().getDocumentStatus("-1"); 087 fail("A IllegalStateException Should have been thrown, instead returned status: " + status); 088 } catch (IllegalStateException e) {} 089 090 // now create a doc and load it's status 091 WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("ewestfal"), 092 "TestDocumentType"); 093 String documentId = document.getDocumentId(); 094 assertNotNull(documentId); 095 096 DocumentStatus status = KewApiServiceLocator.getWorkflowDocumentService().getDocumentStatus(documentId); 097 assertEquals("Document should be INITIATED.", KewApiConstants.ROUTE_HEADER_INITIATED_CD, status.getCode()); 098 099 // cancel the doc, it's status should be updated 100 document.cancel(""); 101 status = KewApiServiceLocator.getWorkflowDocumentService().getDocumentStatus(documentId); 102 assertEquals("Document should be CANCELED.", KewApiConstants.ROUTE_HEADER_CANCEL_CD, status.getCode()); 103 } 104 105 /** 106 * test for issue KFSMI-2979 This method verifies that 107 * workflowInfo.getRoutedByPrincipalIdByDocumentId returns the blanket approver for a document that 108 * was put onroute by that person (the blanket approver) 109 */ 110 @Test 111 public void testBlanketApproverSubmitted() throws WorkflowException { 112 Person blanketApprover = KimApiServiceLocator.getPersonService().getPersonByPrincipalName("ewestfal"); 113 114 WorkflowDocument document = WorkflowDocumentFactory.createDocument(blanketApprover.getPrincipalId(), 115 "BlanketApproveParallelTest"); 116 document.blanketApprove(""); 117 118 String routedByPrincipalId = KewApiServiceLocator.getWorkflowDocumentService().getRoutedByPrincipalIdByDocumentId( 119 document.getDocumentId()); 120 assertEquals("the blanket approver should be the routed by", blanketApprover.getPrincipalId(), 121 routedByPrincipalId); 122 } 123 124 @Test 125 public void testGetAppDocId() throws Exception { 126 WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("ewestfal"), 127 "TestDocumentType"); 128 document.saveDocumentData(); 129 130 String appDocId = KewApiServiceLocator.getWorkflowDocumentService().getApplicationDocumentId(document.getDocumentId()); 131 assertNull("appDocId should be null", appDocId); 132 133 String appDocIdValue = "1234"; 134 document.setApplicationDocumentId(appDocIdValue); 135 document.saveDocumentData(); 136 137 appDocId = KewApiServiceLocator.getWorkflowDocumentService().getApplicationDocumentId(document.getDocumentId()); 138 assertEquals("Incorrect appDocId", appDocIdValue, appDocId); 139 } 140 141 }