@Override public void delete(MailboxSession session, Mailbox mailbox, List<MessageUid> expungedUids) throws MailboxException { try { elasticSearchIndexer.delete(expungedUids.stream() .map(uid -> indexIdFor(mailbox, uid)) .collect(Collectors.toList())); } catch (Exception e) { if (LOGGER.isErrorEnabled()) { LOGGER.error("Error when deleting messages {} in mailbox {} from index", mailbox.getMailboxId().serialize(), expungedUids.toArray(), e); } } }
@Test @SuppressWarnings("unchecked") public void deleteShouldWork() throws Exception { //Given Mailbox mailbox = mock(Mailbox.class); when(mailbox.getMailboxId()) .thenReturn(MAILBOX_ID); BulkResponse expectedBulkResponse = mock(BulkResponse.class); when(elasticSearchIndexer.delete(any(List.class))) .thenReturn(Optional.of(expectedBulkResponse)); //When testee.delete(session, mailbox, Lists.newArrayList(MESSAGE_UID)); //Then verify(elasticSearchIndexer).delete(eq(Lists.newArrayList(ELASTIC_SEARCH_ID))); }
@Test @SuppressWarnings("unchecked") public void deleteShouldNotPropagateExceptionWhenExceptionOccurs() throws Exception { //Given Mailbox mailbox = mock(Mailbox.class); when(mailbox.getMailboxId()) .thenReturn(MAILBOX_ID); when(elasticSearchIndexer.delete(any(List.class))) .thenThrow(new ElasticsearchException("")); //When testee.delete(session, mailbox, Lists.newArrayList(MESSAGE_UID)); //Then //No exception }
@Test @SuppressWarnings("unchecked") public void deleteShouldWorkWhenMultipleMessageIds() throws Exception { //Given Mailbox mailbox = mock(Mailbox.class); MessageUid messageId2 = MessageUid.of(2); MessageUid messageId3 = MessageUid.of(3); MessageUid messageId4 = MessageUid.of(4); MessageUid messageId5 = MessageUid.of(5); when(mailbox.getMailboxId()) .thenReturn(MAILBOX_ID); BulkResponse expectedBulkResponse = mock(BulkResponse.class); when(elasticSearchIndexer.delete(any(List.class))) .thenReturn(Optional.of(expectedBulkResponse)); //When testee.delete(session, mailbox, Lists.newArrayList(MESSAGE_UID, messageId2, messageId3, messageId4, messageId5)); //Then verify(elasticSearchIndexer).delete(eq(Lists.newArrayList(ELASTIC_SEARCH_ID, "12:2", "12:3", "12:4", "12:5"))); }