JAMES-1854 Provide tests for MailDispatcher A bug was corrected : a ClassCastException was raised every time a mail with Header DeliveredTo was received
Includes also a builder for sentMails (which was missing) Last test is maybe tricky, but I couldn't use Mockito as ArgumentCapture as mail parameter is always the same but mutted. Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/4339c782 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/4339c782 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/4339c782 Branch: refs/heads/master Commit: 4339c782bfbc2591931c16f39d2b1a66320a65f7 Parents: 05b9040 Author: Benoit Tellier <[email protected]> Authored: Fri Oct 28 17:38:52 2016 +0200 Committer: Benoit Tellier <[email protected]> Committed: Fri Nov 18 18:46:46 2016 +0700 ---------------------------------------------------------------------- .../mailet/base/test/FakeMailContext.java | 81 +++++- .../mailets/delivery/MailDispatcher.java | 6 +- .../james/transport/mailets/BounceTest.java | 7 +- .../mailets/delivery/MailDispatcherTest.java | 259 +++++++++++++++++++ .../mailets/delivery/SieveIntegrationTest.java | 36 ++- .../managesieve/ManageSieveMailetTestCase.java | 6 +- 6 files changed, 371 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/4339c782/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailContext.java ---------------------------------------------------------------------- diff --git a/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailContext.java b/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailContext.java index 4dc1e62..86872df 100644 --- a/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailContext.java +++ b/mailet/base/src/test/java/org/apache/mailet/base/test/FakeMailContext.java @@ -71,20 +71,56 @@ public class FakeMailContext implements MailetContext { public static class SentMail { + public static class Builder { + private MailAddress sender; + private Optional<Collection<MailAddress>> recipients = Optional.absent(); + private MimeMessage msg; + private Optional<Map<String, Serializable>> attributes = Optional.absent(); + private Optional<String> state = Optional.absent(); + + public Builder sender(MailAddress sender) { + this.sender = sender; + return this; + } + + public Builder recipients(Collection<MailAddress> recipients) { + this.recipients = Optional.of(recipients); + return this; + } + + public Builder message(MimeMessage mimeMessage) { + this.msg = mimeMessage; + return this; + } + + public Builder attributes(Map<String, Serializable> attributes) { + this.attributes = Optional.of(attributes); + return this; + } + + public Builder state(String state) { + this.state = Optional.of(state); + return this; + } + + public SentMail build() { + return new SentMail(sender, recipients.or(ImmutableList.<MailAddress>of()), msg, + attributes.or(ImmutableMap.<String, Serializable>of()), state.or(Mail.DEFAULT)); + } + } + private final MailAddress sender; private final Collection<MailAddress> recipients; private final MimeMessage msg; private final Map<String, Serializable> attributes; + private final String state; - public SentMail(MailAddress sender, Collection<MailAddress> recipients, MimeMessage msg, Map<String, Serializable> attributes) { + private SentMail(MailAddress sender, Collection<MailAddress> recipients, MimeMessage msg, Map<String, Serializable> attributes, String state) { this.sender = sender; this.recipients = ImmutableList.copyOf(recipients); this.msg = msg; this.attributes = ImmutableMap.copyOf(attributes); - } - - public SentMail(MailAddress sender, Collection<MailAddress> recipients, MimeMessage msg) { - this(sender, recipients, msg, ImmutableMap.<String, Serializable>of()); + this.state = state; } public MailAddress getSender() { @@ -99,6 +135,10 @@ public class FakeMailContext implements MailetContext { return msg; } + public String getState() { + return state; + } + @Override public boolean equals(Object o) { if (!(o instanceof SentMail)) { @@ -109,12 +149,13 @@ public class FakeMailContext implements MailetContext { return Objects.equal(this.sender, sentMail.sender) && Objects.equal(this.recipients, sentMail.recipients) - && Objects.equal(this.attributes, sentMail.attributes); + && Objects.equal(this.attributes, sentMail.attributes) + && Objects.equal(this.state, sentMail.state); } @Override public int hashCode() { - return Objects.hashCode(sender, recipients, attributes); + return Objects.hashCode(sender, recipients, attributes, state); } @Override @@ -123,6 +164,7 @@ public class FakeMailContext implements MailetContext { .add("recipients", recipients) .add("sender", sender) .add("attributeNames", attributes) + .add("state", state) .toString(); } } @@ -211,19 +253,36 @@ public class FakeMailContext implements MailetContext { } public void sendMail(MimeMessage mimemessage) throws MessagingException { - sentMails.add(new SentMail(null, new ArrayList<MailAddress>(), mimemessage)); + sentMails.add(new SentMail.Builder() + .message(mimemessage) + .build()); } public void sendMail(MailAddress sender, Collection<MailAddress> recipients, MimeMessage msg) throws MessagingException { - sentMails.add(new SentMail(sender, recipients, msg)); + sentMails.add(new SentMail.Builder() + .recipients(recipients) + .sender(sender) + .message(msg) + .build()); } public void sendMail(MailAddress sender, Collection<MailAddress> recipients, MimeMessage msg, String state) throws MessagingException { - sentMails.add(new SentMail(sender, recipients, msg)); + sentMails.add(new SentMail.Builder() + .recipients(recipients) + .message(msg) + .state(state) + .sender(sender) + .build()); } public void sendMail(Mail mail) throws MessagingException { - sentMails.add(new SentMail(mail.getSender(), mail.getRecipients(), mail.getMessage(), buildAttributesMap(mail))); + sentMails.add(new SentMail.Builder() + .sender(mail.getSender()) + .recipients(mail.getRecipients()) + .message(mail.getMessage()) + .state(mail.getState()) + .attributes(buildAttributesMap(mail)) + .build()); } private ImmutableMap<String, Serializable> buildAttributesMap(Mail mail) { http://git-wip-us.apache.org/repos/asf/james-project/blob/4339c782/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java index a2d3aa2..afc00bc 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java @@ -18,8 +18,8 @@ ****************************************************************/ package org.apache.james.transport.mailets.delivery; +import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Vector; @@ -32,11 +32,13 @@ import org.apache.mailet.MailAddress; import org.apache.mailet.MailetContext; import org.apache.mailet.base.RFC2822Headers; +import com.google.common.base.Optional; import com.google.common.base.Preconditions; public class MailDispatcher { public static final String DELIVERED_TO = "Delivered-To"; + public static final String[] NO_HEADERS = {}; public static Builder builder() { return new Builder(); @@ -111,7 +113,7 @@ public class MailDispatcher { // This only works because there is a placeholder inserted by MimeMessageWrapper message.setHeader(RFC2822Headers.RETURN_PATH, DeliveryUtils.prettyPrint(mail.getSender())); - List<String> deliveredToHeader = Collections.list(message.getMatchingHeaders(new String[] { DELIVERED_TO })); + List<String> deliveredToHeader = Arrays.asList(Optional.fromNullable(message.getHeader(DELIVERED_TO)).or(NO_HEADERS)); message.removeHeader(DELIVERED_TO); dispatchNeedingSavedDeliveredToHeader(mail, errors, message); http://git-wip-us.apache.org/repos/asf/james-project/blob/4339c782/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java index 879935a..f2724d4 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java @@ -77,10 +77,9 @@ public class BounceTest { bounce.service(mail); - FakeMailContext.SentMail expected = new FakeMailContext.SentMail(null, - Lists.newArrayList(senderMailAddress), - null, - ImmutableMap.<String, Serializable>of()); + FakeMailContext.SentMail expected = new FakeMailContext.SentMail.Builder() + .recipients(Lists.newArrayList(senderMailAddress)) + .build(); assertThat(fakeMailContext.getSentMails()).containsOnly(expected); } http://git-wip-us.apache.org/repos/asf/james-project/blob/4339c782/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java new file mode 100644 index 0000000..db77940 --- /dev/null +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java @@ -0,0 +1,259 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.transport.mailets.delivery; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; + +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +import javax.activation.DataHandler; +import javax.mail.MessagingException; +import javax.mail.Multipart; +import javax.mail.Session; +import javax.mail.internet.MimeBodyPart; +import javax.mail.internet.MimeMessage; +import javax.mail.internet.MimeMultipart; +import javax.mail.util.ByteArrayDataSource; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.mailet.Mail; +import org.apache.mailet.MailAddress; +import org.apache.mailet.base.MailAddressFixture; +import org.apache.mailet.base.RFC2822Headers; +import org.apache.mailet.base.test.FakeMail; +import org.apache.mailet.base.test.FakeMailContext; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; + +import com.google.common.base.Charsets; +import com.google.common.collect.ImmutableList; + +public class MailDispatcherTest { + private FakeMailContext fakeMailContext; + private MailStorer mailStorer; + + @Before + public void setUp() throws Exception { + fakeMailContext = FakeMailContext.defaultContext(); + mailStorer = mock(MailStorer.class); + } + + @Test + public void dispatchShouldStoreMail() throws Exception { + MailDispatcher testee = MailDispatcher.builder() + .log(mock(Log.class)) + .mailetContext(fakeMailContext) + .mailStorer(mailStorer) + .consume(true) + .build(); + + FakeMail mail = FakeMail.builder() + .sender(MailAddressFixture.OTHER_AT_JAMES) + .recipients(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2) + .state("state") + .mimeMessage(new MimeMessage(Session.getDefaultInstance(new Properties()))) + .build(); + testee.dispatch(mail); + + verify(mailStorer).storeMail(MailAddressFixture.OTHER_AT_JAMES, MailAddressFixture.ANY_AT_JAMES, mail); + verify(mailStorer).storeMail(MailAddressFixture.OTHER_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2, mail); + verifyNoMoreInteractions(mailStorer); + } + + @Test + public void dispatchShouldConsumeMailIfSpecified() throws Exception { + MailDispatcher testee = MailDispatcher.builder() + .log(mock(Log.class)) + .mailetContext(fakeMailContext) + .mailStorer(mailStorer) + .consume(true) + .build(); + + FakeMail mail = FakeMail.builder() + .recipients(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2) + .state("state") + .mimeMessage(new MimeMessage(Session.getDefaultInstance(new Properties()))) + .build(); + testee.dispatch(mail); + + assertThat(mail.getState()).isEqualTo(Mail.GHOST); + } + + @Test + public void dispatchShouldNotConsumeMailIfNotSpecified() throws Exception { + MailDispatcher testee = MailDispatcher.builder() + .log(mock(Log.class)) + .mailetContext(fakeMailContext) + .mailStorer(mailStorer) + .consume(false) + .build(); + + String state = "state"; + FakeMail mail = FakeMail.builder() + .recipients(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2) + .mimeMessage(new MimeMessage(Session.getDefaultInstance(new Properties()))) + .state(state) + .build(); + testee.dispatch(mail); + + assertThat(mail.getState()).isEqualTo(state); + } + + @Test + public void errorsShouldBeWellHandled() throws Exception { + MailDispatcher testee = MailDispatcher.builder() + .log(mock(Log.class)) + .mailetContext(fakeMailContext) + .mailStorer(mailStorer) + .consume(true) + .build(); + doThrow(new MessagingException()) + .when(mailStorer) + .storeMail(any(MailAddress.class), any(MailAddress.class), any(Mail.class)); + + MimeMessage mimeMessage = new MimeMessage(Session.getDefaultInstance(new Properties())); + Multipart multipart = new MimeMultipart(); + MimeBodyPart bodyPart = new MimeBodyPart(); + bodyPart.setDataHandler( + new DataHandler( + new ByteArrayDataSource( + "toto", + "text/plain; charset=UTF-8") + )); + multipart.addBodyPart(bodyPart); + mimeMessage.setContent(multipart); + mimeMessage.saveChanges(); + + FakeMail mail = FakeMail.builder() + .sender(MailAddressFixture.OTHER_AT_JAMES) + .mimeMessage(mimeMessage) + .recipients(MailAddressFixture.ANY_AT_JAMES) + .state("state") + .build(); + testee.dispatch(mail); + + List<FakeMailContext.SentMail> actual = fakeMailContext.getSentMails(); + FakeMailContext.SentMail expected = new FakeMailContext.SentMail.Builder() + .sender(MailAddressFixture.OTHER_AT_JAMES) + .recipients(ImmutableList.of(MailAddressFixture.ANY_AT_JAMES)) + .state(Mail.ERROR).build(); + assertThat(actual).containsOnly(expected); + assertThat(IOUtils.toString(actual.get(0).getMsg().getInputStream(), Charsets.UTF_8)) + .contains("toto"); + } + + @Test + public void dispatchShouldUpdateReturnPath() throws Exception { + MailDispatcher testee = MailDispatcher.builder() + .log(mock(Log.class)) + .mailetContext(fakeMailContext) + .mailStorer(mailStorer) + .consume(false) + .build(); + + FakeMail mail = FakeMail.builder() + .sender(MailAddressFixture.OTHER_AT_JAMES) + .recipients(MailAddressFixture.ANY_AT_JAMES) + .mimeMessage(new MimeMessage(Session.getDefaultInstance(new Properties()))) + .state("state") + .build(); + testee.dispatch(mail); + + ArgumentCaptor<Mail> mailCaptor = ArgumentCaptor.forClass(Mail.class); + verify(mailStorer).storeMail(any(MailAddress.class), any(MailAddress.class), mailCaptor.capture()); + + assertThat(mailCaptor.getValue().getMessage().getHeader(RFC2822Headers.RETURN_PATH)) + .containsExactly("<" + MailAddressFixture.OTHER_AT_JAMES +">"); + } + + @Test + public void dispatchShouldPreserveDeliveredTo() throws Exception { + MailDispatcher testee = MailDispatcher.builder() + .log(mock(Log.class)) + .mailetContext(fakeMailContext) + .mailStorer(mailStorer) + .consume(false) + .build(); + + MimeMessage mimeMessage = new MimeMessage(Session.getDefaultInstance(new Properties())); + String delivered_to_1 = "delivered_to_1"; + String delivered_to_2 = "delivered_to_2"; + mimeMessage.addHeader(MailDispatcher.DELIVERED_TO, delivered_to_1); + mimeMessage.addHeader(MailDispatcher.DELIVERED_TO, delivered_to_2); + FakeMail mail = FakeMail.builder() + .sender(MailAddressFixture.OTHER_AT_JAMES) + .recipients(MailAddressFixture.ANY_AT_JAMES) + .mimeMessage(mimeMessage) + .state("state") + .build(); + testee.dispatch(mail); + + assertThat(mimeMessage.getHeader(MailDispatcher.DELIVERED_TO)).containsExactly(delivered_to_1, delivered_to_2); + } + + @Test + public void dispatchShouldCustomizeDeliveredToHeader() throws Exception { + AccumulatorDeliveredToHeaderMailStorer accumulator = new AccumulatorDeliveredToHeaderMailStorer(); + MailDispatcher testee = MailDispatcher.builder() + .log(mock(Log.class)) + .mailetContext(fakeMailContext) + .mailStorer(accumulator) + .consume(false) + .build(); + + FakeMail mail = FakeMail.builder() + .sender(MailAddressFixture.OTHER_AT_JAMES) + .recipients(MailAddressFixture.ANY_AT_JAMES, MailAddressFixture.ANY_AT_JAMES2) + .mimeMessage(new MimeMessage(Session.getDefaultInstance(new Properties()))) + .state("state") + .build(); + testee.dispatch(mail); + + assertThat(accumulator.getDeliveredToHeaderValues()) + .containsExactly(new String[]{MailAddressFixture.ANY_AT_JAMES.toString()}, + new String[]{MailAddressFixture.ANY_AT_JAMES2.toString()}); + } + + public static class AccumulatorDeliveredToHeaderMailStorer implements MailStorer { + public final List<String[]> deliveredToHeaderValues; + + public AccumulatorDeliveredToHeaderMailStorer() { + this.deliveredToHeaderValues = new ArrayList<String[]>(); + } + + @Override + public void storeMail(MailAddress sender, MailAddress recipient, Mail mail) throws MessagingException { + deliveredToHeaderValues.add(mail.getMessage().getHeader(MailDispatcher.DELIVERED_TO)); + } + + public List<String[]> getDeliveredToHeaderValues() { + return deliveredToHeaderValues; + } + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/4339c782/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java index 8c502fd..a601b31 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java @@ -443,8 +443,12 @@ public class SieveIntegrationTest { testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail()); verifyZeroInteractions(mailboxManager); + FakeMailContext.SentMail expectedSentMail = new FakeMailContext.SentMail.Builder() + .sender(new MailAddress("[email protected]")) + .recipients(Lists.newArrayList(new MailAddress("[email protected]"))) + .build(); assertThat(fakeMailContext.getSentMails()) - .containsExactly(new FakeMailContext.SentMail(new MailAddress("[email protected]"), Lists.newArrayList(new MailAddress("[email protected]")), null)); + .containsExactly(expectedSentMail); } @Test @@ -841,7 +845,11 @@ public class SieveIntegrationTest { testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail()); verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class)); - assertThat(fakeMailContext.getSentMails()).containsExactly(new FakeMailContext.SentMail(new MailAddress(RECEIVER_DOMAIN_COM), Lists.newArrayList(new MailAddress("[email protected]")), null)); + FakeMailContext.SentMail expectedSentMail = new FakeMailContext.SentMail.Builder() + .sender(new MailAddress(RECEIVER_DOMAIN_COM)) + .recipients(Lists.newArrayList(new MailAddress("[email protected]"))) + .build(); + assertThat(fakeMailContext.getSentMails()).containsExactly(expectedSentMail); } @Test @@ -898,7 +906,11 @@ public class SieveIntegrationTest { testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail()); verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class)); - assertThat(fakeMailContext.getSentMails()).containsExactly(new FakeMailContext.SentMail(new MailAddress(RECEIVER_DOMAIN_COM), Lists.newArrayList(new MailAddress("[email protected]")), null)); + FakeMailContext.SentMail expectedSentMail = new FakeMailContext.SentMail.Builder() + .sender(new MailAddress(RECEIVER_DOMAIN_COM)) + .recipients(Lists.newArrayList(new MailAddress("[email protected]"))) + .build(); + assertThat(fakeMailContext.getSentMails()).containsExactly(expectedSentMail); } @Test @@ -909,7 +921,11 @@ public class SieveIntegrationTest { testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail()); verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class)); - assertThat(fakeMailContext.getSentMails()).containsExactly(new FakeMailContext.SentMail(new MailAddress(RECEIVER_DOMAIN_COM), Lists.newArrayList(new MailAddress("[email protected]")), null)); + FakeMailContext.SentMail expectedSentMail = new FakeMailContext.SentMail.Builder() + .sender(new MailAddress(RECEIVER_DOMAIN_COM)) + .recipients(Lists.newArrayList(new MailAddress("[email protected]"))) + .build(); + assertThat(fakeMailContext.getSentMails()).containsExactly(expectedSentMail); } @Test @@ -920,7 +936,11 @@ public class SieveIntegrationTest { testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail()); verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class)); - assertThat(fakeMailContext.getSentMails()).containsExactly(new FakeMailContext.SentMail(new MailAddress("[email protected]"), Lists.newArrayList(new MailAddress("[email protected]")), null)); + FakeMailContext.SentMail expectedSentMail = new FakeMailContext.SentMail.Builder() + .sender(new MailAddress("[email protected]")) + .recipients(Lists.newArrayList(new MailAddress("[email protected]"))) + .build(); + assertThat(fakeMailContext.getSentMails()).containsExactly(expectedSentMail); } @Test @@ -931,7 +951,11 @@ public class SieveIntegrationTest { testee.storeMail(sender, new MailAddress(RECEIVER_DOMAIN_COM), createMail()); verify(messageManager).appendMessage(any(InputStream.class), any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class)); - assertThat(fakeMailContext.getSentMails()).containsExactly(new FakeMailContext.SentMail(new MailAddress(RECEIVER_DOMAIN_COM), Lists.newArrayList(new MailAddress("[email protected]")), null)); + FakeMailContext.SentMail expectedSentMail = new FakeMailContext.SentMail.Builder() + .sender(new MailAddress(RECEIVER_DOMAIN_COM)) + .recipients(Lists.newArrayList(new MailAddress("[email protected]"))) + .build(); + assertThat(fakeMailContext.getSentMails()).containsExactly(expectedSentMail); } private void prepareTestUsingScript(final String script) throws Exception { http://git-wip-us.apache.org/repos/asf/james-project/blob/4339c782/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java index 0a1fbf9..322f699 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java @@ -538,7 +538,11 @@ public class ManageSieveMailetTestCase { } private MimeMessage verifyHeaders(String subject) throws MessagingException { - assertThat(fakeMailContext.getSentMails()).containsOnly(new FakeMailContext.SentMail(new MailAddress(SIEVE_LOCALHOST), Lists.newArrayList(new MailAddress(USER)), null)); + FakeMailContext.SentMail sentMail = new FakeMailContext.SentMail.Builder() + .recipients(Lists.newArrayList(new MailAddress(USER))) + .sender(new MailAddress(SIEVE_LOCALHOST)) + .build(); + assertThat(fakeMailContext.getSentMails()).containsOnly(sentMail); MimeMessage result = fakeMailContext.getSentMails().get(0).getMsg(); assertThat(result.getSubject()).isEqualTo(subject); assertThat(result.getRecipients(RecipientType.TO)).containsOnly(new InternetAddress(USER)); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
