JAMES-2557 Propose an update of the Mail API to handle null sender

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f39a2c1f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f39a2c1f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f39a2c1f

Branch: refs/heads/master
Commit: f39a2c1f948806a335a2b07e9e1a8ab6e91cc990
Parents: 33d3ea3
Author: Benoit Tellier <[email protected]>
Authored: Fri Oct 19 08:37:54 2018 +0700
Committer: Benoit Tellier <[email protected]>
Committed: Tue Oct 30 09:39:04 2018 +0700

----------------------------------------------------------------------
 .../src/main/java/org/apache/mailet/Mail.java   | 33 ++++++++++
 .../apache/mailet/base/test/FakeMailTest.java   | 63 ++++++++++++++++++++
 .../apache/james/server/core/MailImplTest.java  | 59 ++++++++++++++++++
 3 files changed, 155 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f39a2c1f/mailet/api/src/main/java/org/apache/mailet/Mail.java
----------------------------------------------------------------------
diff --git a/mailet/api/src/main/java/org/apache/mailet/Mail.java 
b/mailet/api/src/main/java/org/apache/mailet/Mail.java
index 23a0918..4b98f30 100644
--- a/mailet/api/src/main/java/org/apache/mailet/Mail.java
+++ b/mailet/api/src/main/java/org/apache/mailet/Mail.java
@@ -19,6 +19,7 @@
 
 
 package org.apache.mailet;
+
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.Date;
@@ -28,6 +29,7 @@ import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 
 import org.apache.james.core.MailAddress;
+import org.apache.james.core.MaybeSender;
 import org.apache.mailet.PerRecipientHeaders.Header;
 
 /**
@@ -121,9 +123,40 @@ public interface Mail extends Serializable, Cloneable {
      * Returns the sender of the message, as specified by the SMTP "MAIL FROM" 
command,
      * or internally defined.
      *
+     * @deprecated @see {@link #getMaybeSender()} and {@link MaybeSender}
+     *
+     * Note that SMTP null sender ( "&lt;&gt;" ) needs to be implicitly 
handled by the caller under the form of 'null' or
+     * {@link MailAddress#nullSender()}. Replacement method adds type safety 
on this operation.
+     *
      * @return the sender of this message
      */
+    @Deprecated
     MailAddress getSender();
+
+    /**
+     * Returns the sender of the message, as specified by the SMTP "MAIL FROM" 
command,
+     * or internally defined.
+     *
+     * 'null' or {@link MailAddress#nullSender()} are handled with {@link 
MaybeSender#nullSender()}.
+     *
+     * @since Mailet API v3.2.0
+     * @return the sender of this message wrapped in an optional
+     */
+    @SuppressWarnings("deprecated")
+    default MaybeSender getMaybeSender() {
+        return MaybeSender.of(getSender());
+    }
+
+    /**
+     * Returns if this message has a sender.
+     *
+     * {@link MaybeSender#nullSender()} will be considered as no sender.
+     *
+     * @since Mailet API v3.2.0
+     */
+    default boolean hasSender() {
+        return !getMaybeSender().isNullSender();
+    }
     
     /**
      * Returns the current state of the message, such as GHOST, ERROR or 
DEFAULT.

http://git-wip-us.apache.org/repos/asf/james-project/blob/f39a2c1f/mailet/test/src/test/java/org/apache/mailet/base/test/FakeMailTest.java
----------------------------------------------------------------------
diff --git 
a/mailet/test/src/test/java/org/apache/mailet/base/test/FakeMailTest.java 
b/mailet/test/src/test/java/org/apache/mailet/base/test/FakeMailTest.java
index fc0c03c..6dc3dbf 100644
--- a/mailet/test/src/test/java/org/apache/mailet/base/test/FakeMailTest.java
+++ b/mailet/test/src/test/java/org/apache/mailet/base/test/FakeMailTest.java
@@ -19,10 +19,15 @@
 
 package org.apache.mailet.base.test;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
+import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 
+import org.apache.james.core.MailAddress;
+import org.apache.james.core.MaybeSender;
+import org.apache.mailet.base.MailAddressFixture;
 import org.junit.Test;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
@@ -38,4 +43,62 @@ public class FakeMailTest {
             .verify();
     }
 
+    @Test
+    public void getMaybeSenderShouldHandleNullSender() throws 
MessagingException {
+        assertThat(
+            FakeMail.builder()
+                .sender(MailAddress.nullSender())
+                .build()
+                .getMaybeSender())
+            .isEqualTo(MaybeSender.nullSender());
+    }
+
+    @Test
+    public void getMaybeSenderShouldHandleNoSender() throws MessagingException 
{
+        assertThat(
+            FakeMail.builder()
+                .build()
+                .getMaybeSender())
+            .isEqualTo(MaybeSender.nullSender());
+    }
+
+    @Test
+    public void getMaybeSenderShouldHandleSender() throws MessagingException {
+        assertThat(
+            FakeMail.builder()
+                .sender(MailAddressFixture.SENDER)
+                .build()
+                .getMaybeSender())
+            .isEqualTo(MaybeSender.of(MailAddressFixture.SENDER));
+    }
+
+    @Test
+    public void hasSenderShouldReturnFalseWhenSenderIsNull() throws 
MessagingException {
+        assertThat(
+            FakeMail.builder()
+                .sender(MailAddress.nullSender())
+                .build()
+                .hasSender())
+            .isFalse();
+    }
+
+    @Test
+    public void hasSenderShouldReturnFalseWhenSenderIsNotSpecified() throws 
MessagingException {
+        assertThat(
+            FakeMail.builder()
+                .build()
+                .hasSender())
+            .isFalse();
+    }
+
+    @Test
+    public void hasSenderShouldReturnTrueWhenSenderIsSpecified() throws 
MessagingException {
+        assertThat(
+            FakeMail.builder()
+                .sender(MailAddressFixture.SENDER)
+                .build()
+                .hasSender())
+            .isTrue();
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/f39a2c1f/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
----------------------------------------------------------------------
diff --git 
a/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
 
b/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
index 3cbaabf..06d9e16 100644
--- 
a/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
+++ 
b/server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
@@ -33,6 +33,7 @@ import javax.mail.internet.MimeMessage;
 import org.apache.james.core.MailAddress;
 import org.apache.james.core.builder.MimeMessageBuilder;
 import org.apache.mailet.Mail;
+import org.apache.mailet.base.MailAddressFixture;
 import org.apache.mailet.base.test.MailUtil;
 import org.junit.Before;
 import org.junit.Test;
@@ -209,4 +210,62 @@ public class MailImplTest {
     public void deriveNewNameShouldGenerateNotEqualsCurrentName() throws 
MessagingException {
         assertThat(MailImpl.deriveNewName("current")).isNotEqualTo("current");
     }
+
+    @Test
+    public void getMaybeSenderShouldHandleNullSender() {
+        assertThat(
+            MailImpl.builder()
+                .sender(MailAddress.nullSender())
+                .build()
+                .getMaybeSender())
+            .isEqualTo(MaybeSender.nullSender());
+    }
+
+    @Test
+    public void getMaybeSenderShouldHandleNoSender() {
+        assertThat(
+            MailImpl.builder()
+                .build()
+                .getMaybeSender())
+            .isEqualTo(MaybeSender.nullSender());
+    }
+
+    @Test
+    public void getMaybeSenderShouldHandleSender() {
+        assertThat(
+            MailImpl.builder()
+                .sender(MailAddressFixture.SENDER)
+                .build()
+                .getMaybeSender())
+            .isEqualTo(MaybeSender.of(MailAddressFixture.SENDER));
+    }
+
+    @Test
+    public void hasSenderShouldReturnFalseWhenSenderIsNull() {
+        assertThat(
+            MailImpl.builder()
+                .sender(MailAddress.nullSender())
+                .build()
+                .hasSender())
+            .isFalse();
+    }
+
+    @Test
+    public void hasSenderShouldReturnFalseWhenSenderIsNotSpecified() {
+        assertThat(
+            MailImpl.builder()
+                .build()
+                .hasSender())
+            .isFalse();
+    }
+
+    @Test
+    public void hasSenderShouldReturnTrueWhenSenderIsSpecified() {
+        assertThat(
+            MailImpl.builder()
+                .sender(MailAddressFixture.SENDER)
+                .build()
+                .hasSender())
+            .isTrue();
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to