This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 86ca49225c0e0165b539f20a799cd0cfdab56595
Author: Rene Cordier <[email protected]>
AuthorDate: Wed Dec 4 11:15:55 2019 +0700

    JAMES-2991 Add tests for hasAttachment compute property
---
 .../apache/james/jmap/draft/model/PreviewDTO.java  |  3 +-
 ...mputeMessageFastViewProjectionListenerTest.java | 61 ++++++++++++++++------
 .../emptyBodyMessageWithOneAttachment.eml          | 52 ++++++++++++++++++
 3 files changed, 99 insertions(+), 17 deletions(-)

diff --git 
a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/PreviewDTO.java
 
b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/PreviewDTO.java
index 2c2eb08..0cea9b4 100644
--- 
a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/PreviewDTO.java
+++ 
b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/PreviewDTO.java
@@ -32,7 +32,8 @@ import com.google.common.base.Preconditions;
 public class PreviewDTO {
 
     private static final String NO_BODY_AS_STRING = "(Empty)";
-    private static final PreviewDTO NO_BODY = PreviewDTO.of(NO_BODY_AS_STRING);
+
+    public static final PreviewDTO NO_BODY = PreviewDTO.of(NO_BODY_AS_STRING);
 
     public static PreviewDTO from(Optional<Preview> preview) {
         return preview.map(Preview::getValue)
diff --git 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListenerTest.java
 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListenerTest.java
index 51f2858..e407db8 100644
--- 
a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListenerTest.java
+++ 
b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListenerTest.java
@@ -26,13 +26,11 @@ import static org.mockito.Mockito.spy;
 
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
-import java.util.Optional;
 
 import org.apache.james.core.Username;
 import org.apache.james.jmap.api.model.Preview;
 import 
org.apache.james.jmap.api.projections.MessageFastViewPrecomputedProperties;
 import org.apache.james.jmap.api.projections.MessageFastViewProjection;
-import org.apache.james.jmap.draft.model.PreviewDTO;
 import org.apache.james.jmap.draft.model.message.view.MessageFullViewFactory;
 import org.apache.james.jmap.draft.utils.JsoupHtmlTextExtractor;
 import 
org.apache.james.jmap.memory.projections.MemoryMessageFastViewProjection;
@@ -59,6 +57,7 @@ import org.apache.james.mailbox.store.SessionProviderImpl;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.metrics.api.NoopMetricFactory;
 import org.apache.james.mime4j.dom.Message;
+import org.apache.james.util.ClassLoaderUtils;
 import org.apache.james.util.html.HtmlTextExtractor;
 import org.apache.james.util.mime.MessageContentExtractor;
 import org.assertj.core.api.SoftAssertions;
@@ -69,17 +68,25 @@ import reactor.core.publisher.Mono;
 
 class ComputeMessageFastViewProjectionListenerTest {
     private static final Username BOB = Username.of("bob");
-    private static final Preview PREVIEW = Preview.from("This should be the 
preview of the message...");
+    private static final Preview PREVIEW = Preview.from("blabla bloblo");
     private static final MailboxPath BOB_INBOX_PATH = MailboxPath.inbox(BOB);
     private static final MailboxPath BOB_OTHER_BOX_PATH = 
MailboxPath.forUser(BOB, "otherBox");
-    private static final MessageFastViewPrecomputedProperties 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES = 
MessageFastViewPrecomputedProperties.builder()
+    private static final MessageFastViewPrecomputedProperties 
PRECOMPUTED_PROPERTIES_PREVIEW = MessageFastViewPrecomputedProperties.builder()
         .preview(PREVIEW)
         .noAttachments()
         .build();
-    private static final MessageFastViewPrecomputedProperties 
MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_EMPTY = 
MessageFastViewPrecomputedProperties.builder()
-        .preview(Preview.from(PreviewDTO.from(Optional.empty()).getValue()))
+    private static final MessageFastViewPrecomputedProperties 
PRECOMPUTED_PROPERTIES_EMPTY = MessageFastViewPrecomputedProperties.builder()
+        .preview(Preview.from(""))
         .noAttachments()
         .build();
+    private static final MessageFastViewPrecomputedProperties 
PRECOMPUTED_PROPERTIES_PREVIEW_HAS_ATTACHMENT = 
MessageFastViewPrecomputedProperties.builder()
+        .preview(PREVIEW)
+        .hasAttachment()
+        .build();
+    private static final MessageFastViewPrecomputedProperties 
PRECOMPUTED_PROPERTIES_HAS_ATTACHMENT = 
MessageFastViewPrecomputedProperties.builder()
+        .preview(Preview.from(""))
+        .hasAttachment()
+        .build();
 
     MessageFastViewProjection messageFastViewProjection;
     MessageFullViewFactory messageFullViewFactory;
@@ -109,12 +116,12 @@ class ComputeMessageFastViewProjectionListenerTest {
         mailboxManager = resources.getMailboxManager();
         messageIdManager = spy(resources.getMessageIdManager());
 
-        messageFastViewProjection = new MemoryMessageFastViewProjection();
+        messageFastViewProjection = new MemoryMessageFastViewProjection(new 
NoopMetricFactory());
 
         MessageContentExtractor messageContentExtractor = new 
MessageContentExtractor();
         HtmlTextExtractor htmlTextExtractor = new JsoupHtmlTextExtractor();
 
-        messageFullViewFactory = new 
MessageFullViewFactory(resources.getBlobManager(), messageContentExtractor, 
htmlTextExtractor);
+        messageFullViewFactory = new 
MessageFullViewFactory(resources.getBlobManager(), messageContentExtractor, 
htmlTextExtractor, messageIdManager, messageFastViewProjection);
 
         FakeAuthenticator authenticator = new FakeAuthenticator();
         authenticator.addUser(BOB, "12345");
@@ -142,25 +149,47 @@ class ComputeMessageFastViewProjectionListenerTest {
     }
 
     @Test
-    void shouldStorePreviewWhenBodyMessageNotEmpty() throws Exception {
+    void 
shouldStorePreviewWithNoAttachmentsWhenBodyMessageNotEmptyAndNoAttachments() 
throws Exception {
         ComposedMessageId composedId = inboxMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 .build(previewMessage()),
             mailboxSession);
 
         
assertThat(Mono.from(messageFastViewProjection.retrieve(composedId.getMessageId())).block())
-            .isEqualTo(MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES);
+            .isEqualTo(PRECOMPUTED_PROPERTIES_PREVIEW);
     }
 
     @Test
-    void shouldStoreEmptyPreviewWhenEmptyBodyMessage() throws Exception {
+    void 
shouldStoreEmptyPreviewWithNoAttachmentsWhenEmptyBodyMessageAndNoAttachments() 
throws Exception {
         ComposedMessageId composedId = inboxMessageManager.appendMessage(
             MessageManager.AppendCommand.builder()
                 .build(emptyMessage()),
             mailboxSession);
 
         
assertThat(Mono.from(messageFastViewProjection.retrieve(composedId.getMessageId())).block())
-            .isEqualTo(MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_EMPTY);
+            .isEqualTo(PRECOMPUTED_PROPERTIES_EMPTY);
+    }
+
+    @Test
+    void 
shouldStorePreviewWithHasAttachmentWhenBodyMessageNotEmptyAndHasAttachment() 
throws Exception {
+        ComposedMessageId composedId = inboxMessageManager.appendMessage(
+            MessageManager.AppendCommand.builder()
+                
.build(ClassLoaderUtils.getSystemResourceAsSharedStream("fullMessage.eml")),
+            mailboxSession);
+
+        
assertThat(Mono.from(messageFastViewProjection.retrieve(composedId.getMessageId())).block())
+            .isEqualTo(PRECOMPUTED_PROPERTIES_PREVIEW_HAS_ATTACHMENT);
+    }
+
+    @Test
+    void 
shouldStoreEmptyPreviewWithHasAttachmentWhenEmptyBodyMessageAndHasAttachment() 
throws Exception {
+        ComposedMessageId composedId = inboxMessageManager.appendMessage(
+            MessageManager.AppendCommand.builder()
+                
.build(ClassLoaderUtils.getSystemResourceAsSharedStream("emptyBodyMessageWithOneAttachment.eml")),
+            mailboxSession);
+
+        
assertThat(Mono.from(messageFastViewProjection.retrieve(composedId.getMessageId())).block())
+            .isEqualTo(PRECOMPUTED_PROPERTIES_HAS_ATTACHMENT);
     }
 
     @Test
@@ -177,9 +206,9 @@ class ComputeMessageFastViewProjectionListenerTest {
 
         SoftAssertions.assertSoftly(softly -> {
             
softly.assertThat(Mono.from(messageFastViewProjection.retrieve(composedId1.getMessageId())).block())
-                .isEqualTo(MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES);
+                .isEqualTo(PRECOMPUTED_PROPERTIES_PREVIEW);
             
softly.assertThat(Mono.from(messageFastViewProjection.retrieve(composedId2.getMessageId())).block())
-                .isEqualTo(MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES_EMPTY);
+                .isEqualTo(PRECOMPUTED_PROPERTIES_EMPTY);
         });
     }
 
@@ -194,7 +223,7 @@ class ComputeMessageFastViewProjectionListenerTest {
 
         MessageResult result = 
otherBoxMessageManager.getMessages(MessageRange.all(), FetchGroup.MINIMAL, 
mailboxSession).next();
         
assertThat(Mono.from(messageFastViewProjection.retrieve(result.getMessageId())).block())
-            .isEqualTo(MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES);
+            .isEqualTo(PRECOMPUTED_PROPERTIES_PREVIEW);
     }
 
     @Test
@@ -208,7 +237,7 @@ class ComputeMessageFastViewProjectionListenerTest {
 
         MessageResult result = 
otherBoxMessageManager.getMessages(MessageRange.all(), FetchGroup.MINIMAL, 
mailboxSession).next();
         
assertThat(Mono.from(messageFastViewProjection.retrieve(result.getMessageId())).block())
-            .isEqualTo(MESSAGE_FAST_VIEW_PRECOMPUTED_PROPERTIES);
+            .isEqualTo(PRECOMPUTED_PROPERTIES_PREVIEW);
     }
 
     @Test
diff --git 
a/server/protocols/jmap-draft/src/test/resources/emptyBodyMessageWithOneAttachment.eml
 
b/server/protocols/jmap-draft/src/test/resources/emptyBodyMessageWithOneAttachment.eml
new file mode 100644
index 0000000..125151c
--- /dev/null
+++ 
b/server/protocols/jmap-draft/src/test/resources/emptyBodyMessageWithOneAttachment.eml
@@ -0,0 +1,52 @@
+Reply-to: alice <alice@local>
+In-reply-to: bob@local
+Mime-Version: 1.0
+To: bob <bob@local>
+From: alice <alice@local>
+Cc: jack <jack@local>, jacob <jacob@local>
+Bcc: alice <alice@local>
+Subject: Full message
+Message-ID: <[email protected]>
+Date: Tue, 7 Jun 2016 16:23:37 +0200
+Content-Type: multipart/mixed;
+ boundary="------------7AF1D14DE1DFA16229726B54"
+
+This is a multi-part message in MIME format.
+--------------7AF1D14DE1DFA16229726B54
+Content-Type: multipart/alternative;
+ boundary="------------172F9470CFA3BF3417835D92"
+
+
+--------------172F9470CFA3BF3417835D92
+Content-Type: text/plain; charset=utf-8; format=flowed
+Content-Transfer-Encoding: 7bit
+
+
+
+--------------172F9470CFA3BF3417835D92--
+
+--------------7AF1D14DE1DFA16229726B54
+Content-Type: image/jpeg;
+ name="4037_014.jpg"
+Content-Transfer-Encoding: base64
+Content-Disposition: attachment;
+ filename="4037_014.jpg"
+
+/9j/4X2cRXhpZgAASUkqAAgAAAANAA8BAgAKAAAAqgAAABABAgAJAAAAtAAAABIBAwABAAAA
+AQAAABoBBQABAAAAvgAAABsBBQABAAAAxgAAACgBAwABAAAAAgAAADEBAgAKAAAAzgAAADIB
+AgAUAAAA2AAAABMCAwABAAAAAgAAAGmHBAABAAAAfAIAAKXEBwDQAAAA7AAAANLGBwBAAAAA
+vAEAANPGBwCAAAAA/AEAAEwqAABQYW5hc29uaWMARE1DLUZaNDUAALQAAAABAAAAtAAAAAEA
+AABWZXIuMS4wICAAMjAxNDowMjoyNSAxMDozMjowOQBQcmludElNADAyNTAAAA4AAQAWABYA
+AgAAAAAAAwBkAAAABwAAAAAACAAAAAAACQAAAAAACgAAAAAACwCsAAAADAAAAAAADQAAAAAA
+DgDEAAAAAAEFAAAAAQEBAAAAEAGAAAAACREAABAnAAALDwAAECcAAJcFAAAQJwAAsAgAABAn
+AAABHAAAECcAAF4CAAAQJwAAiwAAABAnAADLAwAAECcAAOUbAAAQJwAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+
+--------------7AF1D14DE1DFA16229726B54--


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

Reply via email to