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 }