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.api.WorkflowDocument;
020 import org.kuali.rice.kew.api.WorkflowDocumentFactory;
021 import org.kuali.rice.kew.api.document.node.RouteNodeInstance;
022 import org.kuali.rice.kew.test.KEWTestCase;
023
024 import java.util.List;
025 import java.util.Set;
026
027 import static org.junit.Assert.*;
028
029 /**
030 * Place to test WorkflowDocument.
031 *
032 */
033 public class WorkflowDocumentTest extends KEWTestCase {
034
035 protected void loadTestData() throws Exception {
036 loadXmlFile("ClientAppConfig.xml");
037 }
038
039 @Test public void testDirtyContent() {
040 WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("rkirkend"), "UnitTestDocument");
041 document.setApplicationContent("application content");
042 document.setAttributeContent("attribute content");
043 document.setSearchableContent("searchable content");
044 assertEquals("application content", document.getApplicationContent());
045 assertEquals("application content", document.getDocumentContent().getApplicationContent());
046 assertEquals("attribute content", document.getAttributeContent());
047 assertEquals("attribute content", document.getDocumentContent().getAttributeContent());
048 assertEquals("searchable content", document.getDocumentContent().getSearchableContent());
049 }
050
051 @Test public void testLoadNonExistentDocument() throws Exception {
052 try {
053 WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("ewestfal"), "123456789");
054 fail("load of non-existent document should have thrown IllegalArgumentException");
055 } catch (IllegalArgumentException e) {}
056 }
057
058 @Test public void testWorkflowDocument() throws Exception {
059 WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("rkirkend"), "UnitTestDocument");
060 document.route("");
061
062 document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("ewestfal"), document.getDocumentId());
063 document.approve("");
064
065 document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("jhopf"), document.getDocumentId());
066 document.approve("");
067
068 boolean containsInitiated = false;
069 boolean containsTemplate1 = false;
070 boolean containsTemplate2 = false;
071 for (RouteNodeInstance routeNodeInstance : document.getRouteNodeInstances()) {
072 if (routeNodeInstance.getName().equals("Initiated")) {
073 containsInitiated = true;
074 } else if (routeNodeInstance.getName().equals("Template1")) {
075 containsTemplate1 = true;
076 } else if (routeNodeInstance.getName().equals("Template2")) {
077 containsTemplate2 = true;
078 }
079 }
080
081 assertTrue("Should have gone through initiated node", containsInitiated);
082 assertTrue("Should have gone through template1 node", containsTemplate1);
083 assertTrue("Should have gone through template2 node", containsTemplate2);
084 }
085
086 /**
087 * Test that the document is being updated appropriately after a return to previous call
088 *
089 * @throws Exception
090 */
091 @Test public void testReturnToPreviousCorrectlyUpdatingDocumentStatus() throws Exception {
092
093 WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("rkirkend"), "UnitTestDocument");
094 document.route("");
095
096 document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("ewestfal"), document.getDocumentId());
097 document.returnToPreviousNode("", "Initiated");
098
099 assertFalse("ewestfal should no longer have approval status", document.isApprovalRequested());
100 assertFalse("ewestfal should no long have blanket approve status", document.isBlanketApproveCapable());
101
102 //just for good measure
103 document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document.getDocumentId());
104 assertTrue("rkirkend should now have an approve request", document.isApprovalRequested());
105 }
106
107 @Test public void testGetPreviousRouteNodeNames() throws Exception {
108
109 WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("rkirkend"), "UnitTestDocument");
110 document.route("");
111
112 document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("ewestfal"), document.getDocumentId());
113 document.approve("");
114
115 document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("jhopf"), document.getDocumentId());
116 List<String> previousNodeNames = document.getPreviousNodeNames();
117 assertEquals("Should have 2 previous Node Names", 2, previousNodeNames.size());
118 assertEquals("Last node name should be the first visisted", "Initiated", previousNodeNames.get(0));
119 assertEquals("First node name should be last node visited", "Template1", previousNodeNames.get(1));
120 Set<String> currentNodes = document.getNodeNames();
121 assertEquals("Should have 1 current node name", 1, currentNodes.size());
122 assertEquals("Current node name incorrect", "Template2", currentNodes.iterator().next());
123 document.returnToPreviousNode("", "Template1");
124 previousNodeNames = document.getPreviousNodeNames();
125 assertEquals("Should have 1 previous Node Name", 1, previousNodeNames.size());
126 assertEquals("Previous Node name incorrect", "Initiated", previousNodeNames.get(0));
127
128 }
129
130 @Test public void testIsRouteCapable() throws Exception {
131
132 WorkflowDocument doc = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("rkirkend"), "UnitTestDocument");
133
134 verifyIsRouteCapable(false, getPrincipalIdForName("ewestfal"), doc.getDocumentId());
135 verifyIsRouteCapable(false, "2001", doc.getDocumentId());
136
137 verifyIsRouteCapable(true, getPrincipalIdForName("rkirkend"), doc.getDocumentId());
138 verifyIsRouteCapable(true, "2002", doc.getDocumentId());
139
140 doc = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("rkirkend"), "NonInitiatorCanRouteDocument");
141
142 verifyIsRouteCapable(true, getPrincipalIdForName("ewestfal"), doc.getDocumentId());
143 verifyIsRouteCapable(true, "2001", doc.getDocumentId());
144
145 verifyIsRouteCapable(true, getPrincipalIdForName("rkirkend"), doc.getDocumentId());
146 verifyIsRouteCapable(true, "2002", doc.getDocumentId());
147 }
148
149 private void verifyIsRouteCapable(boolean routeCapable, String userId, String docId) throws Exception {
150 WorkflowDocument doc = WorkflowDocumentFactory.loadDocument(userId, docId);
151 assertEquals(routeCapable, doc.isRouteCapable());
152 }
153
154 }