001: package org.tigris.scarab.services.email;
002:
003: /* ================================================================
004: * Copyright (c) 2000-2002 CollabNet. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions are
008: * met:
009: *
010: * 1. Redistributions of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * 2. Redistributions in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in the
015: * documentation and/or other materials provided with the distribution.
016: *
017: * 3. The end-user documentation included with the redistribution, if
018: * any, must include the following acknowlegement: "This product includes
019: * software developed by Collab.Net <http://www.Collab.Net/>."
020: * Alternately, this acknowlegement may appear in the software itself, if
021: * and wherever such third-party acknowlegements normally appear.
022: *
023: * 4. The hosted project names must not be used to endorse or promote
024: * products derived from this software without prior written
025: * permission. For written permission, please contact info@collab.net.
026: *
027: * 5. Products derived from this software may not use the "Tigris" or
028: * "Scarab" names nor may "Tigris" or "Scarab" appear in their names without
029: * prior written permission of Collab.Net.
030: *
031: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
032: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
033: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
034: * IN NO EVENT SHALL COLLAB.NET OR ITS CONTRIBUTORS BE LIABLE FOR ANY
035: * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
036: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
037: * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
038: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
039: * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
040: * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
041: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
042: *
043: * ====================================================================
044: *
045: * This software consists of voluntary contributions made by many
046: * individuals on behalf of Collab.Net.
047: */
048:
049: import java.io.BufferedReader;
050: import java.io.IOException;
051: import java.io.StringReader;
052: import java.util.HashMap;
053: import java.util.ResourceBundle;
054:
055: import org.apache.fulcrum.TurbineServices;
056: import org.apache.fulcrum.localization.LocalizationService;
057: import org.apache.velocity.VelocityContext;
058: import org.tigris.scarab.test.BaseTurbineTestCase;
059: import org.tigris.scarab.tools.ScarabLocalizationTool;
060: import org.tigris.scarab.util.ScarabConstants;
061:
062: /**
063: * A Testing Suite for the VelocityEmailService class.
064: *
065: * @author <a href="mailto:epugh@opensourceconnections.com">Eric Pugh </a>
066: * @version $Id: VelocityEmailServiceTest.java,v 1.1 2004/04/07 20:11:27 dep4b
067: * Exp $
068: */
069: public class VelocityEmailServiceTest extends BaseTurbineTestCase {
070:
071: /**
072: * @author pti
073: *
074: * MOCK object to calculate the Issue Link in the templates
075: */
076: public class MockLink {
077: /**
078: * Calculate a dummy test url from the issue.
079: *
080: * @param issue An issue 'hashmap'
081: * @return A test url based on the issue id.
082: */
083: public String getIssueIdLink(HashMap issue) {
084: return "http://issue.test.org/" + issue.get("UniqueId");
085: }
086: }
087:
088: private HashMap issue;
089: private HashMap user;
090: private HashMap rModuleIssueType;
091: private VelocityContext context;
092: private VelocityEmailService ves;
093: private ResourceBundle l10n;
094: private MockLink link;
095:
096: /* (non-Javadoc)
097: * @see junit.framework.TestCase#setUp()
098: */
099: public void setUp() throws Exception {
100: super .setUp();
101:
102: ves = (VelocityEmailService) TurbineServices.getInstance()
103: .getService("EmailService");
104:
105: // Create a new context for Velocity
106: context = new VelocityContext();
107:
108: // Get a suitable resource bundle and put it in the context
109: ScarabLocalizationTool slt = new ScarabLocalizationTool();
110: slt.init(ScarabLocalizationTool.DEFAULT_LOCALE);
111: context.put(ScarabConstants.LOCALIZATION_TOOL, slt);
112:
113: // Create a user mock object based on a hashmap to represent the modifier
114: user = new HashMap();
115: user.put("Name", "tester");
116: user.put("UserName", "Ted E. Ster");
117: user.put("Email", "tester@test.org");
118:
119: // Create an RModuleIssueType mock object based on a hashmap
120: rModuleIssueType = new HashMap();
121: rModuleIssueType.put("DisplayName", "Defect");
122:
123: // Create an issue mock object based on a hashmap and add it to the context
124: issue = new HashMap();
125: context.put("issue", issue);
126: issue.put("ModifiedBy", user);
127: issue.put("DefaultText", "This is the default issue text.");
128: issue.put("UniqueId", "TEST1");
129: issue.put("RModuleIssueType", rModuleIssueType);
130:
131: // Create a link mock object and add it to the context
132: link = new MockLink();
133: context.put("link", link);
134:
135: }
136:
137: /**
138: * Count the number of lines in a message
139: *
140: * @param msg The email message whose lines will be counted
141: * @return The number of lines in the message
142: * @throws IOException
143: */
144: private int countLines(String msg) throws IOException {
145: BufferedReader rdr = new BufferedReader(new StringReader(msg));
146: int i = 0;
147: while (rdr.readLine() != null) {
148: i++;
149: }
150: return i;
151: }
152:
153: public void testModifyIssueMessage() throws Exception {
154: String msg = ves.handleRequest(context, "email/ModifyIssue.vm");
155: assertNotNull("Null ModifyIssue Message Returned", msg);
156: assertTrue("Unexpected few lines in ModifyIssue Message : "
157: + countLines(msg), countLines(msg) > 5);
158: assertTrue("Name expected in ModifyIssue Message.", msg
159: .indexOf((String) user.get("Name")) > 0);
160: // assertTrue("UserName expected in ModifyIssue Message.",
161: // msg.indexOf((String)user.get("UserName")) > 0);
162: assertTrue("Email expected in ModifyIssue Message.", msg
163: .indexOf((String) user.get("Email")) > 0);
164: assertTrue("IssueId expected in ModifyIssue Message.", msg
165: .indexOf((String) issue.get("UniqueId")) > 0);
166: assertTrue("DefaultText expected in ModifyIssue Message.", msg
167: .indexOf((String) issue.get("DefaultText")) > 0);
168: assertTrue("IssueType expected in ModifyIssue Message.",
169: msg.indexOf((String) rModuleIssueType
170: .get("DisplayName")) > 0);
171: assertTrue(
172: "Link url to issue expected in ModifyIssue Message.",
173: msg.indexOf(link.getIssueIdLink(issue)) > 0);
174:
175: System.out.println(msg);
176: }
177: }
|