JAMES-1905: Add some tests combining MessageIdManager and MessageManager

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

Branch: refs/heads/master
Commit: 105b6da03f1d5b368196574b71d8c6f1177ce4ff
Parents: 487825d
Author: Quynh Nguyen <[email protected]>
Authored: Mon Jan 9 10:34:20 2017 +0700
Committer: Benoit Tellier <[email protected]>
Committed: Thu Jan 19 09:22:48 2017 +0700

----------------------------------------------------------------------
 .../CassandraCombinationManagerTest.java        |  35 ++
 .../CassandraCombinationManagerTestSystem.java  |  69 ++++
 .../InMemoryCombinationManagerTest.java         |  30 ++
 .../InMemoryCombinationManagerTestSystem.java   |  59 +++
 .../MessageIdManagerTestSystemProvider.java     |   6 +
 .../store/AbstractCombinationManagerTest.java   | 372 +++++++++++++++++++
 .../store/CombinationManagerTestSystem.java     |  52 +++
 7 files changed, 623 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/105b6da0/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java
new file mode 100644
index 0000000..d642815
--- /dev/null
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java
@@ -0,0 +1,35 @@
+/****************************************************************
+ * 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.cassandra;
+
+import static org.mockito.Mockito.mock;
+
+import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.store.AbstractCombinationManagerTest;
+import org.apache.james.mailbox.store.CombinationManagerTestSystem;
+import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
+import org.apache.james.mailbox.store.quota.NoQuotaManager;
+
+public class CassandraCombinationManagerTest extends 
AbstractCombinationManagerTest {
+    @Override
+    public CombinationManagerTestSystem createTestingData() throws Exception {
+        return CassandraCombinationManagerTestSystem.createTestingData(new 
NoQuotaManager(), 
MailboxEventDispatcher.ofListener(mock(MailboxListener.class)));
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/105b6da0/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
new file mode 100644
index 0000000..d3387fd
--- /dev/null
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
@@ -0,0 +1,69 @@
+/****************************************************************
+ * 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.cassandra;
+
+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.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.quota.QuotaManager;
+import org.apache.james.mailbox.store.CombinationManagerTestSystem;
+import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+
+public class CassandraCombinationManagerTestSystem extends 
CombinationManagerTestSystem {
+    private final CassandraMessageId.Factory messageIdFactory;
+    private final CassandraMailboxSessionMapperFactory mapperFactory;
+    private final CassandraMailboxManager cassandraMailboxManager;
+
+    public static CombinationManagerTestSystem createTestingData(QuotaManager 
quotaManager, MailboxEventDispatcher dispatcher) throws Exception {
+        CassandraMailboxSessionMapperFactory mapperFactory = 
CassandraTestSystemFixture.createMapperFactory();
+
+        return new 
CassandraCombinationManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory,
 quotaManager, dispatcher),
+            new CassandraMessageId.Factory(),
+            mapperFactory,
+            CassandraTestSystemFixture.createMailboxManager(mapperFactory));
+    }
+
+    private CassandraCombinationManagerTestSystem(MessageIdManager 
messageIdManager, CassandraMessageId.Factory messageIdFactory, 
CassandraMailboxSessionMapperFactory mapperFactory, MailboxManager 
cassandraMailboxManager) {
+        super(cassandraMailboxManager, messageIdManager);
+        this.messageIdFactory = messageIdFactory;
+        this.mapperFactory = mapperFactory;
+        this.cassandraMailboxManager = 
(CassandraMailboxManager)cassandraMailboxManager;
+    }
+
+    @Override
+    public Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession 
session) throws MailboxException {
+        cassandraMailboxManager.createMailbox(mailboxPath, session);
+        return 
mapperFactory.getMailboxMapper(session).findMailboxByPath(mailboxPath);
+    }
+
+    @Override
+    public MessageManager createMessageManager(Mailbox mailbox, MailboxSession 
session) throws MailboxException {
+        return cassandraMailboxManager.createMessageManager(mailbox, session);
+    }
+
+    @Override
+    public void clean() {
+        CassandraTestSystemFixture.clean();
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/105b6da0/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryCombinationManagerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryCombinationManagerTest.java
 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryCombinationManagerTest.java
new file mode 100644
index 0000000..3f60bde
--- /dev/null
+++ 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryCombinationManagerTest.java
@@ -0,0 +1,30 @@
+/****************************************************************
+ * 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;
+
+import org.apache.james.mailbox.store.AbstractCombinationManagerTest;
+import org.apache.james.mailbox.store.CombinationManagerTestSystem;
+
+public class InMemoryCombinationManagerTest extends 
AbstractCombinationManagerTest {
+
+    @Override
+    public CombinationManagerTestSystem createTestingData() {
+        return MessageIdManagerTestSystemProvider.createManagersTestingData();
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/105b6da0/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryCombinationManagerTestSystem.java
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryCombinationManagerTestSystem.java
 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryCombinationManagerTestSystem.java
new file mode 100644
index 0000000..42f7a12
--- /dev/null
+++ 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryCombinationManagerTestSystem.java
@@ -0,0 +1,59 @@
+/****************************************************************
+ * 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;
+
+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.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.store.CombinationManagerTestSystem;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
+
+public class InMemoryCombinationManagerTestSystem extends 
CombinationManagerTestSystem {
+    private static final int UID_VALIDITY = 1024;
+
+    private final InMemoryMailboxManager inMemoryMailboxManager;
+
+    public InMemoryCombinationManagerTestSystem(MailboxManager mailboxManager, 
MessageIdManager messageIdManager) {
+        super(mailboxManager, messageIdManager);
+        this.inMemoryMailboxManager = (InMemoryMailboxManager)mailboxManager;
+    }
+
+    @Override
+    public MessageManager createMessageManager(Mailbox mailbox, MailboxSession 
session) throws MailboxException {
+        return inMemoryMailboxManager.createMessageManager(mailbox, session);
+    }
+
+    @Override
+    public Mailbox createMailbox(MailboxPath mailboxPath, MailboxSession 
session) throws MailboxException {
+        inMemoryMailboxManager.createMailbox(mailboxPath, session);
+        MessageManager messageManager = 
inMemoryMailboxManager.getMailbox(mailboxPath, session);
+        return new SimpleMailbox(mailboxPath, UID_VALIDITY, 
messageManager.getId());
+    }
+
+    @Override
+    public void clean() {
+
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/105b6da0/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
index 35736fe..6edc24f 100644
--- 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
+++ 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MessageIdManagerTestSystemProvider.java
@@ -26,6 +26,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.manager.MailboxManagerFixture;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.CombinationManagerTestSystem;
 import org.apache.james.mailbox.store.MessageIdManagerTestSystem;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 
@@ -42,6 +43,11 @@ public class MessageIdManagerTestSystemProvider {
         return new InMemoryMessageIdManagerTestSystem(createMailboxManager());
     }
 
+    public static CombinationManagerTestSystem createManagersTestingData() {
+        InMemoryMailboxManager mailboxManager = createMailboxManager();
+        return new InMemoryCombinationManagerTestSystem(mailboxManager, new 
InMemoryMessageIdManager(mailboxManager));
+    }
+
     private static InMemoryMailboxManager createMailboxManager() {
         MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
         GroupMembershipResolver groupMembershipResolver = new 
SimpleGroupMembershipResolver();

http://git-wip-us.apache.org/repos/asf/james-project/blob/105b6da0/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
new file mode 100644
index 0000000..2bfa4dd
--- /dev/null
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
@@ -0,0 +1,372 @@
+/****************************************************************
+ * 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.assertj.core.api.Assertions.assertThat;
+
+import java.io.ByteArrayInputStream;
+import java.util.Date;
+import java.util.List;
+
+import javax.mail.Flags;
+import javax.mail.Flags.Flag;
+
+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.MessageManager.FlagsUpdateMode;
+import org.apache.james.mailbox.MessageManager.MetaData.FetchGroup;
+import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.manager.MailboxManagerFixture;
+import org.apache.james.mailbox.mock.MockMailboxSession;
+import org.apache.james.mailbox.model.ComposedMessageId;
+import org.apache.james.mailbox.model.FetchGroupImpl;
+import org.apache.james.mailbox.model.MailboxQuery;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.model.MessageRange;
+import org.apache.james.mailbox.model.MessageResult;
+import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
+import org.apache.james.mailbox.model.SearchQuery;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableList;
+
+public abstract class AbstractCombinationManagerTest {
+    private static final Flags FLAGS = new Flags();
+    private static final byte[] MAIL_CONTENT = "Subject: 
test\r\n\r\ntestmail".getBytes();
+    private static final int DEFAULT_MAXIMUM_LIMIT = 256;
+
+    private MailboxManager mailboxManager;
+    private MessageIdManager messageIdManager;
+    private MessageManager messageManager1;
+    private MessageManager messageManager2;
+
+    private MailboxSession session;
+    private Mailbox mailbox1;
+    private Mailbox mailbox2;
+
+    private CombinationManagerTestSystem testingData;
+
+    public abstract CombinationManagerTestSystem createTestingData() throws 
Exception ;
+
+    @Before
+    public void setUp() throws Exception {
+        session = new MockMailboxSession(MailboxManagerFixture.USER);
+        testingData = createTestingData();
+
+        mailbox1 = 
testingData.createMailbox(MailboxManagerFixture.MAILBOX_PATH1, session);
+        mailbox2 = 
testingData.createMailbox(MailboxManagerFixture.MAILBOX_PATH2, session);
+
+        mailboxManager = testingData.getMailboxManager();
+        messageIdManager = testingData.getMessageIdManager();
+        messageManager1 = testingData.createMessageManager(mailbox1, session);
+        messageManager2 = testingData.createMessageManager(mailbox2, session);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        testingData.clean();
+    }
+
+    @Test
+    public void 
getMessageCountFromMessageManagerShouldReturnDataSetInMailboxesFromMessageIdManager()
 throws Exception {
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+        assertThat(messageManager2.getMessageCount(session)).isEqualTo(1);
+    }
+
+    @Test
+    public void 
searchFromMessageManagerShouldReturnMessagesUsingSetInMailboxesFromMessageIdManager()
 throws Exception {
+        SearchQuery query = new SearchQuery();
+        query.andCriteria(SearchQuery.all());
+
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+        assertThat(messageManager2.search(query, session)).hasSize(1);
+    }
+
+    @Test
+    public void 
searchFromMailboxManagerShouldReturnMessagesUsingSetInMailboxesFromMessageIdManagerWhenSearchByMailboxQueryWithMailboxPath()
 throws Exception {
+        SearchQuery query = new SearchQuery();
+        query.andCriteria(SearchQuery.all());
+
+        MailboxQuery mailboxQuery = MailboxQuery.builder()
+            .base(MailboxManagerFixture.MAILBOX_PATH1)
+            .build();
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+        assertThat(mailboxManager.search(mailboxQuery, session)).hasSize(1)
+            .extractingResultOf("getId")
+            .containsOnly(mailbox1.getMailboxId());
+    }
+
+    @Test
+    public void 
searchFromMailboxManagerShouldReturnMessagesUsingSetInMailboxesFromMessageIdManagerWhenSearchByMailboxQueryWithUsername()
 throws Exception {
+        SearchQuery query = new SearchQuery();
+        query.andCriteria(SearchQuery.all());
+
+        MailboxQuery mailboxQuery = MailboxQuery.builder()
+            .username(MailboxManagerFixture.USER)
+            .expression(String.valueOf(MailboxQuery.FREEWILDCARD))
+            .build();
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+        assertThat(mailboxManager.search(mailboxQuery, session)).hasSize(2)
+            .extractingResultOf("getId")
+            .containsOnly(mailbox1.getMailboxId(), mailbox2.getMailboxId());
+    }
+
+    @Test
+    public void 
searchFromMailboxManagerShouldReturnMessagesUsingSetInMailboxesFromMessageIdManagerWhenSearchByMultiMailboxes()
 throws Exception {
+        SearchQuery query = new SearchQuery();
+        query.andCriteria(SearchQuery.all());
+
+        MultimailboxesSearchQuery.Builder builder = 
MultimailboxesSearchQuery.from(query);
+        builder.inMailboxes(mailbox1.getMailboxId(), mailbox2.getMailboxId());
+        MultimailboxesSearchQuery multiMailboxesQuery = builder.build();
+
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+        assertThat(mailboxManager.search(multiMailboxesQuery, session, 
DEFAULT_MAXIMUM_LIMIT)).containsOnly(messageId);
+    }
+
+    @Test
+    public void 
setFlagsToDeleteThenExpungeFromMessageManagerThenGetMessageFromMessageIdManagerShouldNotReturnAnything()
 throws Exception {
+        Flags deleted = new Flags(Flag.DELETED);
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        messageManager1.setFlags(deleted, FlagsUpdateMode.ADD, 
MessageRange.all(), session);
+        messageManager1.expunge(MessageRange.all(), session);
+
+        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), 
FetchGroupImpl.MINIMAL, session)).isEmpty();
+    }
+
+    @Test
+    public void 
expungeFromMessageManagerShouldWorkWhenSetFlagsToDeletedWithMessageIdManager() 
throws Exception {
+        Flags deleted = new Flags(Flag.DELETED);
+        ComposedMessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, FLAGS);
+
+        messageIdManager.setFlags(deleted, FlagsUpdateMode.ADD, 
messageId.getMessageId(), ImmutableList.of(mailbox1.getMailboxId()), session);
+
+        assertThat(messageManager1.expunge(MessageRange.all(), 
session)).containsOnly(messageId.getUid());
+    }
+
+    @Test
+    public void 
expungeFromMessageManagerShouldWorkWhenSetInMailboxesAMessageWithDeletedFlag() 
throws Exception { //I can mark as DELETED + expunge an mail with setInMbxs
+        Flags deleted = new Flags(Flag.DELETED);
+        ComposedMessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, deleted);
+
+        messageIdManager.setInMailboxes(messageId.getMessageId(), 
ImmutableList.of(mailbox1.getMailboxId()), session);
+
+        assertThat(messageManager1.expunge(MessageRange.all(), 
session)).containsOnly(messageId.getUid());
+    }
+
+    @Test
+    public void 
getMessageFromMessageIdManagerShouldReturnMessageWhenAppendMessageFromMessageManager()
 throws Exception {
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        assertThat(messageIdManager.getMessages(ImmutableList.of(messageId), 
FetchGroupImpl.MINIMAL, session)).hasSize(1);
+    }
+
+    @Test
+    public void 
getMessageFromMessageIdManagerShouldReturnMessageWhenCopyMessageWithMailboxIdFromMailboxManager()
 throws Exception {
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        mailboxManager.copyMessages(MessageRange.all(), 
mailbox1.getMailboxId(), mailbox2.getMailboxId(), session);
+
+        List<MessageResult> listMessages = 
messageIdManager.getMessages(ImmutableList.of(messageId), 
FetchGroupImpl.MINIMAL, session);
+
+        assertThat(listMessages).hasSize(2)
+            .extractingResultOf("getMailboxId")
+            .containsOnly(mailbox1.getMailboxId(), mailbox2.getMailboxId());
+    }
+
+    @Test
+    public void 
getMessageFromMessageIdManagerShouldReturnMessageWhenCopyMessageWithMailboxPathFromMailboxManager()
 throws Exception {
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        mailboxManager.copyMessages(MessageRange.all(), 
MailboxManagerFixture.MAILBOX_PATH1, MailboxManagerFixture.MAILBOX_PATH2, 
session);
+
+        List<MessageResult> listMessages = 
messageIdManager.getMessages(ImmutableList.of(messageId), 
FetchGroupImpl.MINIMAL, session);
+
+        assertThat(listMessages).hasSize(2)
+            .extractingResultOf("getMailboxId")
+            .containsOnly(mailbox1.getMailboxId(), mailbox2.getMailboxId());
+    }
+
+    @Test
+    public void 
getMessageFromMessageIdManagerShouldReturnMessageWhenMoveMessageWithMailboxIdFromMailboxManager()
 throws Exception {
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        mailboxManager.moveMessages(MessageRange.all(), 
MailboxManagerFixture.MAILBOX_PATH1, MailboxManagerFixture.MAILBOX_PATH2, 
session);
+
+        List<MessageResult> listMessages = 
messageIdManager.getMessages(ImmutableList.of(messageId), 
FetchGroupImpl.MINIMAL, session);
+
+        assertThat(listMessages).hasSize(1)
+            .extractingResultOf("getMailboxId")
+            .containsOnly(mailbox2.getMailboxId());
+    }
+
+    @Test
+    public void 
getMessagesFromMessageManagerShouldReturnMessagesCreatedBySetInMailboxesFromMessageIdManager()
 throws Exception {
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+        assertThat(messageManager2.getMessages(MessageRange.all(), 
FetchGroupImpl.MINIMAL, session)).hasSize(1);
+    }
+
+    @Test
+    public void 
getMetadataFromMessageManagerShouldReturnRecentMessageWhenSetInMailboxesFromMessageIdManager()
 throws Exception {
+        Flags recent = new Flags(Flag.RECENT);
+        ComposedMessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, recent);
+
+        long mailbox2NextUid = messageManager2.getMetaData(true, session, 
FetchGroup.UNSEEN_COUNT).getUidNext().asLong();
+        messageIdManager.setInMailboxes(messageId.getMessageId(), 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+        List<MessageUid> messageUids = messageManager2.getMetaData(true, 
session, FetchGroup.UNSEEN_COUNT).getRecent();
+
+        assertThat(messageUids).hasSize(1);
+        
assertThat(messageUids.get(0).asLong()).isGreaterThanOrEqualTo(mailbox2NextUid);
+    }
+
+    @Test
+    public void 
getMetadataFromMessageManagerShouldReturnNumberOfRecentMessageWhenSetInMailboxesFromMessageIdManager()
 throws Exception {
+        Flags recent = new Flags(Flag.RECENT);
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
recent).getMessageId();
+
+        messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+        assertThat(messageManager2.getMetaData(true, session, 
FetchGroup.FIRST_UNSEEN).countRecent()).isEqualTo(1);
+    }
+
+    @Test
+    public void 
getMetadataFromMessageManagerShouldReturnUidNextWhenSetInMailboxesFromMessageIdManager()
 throws Exception {
+        Flags recent = new Flags(Flag.RECENT);
+        ComposedMessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, recent);
+
+        messageIdManager.setInMailboxes(messageId.getMessageId(), 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+        List<MessageResult> listMessages = 
messageIdManager.getMessages(ImmutableList.of(messageId.getMessageId()), 
FetchGroupImpl.MINIMAL, session);
+
+        long uid2 = FluentIterable.from(listMessages)
+            .filter(messageInMailbox2())
+            .get(0)
+            .getUid()
+            .asLong();
+
+        assertThat(messageManager2.getMetaData(true, session, 
FetchGroup.FIRST_UNSEEN).getUidNext().asLong())
+            .isGreaterThan(uid2);
+    }
+
+    @Test
+    public void 
getMetadataFromMessageManagerShouldReturnHighestModSeqWhenSetInMailboxesFromMessageIdManager()
 throws Exception {
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+        assertThat(messageManager2.getMetaData(true, session, 
FetchGroup.FIRST_UNSEEN).getHighestModSeq()).isNotNegative();
+    }
+
+    @Test
+    public void 
getMetadataFromMessageManagerShouldReturnMessageCountWhenSetInMailboxesFromMessageIdManager()
 throws Exception {
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+        assertThat(messageManager2.getMetaData(true, session, 
FetchGroup.FIRST_UNSEEN).getMessageCount()).isEqualTo(1);
+    }
+
+    @Test
+    public void 
getMetadataFromMessageManagerShouldReturnNumberOfUnseenMessageWhenSetInMailboxesFromMessageIdManager()
 throws Exception {
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+        assertThat(messageManager2.getMetaData(true, session, 
FetchGroup.UNSEEN_COUNT).getUnseenCount()).isEqualTo(1);
+    }
+
+    @Test
+    public void 
getMetadataFromMessageManagerShouldReturnFirstUnseenMessageWhenSetInMailboxesFromMessageIdManager()
 throws Exception {
+        ComposedMessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, FLAGS);
+
+        messageIdManager.setInMailboxes(messageId.getMessageId(), 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+        assertThat(messageManager2.getMetaData(true, session, 
FetchGroup.FIRST_UNSEEN).getFirstUnseen()).isEqualTo(messageId.getUid());
+    }
+
+    @Test
+    public void 
getMetadataFromMessageManagerShouldReturnNumberOfUnseenMessageWhenSetFlagsFromMessageIdManager()
 throws Exception {
+        Flags newFlag = new Flags(Flag.RECENT);
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        messageIdManager.setFlags(newFlag, FlagsUpdateMode.ADD, messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+        assertThat(messageManager1.getMetaData(true, session, 
FetchGroup.UNSEEN_COUNT).getUnseenCount()).isEqualTo(1);
+    }
+
+    @Test
+    public void 
getMetadataFromMessageManagerShouldReturnFirstUnseenMessageWhenSetFlagsFromMessageIdManager()
 throws Exception {
+        Flags newFlag = new Flags(Flag.USER);
+        ComposedMessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, FLAGS);
+
+        messageIdManager.setFlags(newFlag, FlagsUpdateMode.ADD, 
messageId.getMessageId(), ImmutableList.of(mailbox1.getMailboxId(), 
mailbox2.getMailboxId()), session);
+
+        assertThat(messageManager1.getMetaData(true, session, 
FetchGroup.FIRST_UNSEEN).getFirstUnseen()).isEqualTo(messageId.getUid());
+    }
+
+    @Test
+    public void setInMailboxesFromMessageIdManagerShouldMoveMessage() throws 
Exception {
+        MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
FLAGS).getMessageId();
+
+        messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox2.getMailboxId()), session);
+
+        assertThat(messageManager1.getMessages(MessageRange.all(), 
FetchGroupImpl.MINIMAL, session)).isEmpty();
+        assertThat(messageManager2.getMessages(MessageRange.all(), 
FetchGroupImpl.MINIMAL, session))
+            .hasSize(1)
+            .extractingResultOf("getMessageId").containsOnly(messageId);
+    }
+
+    private Predicate<MessageResult> messageInMailbox2() {
+        return new Predicate<MessageResult>() {
+            @Override
+            public boolean apply(MessageResult input) {
+                return input.getMailboxId().equals(mailbox2.getMailboxId());
+            }
+        };
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/105b6da0/mailbox/store/src/test/java/org/apache/james/mailbox/store/CombinationManagerTestSystem.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/CombinationManagerTestSystem.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/CombinationManagerTestSystem.java
new file mode 100644
index 0000000..97d0f0f
--- /dev/null
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/CombinationManagerTestSystem.java
@@ -0,0 +1,52 @@
+/****************************************************************
+ * 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 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.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
+
+public abstract class CombinationManagerTestSystem {
+    private final MailboxManager mailboxManager;
+    private final MessageIdManager messageIdManager;
+
+    public CombinationManagerTestSystem(MailboxManager mailboxManager, 
MessageIdManager messageIdManager) {
+        this.messageIdManager = messageIdManager;
+        this.mailboxManager = mailboxManager;
+    }
+
+    public MailboxManager getMailboxManager() {
+        return mailboxManager;
+    }
+
+    public MessageIdManager getMessageIdManager() {
+        return messageIdManager;
+    }
+
+    public abstract Mailbox createMailbox(MailboxPath mailboxPath, 
MailboxSession session) throws MailboxException;
+
+    public abstract MessageManager createMessageManager(Mailbox mailbox, 
MailboxSession session) throws MailboxException;
+
+    public abstract void clean();
+}


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

Reply via email to