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 bt...@apache.org on 2020/07/03 02:04:09 UTC

[james-project] 14/15: JAMES-3265 Fix CassandraMessageMapper::deleteMessages mailbox counters handling

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 72e489a56a899a26a84f8429ab373670dbf7612c
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Jul 2 13:27:31 2020 +0700

    JAMES-3265 Fix CassandraMessageMapper::deleteMessages mailbox counters handling
    
    This code path side effect was untested
---
 .../cassandra/mail/CassandraIndexTableHandler.java     |  6 +++---
 .../mailbox/store/mail/model/MessageMapperTest.java    | 18 ++++++++++++++++++
 2 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandler.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandler.java
index 47fd1eb..c98112e 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandler.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandler.java
@@ -159,15 +159,15 @@ public class CassandraIndexTableHandler {
     }
 
     private Mono<Void> decrementCountersOnDelete(CassandraId mailboxId, Collection<MessageMetaData> metaData) {
-        long seenCount = metaData.stream()
+        long unseenCount = metaData.stream()
             .map(MessageMetaData::getFlags)
-            .filter(flags -> flags.contains(Flags.Flag.SEEN))
+            .filter(flags -> !flags.contains(Flags.Flag.SEEN))
             .count();
 
         return mailboxCounterDAO.remove(MailboxCounters.builder()
             .mailboxId(mailboxId)
             .count(metaData.size())
-            .unseen(seenCount)
+            .unseen(unseenCount)
             .build());
     }
 
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 1d44644..0d396a2 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
@@ -43,6 +43,7 @@ import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.ModSeq;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.Mailbox;
+import org.apache.james.mailbox.model.MailboxCounters;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageMetaData;
@@ -378,6 +379,23 @@ public abstract class MessageMapperTest {
     }
 
     @Test
+    void deleteMessagesShouldDecrementUnseenToOneWhenDeletingTwoUnseenMessagesOutOfThree() throws MailboxException {
+        saveMessages();
+        messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new Flags(Flag.SEEN), FlagsUpdateMode.REPLACE), MessageRange.one(message2.getUid()));
+        messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new Flags(Flag.SEEN), FlagsUpdateMode.REPLACE), MessageRange.one(message3.getUid()));
+        messageMapper.updateFlags(benwaInboxMailbox, new FlagsUpdateCalculator(new Flags(Flag.SEEN), FlagsUpdateMode.REPLACE), MessageRange.one(message4.getUid()));
+
+        messageMapper.deleteMessages(benwaInboxMailbox, ImmutableList.of(message1.getUid(), message2.getUid(), message3.getUid()));
+
+        assertThat(messageMapper.getMailboxCounters(benwaInboxMailbox))
+            .isEqualTo(MailboxCounters.builder()
+                .mailboxId(benwaInboxMailbox.getMailboxId())
+                .count(2)
+                .unseen(1)
+                .build());
+    }
+
+    @Test
     void addShouldUpdateRecentWhenNeeded() throws MailboxException {
         message1.setFlags(new Flags(Flags.Flag.RECENT));
         messageMapper.add(benwaInboxMailbox, message1);


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