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]

Reply via email to