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 <matth...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org