You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2018/05/25 09:09:00 UTC

[3/7] james-project git commit: MAILBOX-337 Get ride of stored leveled mocked tests

MAILBOX-337 Get ride of stored leveled mocked tests

We should rather play them directly on the memory implementation


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/75f1d70f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/75f1d70f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/75f1d70f

Branch: refs/heads/master
Commit: 75f1d70f0d7fd5b50d6458f24517db7375059152
Parents: b25ee7f
Author: benwa <bt...@linagora.com>
Authored: Thu May 24 15:14:24 2018 +0700
Committer: Matthieu Baechler <ma...@apache.org>
Committed: Fri May 25 11:07:39 2018 +0200

----------------------------------------------------------------------
 .../CassandraMessageIdManagerTestSystem.java    |  95 +-----
 .../InMemoryMessageIdManagerTestSystem.java     | 123 +------
 .../manager/InMemoryIntegrationResources.java   |  40 ++-
 .../InMemoryMessageIdManagerSideEffectTest.java |  82 +++++
 .../store/AbstractCombinationManagerTest.java   |  15 +
 .../AbstractMessageIdManagerSideEffectTest.java |   4 +
 .../store/MessageIdManagerTestSystem.java       |  84 ++++-
 .../StoreMessageIdManagerSideEffectTest.java    |  64 ----
 .../store/StoreMessageIdManagerTestSystem.java  | 115 -------
 .../store/TestMailboxSessionMapperFactory.java  | 327 -------------------
 10 files changed, 208 insertions(+), 741 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
index 7adc220..31eefc2 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
@@ -19,47 +19,25 @@
 
 package org.apache.james.mailbox.cassandra;
 
-import java.nio.charset.StandardCharsets;
-import java.util.Date;
-
-import javax.mail.Flags;
-import javax.mail.util.SharedByteArrayInputStream;
-
 import org.apache.james.backends.cassandra.CassandraCluster;
-import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MessageIdManager;
-import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
-import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.MailboxACL;
-import org.apache.james.mailbox.model.MailboxId;
-import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.store.MessageIdManagerTestSystem;
-import org.apache.james.mailbox.store.SimpleMessageMetaData;
 import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
-import org.apache.james.mailbox.store.mail.model.Mailbox;
-import org.apache.james.mailbox.store.mail.model.MailboxMessage;
-import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
 import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater;
 import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager;
 
-import com.google.common.base.Throwables;
-
-public class CassandraMessageIdManagerTestSystem extends MessageIdManagerTestSystem {
-
-    private static final byte[] MESSAGE_CONTENT = "subject: any\n\nbody".getBytes(StandardCharsets.UTF_8);
+public class CassandraMessageIdManagerTestSystem {
 
     public static MessageIdManagerTestSystem createTestingData(CassandraCluster cassandra, QuotaManager quotaManager, MailboxEventDispatcher dispatcher) throws Exception {
         CassandraMailboxSessionMapperFactory mapperFactory = CassandraTestSystemFixture.createMapperFactory(cassandra);
 
-        return new CassandraMessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, dispatcher),
+        return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, dispatcher),
             new CassandraMessageId.Factory(),
             mapperFactory,
-            CassandraTestSystemFixture.createMailboxManager(mapperFactory));
+            CassandraTestSystemFixture.createMailboxManager(mapperFactory)) {
+        };
     }
 
     public static MessageIdManagerTestSystem createTestingDataWithQuota(CassandraCluster cassandra, QuotaManager quotaManager, CurrentQuotaManager currentQuotaManager) throws Exception {
@@ -70,73 +48,10 @@ public class CassandraMessageIdManagerTestSystem extends MessageIdManagerTestSys
             (StoreCurrentQuotaManager) currentQuotaManager,
             mailboxManager.getQuotaRootResolver(), mailboxManager.getEventDispatcher(), quotaManager);
         mailboxManager.addGlobalListener(listeningCurrentQuotaUpdater, mailboxManager.createSystemSession("System"));
-        return new CassandraMessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, mailboxManager.getEventDispatcher()),
+        return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, mailboxManager.getEventDispatcher()),
             new CassandraMessageId.Factory(),
             mapperFactory,
             mailboxManager);
     }
 
-    private final CassandraMessageId.Factory messageIdFactory;
-    private final CassandraMailboxSessionMapperFactory mapperFactory;
-    private final CassandraMailboxManager cassandraMailboxManager;
-
-    public CassandraMessageIdManagerTestSystem(MessageIdManager messageIdManager, CassandraMessageId.Factory messageIdFactory, CassandraMailboxSessionMapperFactory mapperFactory, CassandraMailboxManager cassandraMailboxManager) {
-        super(messageIdManager);
-        this.messageIdFactory = messageIdFactory;
-        this.mapperFactory = mapperFactory;
-        this.cassandraMailboxManager = cassandraMailboxManager;
-    }
-
-    @Override
-    public Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
-        cassandraMailboxManager.createMailbox(mailboxPath, session);
-        return mapperFactory.getMailboxMapper(session).findMailboxByPath(mailboxPath);
-    }
-
-    @Override
-    public MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags, MailboxSession mailboxSession) {
-        try {
-            CassandraMessageId messageId = messageIdFactory.generate();
-            Mailbox mailbox = mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId);
-            MailboxMessage message = createMessage(mailboxId, flags, messageId, uid);
-            mapperFactory.getMessageMapper(mailboxSession).add(mailbox, message);
-            cassandraMailboxManager.getEventDispatcher().added(mailboxSession, new SimpleMessageMetaData(message), mailbox);
-            return messageId;
-        } catch (Exception e) {
-            throw Throwables.propagate(e);
-        }
-    }
-
-    @Override
-    public MessageId createNotUsedMessageId() {
-        return messageIdFactory.generate();
-    }
-
-    @Override
-    public void deleteMailbox(MailboxId mailboxId, MailboxSession mailboxSession) {
-        try {
-            Mailbox mailbox = mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId);
-            cassandraMailboxManager.deleteMailbox(new MailboxPath(mailbox.getNamespace(), mailbox.getUser(), mailbox.getName()), mailboxSession);
-        } catch (Exception e) {
-            throw Throwables.propagate(e);
-        }
-    }
-
-    private static MailboxMessage createMessage(MailboxId mailboxId, Flags flags, MessageId messageId, MessageUid uid) {
-        MailboxMessage mailboxMessage = new SimpleMailboxMessage(messageId, new Date(), MESSAGE_CONTENT.length, 1256,
-            new SharedByteArrayInputStream(MESSAGE_CONTENT), flags, new PropertyBuilder(), mailboxId);
-        mailboxMessage.setModSeq(CassandraTestSystemFixture.MOD_SEQ);
-        mailboxMessage.setUid(uid);
-        return mailboxMessage;
-    }
-
-    @Override
-    public int getConstantMessageSize() {
-        return MESSAGE_CONTENT.length;
-    }
-
-    @Override
-    public void setACL(MailboxId mailboxId, MailboxACL mailboxACL, MailboxSession session) throws MailboxException {
-        cassandraMailboxManager.setRights(mailboxId, mailboxACL, session);
-    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java
index 7163e74..5447b59 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerTestSystem.java
@@ -18,130 +18,23 @@
  ****************************************************************/
 package org.apache.james.mailbox.inmemory;
 
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.Optional;
-
-import javax.mail.Flags;
-
-import org.apache.james.mailbox.MailboxManager;
-import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MessageIdManager;
-import org.apache.james.mailbox.MessageManager;
-import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
-import org.apache.james.mailbox.model.MailboxACL;
-import org.apache.james.mailbox.model.MailboxId;
-import org.apache.james.mailbox.model.MailboxMetaData;
-import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.model.search.MailboxQuery;
 import org.apache.james.mailbox.store.MessageIdManagerTestSystem;
 import org.apache.james.mailbox.store.StoreMailboxManager;
-import org.apache.james.mailbox.store.mail.model.Mailbox;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
-import org.apache.james.mime4j.dom.Message;
-import org.apache.james.mime4j.message.DefaultMessageWriter;
-
-import com.google.common.base.Throwables;
 
-public class InMemoryMessageIdManagerTestSystem extends MessageIdManagerTestSystem {
+public class InMemoryMessageIdManagerTestSystem {
 
-    public static InMemoryMessageIdManagerTestSystem create() throws MailboxException {
+    public static MessageIdManagerTestSystem create() throws MailboxException {
         InMemoryIntegrationResources inMemoryIntegrationResources = new InMemoryIntegrationResources();
-        StoreMailboxManager mailboxManager = inMemoryIntegrationResources.createMailboxManager(new SimpleGroupMembershipResolver());
-        return new InMemoryMessageIdManagerTestSystem(
-            inMemoryIntegrationResources.createMessageIdManager(mailboxManager),
+        InMemoryIntegrationResources.Resources resources = inMemoryIntegrationResources.createResources(new SimpleGroupMembershipResolver());
+        StoreMailboxManager mailboxManager = resources.getMailboxManager();
+        return new MessageIdManagerTestSystem(
+            inMemoryIntegrationResources.createMessageIdManager(mailboxManager, resources.getMessageIdFactory()),
+            resources.getMessageIdFactory(),
+            resources.getMailboxManager().getMapperFactory(),
             mailboxManager);
     }
 
-    private static final MessageId FIRST_MESSAGE_ID = InMemoryMessageId.of(1);
-    private static final long ONE_HUNDRED = 100;
-    private static final int UID_VALIDITY = 1024;
-
-    private final MailboxManager mailboxManager;
-    private Optional<MessageId> lastMessageIdUsed;
-    private final Message message;
-
-    private InMemoryMessageIdManagerTestSystem(MessageIdManager messageIdManager, MailboxManager mailboxManager) {
-        super(messageIdManager);
-        this.mailboxManager = mailboxManager;
-        this.lastMessageIdUsed = Optional.empty();
-        try {
-            this.message = Message.Builder.of()
-                .setSubject("test")
-                .setBody("testmail", StandardCharsets.UTF_8)
-                .build();
-        } catch (IOException e) {
-            throw Throwables.propagate(e);
-        }
-    }
-
-    @Override
-    public Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException {
-        mailboxManager.createMailbox(mailboxPath, mailboxSession);
-        MessageManager messageManager = mailboxManager.getMailbox(mailboxPath, mailboxSession);
-        return new SimpleMailbox(mailboxPath, UID_VALIDITY, messageManager.getId());
-    }
-
-    @Override
-    public MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags, MailboxSession session) {
-        try {
-            MessageManager messageManager = mailboxManager.getMailbox(mailboxId, session);
-            MessageId messageId = messageManager.appendMessage(MessageManager.AppendCommand
-                    .builder()
-                    .notRecent()
-                    .withFlags(flags)
-                    .build(message),
-                session)
-                .getMessageId();
-            lastMessageIdUsed = Optional.of(messageId);
-            return messageId;
-        } catch (MailboxException | IOException e) {
-            throw Throwables.propagate(e);
-        }
-    }
-
-    @Override
-    public MessageId createNotUsedMessageId() {
-        return InMemoryMessageId.of(Long.valueOf(lastMessageIdUsed.orElse(FIRST_MESSAGE_ID).serialize()) + ONE_HUNDRED);
-    }
-
-    @Override
-    public void deleteMailbox(MailboxId mailboxId, MailboxSession session) {
-        try {
-            Optional<MailboxMetaData> mailbox = retrieveMailbox(mailboxId, session);
-            if (mailbox.isPresent()) {
-                mailboxManager.deleteMailbox(mailbox.get().getPath(), session);
-            }
-        } catch (MailboxException e) {
-            Throwables.propagate(e);
-        }
-    }
-
-    private Optional<MailboxMetaData> retrieveMailbox(MailboxId mailboxId, MailboxSession mailboxSession) throws MailboxException {
-        MailboxQuery userMailboxesQuery = MailboxQuery.privateMailboxesBuilder(mailboxSession)
-            .matchesAllMailboxNames()
-            .build();
-        return mailboxManager.search(userMailboxesQuery, mailboxSession)
-            .stream()
-            .filter(mailboxMetaData -> mailboxMetaData.getId().equals(mailboxId))
-            .findFirst();
-    }
-
-    @Override
-    public int getConstantMessageSize() {
-        try {
-            return DefaultMessageWriter.asBytes(message).length;
-        } catch (IOException e) {
-            throw Throwables.propagate(e);
-        }
-    }
-
-    @Override
-    public void setACL(MailboxId mailboxId, MailboxACL mailboxAcl, MailboxSession session) throws MailboxException {
-        mailboxManager.setRights(mailboxId, mailboxAcl, session);
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
index 3b2014a..4b6c9a3 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
@@ -33,6 +33,7 @@ import org.apache.james.mailbox.inmemory.quota.InMemoryCurrentQuotaManager;
 import org.apache.james.mailbox.inmemory.quota.InMemoryPerUserMaxQuotaManager;
 import org.apache.james.mailbox.manager.IntegrationResources;
 import org.apache.james.mailbox.manager.ManagerTestResources;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
 import org.apache.james.mailbox.quota.MaxQuotaManager;
 import org.apache.james.mailbox.quota.QuotaManager;
@@ -66,14 +67,16 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         private final CurrentQuotaManager currentQuotaManager;
         private final DefaultUserQuotaRootResolver quotaRootResolver;
         private final StoreRightManager storeRightManager;
+        private final MessageId.Factory messageIdFactory;
 
-        public Resources(InMemoryMailboxManager mailboxManager, MaxQuotaManager maxQuotaManager, QuotaManager quotaManager, CurrentQuotaManager currentQuotaManager, DefaultUserQuotaRootResolver quotaRootResolver, StoreRightManager storeRightManager) {
+        public Resources(InMemoryMailboxManager mailboxManager, MaxQuotaManager maxQuotaManager, QuotaManager quotaManager, CurrentQuotaManager currentQuotaManager, DefaultUserQuotaRootResolver quotaRootResolver, StoreRightManager storeRightManager, MessageId.Factory messageIdFactory) {
             this.mailboxManager = mailboxManager;
             this.maxQuotaManager = maxQuotaManager;
             this.quotaManager = quotaManager;
             this.currentQuotaManager = currentQuotaManager;
             this.quotaRootResolver = quotaRootResolver;
             this.storeRightManager = storeRightManager;
+            this.messageIdFactory = messageIdFactory;
         }
 
         public InMemoryMailboxManager getMailboxManager() {
@@ -99,6 +102,10 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         public StoreRightManager getStoreRightManager() {
             return storeRightManager;
         }
+
+        public MessageId.Factory getMessageIdFactory() {
+            return messageIdFactory;
+        }
     }
 
     private SimpleGroupMembershipResolver groupMembershipResolver;
@@ -131,7 +138,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
     }
 
     private Resources createMailboxManager(GroupMembershipResolver groupMembershipResolver,
-                                                    BiFunction<StoreRightManager, InMemoryMailboxSessionMapperFactory, StoreMailboxAnnotationManager> annotationManagerBiFunction) throws MailboxException {
+                                           BiFunction<StoreRightManager, InMemoryMailboxSessionMapperFactory, StoreMailboxAnnotationManager> annotationManagerBiFunction) throws MailboxException {
         FakeAuthenticator fakeAuthenticator = new FakeAuthenticator();
         fakeAuthenticator.addUser(ManagerTestResources.USER, ManagerTestResources.USER_PASS);
         fakeAuthenticator.addUser(ManagerTestResources.OTHER_USER, ManagerTestResources.OTHER_USER_PASS);
@@ -139,7 +146,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         DefaultDelegatingMailboxListener delegatingListener = new DefaultDelegatingMailboxListener();
         MailboxEventDispatcher mailboxEventDispatcher = new MailboxEventDispatcher(delegatingListener);
         StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(),
-                                                                    groupMembershipResolver, mailboxEventDispatcher);
+            groupMembershipResolver, mailboxEventDispatcher);
         StoreMailboxAnnotationManager annotationManager = annotationManagerBiFunction
             .apply(storeRightManager, mailboxSessionMapperFactory);
 
@@ -158,16 +165,17 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         MaxQuotaManager maxQuotaManager = createMaxQuotaManager();
         try {
             QuotaManager quotaManager = createQuotaManager(maxQuotaManager, manager);
-        return new Resources(
-            manager,
-            maxQuotaManager,
-            quotaManager,
-            currentQuotaManager,
-            quotaRootResolver,
-            storeRightManager);
-    } catch (Exception e) {
-        throw Throwables.propagate(e);
-    }
+            return new Resources(
+                manager,
+                maxQuotaManager,
+                quotaManager,
+                currentQuotaManager,
+                quotaRootResolver,
+                storeRightManager,
+                new InMemoryMessageId.Factory());
+        } catch (Exception e) {
+            throw Throwables.propagate(e);
+        }
     }
 
     public StoreMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver,
@@ -195,11 +203,15 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
 
     @Override
     public MessageIdManager createMessageIdManager(StoreMailboxManager mailboxManager) {
+        return createMessageIdManager(mailboxManager, new InMemoryMessageId.Factory());
+    }
+
+    public MessageIdManager createMessageIdManager(StoreMailboxManager mailboxManager, MessageId.Factory factory) {
         return new StoreMessageIdManager(
             mailboxManager,
             mailboxManager.getMapperFactory(),
             mailboxManager.getEventDispatcher(),
-            new InMemoryMessageId.Factory(),
+            factory,
             mailboxManager.getQuotaManager(),
             mailboxManager.getQuotaRootResolver());
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
new file mode 100644
index 0000000..43295bd
--- /dev/null
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
@@ -0,0 +1,82 @@
+/****************************************************************
+ * 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.mailbox.inmemory.manager;
+
+import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
+import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
+import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
+import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
+import org.apache.james.mailbox.inmemory.InMemoryMessageId;
+import org.apache.james.mailbox.manager.ManagerTestResources;
+import org.apache.james.mailbox.quota.QuotaManager;
+import org.apache.james.mailbox.store.AbstractMessageIdManagerSideEffectTest;
+import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.FakeAuthorizator;
+import org.apache.james.mailbox.store.JVMMailboxPathLocker;
+import org.apache.james.mailbox.store.MessageIdManagerTestSystem;
+import org.apache.james.mailbox.store.StoreMailboxAnnotationManager;
+import org.apache.james.mailbox.store.StoreMessageIdManager;
+import org.apache.james.mailbox.store.StoreRightManager;
+import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener;
+import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
+import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
+import org.junit.Before;
+
+public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdManagerSideEffectTest {
+
+    @Override
+    @Before
+    public void setUp() throws Exception {
+        super.setUp();
+    }
+
+    @Override
+    protected MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager, MailboxEventDispatcher dispatcher) {
+        InMemoryMailboxSessionMapperFactory mapperFactory = new InMemoryMailboxSessionMapperFactory();
+
+        FakeAuthenticator fakeAuthenticator = new FakeAuthenticator();
+        fakeAuthenticator.addUser(ManagerTestResources.USER, ManagerTestResources.USER_PASS);
+        fakeAuthenticator.addUser(ManagerTestResources.OTHER_USER, ManagerTestResources.OTHER_USER_PASS);
+        FakeAuthorizator fakeAuthorizator = FakeAuthorizator.defaultReject();
+
+        StoreRightManager rightManager = new StoreRightManager(mapperFactory, new UnionMailboxACLResolver(), new SimpleGroupMembershipResolver(), dispatcher);
+        JVMMailboxPathLocker locker = new JVMMailboxPathLocker();
+        InMemoryMessageId.Factory messageIdFactory = new InMemoryMessageId.Factory();
+        InMemoryMailboxManager mailboxManager = new InMemoryMailboxManager(mapperFactory,
+            fakeAuthenticator,
+            fakeAuthorizator,
+            locker,
+            new MessageParser(),
+            messageIdFactory,
+            dispatcher,
+            new DefaultDelegatingMailboxListener(),
+            new StoreMailboxAnnotationManager(mapperFactory, rightManager),
+            rightManager);
+        StoreMessageIdManager messageIdManager = new StoreMessageIdManager(
+            mailboxManager,
+            mapperFactory,
+            dispatcher,
+            messageIdFactory,
+            quotaManager,
+            new DefaultUserQuotaRootResolver(mapperFactory));
+        return new MessageIdManagerTestSystem(messageIdManager, messageIdFactory, mapperFactory, mailboxManager);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
index 4506b6a..ac11def 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
@@ -515,6 +515,21 @@ public abstract class AbstractCombinationManagerTest {
         assertThat(messageManager1.search(searchQuery, session)).isEmpty();
     }
 
+    @Test
+    public void getUidsShouldInteractWellWithDeletes() throws Exception {
+        MessageId messageId1 = messageManager1
+            .appendMessage(MessageManager.AppendCommand.from(mailContent), session)
+            .getMessageId();
+        MessageId messageId2 = messageManager1
+            .appendMessage(MessageManager.AppendCommand.from(mailContent), session)
+            .getMessageId();
+
+        messageIdManager.delete(ImmutableList.of(messageId1, messageId2), session);
+
+        SearchQuery searchQuery = new SearchQuery(SearchQuery.all());
+        assertThat(messageManager1.search(searchQuery, session)).isEmpty();
+    }
+
     private Predicate<MessageResult> messageInMailbox2() {
         return messageResult -> messageResult.getMailboxId().equals(mailbox2.getMailboxId());
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
index 92431a9..3f38a6f 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
@@ -290,6 +290,8 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
         givenUnlimitedQuota();
         MessageId messageId = testingData.createNotUsedMessageId();
 
+        reset(dispatcher);
+
         messageIdManager.delete(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
 
         verifyNoMoreInteractions(dispatcher);
@@ -299,6 +301,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     public void setFlagsShouldNotDispatchEventWhenMessageDoesNotExist() throws Exception {
         givenUnlimitedQuota();
         MessageId messageId = testingData.createNotUsedMessageId();
+        reset(dispatcher);
 
         messageIdManager.setFlags(FLAGS, FlagsUpdateMode.ADD, messageId, ImmutableList.of(mailbox2.getMailboxId()), session);
 
@@ -309,6 +312,7 @@ public abstract class AbstractMessageIdManagerSideEffectTest {
     public void setInMailboxesShouldNotDispatchEventWhenMessageDoesNotExist() throws Exception {
         givenUnlimitedQuota();
         MessageId messageId = testingData.createNotUsedMessageId();
+        reset(dispatcher);
 
         messageIdManager.setInMailboxes(messageId, ImmutableList.of(mailbox1.getMailboxId()), session);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
index c04aed9..21de9e1 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
@@ -19,7 +19,11 @@
 
 package org.apache.james.mailbox.store;
 
+import java.nio.charset.StandardCharsets;
+import java.util.Date;
+
 import javax.mail.Flags;
+import javax.mail.util.SharedByteArrayInputStream;
 
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
@@ -30,20 +34,18 @@ import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mailbox.store.mail.model.MailboxMessage;
+import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
 
-public abstract class MessageIdManagerTestSystem {
+public class MessageIdManagerTestSystem {
+    private static final byte[] MESSAGE_CONTENT = "subject: any\n\nbody".getBytes(StandardCharsets.UTF_8);
+    public static final int MOD_SEQ = 452;
 
     private final MessageIdManager messageIdManager;
-
-    public MessageIdManagerTestSystem(MessageIdManager messageIdManager) {
-        this.messageIdManager = messageIdManager;
-    }
-
-    public MessageIdManager getMessageIdManager() {
-        return messageIdManager;
-    }
-
-    public abstract Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException;
+    private final MessageId.Factory messageIdFactory;
+    private final MailboxSessionMapperFactory mapperFactory;
+    private final StoreMailboxManager mailboxManager;
 
     /**
      * Should take care of find returning the MailboxMessage
@@ -55,13 +57,63 @@ public abstract class MessageIdManagerTestSystem {
      * @param flags
      * @return the id of persisted message
      */
-    public abstract MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags, MailboxSession session);
 
-    public abstract MessageId createNotUsedMessageId();
+    public MessageIdManagerTestSystem(MessageIdManager messageIdManager, MessageId.Factory messageIdFactory, MailboxSessionMapperFactory mapperFactory, StoreMailboxManager mailboxManager) {
+        this.messageIdManager = messageIdManager;
+        this.messageIdFactory = messageIdFactory;
+        this.mapperFactory = mapperFactory;
+        this.mailboxManager = mailboxManager;
+    }
 
-    public abstract void deleteMailbox(MailboxId mailboxId, MailboxSession session);
 
-    public abstract int getConstantMessageSize();
+    public MessageIdManager getMessageIdManager() {
+        return messageIdManager;
+    }
 
-    public abstract void setACL(MailboxId mailboxId, MailboxACL mailboxACL, MailboxSession session) throws MailboxException;
+    public Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
+        mailboxManager.createMailbox(mailboxPath, session);
+        return mapperFactory.getMailboxMapper(session).findMailboxByPath(mailboxPath);
+    }
+
+    public MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags, MailboxSession mailboxSession) {
+        try {
+            MessageId messageId = messageIdFactory.generate();
+            Mailbox mailbox = mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId);
+            MailboxMessage message = createMessage(mailboxId, flags, messageId, uid);
+            mapperFactory.getMessageMapper(mailboxSession).add(mailbox, message);
+            mailboxManager.getEventDispatcher().added(mailboxSession, new SimpleMessageMetaData(message), mailbox);
+            return messageId;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public MessageId createNotUsedMessageId() {
+        return messageIdFactory.generate();
+    }
+
+    public void deleteMailbox(MailboxId mailboxId, MailboxSession mailboxSession) {
+        try {
+            Mailbox mailbox = mapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId);
+            mailboxManager.deleteMailbox(new MailboxPath(mailbox.getNamespace(), mailbox.getUser(), mailbox.getName()), mailboxSession);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static MailboxMessage createMessage(MailboxId mailboxId, Flags flags, MessageId messageId, MessageUid uid) {
+        MailboxMessage mailboxMessage = new SimpleMailboxMessage(messageId, new Date(), MESSAGE_CONTENT.length, 1256,
+            new SharedByteArrayInputStream(MESSAGE_CONTENT), flags, new PropertyBuilder(), mailboxId);
+        mailboxMessage.setModSeq(MOD_SEQ);
+        mailboxMessage.setUid(uid);
+        return mailboxMessage;
+    }
+
+    public int getConstantMessageSize() {
+        return MESSAGE_CONTENT.length;
+    }
+
+    public void setACL(MailboxId mailboxId, MailboxACL mailboxACL, MailboxSession session) throws MailboxException {
+        mailboxManager.setRights(mailboxId, mailboxACL, session);
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java
deleted file mode 100644
index 1006292..0000000
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************
- * 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.mailbox.store;
-
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import org.apache.james.mailbox.MailboxManager;
-import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MessageIdManager;
-import org.apache.james.mailbox.model.MailboxACL;
-import org.apache.james.mailbox.model.MailboxId;
-import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.model.TestMessageId;
-import org.apache.james.mailbox.quota.QuotaManager;
-import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
-import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver;
-import org.junit.Before;
-
-public class StoreMessageIdManagerSideEffectTest extends AbstractMessageIdManagerSideEffectTest {
-
-    @Override
-    @Before
-    public void setUp() throws Exception {
-        super.setUp();
-    }
-
-    @Override
-    protected MessageIdManagerTestSystem createTestSystem(QuotaManager quotaManager, MailboxEventDispatcher dispatcher) throws Exception {
-
-        TestMailboxSessionMapperFactory testMailboxSessionMapperFactory = new TestMailboxSessionMapperFactory();
-        MessageId.Factory messageIdFactory = new TestMessageId.Factory();
-        MailboxManager mailboxManager = mock(MailboxManager.class);
-        when(mailboxManager.myRights(any(MailboxId.class), any(MailboxSession.class)))
-            .thenReturn(MailboxACL.FULL_RIGHTS);
-
-        MessageIdManager messageIdManager = new StoreMessageIdManager(mailboxManager,
-            testMailboxSessionMapperFactory, dispatcher, messageIdFactory,
-            quotaManager, new DefaultUserQuotaRootResolver(testMailboxSessionMapperFactory));
-
-        return new StoreMessageIdManagerTestSystem(messageIdManager,
-            messageIdFactory,
-            testMailboxSessionMapperFactory);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
deleted file mode 100644
index 266722b..0000000
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerTestSystem.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/****************************************************************
- * 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.mailbox.store;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.time.Instant;
-import java.util.Date;
-
-import javax.mail.Flags;
-
-import org.apache.commons.lang3.NotImplementedException;
-import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MessageIdManager;
-import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.mock.MockMailboxSession;
-import org.apache.james.mailbox.model.MailboxACL;
-import org.apache.james.mailbox.model.MailboxId;
-import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.store.mail.model.Mailbox;
-import org.apache.james.mailbox.store.mail.model.MailboxMessage;
-
-import com.google.common.base.Throwables;
-
-public class StoreMessageIdManagerTestSystem extends MessageIdManagerTestSystem {
-    private static final long MOD_SEQ = 18;
-    private static final ByteArrayInputStream ARRAY_INPUT_STREAM = new ByteArrayInputStream("".getBytes());
-
-    private final MessageId.Factory messageIdFactory;
-    private final TestMailboxSessionMapperFactory mapperFactory;
-    private final MailboxSession defaultMailboxSession;
-
-    public StoreMessageIdManagerTestSystem(MessageIdManager messageIdManager, MessageId.Factory messageIdFactory, TestMailboxSessionMapperFactory mapperFactory) {
-        super(messageIdManager);
-
-        this.messageIdFactory = messageIdFactory;
-        this.mapperFactory = mapperFactory;
-        this.defaultMailboxSession = new MockMailboxSession("user");
-    }
-
-    @Override
-    public Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
-        return mapperFactory.createMailboxMapper(session).findMailboxByPath(mailboxPath);
-    }
-
-    @Override
-    public MessageId persist(MailboxId mailboxId, MessageUid uid, Flags flags, MailboxSession session) {
-        MessageId messageId = messageIdFactory.generate();
-        try {
-            mapperFactory.createMessageIdMapper(defaultMailboxSession)
-                .save(createMessage(mailboxId, flags, messageId, uid));
-            return messageId;
-        } catch (MailboxException e) {
-            throw Throwables.propagate(e);
-        }
-    }
-
-    @Override
-    public void deleteMailbox(MailboxId mailboxId, MailboxSession mailboxSession) {
-        throw new NotImplementedException("Not implemented");
-    }
-
-    @Override
-    public MessageId createNotUsedMessageId() {
-        return messageIdFactory.generate();
-    }
-
-    private MailboxMessage createMessage(MailboxId mailboxId, Flags flags, MessageId messageId, MessageUid uid) {
-        MailboxMessage mailboxMessage = mock(MailboxMessage.class);
-        when(mailboxMessage.getMessageId()).thenReturn(messageId);
-        when(mailboxMessage.getUid()).thenReturn(uid);
-        when(mailboxMessage.getModSeq()).thenReturn(MOD_SEQ);
-        when(mailboxMessage.getMailboxId()).thenReturn(mailboxId);
-        when(mailboxMessage.getInternalDate()).thenReturn(Date.from(Instant.parse("2007-12-03T10:15:30.00Z")));
-        try {
-            when(mailboxMessage.getFullContent()).thenReturn(ARRAY_INPUT_STREAM);
-        } catch (IOException e) {
-            throw Throwables.propagate(e);
-        }
-        when(mailboxMessage.createFlags()).thenReturn(flags);
-        return mailboxMessage;
-    }
-
-    @Override
-    public int getConstantMessageSize() {
-        throw new NotImplementedException("Not implemented");
-    }
-
-    @Override
-    public void setACL(MailboxId mailboxId, MailboxACL mailboxACL, MailboxSession session) throws MailboxException {
-        throw new NotImplementedException("Not implemented");
-    }
-}

http://git-wip-us.apache.org/repos/asf/james-project/blob/75f1d70f/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java
deleted file mode 100644
index f356d94..0000000
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java
+++ /dev/null
@@ -1,327 +0,0 @@
-/****************************************************************
- * 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.mailbox.store;
-
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Function;
-import java.util.function.Predicate;
-
-import javax.mail.Flags;
-
-import org.apache.commons.lang3.NotImplementedException;
-import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.MessageManager;
-import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.acl.ACLDiff;
-import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.exception.MailboxNotFoundException;
-import org.apache.james.mailbox.exception.SubscriptionException;
-import org.apache.james.mailbox.fixture.MailboxFixture;
-import org.apache.james.mailbox.model.MailboxACL;
-import org.apache.james.mailbox.model.MailboxACL.Right;
-import org.apache.james.mailbox.model.MailboxId;
-import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.model.MessageId;
-import org.apache.james.mailbox.model.TestId;
-import org.apache.james.mailbox.model.UpdatedFlags;
-import org.apache.james.mailbox.store.mail.AnnotationMapper;
-import org.apache.james.mailbox.store.mail.MailboxMapper;
-import org.apache.james.mailbox.store.mail.MessageIdMapper;
-import org.apache.james.mailbox.store.mail.MessageMapper;
-import org.apache.james.mailbox.store.mail.ModSeqProvider;
-import org.apache.james.mailbox.store.mail.UidProvider;
-import org.apache.james.mailbox.store.mail.model.Mailbox;
-import org.apache.james.mailbox.store.mail.model.MailboxMessage;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
-import org.apache.james.mailbox.store.user.SubscriptionMapper;
-
-import com.github.steveash.guavate.Guavate;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableMap;
-
-public class TestMailboxSessionMapperFactory extends MailboxSessionMapperFactory {
-    private static final long MOD_SEQ = 18;
-    private static final MessageUid UID = MessageUid.of(28);
-    private static final long UID_VALIDITY = 42;
-
-    private final SimpleMailbox mailbox1;
-    private final SimpleMailbox mailbox2;
-    private final SimpleMailbox mailbox3;
-    private final SimpleMailbox mailbox4;
-
-    private final List<MailboxMessage> messages = new ArrayList<>();
-    private final MailboxMapper mailboxMapper;
-    private final MessageIdMapper messageIdMapper;
-
-    public TestMailboxSessionMapperFactory() {
-        mailbox1 = new SimpleMailbox(MailboxFixture.INBOX_ALICE, UID_VALIDITY, TestId.of(36));
-        mailbox2 = new SimpleMailbox(MailboxFixture.OUTBOX_ALICE, UID_VALIDITY, TestId.of(46));
-        mailbox3 = new SimpleMailbox(MailboxFixture.SENT_ALICE, UID_VALIDITY, TestId.of(56));
-        mailbox4 = new SimpleMailbox(MailboxFixture.INBOX_BOB, UID_VALIDITY, TestId.of(66));
-
-        mailboxMapper = new MailboxMapper() {
-            @Override
-            public MailboxId save(Mailbox mailbox) throws MailboxException {
-                throw new NotImplementedException("Not implemented");
-            }
-
-            @Override
-            public void delete(Mailbox mailbox) throws MailboxException {
-                throw new NotImplementedException("Not implemented");
-
-            }
-
-            @Override
-            public Mailbox findMailboxByPath(MailboxPath mailboxName) throws MailboxException {
-                if (mailboxName.equals(MailboxFixture.INBOX_ALICE)) {
-                    return mailbox1;
-                }
-                if (mailboxName.equals(MailboxFixture.OUTBOX_ALICE)) {
-                    return mailbox2;
-                }
-                if (mailboxName.equals(MailboxFixture.SENT_ALICE)) {
-                    return mailbox3;
-                }
-                throw new IllegalArgumentException("Unknown mailbox : " + mailboxName + " must be one of "
-                    + MailboxFixture.INBOX_ALICE + " "
-                    + MailboxFixture.OUTBOX_ALICE + " "
-                    + MailboxFixture.SENT_ALICE);
-            }
-
-            @Override
-            public Mailbox findMailboxById(MailboxId mailboxId) throws MailboxException {
-                if (mailboxId.equals(mailbox1.getMailboxId())) {
-                    return mailbox1;
-                }
-                if (mailboxId.equals(mailbox2.getMailboxId())) {
-                    return mailbox2;
-                }
-                if (mailboxId.equals(mailbox3.getMailboxId())) {
-                    return mailbox3;
-                }
-                throw new IllegalArgumentException("Unknown mailboxId : " + mailboxId + " must be one of " + mailbox1.getMailboxId() + " " + mailbox2.getMailboxId() + " " + mailbox3.getMailboxId());
-            }
-
-            @Override
-            public List<Mailbox> findMailboxWithPathLike(MailboxPath mailboxPath) throws MailboxException {
-                throw new NotImplementedException("Not implemented");
-            }
-
-            @Override
-            public boolean hasChildren(Mailbox mailbox, char delimiter) throws MailboxException {
-                throw new NotImplementedException("Not implemented");
-            }
-
-            @Override
-            public ACLDiff updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException {
-                throw new NotImplementedException("Not implemented");
-            }
-
-            @Override
-            public ACLDiff setACL(Mailbox mailbox, MailboxACL mailboxACL) throws MailboxException {
-                throw new NotImplementedException("Not implemented");
-            }
-
-            @Override
-            public List<Mailbox> list() throws MailboxException {
-                throw new NotImplementedException("Not implemented");
-            }
-
-            @Override
-            public void endRequest() {
-                throw new NotImplementedException("Not implemented");
-            }
-
-            @Override
-            public <T> T execute(Transaction<T> transaction) throws MailboxException {
-                throw new NotImplementedException("Not implemented");
-            }
-
-            @Override
-            public List<Mailbox> findNonPersonalMailboxes(String userName, Right right) throws MailboxException {
-                throw new NotImplementedException("Not implemented");
-            }
-        };
-        messageIdMapper = new MessageIdMapper() {
-
-            @Override
-            public List<MailboxMessage> find(Collection<MessageId> messageIds, MessageMapper.FetchType fetchType) {
-                return messages.stream()
-                    .filter(withMessageIdOneOf(messageIds))
-                    .collect(Guavate.toImmutableList());
-            }
-
-            @Override
-            public List<MailboxId> findMailboxes(MessageId messageId) {
-                return messages.stream()
-                    .filter(withMessageId(messageId))
-                    .map(MailboxMessage::getMailboxId)
-                    .collect(Guavate.toImmutableList());
-            }
-
-            @Override
-            public void save(MailboxMessage mailboxMessage) throws MailboxException {
-                messages.add(mailboxMessage);
-            }
-
-            @Override
-            public void copyInMailbox(MailboxMessage mailboxMessage) throws MailboxNotFoundException, MailboxException {
-                messages.add(mailboxMessage);
-            }
-
-            @Override
-            public void delete(MessageId messageId) {
-                messages.removeAll(
-                    messages.stream()
-                        .filter(withMessageId(messageId))
-                        .collect(Guavate.toImmutableList()));
-            }
-
-            @Override
-            public void delete(MessageId messageId, Collection<MailboxId> mailboxIds) {
-                messages.removeAll(
-                    messages.stream()
-                        .filter(withMessageId(messageId))
-                        .filter(inMailboxes(mailboxIds))
-                        .collect(Guavate.toImmutableList()));
-            }
-
-            @Override
-            public Map<MailboxId, UpdatedFlags> setFlags(MessageId messageId, List<MailboxId> mailboxIds, Flags newState, MessageManager.FlagsUpdateMode updateMode) throws MailboxException {
-                List<Map.Entry<MailboxId, UpdatedFlags>> entries = messages.stream()
-                    .filter(withMessageId(messageId))
-                    .filter(inMailboxes(mailboxIds))
-                    .map(toMapEntryOfUpdatedFlags(newState, updateMode))
-                    .filter(isChanged())
-                    .collect(Guavate.toImmutableList());
-                ImmutableMap.Builder<MailboxId, UpdatedFlags> builder = ImmutableMap.builder();
-                for (Map.Entry<MailboxId, UpdatedFlags> entry : entries) {
-                    builder.put(entry);
-                }
-                return builder.build();
-            }
-        };
-    }
-
-    public SimpleMailbox getMailbox1() {
-        return mailbox1;
-    }
-
-    public SimpleMailbox getMailbox2() {
-        return mailbox2;
-    }
-
-    public SimpleMailbox getMailbox3() {
-        return mailbox3;
-    }
-
-    public SimpleMailbox getMailbox4() {
-        return mailbox4;
-    }
-
-    @Override
-    public UidProvider getUidProvider() {
-        UidProvider uidProvider = mock(UidProvider.class);
-        try {
-            when(uidProvider.nextUid(any(MailboxSession.class), any(MailboxId.class))).thenReturn(UID);
-        } catch (MailboxException e) {
-            throw Throwables.propagate(e);
-        }
-        return uidProvider;
-    }
-
-    @Override
-    public ModSeqProvider getModSeqProvider() {
-        ModSeqProvider modSeqProvider = mock(ModSeqProvider.class);
-        try {
-            when(modSeqProvider.nextModSeq(any(MailboxSession.class), any(MailboxId.class))).thenReturn(MOD_SEQ);
-        } catch (MailboxException e) {
-            throw Throwables.propagate(e);
-        }
-        return modSeqProvider;
-    }
-
-    @Override
-    public AnnotationMapper createAnnotationMapper(MailboxSession session) throws MailboxException {
-        throw new NotImplementedException("Not implemented");
-    }
-
-    @Override
-    public MessageMapper createMessageMapper(MailboxSession session) throws MailboxException {
-        throw new NotImplementedException("Not implemented");
-    }
-
-    @Override
-    public MailboxMapper createMailboxMapper(MailboxSession session) throws MailboxException {
-        return mailboxMapper;
-    }
-
-    @Override
-    public MessageIdMapper createMessageIdMapper(MailboxSession session) throws MailboxException {
-        return messageIdMapper;
-    }
-
-    @Override
-    public SubscriptionMapper createSubscriptionMapper(MailboxSession session) throws SubscriptionException {
-        throw new NotImplementedException("Not implemented");
-    }
-
-    public void clean() {
-        messages.clear();
-    }
-
-    private Predicate<MailboxMessage> withMessageIdOneOf(Collection<MessageId> messageIds) {
-        return mailboxMessage -> messageIds.contains(mailboxMessage.getMessageId());
-    }
-
-    private Predicate<MailboxMessage> inMailboxes(Collection<MailboxId> mailboxIds) {
-        return mailboxMessage -> mailboxIds.contains(mailboxMessage.getMailboxId());
-    }
-
-    private Predicate<MailboxMessage> withMessageId(MessageId messageId) {
-        return mailboxMessage -> mailboxMessage.getMessageId().equals(messageId);
-    }
-
-    private Predicate<Map.Entry<MailboxId, UpdatedFlags>> isChanged() {
-        return entry -> entry.getValue().flagsChanged();
-    }
-
-    private Function<MailboxMessage, Map.Entry<MailboxId, UpdatedFlags>> toMapEntryOfUpdatedFlags(Flags newState, MessageManager.FlagsUpdateMode updateMode) {
-        return mailboxMessage -> {
-            Preconditions.checkState(updateMode.equals(MessageManager.FlagsUpdateMode.ADD));
-            return new AbstractMap.SimpleEntry<>(mailboxMessage.getMailboxId(),
-                UpdatedFlags.builder()
-                    .uid(mailboxMessage.getUid())
-                    .modSeq(mailboxMessage.getModSeq())
-                    .newFlags(newState)
-                    .oldFlags(mailboxMessage.createFlags())
-                    .build());
-        };
-    }
-}


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org