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]

Reply via email to