This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 164404f9b86a0a5f458f1041646ede9f687fbcfb Author: TungTV <vtt...@linagora.com> AuthorDate: Mon Nov 4 15:04:38 2024 +0700 JAMES-2182 Lucene search highlight - moving test case `shouldHighlightAttachmentTextContentWhenTextBodyDoesNotMatch` to contract class --- .../searchhighligt/SearchHighLighterContract.java | 39 ++++++++++++++++ .../search/LuceneMemorySearchHighLighterTest.java | 54 ---------------------- .../search/OpenSearchSearchHighlighterTest.java | 48 ------------------- 3 files changed, 39 insertions(+), 102 deletions(-) diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/searchhighligt/SearchHighLighterContract.java b/mailbox/api/src/test/java/org/apache/james/mailbox/searchhighligt/SearchHighLighterContract.java index e273e95e9c..8083639e87 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/searchhighligt/SearchHighLighterContract.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/searchhighligt/SearchHighLighterContract.java @@ -37,6 +37,7 @@ import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.MultimailboxesSearchQuery; import org.apache.james.mailbox.model.SearchQuery; import org.apache.james.mime4j.dom.Message; +import org.apache.james.util.ClassLoaderUtils; import org.junit.jupiter.api.Test; import reactor.core.publisher.Flux; @@ -465,4 +466,42 @@ public interface SearchHighLighterContract { .collectList() .block()).hasSize(0); } + + @Test + default void shouldHighlightAttachmentTextContentWhenTextBodyDoesNotMatch() throws Exception { + MailboxSession session = session(USERNAME1); + + ComposedMessageId m1 = appendMessage(MessageManager.AppendCommand.from( + Message.Builder.of() + .setTo("to@james.local") + .setSubject("Hallo, Thx Matthieu for your help") + .setBody("append contentA to inbox", StandardCharsets.UTF_8)), + session).getId(); + + // m2 has an attachment with text content: "This is a beautiful banana" + ComposedMessageId m2 = appendMessage( + MessageManager.AppendCommand.builder() + .build(ClassLoaderUtils.getSystemResourceAsSharedStream("eml/emailWithTextAttachment.eml")), + session).getId(); + + verifyMessageWasIndexed(2); + + String keywordSearch = "beautiful"; + MultimailboxesSearchQuery multiMailboxSearch = MultimailboxesSearchQuery.from(SearchQuery.of( + new SearchQuery.ConjunctionCriterion(SearchQuery.Conjunction.OR, + List.of(SearchQuery.bodyContains(keywordSearch), + SearchQuery.attachmentContains(keywordSearch))))) + .inMailboxes(List.of(m1.getMailboxId(), m2.getMailboxId())) + .build(); + + List<SearchSnippet> searchSnippets = Flux.from(testee().highlightSearch(List.of(m1.getMessageId(), m2.getMessageId()), multiMailboxSearch, session)) + .collectList() + .block(); + + assertThat(searchSnippets).hasSize(1); + + assertThat(searchSnippets.getFirst().highlightedBody()) + .isPresent() + .satisfies(highlightedBody -> assertThat(highlightedBody.get()).contains("This is a <mark>beautiful</mark> banana")); + } } diff --git a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMemorySearchHighLighterTest.java b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMemorySearchHighLighterTest.java index 23af88f0b8..1ac768d18a 100644 --- a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMemorySearchHighLighterTest.java +++ b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMemorySearchHighLighterTest.java @@ -19,45 +19,32 @@ package org.apache.james.mailbox.lucene.search; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assumptions.assumeTrue; - -import java.nio.charset.StandardCharsets; -import java.util.List; import org.apache.james.core.Username; -import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.inmemory.InMemoryId; import org.apache.james.mailbox.inmemory.InMemoryMessageId; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; -import org.apache.james.mailbox.model.ComposedMessageId; import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxACL; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageId; -import org.apache.james.mailbox.model.MultimailboxesSearchQuery; import org.apache.james.mailbox.model.SearchQuery; import org.apache.james.mailbox.searchhighligt.SearchHighLighterContract; import org.apache.james.mailbox.searchhighligt.SearchHighlighter; import org.apache.james.mailbox.searchhighligt.SearchHighlighterConfiguration; -import org.apache.james.mailbox.searchhighligt.SearchSnippet; import org.apache.james.mailbox.store.StoreMailboxManager; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.extractor.JsoupTextExtractor; import org.apache.james.mailbox.store.search.MessageSearchIndex; -import org.apache.james.mime4j.dom.Message; -import org.apache.james.util.ClassLoaderUtils; import org.apache.lucene.store.ByteBuffersDirectory; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; import com.github.fge.lambdas.Throwing; -import reactor.core.publisher.Flux; - class LuceneMemorySearchHighLighterTest implements SearchHighLighterContract { private MessageSearchIndex messageSearchIndex; private StoreMailboxManager storeMailboxManager; @@ -127,45 +114,4 @@ class LuceneMemorySearchHighLighterTest implements SearchHighLighterContract { session(owner))).run(); } - - @Test - void shouldHighlightAttachmentTextContentWhenTextBodyDoesNotMatch() throws Exception { - assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Attachment)); - MailboxSession session = session(USERNAME1); - - ComposedMessageId m1 = appendMessage(MessageManager.AppendCommand.from( - Message.Builder.of() - .setTo("to@james.local") - .setSubject("Hallo, Thx Matthieu for your help") - .setBody("append contentA to inbox", StandardCharsets.UTF_8)), - session).getId(); - - // m2 has an attachment with text content: "This is a beautiful banana" - ComposedMessageId m2 = inboxMessageManager.appendMessage( - MessageManager.AppendCommand.builder() - .build(ClassLoaderUtils.getSystemResourceAsSharedStream("eml/emailWithTextAttachment.eml")), - session).getId(); - - verifyMessageWasIndexed(2); - - String keywordSearch = "beautiful"; - MultimailboxesSearchQuery multiMailboxSearch = MultimailboxesSearchQuery.from(SearchQuery.of( - new SearchQuery.ConjunctionCriterion(SearchQuery.Conjunction.OR, - List.of(SearchQuery.bodyContains(keywordSearch), - SearchQuery.attachmentContains(keywordSearch))))) - .inMailboxes(List.of(m1.getMailboxId(), m2.getMailboxId())) - .build(); - - List<SearchSnippet> searchSnippets = Flux.from(testee().highlightSearch(List.of(m1.getMessageId(), m2.getMessageId()), multiMailboxSearch, session)) - .collectList() - .block(); - - assertThat(searchSnippets).hasSize(1); - - assertThat(searchSnippets.getFirst().highlightedBody()) - .isPresent() - .satisfies(highlightedBody -> { - assertThat(highlightedBody.get()).contains("This is a <mark>beautiful</mark> banana"); - }); - } } diff --git a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearchHighlighterTest.java b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearchHighlighterTest.java index a0d73e19ba..ef4503a78d 100644 --- a/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearchHighlighterTest.java +++ b/mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearchHighlighterTest.java @@ -22,12 +22,9 @@ package org.apache.james.mailbox.opensearch.search; import static org.apache.james.mailbox.opensearch.search.OpenSearchSearcherTest.SEARCH_SIZE; import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Durations.ONE_HUNDRED_MILLISECONDS; -import static org.junit.jupiter.api.Assumptions.assumeTrue; import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.time.ZoneId; -import java.util.List; import java.util.UUID; import org.apache.james.backends.opensearch.DockerOpenSearchExtension; @@ -37,18 +34,15 @@ import org.apache.james.backends.opensearch.ReactorOpenSearchClient; import org.apache.james.backends.opensearch.ReadAliasName; import org.apache.james.backends.opensearch.WriteAliasName; import org.apache.james.core.Username; -import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.inmemory.InMemoryMessageId; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; -import org.apache.james.mailbox.model.ComposedMessageId; import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxACL; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageId; -import org.apache.james.mailbox.model.MultimailboxesSearchQuery; import org.apache.james.mailbox.model.SearchQuery; import org.apache.james.mailbox.opensearch.IndexAttachments; import org.apache.james.mailbox.opensearch.IndexHeaders; @@ -61,7 +55,6 @@ import org.apache.james.mailbox.opensearch.query.CriterionConverter; import org.apache.james.mailbox.opensearch.query.QueryConverter; import org.apache.james.mailbox.searchhighligt.SearchHighLighterContract; import org.apache.james.mailbox.searchhighligt.SearchHighlighter; -import org.apache.james.mailbox.searchhighligt.SearchSnippet; import org.apache.james.mailbox.store.StoreMailboxManager; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.search.MessageSearchIndex; @@ -70,22 +63,17 @@ import org.apache.james.mailbox.tika.TikaExtension; import org.apache.james.mailbox.tika.TikaHttpClientImpl; import org.apache.james.mailbox.tika.TikaTextExtractor; import org.apache.james.metrics.tests.RecordingMetricFactory; -import org.apache.james.mime4j.dom.Message; -import org.apache.james.util.ClassLoaderUtils; import org.awaitility.Awaitility; import org.awaitility.Durations; import org.awaitility.core.ConditionFactory; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import com.github.fge.lambdas.Throwing; import com.google.common.collect.ImmutableSet; -import reactor.core.publisher.Flux; - public class OpenSearchSearchHighlighterTest implements SearchHighLighterContract { private MessageSearchIndex messageSearchIndex; private StoreMailboxManager storeMailboxManager; @@ -205,40 +193,4 @@ public class OpenSearchSearchHighlighterTest implements SearchHighLighterContrac .isEqualTo(indexedMessageCount)); } - @Test - void shouldHighlightAttachmentTextContentWhenTextBodyDoesNotMatch() throws Exception { - assumeTrue(storeMailboxManager.getSupportedSearchCapabilities().contains(MailboxManager.SearchCapabilities.Attachment)); - MailboxSession session = session(USERNAME1); - - ComposedMessageId m1 = appendMessage(MessageManager.AppendCommand.from( - Message.Builder.of() - .setTo("to@james.local") - .setSubject("Hallo, Thx Matthieu for your help") - .setBody("append contentA to inbox", StandardCharsets.UTF_8)), - session).getId(); - - // m2 has an attachment with text content: "This is a beautiful banana" - ComposedMessageId m2 = inboxMessageManager.appendMessage( - MessageManager.AppendCommand.builder() - .build(ClassLoaderUtils.getSystemResourceAsSharedStream("eml/emailWithTextAttachment.eml")), - session).getId(); - - verifyMessageWasIndexed(2); - - String keywordSearch = "beautiful"; - MultimailboxesSearchQuery multiMailboxSearch = MultimailboxesSearchQuery.from(SearchQuery.of( - new SearchQuery.ConjunctionCriterion(SearchQuery.Conjunction.OR, - List.of(SearchQuery.bodyContains(keywordSearch), - SearchQuery.attachmentContains(keywordSearch))))) - .inMailboxes(List.of(m1.getMailboxId(), m2.getMailboxId())) - .build(); - - List<SearchSnippet> searchSnippets = Flux.from(testee().highlightSearch(List.of(m1.getMessageId(), m2.getMessageId()), multiMailboxSearch, session)) - .collectList() - .block(); - - assertThat(searchSnippets).hasSize(1); - assertThat(searchSnippets.getFirst().highlightedBody()).contains("This is a <mark>beautiful</mark> banana."); - } - } --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org