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.rule;
017    
018    import static org.junit.Assert.assertTrue;
019    
020    import java.io.StringReader;
021    
022    import javax.xml.xpath.XPath;
023    import javax.xml.xpath.XPathConstants;
024    
025    import org.junit.Test;
026    import org.kuali.rice.kew.api.WorkflowDocument;
027    import org.kuali.rice.kew.api.WorkflowDocumentFactory;
028    import org.kuali.rice.kew.api.document.PropertyDefinition;
029    import org.kuali.rice.kew.api.document.attribute.WorkflowAttributeDefinition;
030    import org.kuali.rice.kew.rule.xmlrouting.XPathHelper;
031    import org.kuali.rice.kew.test.KEWTestCase;
032    import org.xml.sax.InputSource;
033    
034    /**
035     * This is a description of what this class does - ewestfal don't forget to fill
036     * this in.
037     * 
038     * @author Kuali Rice Team (rice.collab@kuali.org)
039     * 
040     */
041    public class NetworkIdRoleAttributeTest extends KEWTestCase {
042    
043            private static final String ATTRIBUTE_NAME = "NetworkIdRoleAttribute";
044            private static final String NETWORK_ID_PROP = "networkId";
045    
046            @Test
047            public void testNetworkIdAttribute() throws Exception {
048                    loadXmlFile("NetworkIdRoleAttributeTestConfig.xml");
049    
050                    WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName(
051                                    "ewestfal"), "NetworkIdRoleAttributeTest");
052    
053                    WorkflowAttributeDefinition.Builder networkIdDef1 = WorkflowAttributeDefinition.Builder.create("NetworkIdRoleAttribute");
054                    PropertyDefinition networkIdProp1 = PropertyDefinition.create(
055                                    NETWORK_ID_PROP, "rkirkend");
056                    networkIdDef1.addPropertyDefinition(networkIdProp1);
057    
058                    WorkflowAttributeDefinition.Builder networkIdDef2 = WorkflowAttributeDefinition.Builder.create(
059                                    "NetworkIdRoleAttribute");
060                    PropertyDefinition networkIdProp2 = PropertyDefinition.create(
061                                    NETWORK_ID_PROP, "bmcgough");
062                    networkIdDef2.addPropertyDefinition(networkIdProp2);
063    
064                    document.addAttributeDefinition(networkIdDef1.build());
065                    document.addAttributeDefinition(networkIdDef2.build());
066    
067                    document.route("Routing!");
068    
069                    // load the document as rkirkend
070    
071                    document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document
072                                    .getDocumentId());
073                    assertTrue("Document should be ENROUTE", document.isEnroute());
074                    assertTrue("rkirkend should have an approve request.", document
075                                    .isApprovalRequested());
076    
077                    // load the document as bmcgough
078                    document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("bmcgough"), document
079                                    .getDocumentId());
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 = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document
088                                    .getDocumentId());
089                    assertTrue("Document should be ENROUTE", document.isEnroute());
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.isFinal());
096    
097            }
098    
099            @Test
100            public void testParameterizedNetworkIdAttribute() throws Exception {
101                    loadXmlFile("ParameterizedNetworkIdRoleAttributeTestConfig.xml");
102    
103                    WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName(
104                                    "ewestfal"), "NetworkIdRoleAttributeTest");
105    
106                    WorkflowAttributeDefinition.Builder networkIdDef1 = WorkflowAttributeDefinition.Builder.create(
107                                    "NetworkIdRoleAttribute");
108                    PropertyDefinition networkIdProp1 = PropertyDefinition.create(
109                                    NETWORK_ID_PROP, "rkirkend");
110                    networkIdDef1.addPropertyDefinition(networkIdProp1);
111    
112                    document.addAttributeDefinition(networkIdDef1.build());
113    
114                    document.route("Routing!");
115    
116                    // load the document as rkirkend
117    
118                    document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document
119                                    .getDocumentId());
120                    assertTrue("Document should be ENROUTE", document.isEnroute());
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    }