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.engine;
017    
018    import static org.junit.Assert.assertNotNull;
019    
020    import java.io.IOException;
021    import java.util.Map;
022    
023    import org.apache.log4j.Logger;
024    import org.custommonkey.xmlunit.XMLAssert;
025    import org.custommonkey.xmlunit.XMLUnit;
026    import org.junit.Test;
027    import org.kuali.rice.kew.doctype.bo.DocumentType;
028    import org.kuali.rice.kew.engine.node.RouteNode;
029    import org.kuali.rice.kew.service.KEWServiceLocator;
030    import org.kuali.rice.kew.test.KEWTestCase;
031    import org.kuali.rice.kew.util.Utilities;
032    import org.xml.sax.SAXException;
033    
034    /**
035     * Tests the parsing of route node config params 
036     * @author Kuali Rice Team (rice.collab@kuali.org)
037     */
038    public class RouteNodeConfigParamTest extends KEWTestCase {
039    
040        private static final Logger LOG = Logger.getLogger(RouteNodeConfigParamTest.class);
041    
042        protected void loadTestData() throws Exception {
043            loadXmlFile("RouteNodeConfigParams.xml");
044        }
045    
046        /**
047         * Asserts that specified route node definition has the specified config parameter
048         */
049        protected void assertHasConfigParam(RouteNode routeNodeDef, String key, String value) {
050            Map<String, String> cfgMap = Utilities.getKeyValueCollectionAsMap(routeNodeDef.getConfigParams());
051            try {
052                XMLUnit.setIgnoreWhitespace(true);
053                XMLAssert.assertXMLEqual(value, cfgMap.get(key));
054            } catch (SAXException e) {
055                e.printStackTrace();
056            } catch (IOException e) {
057                e.printStackTrace();
058            }
059        }
060    
061        @Test public void testRouteNodeConfigParams() {
062            DocumentType docType = KEWServiceLocator.getDocumentTypeService().findByName("RouteNodeConfigParams");
063            assertNotNull(docType);
064            assertNotNull(docType.getDocumentTypeId());
065    
066            // adhoc node
067            RouteNode routeNodeDef = KEWServiceLocator.getRouteNodeService().findRouteNodeByName(docType.getDocumentTypeId(), "AdHoc");
068            assertNotNull(routeNodeDef);
069            assertHasConfigParam(routeNodeDef, RouteNode.CONTENT_FRAGMENT_CFG_KEY, "<start name=\"AdHoc\"><activationType>P</activationType></start>");
070            assertHasConfigParam(routeNodeDef, "activationType", "P");
071    
072            routeNodeDef = KEWServiceLocator.getRouteNodeService().findRouteNodeByName(docType.getDocumentTypeId(), "setStartedVar");
073            assertNotNull(routeNodeDef);
074            assertHasConfigParam(routeNodeDef, RouteNode.CONTENT_FRAGMENT_CFG_KEY, "<simple name=\"setStartedVar\"><type>org.kuali.rice.kew.engine.node.var.SetVarNode</type><name>started</name><value>startedVariableValue</value></simple>");
075            assertHasConfigParam(routeNodeDef, "type", "org.kuali.rice.kew.engine.node.var.SetVarNode");
076            assertHasConfigParam(routeNodeDef, "name", "started");
077            assertHasConfigParam(routeNodeDef, "value", "startedVariableValue");
078    
079            routeNodeDef = KEWServiceLocator.getRouteNodeService().findRouteNodeByName(docType.getDocumentTypeId(), "setCopiedVar");
080            assertNotNull(routeNodeDef);
081            assertHasConfigParam(routeNodeDef, RouteNode.CONTENT_FRAGMENT_CFG_KEY, "<simple name=\"setCopiedVar\"><type>org.kuali.rice.kew.engine.node.var.SetVarNode</type><name>copiedVar</name><value>var:started</value></simple>");
082            assertHasConfigParam(routeNodeDef, "type", "org.kuali.rice.kew.engine.node.var.SetVarNode");
083            assertHasConfigParam(routeNodeDef, "name", "copiedVar");
084            assertHasConfigParam(routeNodeDef, "value", "var:started");
085    
086            routeNodeDef = KEWServiceLocator.getRouteNodeService().findRouteNodeByName(docType.getDocumentTypeId(), "PreApprovalTestOne");
087            assertNotNull(routeNodeDef);
088            assertHasConfigParam(routeNodeDef, RouteNode.CONTENT_FRAGMENT_CFG_KEY, "<requests name=\"PreApprovalTestOne\"><activationType>S</activationType><ruleSelector>Named</ruleSelector><ruleName>TestRule1</ruleName></requests>");
089            assertHasConfigParam(routeNodeDef, "activationType", "S");
090            assertHasConfigParam(routeNodeDef, "ruleSelector", "Named");
091            assertHasConfigParam(routeNodeDef, "ruleName", "TestRule1");
092            
093            routeNodeDef = KEWServiceLocator.getRouteNodeService().findRouteNodeByName(docType.getDocumentTypeId(), "setEndedVar");
094            assertNotNull(routeNodeDef);
095            assertHasConfigParam(routeNodeDef, RouteNode.CONTENT_FRAGMENT_CFG_KEY, "<simple name=\"setEndedVar\"><type>org.kuali.rice.kew.engine.node.var.SetVarNode</type><name>ended</name><value>endedVariableValue</value></simple>");
096            assertHasConfigParam(routeNodeDef, "type", "org.kuali.rice.kew.engine.node.var.SetVarNode");
097            assertHasConfigParam(routeNodeDef, "name", "ended");
098            assertHasConfigParam(routeNodeDef, "value", "endedVariableValue");
099            
100            routeNodeDef = KEWServiceLocator.getRouteNodeService().findRouteNodeByName(docType.getDocumentTypeId(), "setGoogleVar");
101            assertNotNull(routeNodeDef);
102            assertHasConfigParam(routeNodeDef, RouteNode.CONTENT_FRAGMENT_CFG_KEY, "<simple name=\"setGoogleVar\"><type>org.kuali.rice.kew.engine.node.var.SetVarNode</type><name>google</name><value>url:http://google.com</value></simple>");
103            assertHasConfigParam(routeNodeDef, "type", "org.kuali.rice.kew.engine.node.var.SetVarNode");
104            assertHasConfigParam(routeNodeDef, "name", "google");
105            assertHasConfigParam(routeNodeDef, "value", "url:http://google.com");
106    
107            routeNodeDef = KEWServiceLocator.getRouteNodeService().findRouteNodeByName(docType.getDocumentTypeId(), "setXPathVar");
108            assertNotNull(routeNodeDef);
109            assertHasConfigParam(routeNodeDef, RouteNode.CONTENT_FRAGMENT_CFG_KEY, "<simple name=\"setXPathVar\"><type>org.kuali.rice.kew.engine.node.var.SetVarNode</type><name>xpath</name><value>xpath:concat(local-name(//documentContent),$ended)</value></simple>");
110            assertHasConfigParam(routeNodeDef, "type", "org.kuali.rice.kew.engine.node.var.SetVarNode");
111            assertHasConfigParam(routeNodeDef, "name", "xpath");
112            assertHasConfigParam(routeNodeDef, "value", "xpath:concat(local-name(//documentContent),$ended)");
113    
114            routeNodeDef = KEWServiceLocator.getRouteNodeService().findRouteNodeByName(docType.getDocumentTypeId(), "resetStartedVar");
115            assertNotNull(routeNodeDef);
116            assertHasConfigParam(routeNodeDef, RouteNode.CONTENT_FRAGMENT_CFG_KEY, "<simple name=\"resetStartedVar\"><type>org.kuali.rice.kew.engine.node.var.SetVarNode</type><name>started</name><value>aNewStartedVariableValue</value></simple>");
117            assertHasConfigParam(routeNodeDef, "type", "org.kuali.rice.kew.engine.node.var.SetVarNode");
118            assertHasConfigParam(routeNodeDef, "name", "started");
119            assertHasConfigParam(routeNodeDef, "value", "aNewStartedVariableValue");
120    
121            routeNodeDef = KEWServiceLocator.getRouteNodeService().findRouteNodeByName(docType.getDocumentTypeId(), "logNode");
122            assertNotNull(routeNodeDef);
123            assertHasConfigParam(routeNodeDef, RouteNode.CONTENT_FRAGMENT_CFG_KEY, "<simple name=\"logNode\"><type>org.kuali.rice.kew.engine.node.LogNode</type><message>var:xpath</message></simple>");
124            assertHasConfigParam(routeNodeDef, "type", "org.kuali.rice.kew.engine.node.LogNode");
125            assertHasConfigParam(routeNodeDef, "message", "var:xpath");
126    
127            routeNodeDef = KEWServiceLocator.getRouteNodeService().findRouteNodeByName(docType.getDocumentTypeId(), "logNode2");
128            assertNotNull(routeNodeDef);
129            assertHasConfigParam(routeNodeDef, RouteNode.CONTENT_FRAGMENT_CFG_KEY, "<simple name=\"logNode2\"><type>org.kuali.rice.kew.engine.node.LogNode</type><level>ErRoR</level><log>Custom.Logger.Name</log><message>THAT'S ALL FOLKS</message></simple>");
130            assertHasConfigParam(routeNodeDef, "type", "org.kuali.rice.kew.engine.node.LogNode");
131            assertHasConfigParam(routeNodeDef, "level", "ErRoR");
132            assertHasConfigParam(routeNodeDef, "message", "THAT'S ALL FOLKS");
133        }   
134    }