You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2020/12/30 03:35:13 UTC
[james-project] 01/29: JAMES-3431 Mock SMTP server
ReceivedMailRepository should keep ESMTP parameters as part of the envelope
This is an automated email from the ASF dual-hosted git repository.
rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit e4f5612bc3f1bec4b0bffd757444f12e65b28715
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Dec 23 11:01:30 2020 +0700
JAMES-3431 Mock SMTP server ReceivedMailRepository should keep ESMTP parameters as part of the envelope
We modified the JSON format used to describe a mail envelope.
---
.../james/mailets/RemoteDeliveryErrorTest.java | 6 +-
.../james/mock/smtp/server/MockMessageHandler.java | 2 +-
.../apache/james/mock/smtp/server/model/Mail.java | 217 +++++++++++++++++++--
.../org/apache/james/mock/smtp/server/Fixture.java | 75 +++++--
.../smtp/server/HTTPConfigurationServerTest.java | 34 +++-
.../james/mock/smtp/server/MockSMTPServerTest.java | 4 +-
.../smtp/server/ReceivedMailRepositoryTest.java | 8 +-
.../james/mock/smtp/server/model/MailTest.java | 21 +-
.../james/mock/smtp/server/model/MailsTest.java | 103 +++++++++-
9 files changed, 410 insertions(+), 60 deletions(-)
diff --git a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorTest.java b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorTest.java
index 20afca4..a729062 100644
--- a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorTest.java
+++ b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorTest.java
@@ -124,9 +124,9 @@ public class RemoteDeliveryErrorTest {
RECIPIENT1_ADDRESS = new MailAddress(RECIPIENT1);
RECIPIENT2_ADDRESS = new MailAddress(RECIPIENT2);
- FROM_RECIPIENT_ENVELOPE = new Mail.Envelope(FROM_ADDRESS, RECIPIENT_ADDRESS);
- FROM_RECIPIENT1_ENVELOPE = new Mail.Envelope(FROM_ADDRESS, RECIPIENT1_ADDRESS);
- FROM_RECIPIENT2_ENVELOPE = new Mail.Envelope(FROM_ADDRESS, RECIPIENT2_ADDRESS);
+ FROM_RECIPIENT_ENVELOPE = Mail.Envelope.ofAddresses(FROM_ADDRESS, RECIPIENT_ADDRESS);
+ FROM_RECIPIENT1_ENVELOPE = Mail.Envelope.ofAddresses(FROM_ADDRESS, RECIPIENT1_ADDRESS);
+ FROM_RECIPIENT2_ENVELOPE = Mail.Envelope.ofAddresses(FROM_ADDRESS, RECIPIENT2_ADDRESS);
}
@Before
diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockMessageHandler.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockMessageHandler.java
index 10a09ec..b0372cb 100644
--- a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockMessageHandler.java
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockMessageHandler.java
@@ -124,7 +124,7 @@ public class MockMessageHandler implements MessageHandler {
Optional<Behavior<MailAddress>> recipientBehavior = firstMatchedBehavior(SMTPCommand.RCPT_TO, recipient);
recipientBehavior
- .orElseGet(() -> envelopeBuilder::addRecipient)
+ .orElseGet(() -> envelopeBuilder::addRecipientMailAddress)
.behave(parse(recipient));
}
diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Mail.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Mail.java
index 2c1cb6a..c2e5d3a 100644
--- a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Mail.java
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Mail.java
@@ -20,20 +20,178 @@
package org.apache.james.mock.smtp.server.model;
import java.util.Arrays;
+import java.util.Collection;
import java.util.List;
import java.util.Objects;
+import java.util.stream.Stream;
import org.apache.james.core.MailAddress;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+import com.github.steveash.guavate.Guavate;
import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
@JsonDeserialize(builder = Mail.Builder.class)
public class Mail {
+ @JsonDeserialize(builder = Parameter.Builder.class)
+ public static class Parameter {
+ @JsonPOJOBuilder(withPrefix = "")
+ public static class Builder {
+ private String name;
+ private String value;
+
+ public Builder() {
+
+ }
+
+ public Builder name(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public Builder value(String value) {
+ this.value = value;
+ return this;
+ }
+
+ public Parameter build() {
+ Preconditions.checkState(name != null, "'name' field cannot be omitted");
+ Preconditions.checkState(value != null, "'value' field cannot be omitted");
+
+ return new Parameter(name, value);
+ }
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ private final String name;
+ private final String value;
+
+ private Parameter(String name, String value) {
+ this.name = name;
+ this.value = value;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof Parameter) {
+ Parameter that = (Parameter) o;
+
+ return Objects.equals(this.name, that.name)
+ && Objects.equals(this.value, that.value);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(name, value);
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("name", name)
+ .add("value", value)
+ .toString();
+ }
+ }
+
+ @JsonDeserialize(builder = Recipient.Builder.class)
+ public static class Recipient {
+ @JsonPOJOBuilder(withPrefix = "")
+ public static class Builder {
+ private MailAddress address;
+ private ImmutableList.Builder<Parameter> parameters;
+
+ public Builder() {
+ parameters = new ImmutableList.Builder<>();
+ }
+
+ public Builder address(MailAddress address) {
+ this.address = address;
+ return this;
+ }
+
+ public Builder addParameter(Parameter parameter) {
+ this.parameters.add(parameter);
+ return this;
+ }
+
+ public Builder parameters(Collection<Parameter> parameters) {
+ this.parameters.addAll(parameters);
+ return this;
+ }
+
+ public Recipient build() {
+ Preconditions.checkState(address != null, "'address' field cannot be omitted");
+
+ return new Recipient(address, parameters.build());
+ }
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static Recipient of(MailAddress address) {
+ return new Recipient(address, ImmutableList.of());
+ }
+
+ private final MailAddress address;
+ private final List<Parameter> parameters;
+
+ private Recipient(MailAddress address, List<Parameter> parameters) {
+ this.address = address;
+ this.parameters = parameters;
+ }
+
+ public MailAddress getAddress() {
+ return address;
+ }
+
+ public List<Parameter> getParameters() {
+ return parameters;
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof Recipient) {
+ Recipient that = (Recipient) o;
+
+ return Objects.equals(this.address, that.address)
+ && Objects.equals(this.parameters, that.parameters);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(address, parameters);
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("address", address)
+ .add("parameters", parameters)
+ .toString();
+ }
+ }
@JsonDeserialize(builder = Mail.Envelope.Builder.class)
public static class Envelope {
@@ -41,10 +199,12 @@ public class Mail {
@JsonPOJOBuilder(withPrefix = "")
public static class Builder {
private MailAddress from;
- private ImmutableList.Builder<MailAddress> recipients;
+ private ImmutableList.Builder<Recipient> recipients;
+ private ImmutableList.Builder<Parameter> mailParameters;
public Builder() {
recipients = new ImmutableList.Builder<>();
+ mailParameters = new ImmutableList.Builder<>();
}
public Builder from(MailAddress from) {
@@ -52,29 +212,56 @@ public class Mail {
return this;
}
- public Builder addRecipient(MailAddress recipient) {
+ public Builder addRecipientMailAddress(MailAddress mailAddress) {
+ this.recipients.add(Recipient.of(mailAddress));
+ return this;
+ }
+
+ public Builder addMailParameter(Parameter parameter) {
+ this.mailParameters.add(parameter);
+ return this;
+ }
+
+ public Builder mailParameters(Collection<Parameter> parameters) {
+ this.mailParameters.addAll(parameters);
+ return this;
+ }
+
+ public Builder addRecipient(Recipient recipient) {
this.recipients.add(recipient);
return this;
}
- public Builder recipients(List<MailAddress> recipients) {
+ public Builder recipients(List<Recipient> recipients) {
this.recipients.addAll(recipients);
return this;
}
public Envelope build() {
- return new Envelope(from, recipients.build());
+ return new Envelope(from, recipients.build(), mailParameters.build());
}
}
- private final MailAddress from;
- private final List<MailAddress> recipients;
+ public static Builder builder() {
+ return new Builder();
+ }
- public Envelope(MailAddress from, MailAddress... recipients) {
- this(from, ImmutableList.copyOf(Arrays.asList(recipients)));
+ public static Envelope ofAddresses(MailAddress from, MailAddress... recipients) {
+ return new Envelope(from, Stream.of(recipients)
+ .map(Recipient::of)
+ .collect(Guavate.toImmutableList()), ImmutableList.of());
}
- public Envelope(MailAddress from, List<MailAddress> recipients) {
+ public static Envelope of(MailAddress from, Recipient... recipients) {
+ return new Envelope(from, ImmutableList.copyOf(Arrays.asList(recipients)), ImmutableList.of());
+ }
+
+ private final MailAddress from;
+ private final List<Recipient> recipients;
+ private final List<Parameter> mailParameters;
+
+ private Envelope(MailAddress from, List<Recipient> recipients, List<Parameter> mailParameters) {
+ this.mailParameters = mailParameters;
Preconditions.checkNotNull(from);
Preconditions.checkNotNull(recipients);
Preconditions.checkArgument(!recipients.isEmpty(), "'recipients' field should not be empty");
@@ -87,24 +274,29 @@ public class Mail {
return from;
}
- public List<MailAddress> getRecipients() {
+ public List<Recipient> getRecipients() {
return recipients;
}
+ public List<Parameter> getMailParameters() {
+ return mailParameters;
+ }
+
@Override
public final boolean equals(Object o) {
if (o instanceof Envelope) {
Envelope envelope = (Envelope) o;
return Objects.equals(this.from, envelope.from)
- && Objects.equals(this.recipients, envelope.recipients);
+ && Objects.equals(this.recipients, envelope.recipients)
+ && Objects.equals(this.mailParameters, envelope.mailParameters);
}
return false;
}
@Override
public final int hashCode() {
- return Objects.hash(from, recipients);
+ return Objects.hash(from, recipients, mailParameters);
}
@Override
@@ -112,6 +304,7 @@ public class Mail {
return MoreObjects.toStringHelper(this)
.add("from", from)
.add("recipients", recipients)
+ .add("mailParameters", mailParameters)
.toString();
}
}
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/Fixture.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/Fixture.java
index 1646bea..e08b77d 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/Fixture.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/Fixture.java
@@ -43,13 +43,30 @@ public interface Fixture {
static {
try {
MAIL_1 = new Mail(
- new Mail.Envelope(
- new MailAddress(BOB), new MailAddress(ALICE), new MailAddress(JACK)),
- "bob to alice and jack");
+ Mail.Envelope.builder()
+ .from(new MailAddress(BOB))
+ .addRecipientMailAddress(new MailAddress(ALICE))
+ .addRecipient(Mail.Recipient.builder()
+ .address(new MailAddress(JACK))
+ .addParameter(Mail.Parameter.builder()
+ .name("param1")
+ .value("value1")
+ .build())
+ .addParameter(Mail.Parameter.builder()
+ .name("param2")
+ .value("value2")
+ .build())
+ .build())
+ .addMailParameter(Mail.Parameter.builder()
+ .name("param3")
+ .value("value3")
+ .build())
+ .build(),
+ "bob to alice and jack");
MAIL_2 = new Mail(
- new Mail.Envelope(
- new MailAddress(ALICE), new MailAddress(BOB)),
+ Mail.Envelope.ofAddresses(
+ new MailAddress(ALICE), new MailAddress(BOB)),
"alice to bob");
} catch (Exception e) {
throw new RuntimeException(e);
@@ -119,10 +136,46 @@ public interface Fixture {
BEHAVIOR_COMPULSORY_FIELDS);
MockSmtpBehaviors BEHAVIORS = new MockSmtpBehaviors(BEHAVIOR_LIST);
- String JSON_MAILS_LIST = "[" +
- " {\"from\":\"bob@james.org\",\"recipients\":[\"alice@james.org\", \"jack@james.org\"],\"message\":\"bob to alice and jack\"}," +
- " {\"from\":\"alice@james.org\",\"recipients\":[\"bob@james.org\"],\"message\":\"alice to bob\"}" +
- "]";
-
- String JSON_MAIL = "[{\"from\":\"bob@james.org\",\"recipients\":[\"alice@james.org\", \"jack@james.org\"],\"message\":\"bob to alice and jack\"}]";
+ String JSON_MAILS_LIST = "[{" +
+ " \"from\": \"bob@james.org\"," +
+ " \"recipients\": [{" +
+ " \"address\": \"alice@james.org\"," +
+ " \"parameters\": []" +
+ " }, {" +
+ " \"address\": \"jack@james.org\"," +
+ " \"parameters\": []" +
+ " }]," +
+ " \"mailParameters\": []," +
+ " \"message\": \"bob to alice and jack\"" +
+ "}, {" +
+ " \"from\": \"alice@james.org\"," +
+ " \"recipients\": [{" +
+ " \"address\": \"bob@james.org\"," +
+ " \"parameters\": []" +
+ " }]," +
+ " \"mailParameters\": []," +
+ " \"message\": \"alice to bob\"" +
+ "}]";
+
+ String JSON_MAIL = "[{" +
+ " \"from\": \"bob@james.org\"," +
+ " \"mailParameters\": [{" +
+ " \"name\": \"param3\"," +
+ " \"value\": \"value3\"" +
+ " }]," +
+ " \"message\": \"bob to alice and jack\"," +
+ " \"recipients\": [{" +
+ " \"address\": \"alice@james.org\"," +
+ " \"parameters\": []" +
+ " }, {" +
+ " \"address\": \"jack@james.org\"," +
+ " \"parameters\": [{" +
+ " \"name\": \"param1\"," +
+ " \"value\": \"value1\"" +
+ " }, {" +
+ " \"name\": \"param2\"," +
+ " \"value\": \"value2\"" +
+ " }]" +
+ " }]" +
+ "}]";
}
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/HTTPConfigurationServerTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/HTTPConfigurationServerTest.java
index 4bb0edd..b94a27f 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/HTTPConfigurationServerTest.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/HTTPConfigurationServerTest.java
@@ -177,7 +177,7 @@ class HTTPConfigurationServerTest {
mailRepository.store(MailsFixutre.MAIL_1);
String response = when()
- .get()
+ .get().prettyPeek()
.then()
.contentType(ContentType.JSON)
.extract()
@@ -194,7 +194,7 @@ class HTTPConfigurationServerTest {
mailRepository.store(MailsFixutre.MAIL_2);
String response = when()
- .get()
+ .get().prettyPeek()
.then()
.contentType(ContentType.JSON)
.extract()
@@ -202,7 +202,35 @@ class HTTPConfigurationServerTest {
assertThatJson(response)
.withOptions(new Options(Option.TREATING_NULL_AS_ABSENT, Option.IGNORING_ARRAY_ORDER))
- .isEqualTo(JSON_MAILS_LIST);
+ .isEqualTo("[{" +
+ " \"from\": \"bob@james.org\"," +
+ " \"mailParameters\": [{" +
+ " \"name\": \"param3\"," +
+ " \"value\": \"value3\"" +
+ " }]," +
+ " \"message\": \"bob to alice and jack\"," +
+ " \"recipients\": [{" +
+ " \"address\": \"alice@james.org\"," +
+ " \"parameters\": []" +
+ " }, {" +
+ " \"address\": \"jack@james.org\"," +
+ " \"parameters\": [{" +
+ " \"name\": \"param1\"," +
+ " \"value\": \"value1\"" +
+ " }, {" +
+ " \"name\": \"param2\"," +
+ " \"value\": \"value2\"" +
+ " }]" +
+ " }]" +
+ "}, {" +
+ " \"from\": \"alice@james.org\"," +
+ " \"mailParameters\": []," +
+ " \"message\": \"alice to bob\"," +
+ " \"recipients\": [{" +
+ " \"address\": \"bob@james.org\"," +
+ " \"parameters\": []" +
+ " }]" +
+ "}]");
}
@Test
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSMTPServerTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSMTPServerTest.java
index d3d76e9..ccb475c 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSMTPServerTest.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSMTPServerTest.java
@@ -122,9 +122,9 @@ class MockSMTPServerTest {
Awaitility.await().atMost(Duration.TEN_SECONDS)
.untilAsserted(() -> {
List<Mail> mails = mailRepository.list();
- Mail.Envelope expectedEnvelope = new Mail.Envelope(
+ Mail.Envelope expectedEnvelope = Mail.Envelope.ofAddresses(
new MailAddress(BOB),
- ImmutableList.of(new MailAddress(ALICE), new MailAddress(JACK)));
+ new MailAddress(ALICE), new MailAddress(JACK));
assertThat(mails)
.hasSize(1)
.allSatisfy(Throwing.consumer(assertedMail -> {
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ReceivedMailRepositoryTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ReceivedMailRepositoryTest.java
index 28cecad..c5c2139 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ReceivedMailRepositoryTest.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ReceivedMailRepositoryTest.java
@@ -49,14 +49,14 @@ class ReceivedMailRepositoryTest {
.setText("any text")
.build();
mail = new Mail(
- new Mail.Envelope(
+ Mail.Envelope.ofAddresses(
new MailAddress(BOB),
- ImmutableList.of(new MailAddress(ALICE), new MailAddress(JACK))),
+ new MailAddress(ALICE), new MailAddress(JACK)),
MimeMessageUtil.asString(message));
mail2 = new Mail(
- new Mail.Envelope(
+ Mail.Envelope.ofAddresses(
new MailAddress(ALICE),
- ImmutableList.of(new MailAddress(BOB), new MailAddress(JACK))),
+ new MailAddress(BOB), new MailAddress(JACK)),
MimeMessageUtil.asString(message));
}
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MailTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MailTest.java
index e65e4d0..9544392 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MailTest.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MailTest.java
@@ -41,7 +41,7 @@ class MailTest {
void setUp() throws Exception {
bob = new MailAddress("bob@domain.tld");
alice = new MailAddress("alice@domain.tld");
- envelope = new Mail.Envelope(alice, ImmutableList.of(bob));
+ envelope = Mail.Envelope.ofAddresses(alice, bob);
}
@Nested
@@ -51,25 +51,6 @@ class MailTest {
EqualsVerifier.forClass(Mail.Envelope.class)
.verify();
}
-
- @Test
- void constructorShouldThrowWhenNullFrom() {
- assertThatThrownBy(() -> new Mail.Envelope(null, ImmutableList.of(bob)))
- .isInstanceOf(NullPointerException.class);
- }
-
- @Test
- void constructorShouldThrowWhenNullRecipients() {
- List<MailAddress> nullList = null;
- assertThatThrownBy(() -> new Mail.Envelope(bob, nullList))
- .isInstanceOf(NullPointerException.class);
- }
-
- @Test
- void constructorShouldThrowWhenEmptyRecipients() {
- assertThatThrownBy(() -> new Mail.Envelope(bob, ImmutableList.of()))
- .isInstanceOf(IllegalArgumentException.class);
- }
}
@Test
diff --git a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MailsTest.java b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MailsTest.java
index bb1e9be..0011706 100644
--- a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MailsTest.java
+++ b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MailsTest.java
@@ -38,23 +38,101 @@ import net.javacrumbs.jsonunit.core.internal.Options;
import nl.jqno.equalsverifier.EqualsVerifier;
class MailsTest {
+ public static final String MAILS_WITH_PARAMETERS = "[{" +
+ " \"from\": \"bob@james.org\"," +
+ " \"recipients\": [{" +
+ " \"address\": \"alice@james.org\"," +
+ " \"parameters\": []" +
+ " }, {" +
+ " \"address\": \"jack@james.org\"," +
+ " \"parameters\": [{" +
+ " \"name\": \"param1\"," +
+ " \"value\": \"value1\"" +
+ " }, {" +
+ " \"name\": \"param2\"," +
+ " \"value\": \"value2\"" +
+ " }]" +
+ " }]," +
+ " \"mailParameters\": [{" +
+ " \"name\": \"param3\"," +
+ " \"value\": \"value3\"" +
+ " }]," +
+ " \"message\": \"bob to alice and jack\"" +
+ "}, {" +
+ " \"from\": \"bob@james.org\"," +
+ " \"recipients\": [{" +
+ " \"address\": \"alice@james.org\"," +
+ " \"parameters\": [{" +
+ " \"name\": \"param1\"," +
+ " \"value\": \"value1\"" +
+ " }]" +
+ " }]," +
+ " \"mailParameters\": [{" +
+ " \"name\": \"param2\"," +
+ " \"value\": \"value2\"" +
+ " }]," +
+ " \"message\": \"alice to bob\"" +
+ "}]";
+
private Mails mails;
+ private Mails mailsWithParams;
@BeforeEach
void setup() throws Exception {
Mail mail1 = new Mail(
- new Mail.Envelope(
+ Mail.Envelope.ofAddresses(
new MailAddress(BOB),
- ImmutableList.of(new MailAddress(ALICE), new MailAddress(JACK))),
+ new MailAddress(ALICE), new MailAddress(JACK)),
"bob to alice and jack");
Mail mail2 = new Mail(
- new Mail.Envelope(
+ Mail.Envelope.ofAddresses(
new MailAddress(ALICE),
- ImmutableList.of(new MailAddress(BOB))),
+ new MailAddress(BOB)),
"alice to bob");
mails = new Mails(ImmutableList.of(mail1, mail2));
+
+ Mail mail1WithParams = new Mail(
+ Mail.Envelope.builder()
+ .from(new MailAddress(BOB))
+ .addRecipientMailAddress(new MailAddress(ALICE))
+ .addRecipient(Mail.Recipient.builder()
+ .address(new MailAddress(JACK))
+ .addParameter(Mail.Parameter.builder()
+ .name("param1")
+ .value("value1")
+ .build())
+ .addParameter(Mail.Parameter.builder()
+ .name("param2")
+ .value("value2")
+ .build())
+ .build())
+ .addMailParameter(Mail.Parameter.builder()
+ .name("param3")
+ .value("value3")
+ .build())
+ .build(),
+ "bob to alice and jack");
+
+ Mail mail2WithParams = new Mail(
+ Mail.Envelope.builder()
+ .from(new MailAddress(BOB))
+ .addRecipient(Mail.Recipient.builder()
+ .address(new MailAddress(ALICE))
+ .addParameter(Mail.Parameter.builder()
+ .name("param1")
+ .value("value1")
+ .build())
+ .build())
+ .addMailParameter(Mail.Parameter.builder()
+ .name("param2")
+ .value("value2")
+ .build())
+ .build(),
+ "alice to bob");
+
+ mailsWithParams = new Mails(ImmutableList.of(mail1WithParams, mail2WithParams));
}
@Test
@@ -79,4 +157,21 @@ class MailsTest {
.withOptions(new Options(Option.TREATING_NULL_AS_ABSENT, Option.IGNORING_ARRAY_ORDER))
.isEqualTo(JSON_MAILS_LIST);
}
+
+ @Test
+ void jacksonShouldDeserializeMailsWithParameters() throws Exception {
+ Mails actualMails = OBJECT_MAPPER.readValue(MAILS_WITH_PARAMETERS, Mails.class);
+
+ assertThat(actualMails)
+ .isEqualTo(mailsWithParams);
+ }
+
+ @Test
+ void jacksonShouldSerializeMailsWithParameters() throws Exception {
+ String json = OBJECT_MAPPER.writeValueAsString(mailsWithParams);
+
+ assertThatJson(json)
+ .withOptions(new Options(Option.TREATING_NULL_AS_ABSENT, Option.IGNORING_ARRAY_ORDER))
+ .isEqualTo(MAILS_WITH_PARAMETERS);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org