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