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



##########
File path: 
mailbox/elasticsearch-v7/src/main/java/org/apache/james/mailbox/elasticsearch/v7/MailboxMappingFactory.java
##########
@@ -97,6 +98,11 @@ public static XContentBuilder getMappingContent() {
                             .field(STORE, true)
                         .endObject()
 
+                        .startObject(THREAD_ID)
+                            .field(TYPE, KEYWORD)
+                            .field(STORE, true)

Review comment:
       We likely do not need this to be stored

##########
File path: 
mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
##########
@@ -1125,6 +1129,40 @@ public String toString() {
         }
     }
 
+    public static class ThreadIdCriterion extends Criterion {
+        private final ThreadId threadId;
+
+        public ThreadIdCriterion(ThreadId threadId) {
+            this.threadId = threadId;
+        }
+
+        public ThreadId getThreadId() {
+            return threadId;
+        }
+
+        @Override
+        public final boolean equals(Object o) {
+            if (o instanceof ThreadIdCriterion) {
+                ThreadIdCriterion that = (ThreadIdCriterion) o;
+
+                return java.util.Objects.equals(this.threadId, that.threadId);

Review comment:
       Why this FQDN?

##########
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:
       I would like that we have a shot at it now if you do not mind ;-)




-- 
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