MAILET-100 covers AddSubjectPrefix mailet with unit tests
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/34dd34f7 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/34dd34f7 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/34dd34f7 Branch: refs/heads/master Commit: 34dd34f728d05dc399b69dfccd2d67085ce23799 Parents: 0f87b43 Author: Matthieu Baechler <[email protected]> Authored: Thu Aug 25 12:06:32 2016 +0200 Committer: Matthieu Baechler <[email protected]> Committed: Thu Aug 25 17:13:55 2016 +0200 ---------------------------------------------------------------------- .../mailet/base/test/FakeMimeMessage.java | 21 ------- .../transport/mailets/AddSubjectPrefix.java | 60 ++++++++++---------- .../transport/mailets/AddSubjectPrefixTest.java | 19 +++++++ 3 files changed, 49 insertions(+), 51 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/34dd34f7/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMimeMessage.java ---------------------------------------------------------------------- diff --git a/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMimeMessage.java b/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMimeMessage.java index 21611bd..df22a1c 100644 --- a/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMimeMessage.java +++ b/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMimeMessage.java @@ -39,7 +39,6 @@ public class FakeMimeMessage extends MimeMessage { private final List<Serializable> m_ccRecepients = new ArrayList<Serializable>(); private final List<Serializable> m_bccRecepients = new ArrayList<Serializable>(); private final List<Serializable> m_replyToAddresses = new ArrayList<Serializable>(); - private String m_subject; private int m_iMessageNumber; private boolean m_bIsExpunged; private Object m_content; @@ -139,26 +138,6 @@ public class FakeMimeMessage extends MimeMessage { m_replyToAddresses.addAll(Arrays.asList(addresses)); } - public String getSubject() throws MessagingException { - return m_subject; - } - - public void setSubject(String subject) throws MessagingException { - m_subject = subject; - } - - public void setSubject(String subject, String charset) throws MessagingException { - if (subject == null) { - m_subject = null; - return; - } - try { - m_subject = new String(subject.getBytes(charset)); - } catch (UnsupportedEncodingException e) { - throw new MessagingException("setting subject failed", e); - } - } - public Date getSentDate() throws MessagingException { return m_sentDate; } http://git-wip-us.apache.org/repos/asf/james-project/blob/34dd34f7/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java ---------------------------------------------------------------------- diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java index bb8a229..1ef8579 100644 --- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java +++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java @@ -24,6 +24,10 @@ import org.apache.mailet.Mail; import org.apache.mailet.base.GenericMailet; import org.apache.mailet.base.RFC2822Headers; +import com.google.common.base.Charsets; +import com.google.common.base.Joiner; +import com.google.common.base.Strings; + import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; @@ -39,52 +43,33 @@ import javax.mail.internet.MimeMessage; */ public class AddSubjectPrefix extends GenericMailet { - // prefix to add - private String subjectPrefix = null; + private String subjectPrefix; - /** - * Initialize the mailet. - */ + @Override public void init() throws MessagingException { subjectPrefix = getInitParameter("subjectPrefix"); - if (subjectPrefix == null || subjectPrefix.equals("")) { - throw new MessagingException( - "Please configure a valid subjectPrefix"); + if (Strings.isNullOrEmpty(subjectPrefix)) { + throw new MessagingException("Please configure a valid subjectPrefix"); } } - /** - * Takes the message and adds a prefix to the subject - * - * @param mail the mail being processed - * @throws MessagingException if an error arises during message processing - */ + @Override public void service(Mail mail) throws MessagingException { - String newSubject; MimeMessage m = mail.getMessage(); - - String subject = m.getSubject(); - - if (subject != null) { - // m.setSubject(subjectPrefix + " " + subject); - newSubject = subjectPrefix + " " + m.getSubject(); - - } else { - newSubject = subjectPrefix; - } - + + String newSubject = prefixSubject(m); + /* * Get sure to use the right encoding when add the subjectPrefix.. * otherwise we get problems with some special chars */ - String rawSubject = m.getHeader(RFC2822Headers.SUBJECT, null); + String rawSubject = getFirstSubjectHeader(m); String mimeCharset = determineMailHeaderEncodingCharset(rawSubject); if (mimeCharset == null) { // most likely ASCII // it uses the system charset or the value of the // mail.mime.charset property if set - m.setSubject(newSubject); - return; + m.setSubject(newSubject, Charsets.UTF_8.displayName()); } else { // original charset determined String javaCharset = javax.mail.internet.MimeUtility .javaCharset(mimeCharset); @@ -99,8 +84,23 @@ public class AddSubjectPrefix extends GenericMailet { // damaged"); m.setSubject(newSubject); // recover } + m.saveChanges(); + } + } + + private String getFirstSubjectHeader(MimeMessage m) throws MessagingException { + String delimiter = null; + return m.getHeader(RFC2822Headers.SUBJECT, delimiter); + } + + private String prefixSubject(MimeMessage m) throws MessagingException { + String subject = m.getSubject(); + + if (subject != null) { + return Joiner.on(' ').join(subjectPrefix, subject); + } else { + return subjectPrefix; } - m.saveChanges(); } public String getMailetInfo() { http://git-wip-us.apache.org/repos/asf/james-project/blob/34dd34f7/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java ---------------------------------------------------------------------- diff --git a/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java b/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java index b2c102b..d48fa95 100644 --- a/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java +++ b/mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java @@ -31,6 +31,7 @@ import org.apache.mailet.base.test.FakeMailContext; import org.apache.mailet.base.test.FakeMailetConfig; import org.apache.mailet.base.test.MailUtil; import org.junit.Before; +import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -61,6 +62,24 @@ public class AddSubjectPrefixTest { assertThat(mail.getMessage().getSubject()).isEqualTo("JUNIT test"); } + + @Ignore + @Test + public void shouldAddPrefixToEncodedSubject() throws MessagingException { + mailetConfig.setProperty("subjectPrefix", "Ð ÑÑÑкий"); + mailet.init(mailetConfig); + + String subject = + "=?iso8859-15?Q?Beno=EEt_TELLIER_vous_a_d=E9pos=E9_des_fichiers?="; + MimeMessage mockedMimeMessage = MailUtil.createMimeMessageWithSubject(subject); + FakeMail mail = MailUtil.createMockMail2Recipients(mockedMimeMessage); + + mailet.service(mail); + + assertThat(mail.getMessage().getSubject()).startsWith("Ð ÑÑÑкий").endsWith("Benoît TELLIER vous a déposé des fichiers"); + } + + @Test public void shouldDefinePrefixAsSubjectWhenNoSubject() throws MessagingException { mailetConfig.setProperty("subjectPrefix", "JUNIT"); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
