Repository: james-project
Updated Branches:
  refs/heads/master 44728d3fc -> 2d7b78a05


JAMES-1947 Add testing for applicable flag on MessageMapper


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

Branch: refs/heads/master
Commit: c7f3e371db3fba28c292a8d011e59835895dabf2
Parents: f7321c9
Author: Quynh Nguyen <[email protected]>
Authored: Thu Feb 23 16:01:35 2017 +0700
Committer: benwa <[email protected]>
Committed: Tue Feb 28 10:37:10 2017 +0700

----------------------------------------------------------------------
 .../store/mail/model/MapperProvider.java        |   3 +-
 .../store/mail/model/MessageMapperTest.java     | 176 +++++++++++++++++++
 2 files changed, 178 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c7f3e371/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
index e8fb38d..d33d4f8 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
@@ -39,7 +39,8 @@ public interface MapperProvider {
         ANNOTATION,
         MOVE,
         UNIQUE_MESSAGE_ID,
-        THREAD_SAFE_FLAGS_UPDATE
+        THREAD_SAFE_FLAGS_UPDATE,
+        INCREMENTAL_APPLICABLE_FLAGS
     }
 
     List<Capabilities> getSupportedCapabilities();

http://git-wip-us.apache.org/repos/asf/james-project/blob/c7f3e371/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
index 61d1d5d..8e8e494 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
@@ -31,6 +31,7 @@ import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 import javax.mail.Flags;
+import javax.mail.Flags.Flag;
 import javax.mail.util.SharedByteArrayInputStream;
 
 import org.apache.james.mailbox.FlagsBuilder;
@@ -46,6 +47,7 @@ import org.apache.james.mailbox.store.FlagsUpdateCalculator;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
+import org.apache.james.mailbox.store.mail.model.MapperProvider.Capabilities;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
@@ -70,6 +72,8 @@ public class MessageMapperTest<T extends MapperProvider> {
     public static final int UID_VALIDITY = 42;
     public static final String USER_FLAG = "userFlag";
 
+    public static final String CUSTOMS_USER_FLAGS_VALUE = "CustomsFlags";
+
     private IProducer<T> producer;
     private MapperProvider mapperProvider;
     private MessageMapper messageMapper;
@@ -820,6 +824,178 @@ public class MessageMapperTest<T extends MapperProvider> {
         assertThat(retrieveMessageFromStorage(message)).hasFlags(new 
Flags(USER_FLAG));
     }
 
+    @ContractTest
+    public void getApplicableFlagShouldUnionAllMessageFlags() throws Exception 
{
+        message1.setFlags(new Flags(Flag.ANSWERED));
+        message2.setFlags(new Flags(Flag.DELETED));
+
+        saveMessages();
+
+        assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
+            .isEqualTo(new FlagsBuilder()
+                .add(Flag.ANSWERED, Flag.DELETED)
+                .build());
+    }
+
+    @ContractTest
+    public void 
getApplicableFlagShouldUnionAllMessageFlagsExceptRecentAndUser() throws 
Exception {
+        message1.setFlags(new Flags(Flag.ANSWERED));
+        message2.setFlags(new Flags(Flag.DELETED));
+
+        Flags recentAndUser = new Flags(Flag.RECENT);
+        recentAndUser.add(Flag.USER);
+        recentAndUser.add(CUSTOMS_USER_FLAGS_VALUE);
+        message3.setFlags(recentAndUser);
+
+        saveMessages();
+
+        assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
+            .isEqualTo(new FlagsBuilder()
+                .add(Flag.ANSWERED, Flag.DELETED)
+                .add(CUSTOMS_USER_FLAGS_VALUE)
+                .build());
+    }
+
+    @ContractTest
+    public void 
getApplicableFlagShouldHaveEffectWhenUpdateFlagsByAddingThenComputingApplicableFlagsFromCurrentMailboxState()
 throws Exception {
+        message1.setFlags(new Flags(Flag.ANSWERED));
+        message2.setFlags(new Flags(Flag.DELETED));
+        FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new 
Flags(Flags.Flag.SEEN), FlagsUpdateMode.ADD);
+
+        saveMessages();
+        messageMapper.updateFlags(benwaInboxMailbox, newFlags, 
message1.getUid().toRange());
+
+        assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
+            .isEqualTo(new FlagsBuilder()
+                .add(Flag.ANSWERED, Flag.DELETED, Flag.SEEN)
+                .build());
+    }
+
+    @ContractTest
+    public void 
getApplicableFlagShouldHaveNotEffectWhenUpdateFlagsByReplaceThenIncrementalApplicableFlags()
 throws Exception {
+        
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(Capabilities.INCREMENTAL_APPLICABLE_FLAGS));
+        message1.setFlags(new Flags(Flag.ANSWERED));
+        message2.setFlags(new Flags(Flag.DELETED));
+        FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new 
Flags(Flags.Flag.SEEN), FlagsUpdateMode.REPLACE);
+
+        saveMessages();
+        messageMapper.updateFlags(benwaInboxMailbox, newFlags, 
message1.getUid().toRange());
+
+        assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
+            .isEqualTo(new FlagsBuilder()
+                .add(Flag.ANSWERED, Flag.DELETED, Flag.SEEN)
+                .build());
+    }
+
+    @ContractTest
+    public void 
getApplicableFlagShouldHaveEffectWhenUpdateFlagsByReplaceThenComputingApplicableFlagsFromCurrentMailboxState()
 throws Exception {
+        
Assume.assumeFalse(mapperProvider.getSupportedCapabilities().contains(Capabilities.INCREMENTAL_APPLICABLE_FLAGS));
+        message1.setFlags(new Flags(Flag.ANSWERED));
+        message2.setFlags(new Flags(Flag.DELETED));
+        FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new 
Flags(Flags.Flag.SEEN), FlagsUpdateMode.REPLACE);
+
+        saveMessages();
+        messageMapper.updateFlags(benwaInboxMailbox, newFlags, 
message1.getUid().toRange());
+
+        assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
+            .isEqualTo(new FlagsBuilder()
+                .add(Flag.DELETED, Flag.SEEN)
+                .build());
+    }
+
+    @ContractTest
+    public void 
getApplicableFlagShouldHaveNotEffectWhenUpdateFlagsByRemoveThenIncrementalApplicableFlags()
 throws Exception {
+        
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(Capabilities.INCREMENTAL_APPLICABLE_FLAGS));
+        message1.setFlags(new FlagsBuilder().add(Flag.ANSWERED, 
Flag.SEEN).build());
+        message2.setFlags(new Flags(Flag.DELETED));
+        FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new 
Flags(Flags.Flag.SEEN), FlagsUpdateMode.REMOVE);
+
+        saveMessages();
+        messageMapper.updateFlags(benwaInboxMailbox, newFlags, 
message1.getUid().toRange());
+
+        assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
+            .isEqualTo(new FlagsBuilder()
+                .add(Flag.ANSWERED, Flag.DELETED, Flag.SEEN)
+                .build());
+    }
+
+    @ContractTest
+    public void 
getApplicableFlagShouldHaveEffectWhenUpdateFlagsByRemoveThenComputingApplicableFlagsFromCurrentMailboxState()
 throws Exception {
+        
Assume.assumeFalse(mapperProvider.getSupportedCapabilities().contains(Capabilities.INCREMENTAL_APPLICABLE_FLAGS));
+        message1.setFlags(new FlagsBuilder().add(Flag.ANSWERED, 
Flag.SEEN).build());
+        message2.setFlags(new Flags(Flag.DELETED));
+        FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new 
Flags(Flags.Flag.SEEN), FlagsUpdateMode.REMOVE);
+
+        saveMessages();
+        messageMapper.updateFlags(benwaInboxMailbox, newFlags, 
message1.getUid().toRange());
+
+        assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
+            .isEqualTo(new FlagsBuilder()
+                .add(Flag.ANSWERED, Flag.DELETED)
+                .build());
+    }
+
+    @ContractTest
+    public void 
getApplicableFlagShouldHaveEffectWhenUnsetMessageFlagThenComputingApplicableFlagsFromCurrentMailboxState()
 throws Exception {
+        
Assume.assumeFalse(mapperProvider.getSupportedCapabilities().contains(Capabilities.INCREMENTAL_APPLICABLE_FLAGS));
+        message1.setFlags(new FlagsBuilder().add(Flag.ANSWERED, 
Flag.SEEN).build());
+        message2.setFlags(new Flags(Flag.DELETED));
+        FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new 
Flags(), FlagsUpdateMode.REPLACE);
+
+        saveMessages();
+        messageMapper.updateFlags(benwaInboxMailbox, newFlags, 
message1.getUid().toRange());
+
+        assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
+            .isEqualTo(new FlagsBuilder()
+                .add(Flag.DELETED)
+                .build());
+    }
+
+    @ContractTest
+    public void 
getApplicableFlagShouldHaveNotEffectWhenUnsetMessageFlagThenIncrementalApplicableFlags()
 throws Exception {
+        
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.THREAD_SAFE_FLAGS_UPDATE));
+        message1.setFlags(new Flags(Flag.ANSWERED));
+        message2.setFlags(new Flags(Flag.DELETED));
+        FlagsUpdateCalculator newFlags = new FlagsUpdateCalculator(new 
Flags(), FlagsUpdateMode.REPLACE);
+
+        saveMessages();
+        messageMapper.updateFlags(benwaInboxMailbox, newFlags, 
message1.getUid().toRange());
+
+        assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
+            .isEqualTo(new FlagsBuilder()
+                .add(Flag.ANSWERED, Flag.DELETED)
+                .build());
+    }
+
+
+    @ContractTest
+    public void 
getApplicableFlagShouldHaveNotEffectWhenDeleteMessageThenIncrementalApplicableFlags()
 throws Exception {
+        
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(Capabilities.INCREMENTAL_APPLICABLE_FLAGS));
+        message1.setFlags(new Flags(Flag.ANSWERED));
+        message2.setFlags(new Flags(Flag.DELETED));
+
+        saveMessages();
+        messageMapper.delete(benwaInboxMailbox, message1);
+
+        assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
+            .isEqualTo(new FlagsBuilder()
+                .add(Flag.ANSWERED, Flag.DELETED)
+                .build());
+    }
+
+    @ContractTest
+    public void 
getApplicableFlagShouldHaveEffectWhenDeleteMessageThenComputingApplicableFlagsFromCurrentMailboxState()
 throws Exception {
+        
Assume.assumeFalse(mapperProvider.getSupportedCapabilities().contains(Capabilities.INCREMENTAL_APPLICABLE_FLAGS));
+        message1.setFlags(new Flags(Flag.ANSWERED));
+        message2.setFlags(new Flags(Flag.DELETED));
+
+        saveMessages();
+        messageMapper.delete(benwaInboxMailbox, message1);
+
+        assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
+            .isEqualTo(new Flags(Flag.DELETED));
+    }
+
     private Map<MessageUid, MessageMetaData> 
markThenPerformExpunge(MessageRange range) throws MailboxException {
         messageMapper.updateFlags(benwaInboxMailbox, new 
FlagsUpdateCalculator(new Flags(Flags.Flag.DELETED), FlagsUpdateMode.REPLACE), 
MessageRange.one(message1.getUid()));
         messageMapper.updateFlags(benwaInboxMailbox, new 
FlagsUpdateCalculator(new Flags(Flags.Flag.DELETED), FlagsUpdateMode.REPLACE), 
MessageRange.one(message4.getUid()));


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

Reply via email to