001    /**
002     * Copyright 2005-2013 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.mail;
017    
018    import java.util.ArrayList;
019    import java.util.Collection;
020    
021    import org.apache.log4j.Logger;
022    import org.junit.Test;
023    import org.kuali.rice.core.api.mail.EmailContent;
024    import org.kuali.rice.kew.actionitem.ActionItem;
025    import org.kuali.rice.kew.actionitem.ActionItemActionListExtension;
026    import org.kuali.rice.kew.actionlist.ActionListFilter;
027    import org.kuali.rice.kew.api.WorkflowDocument;
028    import org.kuali.rice.kew.api.WorkflowDocumentFactory;
029    import org.kuali.rice.kew.mail.service.EmailContentService;
030    import org.kuali.rice.kew.mail.service.impl.StyleableEmailContentServiceImpl;
031    import org.kuali.rice.kew.rule.RuleTestUtils;
032    import org.kuali.rice.kew.service.KEWServiceLocator;
033    import org.kuali.rice.kew.test.KEWTestCase;
034    import org.kuali.rice.kim.api.identity.Person;
035    import org.kuali.rice.kim.api.services.KimApiServiceLocator;
036    
037    /**
038     * Unit test for the EmailContentService
039     * 
040     * @author Kuali Rice Team (rice.collab@kuali.org)
041     *
042     */
043    public class EmailContentServiceTest extends KEWTestCase {
044            
045            private static final Logger LOG = Logger.getLogger(EmailContentServiceTest.class);
046    
047            /**
048             * @see org.kuali.rice.test.RiceTestCase#setUp()
049             */
050            @Override
051            public void setUp() throws Exception {
052                    super.setUp();
053                    loadXmlFile("EmailContentServiceTestConfig.xml");
054            }
055            
056            /**
057             * This method specifically exercises a group responsibility to assure that the 
058             * {@link StyleableEmailContentServiceImpl} can handle that case.
059             * See KULRICE-3659.
060             */
061            @Test
062            public void testGroup() throws Exception {
063                    String ewestfalPrincipalId = getPrincipalIdForName("ewestfal");
064                    
065                    // this document type has a group responsibility
066                    WorkflowDocument doc = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("rkirkend"), "EmailTestWorkgroupDocType");
067                    doc.route("");
068                    
069                    ActionListFilter actionListFilter = new ActionListFilter();
070                    actionListFilter.setDocumentType(doc.getDocumentTypeName());
071                    Collection<ActionItemActionListExtension> actionItems = KEWServiceLocator.getActionListService().getActionList(ewestfalPrincipalId, actionListFilter);
072    
073                    EmailContentService emailContentService = KEWServiceLocator.getEmailContentService();
074                    
075                    Person person = KimApiServiceLocator.getPersonService().getPerson(ewestfalPrincipalId);
076                    // this would blow up before the fix
077                    EmailContent emailContent = emailContentService.generateDailyReminder(person, ActionItem.to(new ArrayList<ActionItem>(actionItems)));
078            }
079            
080            /**
081             * This method tests that delegation doesn't break the email
082             * 
083             * @throws Exception
084             */
085            @Test
086            public void testUserDelegator() throws Exception {
087                    
088                    RuleTestUtils.createDelegationToUser("EmailTestUserDocType", "WorkflowDocumentTemplate", "user1");
089                    
090                    String user1PrincipalId = getPrincipalIdForName("user1");
091                    
092                    // this document type has a group responsibility
093                    WorkflowDocument doc = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("rkirkend"), "EmailTestUserDocType");
094                    doc.route("");
095                    
096                    ActionListFilter actionListFilter = new ActionListFilter();
097                    actionListFilter.setDocumentType(doc.getDocumentTypeName());
098                    Collection<ActionItemActionListExtension> actionItems = KEWServiceLocator.getActionListService().getActionList(user1PrincipalId, actionListFilter);
099    
100                    EmailContentService emailContentService = KEWServiceLocator.getEmailContentService();
101                    
102                    Person person = KimApiServiceLocator.getPersonService().getPerson(user1PrincipalId);
103                    EmailContent emailContent = emailContentService.generateDailyReminder(person, ActionItem.to(new ArrayList<ActionItem>(actionItems)));
104            }
105            
106            /**
107             * This method tests that 
108             * 
109             * @throws Exception
110             */
111            @Test
112            public void testGroupDelegator() throws Exception {
113                    
114                    RuleTestUtils.createDelegationToGroup("EmailTestWorkgroupDocType", "WorkflowDocumentTemplate", "EmailTestDelegateWorkgroup");
115                    
116                    String user1PrincipalId = getPrincipalIdForName("user1");
117                    
118                    // this document type has a group responsibility
119                    WorkflowDocument doc = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("rkirkend"), "EmailTestWorkgroupDocType");
120                    doc.route("");
121                    
122                    ActionListFilter actionListFilter = new ActionListFilter();
123                    actionListFilter.setDocumentType(doc.getDocumentTypeName());
124                    Collection<ActionItemActionListExtension> actionItems = KEWServiceLocator.getActionListService().getActionList(user1PrincipalId, actionListFilter);
125    
126                    EmailContentService emailContentService = KEWServiceLocator.getEmailContentService();
127                    
128                    Person person = KimApiServiceLocator.getPersonService().getPerson(user1PrincipalId);
129                    EmailContent emailContent = emailContentService.generateDailyReminder(person, ActionItem.to(new ArrayList<ActionItem>(actionItems)));
130            }
131    }