http://git-wip-us.apache.org/repos/asf/james-project/blob/71accd66/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 c3071cc..481b5d5 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
@@ -20,21 +20,13 @@
 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.Matchers.eq;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.verifyZeroInteractions;
 import static org.mockito.Mockito.when;
 
 import java.io.IOException;
-import java.io.InputStream;
-import java.util.Date;
 import java.util.Properties;
 
 import javax.activation.DataHandler;
-import javax.mail.Flags;
 import javax.mail.MessagingException;
 import javax.mail.Session;
 import javax.mail.internet.InternetAddress;
@@ -43,21 +35,16 @@ import javax.mail.internet.MimeMessage;
 import javax.mail.internet.MimeMultipart;
 import javax.mail.util.ByteArrayDataSource;
 
-import org.apache.commons.logging.Log;
-import org.apache.james.mailbox.MailboxManager;
-import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MessageManager;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.sieverepository.api.exception.ScriptNotFoundException;
+import org.apache.james.transport.mailets.Sieve;
 import org.apache.james.transport.mailets.jsieve.ResourceLocator;
-import org.apache.james.transport.mailets.jsieve.delivery.SieveMailStore;
-import org.apache.james.transport.mailets.jsieve.delivery.SievePoster;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailAddress;
 import org.apache.mailet.base.test.FakeMail;
 import org.apache.mailet.base.test.FakeMailContext;
+import org.apache.mailet.base.test.FakeMailetConfig;
 import org.joda.time.DateTime;
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
@@ -65,11 +52,10 @@ import org.junit.Before;
 import org.junit.Test;
 import org.slf4j.Logger;
 
-import com.google.common.collect.Lists;
-
 public class SieveIntegrationTest {
 
-    public static final String RECEIVER_DOMAIN_COM = "[email protected]";
+    public static final String LOCAL_PART = "receiver";
+    public static final String RECEIVER_DOMAIN_COM = LOCAL_PART + 
"@domain.com";
 
     class Header {
         String name;
@@ -86,33 +72,23 @@ public class SieveIntegrationTest {
     public static final DateTime DATE_DEFAULT = 
formatter.parseDateTime("2016-01-14 00:00:00");
     public static final DateTime DATE_NEW = 
formatter.parseDateTime("2016-01-18 00:00:00");
     public static final DateTime DATE_OLD = 
formatter.parseDateTime("2011-01-18 00:00:00");
-    public static final MailboxPath NOT_SELECTED_MAILBOX = new 
MailboxPath("#private", "receiver", "INBOX.not.selected");
-    public static final MailboxPath SELECTED_MAILBOX = new 
MailboxPath("#private", "receiver", "INBOX.select");
-    public static final MailboxPath INBOX = new MailboxPath("#private", 
"receiver", "INBOX");
+    public static final MailboxPath NOT_SELECTED_MAILBOX = new 
MailboxPath("#private", LOCAL_PART, "INBOX.not.selected");
+    public static final MailboxPath SELECTED_MAILBOX = new 
MailboxPath("#private", LOCAL_PART, "INBOX.select");
+    public static final MailboxPath INBOX = new MailboxPath("#private", 
LOCAL_PART, "INBOX");
 
-    private MailStore testee;
+    private Sieve testee;
     private UsersRepository usersRepository;
-    private MailboxManager mailboxManager;
     private ResourceLocator resourceLocator;
     private FakeMailContext fakeMailContext;
-    private MailAddress sender;
 
     @Before
     public void setUp() throws Exception {
         resourceLocator = mock(ResourceLocator.class);
         usersRepository = mock(UsersRepository.class);
-        mailboxManager = mock(MailboxManager.class);
-        fakeMailContext = FakeMailContext.defaultContext();
-        sender = new MailAddress("sender@any");
-
-        testee = SieveMailStore.builder()
-            .resourceLocator(resourceLocator)
-            .usersRepository(usersRepository)
-            .folder("INBOX")
-            .sievePoster(new SievePoster(new MailboxAppender(mailboxManager, 
mock(Logger.class)), "INBOX", usersRepository))
-            .log(mock(Log.class))
-            .mailetContext(fakeMailContext)
-            .build();
+        fakeMailContext = 
FakeMailContext.builder().logger(mock(Logger.class)).build();
+
+        testee = new Sieve(usersRepository, resourceLocator);
+        testee.init(new FakeMailetConfig("Sieve", fakeMailContext));
     }
 
     @Test
@@ -120,11 +96,11 @@ public class SieveIntegrationTest {
         when(usersRepository.supportVirtualHosting()).thenReturn(true);
         when(usersRepository.getUser(new 
MailAddress(RECEIVER_DOMAIN_COM))).thenReturn(RECEIVER_DOMAIN_COM);
         when(resourceLocator.get(RECEIVER_DOMAIN_COM)).thenThrow(new 
ScriptNotFoundException());
-        final MessageManager messageManager = prepareMessageManagerOn(new 
MailboxPath("#private", RECEIVER_DOMAIN_COM, "INBOX"));
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
RECEIVER_DOMAIN_COM)).isEqualTo("/INBOX");
     }
 
     @Test
@@ -132,319 +108,309 @@ public class SieveIntegrationTest {
         when(usersRepository.supportVirtualHosting()).thenReturn(false);
         when(usersRepository.getUser(new 
MailAddress("receiver@localhost"))).thenReturn("receiver");
         when(resourceLocator.get("receiver")).thenThrow(new 
ScriptNotFoundException());
-        final MessageManager messageManager = prepareMessageManagerOn(INBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo("/INBOX");
     }
 
     @Test
     public void keepScriptShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/keep.script");
-        final MessageManager messageManager = prepareMessageManagerOn(INBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo("/INBOX");
     }
 
     @Test
     public void discardScriptShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/discard.script");
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verifyNoMoreInteractions(mailboxManager);
+
+        assertThat(mail.getRecipients()).isEmpty();
     }
 
     @Test
     public void fileintoScriptShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/fileinto.script");
-        final MessageManager messageManager = prepareMessageManagerOn(new 
MailboxPath("#private", "receiver", "INBOX.any"));
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo("/INBOX/any");
     }
 
     @Test
     public void allOfAllFalseScriptShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/allofAllFalse.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void allOfOneFalseScriptShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/allofOneFalse.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void allOfAllTrueScriptShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/allofAllTrue.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void anyOfAllFalseScriptShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/anyofAllFalse.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void falseScriptShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/false.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void trueScriptShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/true.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void notFalseScriptShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/notFalse.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void notTrueScriptShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/notTrue.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void anyOfOneFalseScriptShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/anyofOneFalse.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void anyOfAllTrueScriptShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/anyofAllTrue.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void stopScriptShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/stop.script");
-        final MessageManager messageManager = prepareMessageManagerOn(INBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(INBOX.getName()));
     }
 
     @Test
     public void headerScriptShouldWorkIfHeaderIsAbsent() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/header.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void headerScriptShouldWorkIfHeaderIsPresent() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/header.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubject("JAMES-1620 revolution");
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void sizeOverScriptShouldWorkIfUnderLimit() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/sizeOver.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMail();
         mail.setMessageSize(100);
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void sizeUnderScriptShouldWorkIfUnderLimit() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/sizeUnder.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
         FakeMail mail = createMail();
         mail.setMessageSize(100);
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void sizeOverScriptShouldWorkIfOverLimit() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/sizeOver.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
         FakeMail mail = createMail();
         mail.setMessageSize(1000);
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void sizeUnderScriptShouldWorkIfOverLimit() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/sizeUnder.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMail();
         mail.setMessageSize(1000);
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressLocalPartShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressLocalPart.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Cc", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
 
     @Test
     public void addressLocalPartShouldOnlyMatchLocalPart() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressLocalPart.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Cc", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
 
     @Test
     public void addressDomainShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressDomain.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Cc", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
 
     @Test
     public void addressDomainShouldOnlyMatchLocalPart() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressDomain.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Cc", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressBccAllShouldNotMatchOtherHeaders() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllBcc.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Cc", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressBccAllShouldMatchSpecifiedAddress() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllBcc.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Bcc", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressBccAllShouldNotMatchOtherAddress() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllBcc.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Bcc", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressBccAllShouldNotMatchOtherDomain() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllBcc.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Bcc", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void redirectShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/redirect.script");
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verifyZeroInteractions(mailboxManager);
+        assertThat(mail.getRecipients()).isEmpty();
         FakeMailContext.SentMail expectedSentMail = 
FakeMailContext.sentMailBuilder()
             .sender(new MailAddress("[email protected]"))
             .recipient(new MailAddress("[email protected]"))
@@ -456,397 +422,378 @@ public class SieveIntegrationTest {
     @Test
     public void addressCcAllShouldNotMatchOtherHeaders() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllCc.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Resend-From", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressCcAllShouldMatchSpecifiedAddress() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllCc.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Cc", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressCcAllShouldNotMatchOtherAddress() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllCc.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Cc", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressCcAllShouldNotMatchOtherDomain() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllCc.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Cc", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressFromAllShouldNotMatchOtherHeaders() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllFrom.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Cc", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressFromAllShouldMatchSpecifiedAddress() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllFrom.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("From", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressFromAllShouldNotMatchOtherAddress() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllFrom.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("From", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressFromAllShouldNotMatchOtherDomain() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllFrom.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("From", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressToAllShouldNotMatchOtherHeaders() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllTo.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Resent-To", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressToAllShouldMatchSpecifiedAddress() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllTo.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("To", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressToAllShouldNotMatchOtherAddress() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllTo.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("To", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressToAllShouldNotMatchOtherDomain() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllTo.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("To", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressSenderAllShouldNotMatchOtherHeaders() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllSender.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("To", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressSenderAllShouldMatchSpecifiedAddress() throws Exception 
{
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllSender.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Sender", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressSenderAllShouldNotMatchOtherAddress() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllSender.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Sender", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressSenderAllShouldNotMatchOtherDomain() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllSender.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Sender", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressResent_FromAllShouldNotMatchOtherHeaders() throws 
Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-From.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("From", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressResent_FromAllShouldMatchSpecifiedAddress() throws 
Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-From.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Resend-From", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressResent_FromAllShouldNotMatchOtherAddress() throws 
Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-From.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Resend-From", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressResent_FromAllShouldNotMatchOtherDomain() throws 
Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-From.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Resend-From", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressResent_ToAllShouldNotMatchOtherHeaders() throws 
Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-To.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("To", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressResent_ToAllShouldMatchSpecifiedAddress() throws 
Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-To.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Resend-To", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressResent_ToAllShouldNotMatchOtherAddress() throws 
Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-To.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Resend-To", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void addressResent_ToAllShouldNotMatchOtherDomain() throws 
Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/addressAllResend-To.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("Resend-To", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void envelopeFromShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/envelopeFrom.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
         FakeMail mail = createMailWithSubjectAndHeaders("Default", new 
Header("From", "[email protected]"));
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void envelopeFromShouldNotMatchOtherAddress() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/envelopeFromOtherSender.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void envelopeToShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/envelopeTo.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void envelopeToShouldNotMatchOtherAddress() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/envelopeToOtherReceiver.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void bodyRawShouldNotMatchNotContainedData() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyRawInvalid.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void bodyRawShouldMatchContent() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyRawMatch.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void bodyContentShouldMatchContent() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyContentMatch.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void bodyContentShouldNotMatchNotContainedData() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyContentInvalid.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void bodyContentShouldNotMatchWhenWrongContentType() throws 
Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyContentWrongContentType.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void bodyTextShouldNotMatchNotContainedData() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyTextInvalid.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(NOT_SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(NOT_SELECTED_MAILBOX.getName()));
     }
 
     @Test
     public void bodyTextShouldMatchContent() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/bodyTextMatch.script");
-        final MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
     }
 
     @Test
-    public void doubleVacationShouldNotBeExecuted() throws Exception {
+    public void 
doubleVacationShouldNotBeExecutedAndReceiverShouldHaveANotificationAboutSieveError()
 throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/doubleVacation.script");
-        MessageManager messageManager = prepareMessageManagerOn(INBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
-        assertThat(fakeMailContext.getSentMails()).isEmpty();
+        // Notification of script interpretation failure
+        
assertThat(fakeMailContext.getSentMails()).containsExactly(FakeMailContext.sentMailBuilder()
+            .recipient(new MailAddress(RECEIVER_DOMAIN_COM))
+            .sender(new MailAddress(RECEIVER_DOMAIN_COM))
+            .build());
+        // No action taken
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isNull();
     }
 
     @Test
     public void vacationShouldWork() throws Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/vacationReason.script");
-        MessageManager messageManager = prepareMessageManagerOn(INBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
+
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(INBOX.getName()));
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
         FakeMailContext.SentMail expectedSentMail = 
FakeMailContext.sentMailBuilder()
             .sender(new MailAddress(RECEIVER_DOMAIN_COM))
             .recipient(new MailAddress("[email protected]"))
@@ -857,57 +804,56 @@ public class SieveIntegrationTest {
     @Test
     public void vacationShouldNotSendNotificationToMailingLists() throws 
Exception {
         
prepareTestUsingScript("org/apache/james/transport/mailets/delivery/vacationReason.script");
-        MessageManager messageManager = prepareMessageManagerOn(INBOX);
         Mail mail = createMail();
         mail.getMessage().addHeader("List-Id", "0123456789");
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), mail);
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(INBOX.getName()));
         assertThat(fakeMailContext.getSentMails()).isEmpty();
     }
 
     @Test
     public void vacationShouldNotGenerateNotificationIfTooOld() throws 
Exception {
         
prepareTestUsingScriptAndDates("org/apache/james/transport/mailets/delivery/vacationReason.script",
 DATE_OLD, DATE_NEW);
-        MessageManager messageManager = prepareMessageManagerOn(INBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(INBOX.getName()));
         assertThat(fakeMailContext.getSentMails()).isEmpty();
     }
 
     @Test
     public void vacationShouldNotCancelFileIntoActionIfNotExecuted() throws 
Exception {
         
prepareTestUsingScriptAndDates("org/apache/james/transport/mailets/delivery/vacationReasonAndFileInto.script",
 DATE_OLD, DATE_NEW);
-        MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
         assertThat(fakeMailContext.getSentMails()).isEmpty();
     }
 
     @Test
     public void vacationDaysParameterShouldFilterTooOldDates() throws 
Exception {
         
prepareTestUsingScriptAndDates("org/apache/james/transport/mailets/delivery/vacationDaysReason.script",
 DATE_DEFAULT, DATE_NEW);
-        MessageManager messageManager = prepareMessageManagerOn(INBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(INBOX.getName()));
         assertThat(fakeMailContext.getSentMails()).isEmpty();
     }
 
     @Test
     public void vacationDaysParameterShouldKeepDatesInRange() throws Exception 
{
         
prepareTestUsingScriptAndDates("org/apache/james/transport/mailets/delivery/vacationDaysReason.script",
 DATE_CLOSE, DATE_NEW);
-        MessageManager messageManager = prepareMessageManagerOn(INBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(INBOX.getName()));
         FakeMailContext.SentMail expectedSentMail = 
FakeMailContext.sentMailBuilder()
             .sender(new MailAddress(RECEIVER_DOMAIN_COM))
             .recipient(new MailAddress("[email protected]"))
@@ -918,11 +864,11 @@ public class SieveIntegrationTest {
     @Test
     public void vacationShouldNotCancelFileIntoActionIfExecuted() throws 
Exception {
         
prepareTestUsingScriptAndDates("org/apache/james/transport/mailets/delivery/vacationReasonAndFileInto.script",
 DATE_DEFAULT, DATE_NEW);
-        MessageManager messageManager = 
prepareMessageManagerOn(SELECTED_MAILBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(SELECTED_MAILBOX.getName()));
         FakeMailContext.SentMail expectedSentMail = 
FakeMailContext.sentMailBuilder()
             .sender(new MailAddress(RECEIVER_DOMAIN_COM))
             .recipient(new MailAddress("[email protected]"))
@@ -933,11 +879,11 @@ public class SieveIntegrationTest {
     @Test
     public void vacationFromSubjectShouldWork() throws Exception {
         
prepareTestUsingScriptAndDates("org/apache/james/transport/mailets/delivery/vacationSubjectFromReason.script",
 DATE_DEFAULT, DATE_NEW);
-        MessageManager messageManager = prepareMessageManagerOn(INBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(INBOX.getName()));
         FakeMailContext.SentMail expectedSentMail = 
FakeMailContext.sentMailBuilder()
             .sender(new MailAddress("[email protected]"))
             .recipient(new MailAddress("[email protected]"))
@@ -948,11 +894,11 @@ public class SieveIntegrationTest {
     @Test
     public void vacationDaysAddressesShouldWork() throws Exception {
         
prepareTestUsingScriptAndDates("org/apache/james/transport/mailets/delivery/vacationDaysAddressesReason.script",
 DATE_CLOSE, DATE_NEW);
-        MessageManager messageManager = prepareMessageManagerOn(INBOX);
 
-        testee.storeMail(new MailAddress(RECEIVER_DOMAIN_COM), createMail());
+        FakeMail mail = createMail();
+        testee.service(mail);
 
-        verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
+        assertThat(mail.getAttribute(MailStore.DELIVERY_PATH_PREFIX + 
LOCAL_PART)).isEqualTo(expressMailboxNameWithSlash(INBOX.getName()));
         FakeMailContext.SentMail expectedSentMail = 
FakeMailContext.sentMailBuilder()
             .sender(new MailAddress(RECEIVER_DOMAIN_COM))
             .recipient(new MailAddress("[email protected]"))
@@ -966,24 +912,13 @@ public class SieveIntegrationTest {
 
     private void prepareTestUsingScriptAndDates(String script, DateTime 
scriptCreationDate, DateTime scriptExecutionDate) throws Exception {
         when(usersRepository.supportVirtualHosting()).thenReturn(false);
-        when(usersRepository.getUser(new 
MailAddress("receiver@localhost"))).thenReturn("receiver");
-        when(resourceLocator.get("//receiver@localhost/sieve")).thenReturn(new 
ResourceLocator.UserSieveInformation(scriptCreationDate,
+        when(usersRepository.getUser(new MailAddress(LOCAL_PART + 
"@localhost"))).thenReturn(LOCAL_PART);
+        when(usersRepository.getUser(new MailAddress(LOCAL_PART + 
"@domain.com"))).thenReturn(LOCAL_PART);
+        when(resourceLocator.get("//" + LOCAL_PART + 
"@localhost/sieve")).thenReturn(new 
ResourceLocator.UserSieveInformation(scriptCreationDate,
             scriptExecutionDate,
             ClassLoader.getSystemResourceAsStream(script)));
     }
 
-    private MessageManager prepareMessageManagerOn(MailboxPath mailboxPath) 
throws MailboxException {
-        final MessageManager messageManager = mock(MessageManager.class);
-        when(mailboxManager.getMailbox(eq(mailboxPath), 
any(MailboxSession.class))).thenReturn(messageManager);
-        final MailboxSession session = mock(MailboxSession.class);
-        when(session.getPathDelimiter()).thenReturn('.');
-        when(mailboxManager.createSystemSession(any(String.class), 
any(Logger.class))).thenReturn(session);
-        MailboxSession.User user = mock(MailboxSession.User.class);
-        when(session.getUser()).thenReturn(user);
-        when(user.getUserName()).thenReturn(mailboxPath.getUser());
-        return messageManager;
-    }
-
     private FakeMail createMail() throws MessagingException, IOException {
         return createMailWithSubject("Subject");
     }
@@ -1021,4 +956,8 @@ public class SieveIntegrationTest {
                 .sender(new MailAddress("[email protected]"))
                 .build();
     }
+
+    private String expressMailboxNameWithSlash(String name) {
+        return '/' + name.replace('.', '/');
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/71accd66/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java
 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java
index 74a00c6..bd43c80 100644
--- 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java
+++ 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java
@@ -85,7 +85,7 @@ public class SimpleMailStoreTest {
         FakeMail mail = FakeMail.builder()
             .mimeMessage(mimeMessage)
             .build();
-        testee.storeMail(sender, recipient, mail);
+        testee.storeMail(recipient, mail);
 
         verify(mailboxAppender).append(any(MimeMessage.class), 
eq(recipient.asString()), eq(FOLDER));
     }
@@ -98,7 +98,7 @@ public class SimpleMailStoreTest {
         FakeMail mail = FakeMail.builder()
             .mimeMessage(mimeMessage)
             .build();
-        testee.storeMail(sender, recipient, mail);
+        testee.storeMail(recipient, mail);
 
         verify(mailboxAppender).append(any(MimeMessage.class), 
eq(recipient.getLocalPart()), eq(FOLDER));
     }
@@ -111,7 +111,7 @@ public class SimpleMailStoreTest {
         FakeMail mail = FakeMail.builder()
             .mimeMessage(mimeMessage)
             .build();
-        testee.storeMail(sender, recipient, mail);
+        testee.storeMail(recipient, mail);
 
         verify(mailboxAppender).append(any(MimeMessage.class), 
eq(recipient.toString()), eq(FOLDER));
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/71accd66/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java
 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java
index edbf3c0..cf299d8 100644
--- 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java
+++ 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/ToRecipientFolderTest.java
@@ -28,7 +28,6 @@ import static org.mockito.Mockito.when;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Collection;
 import java.util.Date;
 import java.util.Properties;
 
@@ -47,27 +46,20 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.sieverepository.api.SieveRepository;
-import org.apache.james.transport.mailets.SieveToRecipientFolder;
 import org.apache.james.transport.mailets.ToRecipientFolder;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailAddress;
-import org.apache.mailet.base.GenericMailet;
 import org.apache.mailet.base.test.FakeMail;
 import org.apache.mailet.base.test.FakeMailContext;
 import org.apache.mailet.base.test.FakeMailetConfig;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
 import org.slf4j.Logger;
 
 import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableList;
 
-@RunWith(Parameterized.class)
 public class ToRecipientFolderTest {
 
     public static final String USER_LOCAL_PART = "receiver";
@@ -75,56 +67,27 @@ public class ToRecipientFolderTest {
     public static final MailboxPath INBOX = new MailboxPath("#private", USER, 
"INBOX");
     public static final MailboxPath JUNK = new MailboxPath("#private", 
USER_LOCAL_PART, "Junk");
     public static final MailboxPath JUNK_VIRTUAL_HOSTING = new 
MailboxPath("#private", USER, "Junk");
-    private MessageManager messageManager;
-
-    public static class Parameter {
-        private final UsersRepository usersRepository;
-        private final MailboxManager mailboxManager;
-        private final SieveRepository sieveRepository;
-        private final GenericMailet mailet;
-        private final MailboxSession.User user;
-
-        public Parameter(UsersRepository usersRepository, MailboxManager 
mailboxManager, SieveRepository sieveRepository,
-                         GenericMailet mailet, MailboxSession.User user) {
-            this.usersRepository = usersRepository;
-            this.mailboxManager = mailboxManager;
-            this.sieveRepository = sieveRepository;
-            this.mailet = mailet;
-            this.user = user;
-        }
-
-        public UsersRepository getUsersRepository() {
-            return usersRepository;
-        }
-
-        public MailboxManager getMailboxManager() {
-            return mailboxManager;
-        }
 
-        public SieveRepository getSieveRepository() {
-            return sieveRepository;
-        }
+    private MessageManager messageManager;
+    private UsersRepository usersRepository;
+    private MailboxManager mailboxManager;
+    private ToRecipientFolder testee;
+    private MailboxSession.User user;
 
-        public GenericMailet getMailet() {
-            return mailet;
-        }
 
-        public MailboxSession.User getUser() {
-            return user;
-        }
-    }
+    private FakeMailetConfig mailetConfig;
 
-    @Parameterized.Parameters
-    public static Collection<Object[]> getLocalDeliveryClasses() {
-        SieveRepository sieveRepository = mock(SieveRepository.class);
-        UsersRepository usersRepository = mock(UsersRepository.class);
-        MailboxManager mailboxManager = mock(MailboxManager.class);
+    @Before
+    public void setUp() throws Exception {
+        mailetConfig = new FakeMailetConfig("RecipientFolderTest", 
FakeMailContext.builder().logger(mock(Logger.class)).build());
+        messageManager = mock(MessageManager.class);
+        usersRepository = mock(UsersRepository.class);
+        mailboxManager = mock(MailboxManager.class);
+        user = mock(MailboxSession.User.class);
 
-        SieveToRecipientFolder sieveToRecipientFolder = new 
SieveToRecipientFolder(mailboxManager, sieveRepository, usersRepository);
 
-        ToRecipientFolder toRecipientFolder = new 
ToRecipientFolder(mailboxManager, usersRepository);
+        testee = new ToRecipientFolder(mailboxManager, usersRepository);
 
-        MailboxSession.User user = mock(MailboxSession.User.class);
         MailboxSession session = mock(MailboxSession.class);
         when(session.getPathDelimiter()).thenReturn('.');
         try {
@@ -133,90 +96,75 @@ public class ToRecipientFolderTest {
             throw Throwables.propagate(e);
         }
         when(session.getUser()).thenReturn(user);
-
-        return ImmutableList.of(
-            new Object[]{new Parameter(usersRepository, mailboxManager, 
sieveRepository, sieveToRecipientFolder, user)},
-            new Object[]{new Parameter(usersRepository, mailboxManager, 
sieveRepository, toRecipientFolder, user)}
-        );
-    }
-
-    @Parameterized.Parameter
-    public Parameter parameter;
-    private FakeMailetConfig mailetConfig;
-
-    @Before
-    public void setUp() throws Exception {
-        mailetConfig = new FakeMailetConfig("RecipientFolderTest", 
FakeMailContext.builder().logger(mock(Logger.class)).build());
-        messageManager = mock(MessageManager.class);
     }
 
     @Test
     public void initParameterTesting() throws Exception {
         mailetConfig.setProperty(ToRecipientFolder.FOLDER_PARAMETER, "Junk");
-        parameter.getMailet().init(mailetConfig);
+        testee.init(mailetConfig);
 
-        Assert.assertEquals("Junk", 
parameter.getMailet().getInitParameter(ToRecipientFolder.FOLDER_PARAMETER));
+        Assert.assertEquals("Junk", 
testee.getInitParameter(ToRecipientFolder.FOLDER_PARAMETER));
     }
 
     @Test
     public void consumeOptionShouldGhostTheMail() throws Exception {
         mailetConfig.setProperty(ToRecipientFolder.CONSUME_PARAMETER, "true");
-        parameter.getMailet().init(mailetConfig);
+        testee.init(mailetConfig);
 
         Mail mail = createMail();
-        parameter.getMailet().service(mail);
+        testee.service(mail);
 
         assertThat(mail.getState()).isEqualTo(Mail.GHOST);
     }
 
     @Test
     public void consumeOptionShouldNotGhostTheMailByDefault() throws Exception 
{
-        parameter.getMailet().init(mailetConfig);
+        testee.init(mailetConfig);
 
         Mail mail = createMail();
-        parameter.getMailet().service(mail);
+        testee.service(mail);
 
         assertThat(mail.getState()).isEqualTo(Mail.DEFAULT);
     }
 
     @Test
     public void folderParameterShouldIndicateDestinationFolder() throws 
Exception {
-        
when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(true);
-        when(parameter.getUsersRepository().getUser(new 
MailAddress(USER))).thenReturn(USER);
-        
when(parameter.getMailboxManager().getMailbox(eq(JUNK_VIRTUAL_HOSTING), 
any(MailboxSession.class))).thenReturn(messageManager);
-        when(parameter.getUser().getUserName()).thenReturn(USER);
+        when(usersRepository.supportVirtualHosting()).thenReturn(true);
+        when(usersRepository.getUser(new MailAddress(USER))).thenReturn(USER);
+        when(mailboxManager.getMailbox(eq(JUNK_VIRTUAL_HOSTING), 
any(MailboxSession.class))).thenReturn(messageManager);
+        when(user.getUserName()).thenReturn(USER);
 
         mailetConfig.setProperty(ToRecipientFolder.FOLDER_PARAMETER, "Junk");
-        parameter.getMailet().init(mailetConfig);
-        parameter.getMailet().service(createMail());
+        testee.init(mailetConfig);
+        testee.service(createMail());
 
         verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
     }
 
     @Test
     public void folderParameterShouldBeInboxByDefault() throws Exception {
-        
when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(true);
-        when(parameter.getUsersRepository().getUser(new 
MailAddress(USER))).thenReturn(USER);
-        when(parameter.getMailboxManager().getMailbox(eq(INBOX), 
any(MailboxSession.class))).thenReturn(messageManager);
-        when(parameter.getUser().getUserName()).thenReturn(USER);
+        when(usersRepository.supportVirtualHosting()).thenReturn(true);
+        when(usersRepository.getUser(new MailAddress(USER))).thenReturn(USER);
+        when(mailboxManager.getMailbox(eq(INBOX), 
any(MailboxSession.class))).thenReturn(messageManager);
+        when(user.getUserName()).thenReturn(USER);
 
-        parameter.getMailet().init(mailetConfig);
-        parameter.getMailet().service(createMail());
+        testee.init(mailetConfig);
+        testee.service(createMail());
 
         verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
     }
 
     @Test
     public void folderParameterShouldWorkWhenVirtualHostingIsTurnedOff() 
throws Exception {
-        
when(parameter.getUsersRepository().supportVirtualHosting()).thenReturn(false);
-        when(parameter.getUsersRepository().getUser(new 
MailAddress(USER_LOCAL_PART + "@localhost"))).thenReturn(USER_LOCAL_PART);
-        when(parameter.getUsersRepository().getUser(new 
MailAddress(USER))).thenReturn(USER_LOCAL_PART);
-        when(parameter.getMailboxManager().getMailbox(eq(JUNK), 
any(MailboxSession.class))).thenReturn(messageManager);
-        when(parameter.getUser().getUserName()).thenReturn(USER_LOCAL_PART);
+        when(usersRepository.supportVirtualHosting()).thenReturn(false);
+        when(usersRepository.getUser(new MailAddress(USER_LOCAL_PART + 
"@localhost"))).thenReturn(USER_LOCAL_PART);
+        when(usersRepository.getUser(new 
MailAddress(USER))).thenReturn(USER_LOCAL_PART);
+        when(mailboxManager.getMailbox(eq(JUNK), 
any(MailboxSession.class))).thenReturn(messageManager);
+        when(user.getUserName()).thenReturn(USER_LOCAL_PART);
 
         mailetConfig.setProperty(ToRecipientFolder.FOLDER_PARAMETER, "Junk");
-        parameter.getMailet().init(mailetConfig);
-        parameter.getMailet().service(createMail());
+        testee.init(mailetConfig);
+        testee.service(createMail());
 
         verify(messageManager).appendMessage(any(InputStream.class), 
any(Date.class), any(MailboxSession.class), eq(true), any(Flags.class));
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/71accd66/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/mailetcontainer.xml
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/mailetcontainer.xml
 
b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/mailetcontainer.xml
index 0bef357..28bdcee 100644
--- 
a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/mailetcontainer.xml
+++ 
b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/mailetcontainer.xml
@@ -54,6 +54,7 @@
                 <name>bcc</name>
             </mailet>
             <mailet match="RecipientIsLocal" 
class="org.apache.james.jmap.mailet.VacationMailet"/>
+            <mailet match="RecipientIsLocal" class="Sieve"/>
             <mailet match="RecipientIsLocal" class="LocalDelivery"/>
             <mailet match="HostIsLocal" class="ToProcessor">
                 <processor>local-address-error</processor>

http://git-wip-us.apache.org/repos/asf/james-project/blob/71accd66/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/mailetcontainer.xml
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/mailetcontainer.xml
 
b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/mailetcontainer.xml
index 0bef357..28bdcee 100644
--- 
a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/mailetcontainer.xml
+++ 
b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/mailetcontainer.xml
@@ -54,6 +54,7 @@
                 <name>bcc</name>
             </mailet>
             <mailet match="RecipientIsLocal" 
class="org.apache.james.jmap.mailet.VacationMailet"/>
+            <mailet match="RecipientIsLocal" class="Sieve"/>
             <mailet match="RecipientIsLocal" class="LocalDelivery"/>
             <mailet match="HostIsLocal" class="ToProcessor">
                 <processor>local-address-error</processor>

http://git-wip-us.apache.org/repos/asf/james-project/blob/71accd66/server/protocols/webadmin-integration-test/src/test/resources/mailetcontainer.xml
----------------------------------------------------------------------
diff --git 
a/server/protocols/webadmin-integration-test/src/test/resources/mailetcontainer.xml
 
b/server/protocols/webadmin-integration-test/src/test/resources/mailetcontainer.xml
index b265f93..f1ea4af 100644
--- 
a/server/protocols/webadmin-integration-test/src/test/resources/mailetcontainer.xml
+++ 
b/server/protocols/webadmin-integration-test/src/test/resources/mailetcontainer.xml
@@ -56,6 +56,7 @@
             </mailet>
             <mailet match="All" class="RecipientRewriteTable" />
             <mailet match="RecipientIsLocal" 
class="org.apache.james.jmap.mailet.VacationMailet"/>
+            <mailet match="RecipientIsLocal" class="Sieve"/>
             <mailet match="RecipientIsLocal" class="LocalDelivery"/>
             <mailet match="HostIsLocal" class="ToProcessor">
                 <processor>local-address-error</processor>


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

Reply via email to