@Test void updateIndexOnFlagsUpdateShouldUpdateLastUnseenWhenSetToSeen() { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags()); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); testee.updateIndexOnFlagsUpdate(MAILBOX_ID, UpdatedFlags.builder() .uid(MESSAGE_UID) .newFlags(new Flags(Flags.Flag.SEEN)) .oldFlags(new Flags()) .modSeq(MODSEQ) .build()).join(); Optional<MessageUid> actual = firstUnseenDAO.retrieveFirstUnread(MAILBOX_ID).join(); assertThat(actual.isPresent()).isFalse(); }
@Test void updateIndexOnFlagsUpdateShouldNotUpdateLastUnseenWhenKeepSeen() { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags(Flags.Flag.SEEN)); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); testee.updateIndexOnFlagsUpdate(MAILBOX_ID, UpdatedFlags.builder() .uid(MESSAGE_UID) .newFlags(new Flags(Flags.Flag.SEEN)) .oldFlags(new Flags(Flags.Flag.SEEN)) .modSeq(MODSEQ) .build()).join(); Optional<MessageUid> actual = firstUnseenDAO.retrieveFirstUnread(MAILBOX_ID).join(); assertThat(actual.isPresent()).isFalse(); }
public UpdatedFlags retrieveUpdatedFlags() { return UpdatedFlags.builder() .uid(MessageUid.of(uid)) .modSeq(modseq) .oldFlags(oldFlags.getFlags()) .newFlags(newFlags.getFlags()) .build(); }
@Test public void flagsEventsShouldBeReported() { MailboxListener.MailboxEvent event = eventFactory.flagsUpdated(session, Lists.newArrayList(UID), MAILBOX, Lists.newArrayList(UpdatedFlags.builder() .uid(UID) .modSeq(MOD_SEQ) .oldFlags(new Flags()) .newFlags(NEW_FLAGS) .build())); mailboxRegistration.event(event); assertThat(mailboxRegistration.getImpactingEvents(UID)).containsExactly(new FlagsMessageEvent(INBOX, UID, NEW_FLAGS)); }
@Test public void isModifiedToSetShouldReturnTrueWhenFlagOnlyInNewFlag() { UpdatedFlags updatedFlags = UpdatedFlags.builder() .newFlags(new Flags(Flags.Flag.RECENT)) .oldFlags(new Flags()) .uid(UID) .modSeq(MOD_SEQ) .build(); assertThat(updatedFlags.isModifiedToSet(Flags.Flag.RECENT)).isTrue(); }
@Test public void isUnchangedShouldReturnFalseWhenFlagOnlyInNewFlag() { UpdatedFlags updatedFlags = UpdatedFlags.builder() .newFlags(new Flags(Flags.Flag.RECENT)) .oldFlags(new Flags()) .uid(UID) .modSeq(MOD_SEQ) .build(); assertThat(updatedFlags.isUnchanged(Flags.Flag.RECENT)).isFalse(); }
@Test public void isUnchangedShouldReturnTrueWhenFlagIsOnBoth() { UpdatedFlags updatedFlags = UpdatedFlags.builder() .newFlags(new Flags(Flags.Flag.RECENT)) .oldFlags(new Flags(Flags.Flag.RECENT)) .uid(UID) .modSeq(MOD_SEQ) .build(); assertThat(updatedFlags.isUnchanged(Flags.Flag.RECENT)).isTrue(); }
@Test public void isModifiedToUnsetShouldReturnFalseWhenFlagIsOnBoth() { UpdatedFlags updatedFlags = UpdatedFlags.builder() .newFlags(new Flags(Flags.Flag.RECENT)) .oldFlags(new Flags(Flags.Flag.RECENT)) .uid(UID) .modSeq(MOD_SEQ) .build(); assertThat(updatedFlags.isModifiedToUnset(Flags.Flag.RECENT)).isFalse(); }
@Test public void isUnchangedShouldReturnFalseWhenFlagOnlyInOldFlag() { UpdatedFlags updatedFlags = UpdatedFlags.builder() .newFlags(new Flags()) .oldFlags(new Flags(Flags.Flag.RECENT)) .uid(UID) .modSeq(MOD_SEQ) .build(); assertThat(updatedFlags.isUnchanged(Flags.Flag.RECENT)).isFalse(); }
@Test public void isUnchangedShouldReturnTrueWhenFlagIsOnNone() { UpdatedFlags updatedFlags = UpdatedFlags.builder() .newFlags(new Flags()) .oldFlags(new Flags()) .uid(UID) .modSeq(MOD_SEQ) .build(); assertThat(updatedFlags.isUnchanged(Flags.Flag.RECENT)).isTrue(); }
@Test public void isModifiedToSetShouldReturnFalseWhenFlagIsOnNone() { UpdatedFlags updatedFlags = UpdatedFlags.builder() .newFlags(new Flags()) .oldFlags(new Flags()) .uid(UID) .modSeq(MOD_SEQ) .build(); assertThat(updatedFlags.isModifiedToSet(Flags.Flag.RECENT)).isFalse(); }
@Test public void isModifiedToSetShouldReturnFalseWhenFlagOnlyInOldFlag() { UpdatedFlags updatedFlags = UpdatedFlags.builder() .newFlags(new Flags()) .oldFlags(new Flags(Flags.Flag.RECENT)) .uid(UID) .modSeq(MOD_SEQ) .build(); assertThat(updatedFlags.isModifiedToSet(Flags.Flag.RECENT)).isFalse(); }
@Test public void isModifiedToUnsetShouldReturnFalseWhenFlagOnlyInNewFlag() { UpdatedFlags updatedFlags = UpdatedFlags.builder() .newFlags(new Flags(Flags.Flag.RECENT)) .oldFlags(new Flags()) .uid(UID) .modSeq(MOD_SEQ) .build(); assertThat(updatedFlags.isModifiedToUnset(Flags.Flag.RECENT)).isFalse(); }
@Test public void isModifiedToUnsetShouldReturnTrueWhenFlagOnlyInOldFlag() { UpdatedFlags updatedFlags = UpdatedFlags.builder() .newFlags(new Flags()) .oldFlags(new Flags(Flags.Flag.RECENT)) .uid(UID) .modSeq(MOD_SEQ) .build(); assertThat(updatedFlags.isModifiedToUnset(Flags.Flag.RECENT)).isTrue(); }
@Test public void isModifiedToSetShouldReturnFalseWhenFlagIsOnBoth() { UpdatedFlags updatedFlags = UpdatedFlags.builder() .newFlags(new Flags(Flags.Flag.RECENT)) .oldFlags(new Flags(Flags.Flag.RECENT)) .uid(UID) .modSeq(MOD_SEQ) .build(); assertThat(updatedFlags.isModifiedToSet(Flags.Flag.RECENT)).isFalse(); }
@Test public void isModifiedToUnsetShouldReturnFalseWhenFlagIsOnNone() { UpdatedFlags updatedFlags = UpdatedFlags.builder() .newFlags(new Flags()) .oldFlags(new Flags()) .uid(UID) .modSeq(MOD_SEQ) .build(); assertThat(updatedFlags.isModifiedToSet(Flags.Flag.RECENT)).isFalse(); }
@Test void flagsUpdatedShouldNotBeNoopWhenNotEmpty() { MailboxListener.FlagsUpdated flagsUpdated = new MailboxListener.FlagsUpdated(SESSION_ID, BOB, PATH, MAILBOX_ID, ImmutableList.of(UpdatedFlags.builder() .uid(UID) .modSeq(45) .newFlags(new Flags()) .oldFlags(new Flags(Flags.Flag.ANSWERED)) .build()), Event.EventId.random()); assertThat(flagsUpdated.isNoop()).isFalse(); }
@Test public void testShouldSetUidWhenSystemFlagChange() { MessageUid uid = MessageUid.of(900); FakeMailboxListenerFlagsUpdate update = new FakeMailboxListenerFlagsUpdate(OTHER_MAILBOX_SESSION, ImmutableList.of(uid), ImmutableList.of(UpdatedFlags.builder() .uid(uid) .modSeq(-1) .oldFlags(new Flags()) .newFlags(new Flags(Flags.Flag.ANSWERED)) .build()), MAILBOX_PATH); testee.event(update); assertThat(testee.flagUpdateUids().iterator()).containsExactly(uid); }
@Test public void testShouldNotSetUidWhenOnlyRecentFlagUpdated() { FakeMailboxListenerFlagsUpdate update = new FakeMailboxListenerFlagsUpdate(MAILBOX_SESSION, ImmutableList.of(MessageUid.of(886)), ImmutableList.of(UpdatedFlags.builder() .uid(MessageUid.of(886)) .modSeq(-1) .oldFlags(new Flags()) .newFlags(new Flags(Flags.Flag.RECENT)) .build()), MAILBOX_PATH); testee.event(update); assertThat(testee.flagUpdateUids().iterator()).isEmpty(); } }
@Test public void testShouldNotSetUidWhenNoSystemFlagChange() { FakeMailboxListenerFlagsUpdate update = new FakeMailboxListenerFlagsUpdate(MAILBOX_SESSION, ImmutableList.of(MessageUid.of(90L)), ImmutableList.of(UpdatedFlags.builder() .uid(MessageUid.of(90)) .modSeq(-1) .oldFlags(new Flags()) .newFlags(new Flags()) .build()), MAILBOX_PATH); testee.event(update); assertThat(testee.flagUpdateUids()).isEmpty(); }