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.messaging.exceptionhandling;
017    
018    import static org.junit.Assert.assertTrue;
019    import static org.junit.Assert.fail;
020    
021    import org.junit.Test;
022    import org.kuali.rice.kew.api.WorkflowDocument;
023    import org.kuali.rice.kew.api.WorkflowDocumentFactory;
024    import org.kuali.rice.kew.test.KEWTestCase;
025    import org.kuali.rice.kew.test.TestUtilities;
026    import org.kuali.rice.test.BaselineTestCase;
027    
028    /**
029     * This is a unit test for testing the functionality of the ExceptionRoutingService. 
030     * 
031     * @author Kuali Rice Team (rice.collab@kuali.org)
032     */
033    @BaselineTestCase.BaselineMode(BaselineTestCase.Mode.NONE)
034    public class ExceptionRoutingServiceTest extends KEWTestCase {
035    
036            /**
037             * Checks to make sure that the KIM routing is working.
038             * Based upon the test method org.kuali.rice.kew.doctype.DocumentTypeTest.testFinalApproverRouting()
039             */
040            @Test public void testKimExceptionRouting() throws Exception {
041                    loadXmlFile("RouteExceptionTestDoc.xml");
042                    WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("admin"), "TestFinalApproverDocumentType");
043            document.setTitle("");
044            document.route("");
045            document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document.getDocumentId());
046            try {
047                document.approve("");
048                fail("document should have thrown routing exception");
049            } catch (Exception e) {
050                //deal with single transaction issue in test.
051                    TestUtilities.getExceptionThreader().join();
052                    document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document.getDocumentId());
053                assertTrue("Document should be in exception routing", document.isException());
054            }
055            }
056    
057            /**
058             * Checks to make sure that the KIM routing is working with hierarchical documents.
059             * Based upon the test method org.kuali.rice.kew.doctype.DocumentTypeTest.testFinalApproverRouting()
060             */
061            @Test public void testKimExceptionRoutingWithDocHierarchy() throws Exception {
062                    loadXmlFile("RouteExceptionTestDoc.xml");
063                    String[] docNames = {"TestFinalApproverDocumentType_Child", "TestFinalApproverDocumentType_GrandChild"};
064                    // Test the child doc and then the grandchild doc.
065                    for (int i = 0; i < docNames.length; i++) {
066                            // Perform the same steps as in the previous unit test.
067                            WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("admin"), docNames[i]);
068                    document.setTitle("");
069                    document.route("");
070                    document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document.getDocumentId());
071                    try {
072                        document.approve("");
073                        fail("document should have thrown routing exception");
074                    } catch (Exception e) {
075                        //deal with single transaction issue in test.
076                            TestUtilities.getExceptionThreader().join();
077                            document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document.getDocumentId());
078                        assertTrue("Document should be in exception routing", document.isException());
079                    }
080                    }
081            }
082    
083            /**
084             * Checks to make sure that the KIM routing is working for a RiceDocument child.
085             * Based upon the test method org.kuali.rice.kew.doctype.DocumentTypeTest.testFinalApproverRouting()
086             */
087            @Test public void testKimExceptionRoutingWithRiceDocumentChild() throws Exception {
088                    loadXmlFile("RouteExceptionTestDoc.xml");
089                    WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("admin"), "DocumentTypeDocument_New");
090            document.setTitle("");
091            document.route("");
092            document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document.getDocumentId());
093            try {
094                document.approve("");
095                fail("document should have thrown routing exception");
096            } catch (Exception e) {
097                //deal with single transaction issue in test.
098                    TestUtilities.getExceptionThreader().join();
099                    document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document.getDocumentId());
100                assertTrue("Document should be in exception routing", document.isException());
101            }
102            }
103    }