001 /*
002 * Copyright 2007-2009 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.rule;
017
018 import java.io.StringReader;
019
020 import javax.xml.xpath.XPath;
021 import javax.xml.xpath.XPathConstants;
022
023 import org.junit.Test;
024 import org.kuali.rice.kew.dto.NetworkIdDTO;
025 import org.kuali.rice.kew.dto.PropertyDefinitionDTO;
026 import org.kuali.rice.kew.dto.WorkflowAttributeDefinitionDTO;
027 import org.kuali.rice.kew.rule.xmlrouting.XPathHelper;
028 import org.kuali.rice.kew.service.WorkflowDocument;
029 import org.kuali.rice.kew.test.KEWTestCase;
030 import org.kuali.rice.kim.service.KIMServiceLocator;
031 import org.xml.sax.InputSource;
032
033 /**
034 * This is a description of what this class does - ewestfal don't forget to fill
035 * this in.
036 *
037 * @author Kuali Rice Team (rice.collab@kuali.org)
038 *
039 */
040 public class PrincipalIdRoleAttributeTest extends KEWTestCase {
041
042 private static final String ATTRIBUTE_NAME = "PrincipalIdRoleAttribute";
043 private static final String PRINCIPAL_ID_PROP = "principalId";
044
045 @Test
046 public void testPrincipalIdAttribute() throws Exception {
047 loadXmlFile("PrincipalIdRoleAttributeTestConfig.xml");
048
049 WorkflowDocument document = new WorkflowDocument(new NetworkIdDTO(
050 "ewestfal"), "PrincipalIdRoleAttributeTest");
051
052 WorkflowAttributeDefinitionDTO principalIdDef1 = new WorkflowAttributeDefinitionDTO(
053 "PrincipalIdRoleAttribute");
054 PropertyDefinitionDTO principalIdProp1 = new PropertyDefinitionDTO(
055 PRINCIPAL_ID_PROP, KIMServiceLocator.getIdentityManagementService().getPrincipalByPrincipalName("rkirkend").getPrincipalId());
056 principalIdDef1.addProperty(principalIdProp1);
057
058 WorkflowAttributeDefinitionDTO principalIdDef2 = new WorkflowAttributeDefinitionDTO(
059 "PrincipalIdRoleAttribute");
060 PropertyDefinitionDTO principalIdProp2 = new PropertyDefinitionDTO(
061 PRINCIPAL_ID_PROP, KIMServiceLocator.getIdentityManagementService().getPrincipalByPrincipalName("bmcgough").getPrincipalId());
062 principalIdDef2.addProperty(principalIdProp2);
063
064 document.addAttributeDefinition(principalIdDef1);
065 document.addAttributeDefinition(principalIdDef2);
066
067 document.routeDocument("Routing!");
068
069 // load the document as rkirkend
070
071 document = new WorkflowDocument(new NetworkIdDTO("rkirkend"), document
072 .getRouteHeaderId());
073 assertTrue("Document should be ENROUTE", document.stateIsEnroute());
074 assertTrue("rkirkend should have an approve request.", document
075 .isApprovalRequested());
076
077 // load the document as bmcgough
078 document = new WorkflowDocument(new NetworkIdDTO("bmcgough"), document
079 .getRouteHeaderId());
080 assertTrue("bmcgough should have an approve request.", document
081 .isApprovalRequested());
082
083 // submit an approve as bmcgough
084 document.approve("i approve");
085
086 // reload as rkirkend, verify still enroute
087 document = new WorkflowDocument(new NetworkIdDTO("rkirkend"), document
088 .getRouteHeaderId());
089 assertTrue("Document should be ENROUTE", document.stateIsEnroute());
090 assertTrue("rkirkend should have an approve request.", document
091 .isApprovalRequested());
092 document.approve("i also approve");
093
094 // now the document should be FINAL
095 assertTrue("Document should be FINAL", document.stateIsFinal());
096
097 }
098
099 @Test
100 public void testParameterizedPrincipalIdAttribute() throws Exception {
101 loadXmlFile("ParameterizedPrincipalIdRoleAttributeTestConfig.xml");
102
103 WorkflowDocument document = new WorkflowDocument(new NetworkIdDTO(
104 "ewestfal"), "PrincipalIdRoleAttributeTest");
105
106 WorkflowAttributeDefinitionDTO principalIdDef1 = new WorkflowAttributeDefinitionDTO(
107 "PrincipalIdRoleAttribute");
108 PropertyDefinitionDTO principalIdProp1 = new PropertyDefinitionDTO(
109 PRINCIPAL_ID_PROP, KIMServiceLocator.getIdentityManagementService().getPrincipalByPrincipalName("rkirkend").getPrincipalId());
110 principalIdDef1.addProperty(principalIdProp1);
111
112 document.addAttributeDefinition(principalIdDef1);
113
114 document.routeDocument("Routing!");
115
116 // load the document as rkirkend
117
118 document = new WorkflowDocument(new NetworkIdDTO("rkirkend"), document
119 .getRouteHeaderId());
120 assertTrue("Document should be ENROUTE", document.stateIsEnroute());
121 assertTrue("rkirkend should have an approve request.", document
122 .isApprovalRequested());
123
124 // now let's verify the XML
125
126 XPath xPath = XPathHelper.newXPath();
127 assertTrue("Should have found the ID.", (Boolean) xPath.evaluate(
128 "//" + ATTRIBUTE_NAME + "/thisIdRocks", new InputSource(
129 new StringReader(document.getDocumentContent()
130 .getFullContent())), XPathConstants.BOOLEAN));
131
132 }
133
134 }