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.actions; 017 018 import static org.junit.Assert.assertEquals; 019 import static org.junit.Assert.assertNotNull; 020 import static org.junit.Assert.assertTrue; 021 022 import org.junit.Test; 023 import org.kuali.rice.kew.api.WorkflowDocument; 024 import org.kuali.rice.kew.api.WorkflowDocumentFactory; 025 import org.kuali.rice.kew.api.action.ActionRequest; 026 import org.kuali.rice.kew.api.action.ActionTaken; 027 import org.kuali.rice.kew.api.exception.WorkflowException; 028 import org.kuali.rice.kew.engine.node.Branch; 029 import org.kuali.rice.kew.engine.node.BranchState; 030 import org.kuali.rice.kew.test.KEWTestCase; 031 032 /** 033 * Test case that tests setting and getting variables, both programmatically 034 * and via the "SetVar" node; stolen directly from ApproveActionTest.testPreapprovals 035 * @author Kuali Rice Team (rice.collab@kuali.org) 036 */ 037 public class VariablesTest extends KEWTestCase { 038 039 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(VariablesTest.class); 040 041 protected void loadTestData() throws Exception { 042 loadXmlFile("ActionsConfig.xml"); 043 } 044 045 private void dumpInfoAboutDoc(WorkflowDocument doc) throws WorkflowException { 046 LOG.info("\tDoc: class=" + doc.getDocumentTypeName() + " title=" + doc.getTitle() + " status=" + doc.getStatus()); 047 LOG.info("\tActionRequests:"); 048 for (ActionRequest ar: doc.getRootActionRequests()) { 049 LOG.info("\t\tId: " + ar.getId() + " PrincipalId: " + ar.getPrincipalId() + " ActionRequested: " + ar.getActionRequested() + " ActionTaken: " + (ar.getActionTaken() != null ? ar.getActionTaken().getActionTaken() : null) + " NodeName: " + ar.getNodeName() + " Status:" + ar.getStatus()); 050 } 051 LOG.info("\tActionTakens:"); 052 for (ActionTaken at: doc.getActionsTaken()) { 053 LOG.info("\t\tId: " + at.getId() + " PrincipalId: " + at.getPrincipalId() + " ActionTaken: " + at.getActionTaken()); 054 } 055 LOG.info("\tNodeNames:"); 056 for (String name: doc.getNodeNames()) { 057 LOG.info("\t\t" + name); 058 } 059 } 060 061 public void dumpBranch(Branch b) { 062 LOG.info("Branch: " + b.getBranchId() + " " + b.getName()); 063 for (BranchState bs: b.getBranchState()) { 064 LOG.info(bs.getBranchStateId() + " " + bs.getKey() + " " + bs.getValue()); 065 } 066 } 067 068 @Test public void testVariables() throws Exception { 069 WorkflowDocument doc = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("rkirkend"), "VariablesTest"); 070 doc.route(""); 071 072 //rock some preapprovals and other actions... 073 doc = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("ewestfal"), doc.getDocumentId()); 074 dumpInfoAboutDoc(doc); 075 doc.setVariable("myexcellentvariable", "righton"); 076 doc.approve(""); 077 assertEquals("startedVariableValue", doc.getVariableValue("started")); 078 assertEquals("startedVariableValue", doc.getVariableValue("copiedVar")); 079 080 doc = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("user2"), doc.getDocumentId()); 081 assertEquals("righton", doc.getVariableValue("myexcellentvariable")); 082 doc.setVariable("vartwo", "two"); 083 doc.setVariable("myexcellentvariable", "ichangedit"); 084 doc.acknowledge(""); 085 086 doc = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("user3"), doc.getDocumentId()); 087 assertEquals("ichangedit", doc.getVariableValue("myexcellentvariable")); 088 assertEquals("two", doc.getVariableValue("vartwo")); 089 doc.setVariable("another", "another"); 090 doc.setVariable("vartwo", null); 091 doc.complete(""); 092 093 //approve as the person the doc is routed to so we can move the documen on and hopefully to final 094 doc = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("user1"), doc.getDocumentId()); 095 assertEquals("ichangedit", doc.getVariableValue("myexcellentvariable")); 096 assertEquals(null, doc.getVariableValue("vartwo")); 097 assertEquals("another", doc.getVariableValue("another")); 098 doc.approve(""); 099 100 assertEquals("endedVariableValue", doc.getVariableValue("ended")); 101 assertNotNull(doc.getVariableValue("google")); 102 LOG.info(doc.getVariableValue("google")); 103 assertEquals("documentContentendedVariableValue", doc.getVariableValue("xpath")); 104 LOG.info(doc.getVariableValue("xpath")); 105 106 assertEquals("aNewStartedVariableValue", doc.getVariableValue("started")); 107 108 assertTrue("the document should be final", doc.isFinal()); 109 } 110 }