1   /*****************************************************************
2    * Licensed to the Apache Software Foundation (ASF) under one   *
3    * or more contributor license agreements.  See the NOTICE file *
4    * distributed with this work for additional information        *
5    * regarding copyright ownership.  The ASF licenses this file   *
6    * to you under the Apache License, Version 2.0 (the            *
7    * "License"); you may not use this file except in compliance   *
8    * with the License.  You may obtain a copy of the License at   *
9    *                                                              *
10   *   http://www.apache.org/licenses/LICENSE-2.0                 *
11   *                                                              *
12   * Unless required by applicable law or agreed to in writing,   *
13   * software distributed under the License is distributed on an  *
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
15   * KIND, either express or implied.  See the License for the    *
16   * specific language governing permissions and limitations      *
17   * under the License.                                           *
18   ****************************************************************/
19  
20  package org.apache.james.transport.mailets;
21  
22  import org.apache.james.test.mock.javaxmail.MockMimeMessage;
23  import org.apache.james.test.mock.mailet.MockMail;
24  import org.apache.james.test.mock.mailet.MockMailContext;
25  import org.apache.james.test.mock.mailet.MockMailetConfig;
26  import org.apache.mailet.Mail;
27  import org.apache.mailet.MailAddress;
28  import org.apache.mailet.Mailet;
29  
30  import javax.mail.MessagingException;
31  import javax.mail.internet.InternetAddress;
32  import javax.mail.internet.MimeMessage;
33  import javax.mail.internet.ParseException;
34  import javax.mail.internet.MimeMessage.RecipientType;
35  
36  import java.io.UnsupportedEncodingException;
37  import java.util.Arrays;
38  
39  import junit.framework.TestCase;
40  
41  public class SetMimeHeaderTest extends TestCase {
42  
43      private MimeMessage mockedMimeMessage;
44  
45      private Mail mockedMail;
46  
47      private Mailet mailet;
48  
49      private final String HEADER_NAME = "JUNIT";
50  
51      private final String HEADER_VALUE = "test-value";
52  
53      private String headerName = "defaultHeaderName";
54  
55      private String headerValue = "defaultHeaderValue";
56  
57      public SetMimeHeaderTest(String arg0) throws UnsupportedEncodingException {
58          super(arg0);
59      }
60  
61      private void setHeaderName(String headerName) {
62          this.headerName = headerName;
63      }
64  
65      private void setHeaderValue(String headerValue) {
66          this.headerValue = headerValue;
67      }
68  
69      private void setupMockedMimeMessage() throws MessagingException {
70          String sender = "test@james.apache.org";
71          String rcpt = "test2@james.apache.org";
72  
73          mockedMimeMessage = new MockMimeMessage();
74          mockedMimeMessage.setFrom(new InternetAddress(sender));
75          mockedMimeMessage.setRecipients(RecipientType.TO, rcpt);
76          mockedMimeMessage.setHeader(headerName, headerValue);
77          mockedMimeMessage.setSubject("testmail");
78          mockedMimeMessage.setText("testtext");
79          mockedMimeMessage.saveChanges();
80  
81      }
82  
83      private void setupMockedMail(MimeMessage m) throws ParseException {
84          mockedMail = new MockMail();
85          mockedMail.setMessage(m);
86          mockedMail.setRecipients(Arrays.asList(new MailAddress[] {
87                  new MailAddress("test@james.apache.org"), new MailAddress("test2@james.apache.org") }));
88  
89      }
90  
91      private void setupMailet() throws MessagingException {
92          setupMockedMimeMessage();
93          mailet = new SetMimeHeader();
94          MockMailetConfig mci = new MockMailetConfig("Test",
95                  new MockMailContext());
96          mci.setProperty("name", HEADER_NAME);
97          mci.setProperty("value", HEADER_VALUE);
98  
99          mailet.init(mci);
100     }
101 
102     
103     public void testHeaderIsPresent() throws MessagingException {
104         setupMockedMimeMessage();
105         setupMockedMail(mockedMimeMessage);
106         setupMailet();
107 
108         mailet.service(mockedMail);
109 
110         assertEquals(HEADER_VALUE, mockedMail.getMessage().getHeader(
111                 HEADER_NAME)[0]);
112 
113     }
114 
115     
116     public void testHeaderIsReplaced() throws MessagingException {
117         setHeaderName(HEADER_NAME);
118         setHeaderValue(headerValue);
119 
120         setupMockedMimeMessage();
121         setupMockedMail(mockedMimeMessage);
122         setupMailet();
123 
124         mailet.service(mockedMail);
125 
126         assertEquals(HEADER_VALUE, mockedMail.getMessage().getHeader(
127                 HEADER_NAME)[0]);
128 
129     }
130 }