quantranhong1999 commented on a change in pull request #539:
URL: https://github.com/apache/james-project/pull/539#discussion_r670365380



##########
File path: 
mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
##########
@@ -1512,4 +1549,101 @@ void searchShouldRetrieveMailByAttachmentFileName() 
throws Exception {
         assertThat(messageSearchIndex.search(session, mailbox, 
searchQuery).toStream())
             .containsOnly(mWithFileName.getUid());
     }
+
+    @Test
+    void 
givenThreeMailsInAThreadThenGetThreadShouldReturnAListWithThreeMessageIdsInThatThread()
 throws MailboxException {
+        MailboxMessage message1 = createMessage(quanMailbox, 
ThreadId.fromBaseMessageId(newBasedMessageId));
+        MailboxMessage message2 = createMessage(quanMailbox, 
ThreadId.fromBaseMessageId(newBasedMessageId));
+        MailboxMessage message3 = createMessage(quanMailbox, 
ThreadId.fromBaseMessageId(newBasedMessageId));
+
+        appendMessageThenDispatchAddedEvent(quanMailbox, message1);
+        appendMessageThenDispatchAddedEvent(quanMailbox, message2);
+        appendMessageThenDispatchAddedEvent(quanMailbox, message3);
+
+        awaitMessageCount(ImmutableList.of(), SearchQuery.matchAll(), 16);
+
+        SearchQuery searchQuery = 
SearchQuery.of(SearchQuery.threadId(ThreadId.fromBaseMessageId(newBasedMessageId)));
+        List<MessageId> actual = messageSearchIndex.search(quanSession, 
ImmutableList.of(quanMailbox.getMailboxId()), searchQuery, LIMIT)
+            .collectList().block();
+
+        assertThat(actual).isEqualTo(ImmutableList.of(message1.getMessageId(), 
message2.getMessageId(), message3.getMessageId()));
+    }
+
+    @Test
+    void 
givenAMailInAThreadThenGetThreadShouldReturnAListWithOnlyOneMessageIdInThatThread()
 throws MailboxException {
+        MailboxMessage message1 = createMessage(quanMailbox, 
ThreadId.fromBaseMessageId(newBasedMessageId));
+
+        appendMessageThenDispatchAddedEvent(quanMailbox, message1);
+
+        awaitMessageCount(ImmutableList.of(), SearchQuery.matchAll(), 14);
+
+        SearchQuery searchQuery = 
SearchQuery.of(SearchQuery.threadId(ThreadId.fromBaseMessageId(newBasedMessageId)));
+        List<MessageId> actual = messageSearchIndex.search(quanSession, 
ImmutableList.of(quanMailbox.getMailboxId()), searchQuery, LIMIT)
+            .collectList().block();
+
+        assertThat(actual).containsOnly(message1.getMessageId());
+    }
+
+    @Test
+    void givenTwoDistinctThreadsThenGetThreadShouldNotReturnUnrelatedMails() 
throws MailboxException {
+        // given message1 and message2 in thread1, message3 in thread2
+        ThreadId threadId1 = ThreadId.fromBaseMessageId(newBasedMessageId);
+        ThreadId threadId2 = ThreadId.fromBaseMessageId(otherBasedMessageId);
+        MailboxMessage message1 = createMessage(quanMailbox, threadId1);
+        MailboxMessage message2 = createMessage(quanMailbox, threadId1);
+        MailboxMessage message3 = createMessage(quanMailbox, threadId2);
+
+        appendMessageThenDispatchAddedEvent(quanMailbox, message1);
+        appendMessageThenDispatchAddedEvent(quanMailbox, message2);
+        appendMessageThenDispatchAddedEvent(quanMailbox, message3);
+
+        awaitMessageCount(ImmutableList.of(), SearchQuery.matchAll(), 16);
+
+        // then get thread2 should not return unrelated message1 and message2
+        SearchQuery searchQuery = 
SearchQuery.of(SearchQuery.threadId(threadId2));
+        List<MessageId> actual = messageSearchIndex.search(quanSession, 
ImmutableList.of(quanMailbox.getMailboxId()), searchQuery, LIMIT)
+            .collectList().block();
+
+        assertThat(actual).doesNotContain(message1.getMessageId(), 
message2.getMessageId());
+    }
+
+    @Test
+    void givenNonThreadThenGetThreadShouldReturnEmptyListMessageId() throws 
MailboxException {
+        // given non messages in thread1
+        ThreadId threadId1 = ThreadId.fromBaseMessageId(newBasedMessageId);
+
+        // then get thread1 should return empty list messageId
+        SearchQuery searchQuery = 
SearchQuery.of(SearchQuery.threadId(threadId1));
+        List<MessageId> actual = messageSearchIndex.search(quanSession, 
ImmutableList.of(quanMailbox.getMailboxId()), searchQuery, LIMIT)
+            .collectList().block();
+
+        assertThat(actual).isEmpty();
+    }
+
+    private void appendMessageThenDispatchAddedEvent(Mailbox mailbox, 
MailboxMessage mailboxMessage) throws MailboxException {

Review comment:
       If it's not yet. I guess we can come back and remove these message 
mapper dark magic later?




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to