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.actions;
017    
018    import org.junit.Test;
019    import org.kuali.rice.kew.actions.BlanketApproveTest.NotifySetup;
020    import org.kuali.rice.kew.api.WorkflowDocument;
021    import org.kuali.rice.kew.api.WorkflowDocumentFactory;
022    import org.kuali.rice.kew.api.action.ActionType;
023    import org.kuali.rice.kew.test.KEWTestCase;
024    
025    import static org.junit.Assert.*;
026    
027    /**
028     * 
029     * Test SuperUserDissaprove actions from WorkflowDocument
030     *
031     */
032    public class SuperUserDisapproveTest extends KEWTestCase {
033        private static final String DOC_TYPE = NotifySetup.DOCUMENT_TYPE_NAME;
034        private static final String DOC_TYPE_WITH_NOTIFY = "SUDisapproveWithNotificationTest";
035    
036        protected void loadTestData() throws Exception {
037            loadXmlFile("ActionsConfig.xml");
038        }
039            
040        @Test public void testSuperUserDisapprove() throws Exception {
041            superUserDisapprove(false);
042        }
043    
044        @Test public void testSuperUserDisapproveWithNotification() throws Exception {
045            superUserDisapprove(true);
046        }
047    
048        protected void superUserDisapprove(boolean notify) throws Exception {
049            WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("ewestfal"), notify ? DOC_TYPE_WITH_NOTIFY: DOC_TYPE);
050            document.route("");
051    
052            WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("jhopf"), document.getDocumentId()).approve("");
053            WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("ewestfal"), document.getDocumentId()).approve("");
054            WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document.getDocumentId()).approve("");
055    
056            document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("jhopf"), document.getDocumentId());
057            assertTrue("WorkflowDocument should indicate jhopf as SuperUser", document.isValidAction(ActionType.SU_DISAPPROVE));
058            document.superUserDisapprove("");
059            assertTrue("Document should be final after Super User Disapprove", document.isDisapproved());
060            assertEquals(notify, WorkflowDocumentFactory.loadDocument(document.getInitiatorPrincipalId(), document.getDocumentId()).isAcknowledgeRequested());
061            assertEquals(notify, WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("ewestfal"), document.getDocumentId()).isAcknowledgeRequested());
062            assertEquals(notify, WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document.getDocumentId()).isAcknowledgeRequested());
063            assertEquals(notify, WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("jhopf"), document.getDocumentId()).isAcknowledgeRequested());
064            }
065            
066        @Test public void testSuperUserInitiatorDisapprove() throws Exception {
067            superUserInitiatorDisapprove(false);
068        }
069    
070        @Test public void testSuperUserInitiatorDisapproveWithNotification() throws Exception {
071            superUserInitiatorDisapprove(true);
072        }
073        
074        protected void superUserInitiatorDisapprove(boolean notify) throws Exception {
075                    WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("ewestfal"), notify ? DOC_TYPE_WITH_NOTIFY: DOC_TYPE);
076            document.route("");
077            
078            WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("jhopf"), document.getDocumentId()).approve("");
079            WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("ewestfal"), document.getDocumentId()).approve("");
080            WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document.getDocumentId()).approve("");
081    
082            document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("ewestfal"), document.getDocumentId());
083            assertTrue("WorkflowDocument should indicate ewestfal as SuperUser", document.isValidAction(ActionType.SU_DISAPPROVE));
084            document.superUserDisapprove("");
085            assertTrue("Document should be final after Super User Disapprove", document.isDisapproved());
086            // initiator doesn't get Ack for their own action
087            assertEquals(notify, WorkflowDocumentFactory.loadDocument(document.getInitiatorPrincipalId(), document.getDocumentId()).isAcknowledgeRequested());
088            assertEquals(notify, WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("ewestfal"), document.getDocumentId()).isAcknowledgeRequested());
089            assertEquals(notify, WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("rkirkend"), document.getDocumentId()).isAcknowledgeRequested());
090            assertEquals(notify, WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("jhopf"), document.getDocumentId()).isAcknowledgeRequested());
091            }
092    
093        @Test public void testSuperUserInitiatorImmediateDisapprove() throws Exception {
094            superUserInitiatorImmediateDisapprove(false);
095        }
096    
097        @Test public void testSuperUserInitiatorImmediateDisapproveWithNotification() throws Exception {
098            superUserInitiatorImmediateDisapprove(true);
099        }
100    
101        protected void superUserInitiatorImmediateDisapprove(boolean notify) throws Exception {
102            WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("ewestfal"), notify ? DOC_TYPE_WITH_NOTIFY: DOC_TYPE);
103            assertTrue("WorkflowDocument should indicate ewestfal as SuperUser", document.isValidAction(ActionType.SU_DISAPPROVE));
104            document.superUserDisapprove("");
105            assertTrue("Document should be final after Super User Disapprove", document.isDisapproved());
106            // initiator doesn't get Ack for their own action
107            assertFalse(WorkflowDocumentFactory.loadDocument(document.getInitiatorPrincipalId(), document.getDocumentId()).isAcknowledgeRequested());
108            assertFalse(WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("ewestfal"), document.getDocumentId()).isAcknowledgeRequested());
109        }
110            
111        @Test public void testSuperUserDisapproveInvalidUser() throws Exception {
112                    WorkflowDocument document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("ewestfal"), NotifySetup.DOCUMENT_TYPE_NAME);
113            document.route("");
114            
115            document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("quickstart"), document.getDocumentId());
116            try {
117                    assertFalse("WorkflowDocument should not indicate quickstart as SuperUser", document.isValidAction(ActionType.SU_DISAPPROVE));
118                    document.superUserDisapprove("");
119                    fail("invalid user attempted to SuperUserApprove");
120            } catch (Exception e) {
121            }
122            
123            }
124            
125    }