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 ( "<>" ) 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]
