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/23 07:53:16 UTC

[james-project] 05/18: JAMES-3177 cover updateApplicableFlags with tests

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 cbd08bed6520e68225a50c7656a240dc7570060d
Author: Matthieu Baechler <ma...@apache.org>
AuthorDate: Tue Jun 16 16:34:18 2020 +0200

    JAMES-3177 cover updateApplicableFlags with tests
---
 .../processor/base/SelectedMailboxImplTest.java    | 137 +++++++++++++++++++++
 1 file changed, 137 insertions(+)

diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
index de8b3ef..f3bc59c 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
@@ -19,6 +19,10 @@
 
 package org.apache.james.imap.processor.base;
 
+import static javax.mail.Flags.Flag.ANSWERED;
+import static javax.mail.Flags.Flag.FLAGGED;
+import static javax.mail.Flags.Flag.RECENT;
+import static javax.mail.Flags.Flag.SEEN;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
@@ -31,12 +35,15 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Consumer;
 import java.util.stream.Stream;
 
 import javax.mail.Flags;
 
 import org.apache.james.core.Username;
 import org.apache.james.imap.encode.FakeImapSession;
+import org.apache.james.imap.processor.base.SelectedMailboxImpl.ApplicableFlags;
+import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MailboxSessionUtil;
@@ -65,6 +72,8 @@ import org.mockito.stubbing.Answer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.ImmutableList;
+
 import reactor.core.publisher.Mono;
 
 
@@ -75,6 +84,8 @@ class SelectedMailboxImplTest {
     private static final ModSeq MOD_SEQ = ModSeq.of(12);
     private static final int SIZE = 38;
     private static final String CUSTOM_FLAG = "custom";
+    private static final Username BOB = Username.of("bob");
+    private static final MailboxSession.SessionId SESSION_ID = MailboxSession.SessionId.of(2);
 
     private ExecutorService executorService;
     private MailboxManager mailboxManager;
@@ -230,4 +241,130 @@ class SelectedMailboxImplTest {
                 .build())
             .build();
     }
+
+    @Test
+    void updateApplicableFlagsShouldNotUpdateWhenEmptyFlagsUpdate() {
+        ApplicableFlags applicableFlags = ApplicableFlags.from(flagsBuilder().add(SEEN).build());
+        MailboxListener.FlagsUpdated flagsUpdated = flagsUpdated(updatedFlags().noOldFlag().noNewFlag());
+        ApplicableFlags actual = SelectedMailboxImpl.updateApplicableFlags(applicableFlags, flagsUpdated);
+        assertThat(actual).satisfies(ap -> {
+            assertThat(ap.updated()).isFalse();
+            assertThat(ap.flags()).isEqualTo(flagsBuilder().add(SEEN).build());
+        });
+    }
+
+    @Test
+    void updateApplicableFlagsShouldNotUpdateWhenNewFlag() {
+        ApplicableFlags applicableFlags = ApplicableFlags.from(flagsBuilder().add(SEEN).build());
+        MailboxListener.FlagsUpdated flagsUpdated =
+            flagsUpdated(updatedFlags().noOldFlag().newFlags(flags -> flags.add(ANSWERED)));
+        ApplicableFlags actual = SelectedMailboxImpl.updateApplicableFlags(applicableFlags, flagsUpdated);
+        assertThat(actual).satisfies(ap -> {
+            assertThat(ap.updated()).isFalse();
+            assertThat(ap.flags()).isEqualTo(flagsBuilder().add(SEEN).add(ANSWERED).build());
+        });
+    }
+
+    @Test
+    void updateApplicableFlagsShouldNotUpdateWhenSeveralUpdatedFlagsNewFlag() {
+        ApplicableFlags applicableFlags = ApplicableFlags.from(flagsBuilder().add(SEEN).build());
+        MailboxListener.FlagsUpdated flagsUpdated =
+            flagsUpdated(
+                updatedFlags().noOldFlag().newFlags(flags -> flags.add(ANSWERED)),
+                updatedFlags().noOldFlag().newFlags(flags -> flags.add(FLAGGED)));
+        ApplicableFlags actual = SelectedMailboxImpl.updateApplicableFlags(applicableFlags, flagsUpdated);
+        assertThat(actual).satisfies(ap -> {
+            assertThat(ap.updated()).isFalse();
+            assertThat(ap.flags()).isEqualTo(flagsBuilder().add(SEEN).add(ANSWERED).add(FLAGGED).build());
+        });
+    }
+
+    @Test
+    void updateApplicableFlagsShouldNotUpdateWhenOldFlagRemoved() {
+        ApplicableFlags applicableFlags = ApplicableFlags.from(flagsBuilder().add(SEEN).build());
+        MailboxListener.FlagsUpdated flagsUpdated =
+            flagsUpdated(updatedFlags().oldFlags(flags -> flags.add(SEEN)).noNewFlag());
+        ApplicableFlags actual = SelectedMailboxImpl.updateApplicableFlags(applicableFlags, flagsUpdated);
+        assertThat(actual).satisfies(ap -> {
+            assertThat(ap.updated()).isFalse();
+            assertThat(ap.flags()).isEqualTo(flagsBuilder().add(SEEN).build());
+        });
+    }
+
+    @Test
+    void updateApplicableFlagsShouldNotIncludeRecent() {
+        ApplicableFlags applicableFlags = ApplicableFlags.from(flagsBuilder().add(SEEN).build());
+        MailboxListener.FlagsUpdated flagsUpdated =
+            flagsUpdated(updatedFlags().noOldFlag().newFlags(flags -> flags.add(RECENT)));
+        ApplicableFlags actual = SelectedMailboxImpl.updateApplicableFlags(applicableFlags, flagsUpdated);
+        assertThat(actual).satisfies(ap -> {
+            assertThat(ap.updated()).isFalse();
+            assertThat(ap.flags()).isEqualTo(flagsBuilder().add(SEEN).build());
+        });
+    }
+
+    @Test
+    void updateApplicableFlagsShouldNotUpdateWhenNewUserFlag() {
+        ApplicableFlags applicableFlags = ApplicableFlags.from(flagsBuilder().add(SEEN).build());
+        MailboxListener.FlagsUpdated flagsUpdated =
+            flagsUpdated(updatedFlags().noOldFlag().newFlags(flags -> flags.add("Foo")));
+        ApplicableFlags actual = SelectedMailboxImpl.updateApplicableFlags(applicableFlags, flagsUpdated);
+        assertThat(actual).satisfies(ap -> {
+            assertThat(ap.updated()).isTrue();
+            assertThat(ap.flags()).isEqualTo(flagsBuilder().add(SEEN).add("Foo").build());
+        });
+    }
+
+    private static FlagsBuilder flagsBuilder() {
+        return FlagsBuilder.builder();
+    }
+
+    private MailboxListener.FlagsUpdated flagsUpdated(UpdatedFlags... updatedFlags) {
+        return new MailboxListener.FlagsUpdated(
+            SESSION_ID,
+            BOB,
+            mailboxPath,
+            mailboxId,
+            ImmutableList.copyOf(updatedFlags),
+            Event.EventId.random());
+    }
+
+    interface RequireOldFlags {
+        RequireNewFlags oldFlags(Flags flags);
+
+        default RequireNewFlags noOldFlag() {
+            return oldFlags(new Flags());
+        }
+
+        default RequireNewFlags oldFlags(Consumer<FlagsBuilder> builder) {
+            FlagsBuilder internalBuilder = FlagsBuilder.builder();
+            builder.accept(internalBuilder);
+            return oldFlags(internalBuilder.build());
+        }
+    }
+
+    interface RequireNewFlags {
+        UpdatedFlags newFlags(Flags flags);
+
+        default UpdatedFlags noNewFlag() {
+            return newFlags(new Flags());
+        }
+
+        default UpdatedFlags newFlags(Consumer<FlagsBuilder> builder) {
+            FlagsBuilder internalBuilder = FlagsBuilder.builder();
+            builder.accept(internalBuilder);
+            return newFlags(internalBuilder.build());
+        }
+    }
+
+    static RequireOldFlags updatedFlags() {
+        return oldFlags -> newFlags ->
+            UpdatedFlags
+                .builder()
+                .modSeq(MOD_SEQ)
+                .uid(EMITTED_EVENT_UID)
+                .oldFlags(oldFlags)
+                .newFlags(newFlags)
+                .build();
+    }
 }


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