public ComposedMessageIdWithMetaData getMetadata() { return new ComposedMessageIdWithMetaData(new ComposedMessageId(mailboxId, messageId, messageUid), flags, modSeq); }
@Test void updateIndexOnDeleteShouldDecrementMessageCount() throws Exception { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags()); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); testee.updateIndexOnDelete(new ComposedMessageIdWithMetaData( new ComposedMessageId(MAILBOX_ID, CASSANDRA_MESSAGE_ID, MESSAGE_UID), new Flags(Flags.Flag.RECENT), MODSEQ), MAILBOX_ID).join(); Optional<Long> actual = mailboxCounterDAO.countMessagesInMailbox(mailbox).join(); assertThat(actual.isPresent()).isTrue(); assertThat(actual.get()).isEqualTo(0); }
@Test void updateIndexOnDeleteShouldUpdateFirstUnseenWhenUnseen() { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags()); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); testee.updateIndexOnDelete(new ComposedMessageIdWithMetaData( new ComposedMessageId(MAILBOX_ID, CASSANDRA_MESSAGE_ID, MESSAGE_UID), new Flags(), MODSEQ), MAILBOX_ID).join(); Optional<MessageUid> actual = firstUnseenDAO.retrieveFirstUnread(MAILBOX_ID).join(); assertThat(actual.isPresent()).isFalse(); }
@Test void updateIndexOnDeleteShouldDecrementUnseenMessageCountWhenUnseen() throws Exception { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags()); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); testee.updateIndexOnDelete(new ComposedMessageIdWithMetaData( new ComposedMessageId(MAILBOX_ID, CASSANDRA_MESSAGE_ID, MESSAGE_UID), new Flags(), MODSEQ), MAILBOX_ID).join(); Optional<Long> actual = mailboxCounterDAO.countUnseenMessagesInMailbox(mailbox).join(); assertThat(actual.isPresent()).isTrue(); assertThat(actual.get()).isEqualTo(0); }
@Test void updateIndexOnDeleteShouldRemoveRecentWhenRecent() { MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags(Flags.Flag.RECENT)); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); testee.updateIndexOnDelete(new ComposedMessageIdWithMetaData( new ComposedMessageId(MAILBOX_ID, CASSANDRA_MESSAGE_ID, MESSAGE_UID), new Flags(Flags.Flag.RECENT), MODSEQ), MAILBOX_ID).join(); assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join() .collect(Guavate.toImmutableList())) .isEmpty(); }
@Test void updateIndexOnDeleteShouldRemoveUidFromRecentAnyway() { // Clean up strategy if some flags updates missed MailboxMessage message = mock(MailboxMessage.class); when(message.createFlags()).thenReturn(new Flags(Flags.Flag.RECENT)); when(message.getUid()).thenReturn(MESSAGE_UID); testee.updateIndexOnAdd(message, MAILBOX_ID).join(); testee.updateIndexOnDelete(new ComposedMessageIdWithMetaData( new ComposedMessageId(MAILBOX_ID, CASSANDRA_MESSAGE_ID, MESSAGE_UID), new Flags(), MODSEQ), MAILBOX_ID).join(); assertThat(mailboxRecentsDAO.getRecentMessageUidsInMailbox(MAILBOX_ID).join() .collect(Guavate.toImmutableList())) .isEmpty(); }
@Test void updateIndexOnDeleteShouldDeleteMessageFromDeletedMessage() { MailboxMessage message = mock(MailboxMessage.class); when(message.getUid()).thenReturn(MESSAGE_UID); deletedMessageDAO.addDeleted(MAILBOX_ID, MESSAGE_UID).join(); testee.updateIndexOnDelete(new ComposedMessageIdWithMetaData( new ComposedMessageId(MAILBOX_ID, CASSANDRA_MESSAGE_ID, MESSAGE_UID), new Flags(), MODSEQ), MAILBOX_ID).join(); assertThat( deletedMessageDAO .retrieveDeletedMessage(MAILBOX_ID, MessageRange.all()) .join() .collect(Guavate.toImmutableList())) .isEmpty(); }
@Override public ComposedMessageIdWithMetaData getComposedMessageIdWithMetaData() { return ComposedMessageIdWithMetaData.builder() .modSeq(modSeq) .flags(createFlags()) .composedMessageId(new ComposedMessageId(mailboxId, getMessageId(), uid)) .build(); }
@Override public ComposedMessageIdWithMetaData getComposedMessageIdWithMetaData() { return ComposedMessageIdWithMetaData.builder() .modSeq(modSeq) .flags(createFlags()) .composedMessageId(new ComposedMessageId(mailboxId, getMessageId(), uid)) .build(); }
private CompletableFuture<Void> insertIds(MailboxMessage message, CassandraId mailboxId) { ComposedMessageIdWithMetaData composedMessageIdWithMetaData = ComposedMessageIdWithMetaData.builder() .composedMessageId(new ComposedMessageId(mailboxId, message.getMessageId(), message.getUid())) .flags(message.createFlags()) .modSeq(message.getModSeq()) .build(); return CompletableFuture.allOf(messageIdDAO.insert(composedMessageIdWithMetaData), imapUidDAO.insert(composedMessageIdWithMetaData)); }
@Override public ComposedMessageIdWithMetaData getComposedMessageIdWithMetaData() { return ComposedMessageIdWithMetaData.builder() .modSeq(modSeq) .flags(createFlags()) .composedMessageId(new ComposedMessageId(mailbox.getMailboxId(), getMessageId(), MessageUid.of(uid))) .build(); }
@Test void deleteShouldDeleteWhenRowExists() { CassandraId mailboxId = CassandraId.timeBased(); MessageUid messageUid = MessageUid.of(1); CassandraMessageId messageId = messageIdFactory.generate(); testee.insert(ComposedMessageIdWithMetaData.builder() .composedMessageId(new ComposedMessageId(mailboxId, messageId, messageUid)) .flags(new Flags()) .modSeq(1) .build()) .join(); testee.delete(mailboxId, messageUid).join(); Optional<ComposedMessageIdWithMetaData> message = testee.retrieve(mailboxId, messageUid).join(); assertThat(message.isPresent()).isFalse(); }
@Test public void isMatchingShouldReturnTrueWhenSameMessageId() { ComposedMessageIdWithMetaData composedMessageIdWithMetaData = ComposedMessageIdWithMetaData.builder() .composedMessageId(new ComposedMessageId(TEST_ID, TEST_MESSAGE_ID, MESSAGE_UID)) .flags(new Flags(Flag.RECENT)) .modSeq((long) 1) .build(); assertThat(composedMessageIdWithMetaData.isMatching(TEST_MESSAGE_ID)).isTrue(); }
@Test void deleteShouldDeleteWhenRowExists() { CassandraMessageId messageId = messageIdFactory.of(UUIDs.timeBased()); CassandraId mailboxId = CassandraId.timeBased(); MessageUid messageUid = MessageUid.of(1); testee.insert(ComposedMessageIdWithMetaData.builder() .composedMessageId(new ComposedMessageId(mailboxId, messageId, messageUid)) .flags(new Flags()) .modSeq(1) .build()) .join(); testee.delete(messageId, mailboxId).join(); Stream<ComposedMessageIdWithMetaData> messages = testee.retrieve(messageId, Optional.of(mailboxId)).join(); assertThat(messages.collect(Guavate.toImmutableList())).isEmpty(); }
private ComposedMessageIdWithMetaData createMetadataFor(MailboxMessage mailboxMessage) { ComposedMessageId composedMessageId = new ComposedMessageId( mailboxMessage.getMailboxId(), mailboxMessage.getMessageId(), mailboxMessage.getUid()); return ComposedMessageIdWithMetaData.builder() .composedMessageId(composedMessageId) .flags(mailboxMessage.createFlags()) .modSeq(mailboxMessage.getModSeq()) .build(); }
@Test void retrieveShouldRetrieveWhenKeyMatches() { CassandraMessageId messageId = messageIdFactory.generate(); CassandraId mailboxId = CassandraId.timeBased(); MessageUid messageUid = MessageUid.of(1); ComposedMessageIdWithMetaData composedMessageIdWithMetaData = ComposedMessageIdWithMetaData.builder() .composedMessageId(new ComposedMessageId(mailboxId, messageId, messageUid)) .flags(new Flags()) .modSeq(1) .build(); testee.insert(composedMessageIdWithMetaData).join(); Optional<ComposedMessageIdWithMetaData> message = testee.retrieve(mailboxId, messageUid).join(); assertThat(message.get()).isEqualTo(composedMessageIdWithMetaData); }
@Test void updateShouldReturnTrueWhenOldModSeqMatches() { CassandraMessageId messageId = messageIdFactory.of(UUIDs.timeBased()); CassandraId mailboxId = CassandraId.timeBased(); MessageUid messageUid = MessageUid.of(1); ComposedMessageIdWithMetaData composedMessageIdWithFlags = ComposedMessageIdWithMetaData.builder() .composedMessageId(new ComposedMessageId(mailboxId, messageId, messageUid)) .flags(new Flags()) .modSeq(1) .build(); testee.insert(composedMessageIdWithFlags).join(); Boolean result = testee.updateMetadata(composedMessageIdWithFlags, 1).join(); assertThat(result).isTrue(); }
private ComposedMessageIdWithMetaData toComposedMessageIdWithMetadata(Row row) { return ComposedMessageIdWithMetaData.builder() .composedMessageId(new ComposedMessageId( CassandraId.of(row.getUUID(MAILBOX_ID)), messageIdFactory.of(row.getUUID(MESSAGE_ID)), MessageUid.of(row.getLong(IMAP_UID)))) .flags(new FlagsExtractor(row).getFlags()) .modSeq(row.getLong(MOD_SEQ)) .build(); }
private ComposedMessageIdWithMetaData fromRowToComposedMessageIdWithFlags(Row row) { return ComposedMessageIdWithMetaData.builder() .composedMessageId(new ComposedMessageId( CassandraId.of(row.getUUID(MAILBOX_ID)), messageIdFactory.of(row.getUUID(MESSAGE_ID)), MessageUid.of(row.getLong(IMAP_UID)))) .flags(new FlagsExtractor(row).getFlags()) .modSeq(row.getLong(MOD_SEQ)) .build(); } }
@BeforeEach void setUp(CassandraCluster cassandra) { messageIdFactory = new CassandraMessageId.Factory(); messageId = messageIdFactory.generate(); CassandraBlobsDAO blobsDAO = new CassandraBlobsDAO(cassandra.getConf()); HashBlobId.Factory blobIdFactory = new HashBlobId.Factory(); testee = new CassandraMessageDAO(cassandra.getConf(), cassandra.getTypesProvider(), blobsDAO, blobIdFactory, CassandraUtils.WITH_DEFAULT_CONFIGURATION, new CassandraMessageId.Factory()); messageIds = ImmutableList.of(ComposedMessageIdWithMetaData.builder() .composedMessageId(new ComposedMessageId(MAILBOX_ID, messageId, messageUid)) .flags(new Flags()) .modSeq(1) .build()); }