JAMES-1965 Add more testings for "Compute textBody when htmlBody is available"


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/4b70df97
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/4b70df97
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/4b70df97

Branch: refs/heads/master
Commit: 4b70df973b518d0d739c47f749b76813ced4ad4d
Parents: 0678047
Author: Quynh Nguyen <qngu...@linagora.com>
Authored: Wed Mar 15 11:16:34 2017 +0700
Committer: Quynh Nguyen <qngu...@linagora.com>
Committed: Thu Mar 23 16:03:17 2017 +0700

----------------------------------------------------------------------
 .../integration/GetMessageListMethodTest.java   |  30 +++++-
 .../cucumber/GetMessagesMethodStepdefs.java     |   5 +
 .../test/resources/cucumber/GetMessages.feature |  10 +-
 .../resources/eml/noTextBodyButHtmlBody.eml     |  84 +++++++++++++++
 .../jmap/methods/GetMessagesMethodTest.java     | 103 +++++++++++++++++--
 5 files changed, 223 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/4b70df97/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
index bf49a2f..c455813 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
@@ -50,8 +50,8 @@ import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.probe.MailboxProbe;
 import org.apache.james.modules.MailboxProbeImpl;
 import org.apache.james.probe.DataProbe;
-import org.apache.james.utils.JmapGuiceProbe;
 import org.apache.james.utils.DataProbeImpl;
+import org.apache.james.utils.JmapGuiceProbe;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -1054,6 +1054,34 @@ public abstract class GetMessageListMethodTest {
             .body("[1][1].list[0].id", 
equalTo(message.getMessageId().serialize()));
     }
 
+    @Test
+    public void getMessageListShouldComputeTextBodyWhenNoTextBodyButHtmlBody() 
throws Exception {
+        mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, username, 
"mailbox");
+
+        String mailContent = "Content-Type: text/html\r\n"
+            + "Subject: message 1 subject\r\n"
+            + "\r\n"
+            + "Hello <b>someone</b>, and thank you for joining example.com!";
+        LocalDate date = LocalDate.now();
+        mailboxProbe.appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+            new ByteArrayInputStream(mailContent.getBytes()), 
convertToDate(date.plusDays(1)), false, new Flags());
+        await();
+
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body("[[\"getMessageList\", {\"fetchMessages\": true, 
\"fetchMessageProperties\": [\"htmlBody\", \"textBody\"]}, \"#0\"]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .statusCode(200)
+            .body("[0][0]", equalTo("messageList"))
+            .body("[1][0]", equalTo("messages"))
+            .body("[0][1].messageIds", hasSize(1))
+            .body("[1][1].list[0].htmlBody", equalTo("Hello <b>someone</b>, 
and thank you for joining example.com!"))
+            .body("[1][1].list[0].textBody", equalTo("Hello someone, and thank 
you for joining example.com!"))
+        ;
+    }
+
     private Date convertToDate(LocalDate localDate) {
         return Date.from(localDate.atStartOfDay(ZONE_ID).toInstant());
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/4b70df97/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
index 23afc1d..070b219 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
@@ -203,6 +203,11 @@ public class GetMessagesMethodStepdefs {
         appendMessage(messageName, 
"eml/textInMainMultipartHtmlInInnerMultipart.eml");
     }
 
+    @Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with 
html body and no text body$")
+    public void appendMessageWithNoTextButHtml(String messageName, String 
mailbox) throws Throwable {
+        appendMessage(messageName, "eml/noTextBodyButHtmlBody.eml");
+    }
+
     private void appendMessage(String messageName, String emlFileName) throws 
Exception {
         ZonedDateTime dateTime = ZonedDateTime.parse("2014-10-30T14:12:00Z");
         MessageId id = 
mainStepdefs.jmapServer.getProbe(MailboxProbeImpl.class).appendMessage(userStepdefs.lastConnectedUser,

http://git-wip-us.apache.org/repos/asf/james-project/blob/4b70df97/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
index 3a72bf8..c8d1050 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
@@ -239,4 +239,12 @@ Feature: GetMessages method
     Then no error is returned
     And the list should contain 1 message
     And the textBody of the message is "/blabla/\r\n*bloblo*\r\n"
-    And the htmlBody of the message is "<i>blabla</i>\r\n<b>bloblo</b>\r\n"
\ No newline at end of file
+    And the htmlBody of the message is "<i>blabla</i>\r\n<b>bloblo</b>\r\n"
+
+  Scenario: Retrieving message should compute text body from html body
+    Given the user has a message "m1" in "INBOX" mailbox with html body and no 
text body
+    When the user ask for messages "m1"
+    Then no error is returned
+    And the list should contain 1 message
+    And the textBody of the message is "The Test User created an issue"
+    And the htmlBody of the message is "<a>The Test User</a> 
<strong>created</strong> an issue"
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/4b70df97/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/noTextBodyButHtmlBody.eml
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/noTextBodyButHtmlBody.eml
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/noTextBodyButHtmlBody.eml
new file mode 100644
index 0000000..8a503c7
--- /dev/null
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/noTextBodyButHtmlBody.eml
@@ -0,0 +1,84 @@
+Return-Path: <returnPath>
+Received: from localhost (localhost [127.0.0.1])
+    by localhost (Postfix) with ESMTP id 27358B3A09;
+    Tue, 11 Oct 2016 11:59:12 +0200 (CEST)
+X-Sieve: CMU Sieve 2.2
+Date: Tue, 14 Mar 2017 16:47:05 +0100 (CET)
+From: "Test User (JIRA)" <test@localhost>
+To: you@localhost
+Message-ID: <jira.18278.1489506415000.375139.1489506425...@atlassian.jira>
+In-Reply-To: <jira.18278.1489506415...@atlassian.jira>
+References: <jira.18278.1489506415...@atlassian.jira> 
<JIRA.18278.1489506415104@localhost>
+Subject: [JIRA] (CHAT-338) Update + icon
+MIME-Version: 1.0
+Content-Type: multipart/related;
+       boundary="----=_Part_370449_1340169331.1489506420401"
+X-JIRA-FingerPrint: 2cc56fe0b6c36a47776991d4aa5e9674
+Auto-Submitted: auto-generated
+Precedence: bulk
+
+------=_Part_370449_1340169331.1489506420401
+Content-Type: text/html; charset=UTF-8
+Content-Transfer-Encoding: 7bit
+
+<a>The Test User</a> <strong>created</strong> an issue
+------=_Part_370449_1340169331.1489506420401
+Content-Type: image/png
+Content-Transfer-Encoding: base64
+Content-Disposition: inline
+Content-ID: 
<jira-generated-image-static-major-2aab6bf2-4155-47c6-9c0b-b0ec1fdeaf9a>
+
+iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEX////QRDfQRDfQRDfQRDfQ
+RDcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFHZsIAAAABXRSTlMAEZnM3Uchgx8AAAAb
+dEVYdGppcmEtc3lzdGVtLWltYWdlLXR5cGUAaWNvbroqOUUAAABESURBVHjaY2BAAsKGQIKJgYFR
+SUkAzBBSYFIEMRiVHvwDCjExMMk9+PdIgYGF4f+9D//v8YJ1sQZAdEEACuP/BwYSAQCDPg0vvqNM
+LwAAAABJRU5ErkJggu2YDBYHBhIBAEDzBgwy4Sb4AAAAAElFTkSuQmCC
+------=_Part_370449_1340169331.1489506420401
+Content-Type: image/png
+Content-Transfer-Encoding: base64
+Content-Disposition: inline
+Content-ID: 
<jira-generated-image-static-comment-icon-d374d5f6-0597-421c-a4ef-50f59dbc5d33>
+
+iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEX///+1tbWzs7OysrKrq6um
+pqalpaWdnZ2ZmZn///+VlZWPj4/7+/vu7u7p6enn5+fl5eXk5OTh4eHW1tbT09PMzMzJycm6urq5
+ubm1tbWzs7OysrKrq6upqamlpaWKioqFhYWRkZGKioqHh4eDg4OAgIB/f398fHx6enp4eHh2dnZ0
+dHRycnJwcHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+gg==
+------=_Part_370449_1340169331.1489506420401
+Content-Type: image/png
+Content-Transfer-Encoding: base64
+Content-Disposition: inline
+Content-ID: <jira-generated-image-avatar-da8398c1-34c5-42a8-886f-d6628dead0f6>
+
+iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAHXRFWHRqaXJhLXN5c3RlbS1pbWFn
+ZS10eXBlAGF2YXRhcuQCGmEAAAdtSURBVHjaTdfFD5ZXEwXwZ0mBBHdoIbhT3Iq7tTgUh1KcFoq7
+Oy3W4pZAsA0JsIIFWxYECQk7Vvwf8+U3X27Txc19H7vnzJkzc+9b9evXL4YMGRLjx4+PoUOHxuDB
+g6Nt27bRqlWraNSoUbRu3TqfGT/88EPMmTMn3rx5E69fv44HDx7EzZs34+rVq3HlypX4+++/4+LF
+i3HhwoX8fe3atbhz507cv38/bt26FWvWrImRI0fGtGnTYvfu3XH58uWoXHz//ffRu3fv6Nq1a3Tr
+rkJggg==
+------=_Part_370449_1340169331.1489506420401
+Content-Type: image/png
+Content-Transfer-Encoding: base64
+Content-Disposition: inline
+Content-ID: 
<jira-generated-image-static-task-f154c5ed-6f31-40fe-9282-434de712f077>
+
+iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEX///+1tbWzs7OwsLD////7
++/v5+fn6+Pbx7enm39jZ2dnW1tbT09PPz8+9qZiwmIOojninjXaLi4uliXKjh2+egWeBgYF7e3ty
+cnJwcHCIZEWGYkOFYECDXj2CXDyBXDuBWzoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AwO/ydzq3Plz9/gBVQQxEb0tW8YAAAAASUVORK5CYII=
+------=_Part_370449_1340169331.1489506420401
+Content-Type: image/png
+Content-Transfer-Encoding: base64
+Content-Disposition: inline
+Content-ID: 
<jira-generated-image-static-footer-desktop-logo-a08425e9-9554-4b52-8ae2-e2527647f29b>
+
+iVBORw0KGgoAAAANSUhEUgAAAKkAAAAkCAYAAADy+xopAAAAG3RFWHRqaXJhLXN5c3RlbS1pbWFn
+ZS10eXBlAGxvZ287MIqNAAAFV0lEQVR42u2cLbPrIBCGq1A4VFQUqg4VhUKh4qKizt89+U3ntjNk
+LpcB9oOkac9F7ExFwkd4uru8S3Lbvr/XYOZh4mG3C02EcexjunX73fbz8wPa88LlYV/BnmBMD5Mv
+HqwM/a7RWOa+iB3SHdKn93IRHLv5h+kTvesTzHuAMe17egOv3u2NIN1tTLzqV+LVpnCNbIByDO3M
+hX6e/Q998TqkJUh3M0nYLZkPNoV7Upuia6C2luC1+8J1SFGQ7imArnjWo2zucHZIuZDGpoJXPArY
+JbSn+iJ1OwrSNK/UUShfEUDuKYG+QDXo9sshHYOdOchX9NGi2d6TPPv+yyDJzU98EqSxdmoDTK0T
+nvfbckn7YgAAAABJRU5ErkJggg==
+------=_Part_370449_1340169331.1489506420401--

http://git-wip-us.apache.org/repos/asf/james-project/blob/4b70df97/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java
----------------------------------------------------------------------
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java
index 45b6d76..0c231ba 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java
@@ -49,7 +49,9 @@ import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.inmemory.InMemoryMessageIdManager;
+import org.apache.james.mailbox.inmemory.JsoupTextExtractor;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.ComposedMessageId;
@@ -119,7 +121,8 @@ public class GetMessagesMethodTest {
         when(messagePreview.forHTMLBody(any())).thenReturn("html preview");
         when(messagePreview.forTextBody(any())).thenReturn("text preview");
         MessageContentExtractor messageContentExtractor = new 
MessageContentExtractor();
-        MessageFactory messageFactory = new MessageFactory(messagePreview, 
messageContentExtractor);
+        TextExtractor textExtractor = new JsoupTextExtractor();
+        MessageFactory messageFactory = new MessageFactory(messagePreview, 
messageContentExtractor, textExtractor);
         InMemoryIntegrationResources inMemoryIntegrationResources = new 
InMemoryIntegrationResources();
         GroupMembershipResolver groupMembershipResolver = 
inMemoryIntegrationResources.createGroupMembershipResolver();
         mailboxManager = 
inMemoryIntegrationResources.createMailboxManager(groupMembershipResolver);
@@ -182,9 +185,9 @@ public class GetMessagesMethodTest {
             .flatExtracting(GetMessagesResponse::list)
             .extracting(Message::getId, Message::getSubject, 
Message::getTextBody)
             .containsOnly(
-                    Tuple.tuple(message1.getMessageId(), "message 1 subject", 
Optional.of("my message")), 
-                    Tuple.tuple(message2.getMessageId(), "message 2 subject", 
Optional.of("my message")),
-                    Tuple.tuple(message3.getMessageId(), "", Optional.of("my 
message")));
+                Tuple.tuple(message1.getMessageId(), "message 1 subject", 
Optional.of("my message")),
+                Tuple.tuple(message2.getMessageId(), "message 2 subject", 
Optional.of("my message")),
+                Tuple.tuple(message3.getMessageId(), "", Optional.of("my 
message")));
     }
     
     @Test
@@ -208,8 +211,8 @@ public class GetMessagesMethodTest {
             .hasOnlyElementsOfType(GetMessagesResponse.class)
             .extracting(GetMessagesResponse.class::cast)
             .flatExtracting(GetMessagesResponse::list)
-            .extracting(Message::getId, Message::getTextBody, 
Message::getHtmlBody)
-            .containsOnly(Tuple.tuple(message.getMessageId(), 
Optional.empty(), Optional.of("my <b>HTML</b> message")));
+            .extracting(Message::getId, Message::getHtmlBody)
+            .containsOnly(Tuple.tuple(message.getMessageId(), Optional.of("my 
<b>HTML</b> message")));
     }
 
     @Test
@@ -298,7 +301,93 @@ public class GetMessagesMethodTest {
             .asList()
             .containsOnlyElementsOf(expected);
     }
-    
+
+    @Test
+    public void 
processShouldReturnTextBodyWhenEmptyTextBodyAndNotEmptyHtmlBody() throws 
MailboxException {
+        MessageManager inbox = mailboxManager.getMailbox(inboxPath, session);
+        Date now = new Date();
+        ByteArrayInputStream messageContent = new 
ByteArrayInputStream(("Content-Type: text/html\r\n"
+            + "Subject: message 1 subject\r\n"
+            + "\r\n"
+            + "my <b>HTML</b> message").getBytes(Charsets.UTF_8));
+        ComposedMessageId message = inbox.appendMessage(messageContent, now, 
session, false, null);
+
+        GetMessagesRequest request = GetMessagesRequest.builder()
+            .ids(ImmutableList.of(message.getMessageId()))
+            .build();
+
+        List<JmapResponse> result = testee.process(request, clientId, 
session).collect(Collectors.toList());
+
+        assertThat(result).hasSize(1)
+            .extracting(JmapResponse::getResponse)
+            .hasOnlyElementsOfType(GetMessagesResponse.class)
+            .extracting(GetMessagesResponse.class::cast)
+            .flatExtracting(GetMessagesResponse::list)
+            .extracting(Message::getId, Message::getTextBody, 
Message::getHtmlBody)
+            .containsOnly(Tuple.tuple(message.getMessageId(), Optional.of("my 
HTML message"), Optional.of("my <b>HTML</b> message")));
+    }
+
+    @Test
+    public void processShouldEmptyTextBodyAndHtmlBodyWhenThoseAreEmpty() 
throws MailboxException {
+        MessageManager inbox = mailboxManager.getMailbox(inboxPath, session);
+        Date now = new Date();
+        ByteArrayInputStream messageContent = new 
ByteArrayInputStream(("Content-Type: text/html\r\n"
+            + "Subject: message 1 subject\r\n"
+            + "\r\n").getBytes(Charsets.UTF_8));
+        ComposedMessageId message = inbox.appendMessage(messageContent, now, 
session, false, null);
+
+        GetMessagesRequest request = GetMessagesRequest.builder()
+            .ids(ImmutableList.of(message.getMessageId()))
+            .build();
+
+        List<JmapResponse> result = testee.process(request, clientId, 
session).collect(Collectors.toList());
+
+        assertThat(result).hasSize(1)
+            .extracting(JmapResponse::getResponse)
+            .hasOnlyElementsOfType(GetMessagesResponse.class)
+            .extracting(GetMessagesResponse.class::cast)
+            .flatExtracting(GetMessagesResponse::list)
+            .extracting(Message::getId, Message::getTextBody, 
Message::getHtmlBody)
+            .containsOnly(Tuple.tuple(message.getMessageId(), 
Optional.empty(), Optional.empty()));
+    }
+
+    @Test
+    public void processShouldNotOverrideTextBodyWhenItIsThere() throws 
MailboxException {
+        MessageManager inbox = mailboxManager.getMailbox(inboxPath, session);
+        Date now = new Date();
+        ByteArrayInputStream messageContent = new 
ByteArrayInputStream(("Subject\n"
+            + "MIME-Version: 1.0\n"
+            + "Content-Type: multipart/alternative;\n"
+            + "\tboundary=\"----=_Part_370449_1340169331.1489506420401\"\n"
+            + "\n"
+            + "------=_Part_370449_1340169331.1489506420401\n"
+            + "Content-Type: text/plain; charset=UTF-8\n"
+            + "Content-Transfer-Encoding: 7bit\n"
+            + "\n"
+            + "My plain message\n"
+            + "------=_Part_370449_1340169331.1489506420401\n"
+            + "Content-Type: text/html; charset=UTF-8\n"
+            + "Content-Transfer-Encoding: 7bit\n"
+            + "\n"
+            + "<a>The </a> <strong>HTML</strong> message"
+        ).getBytes(Charsets.UTF_8));
+        ComposedMessageId message = inbox.appendMessage(messageContent, now, 
session, false, null);
+
+        GetMessagesRequest request = GetMessagesRequest.builder()
+            .ids(ImmutableList.of(message.getMessageId()))
+            .build();
+
+        List<JmapResponse> result = testee.process(request, clientId, 
session).collect(Collectors.toList());
+
+        assertThat(result).hasSize(1)
+            .extracting(JmapResponse::getResponse)
+            .hasOnlyElementsOfType(GetMessagesResponse.class)
+            .extracting(GetMessagesResponse.class::cast)
+            .flatExtracting(GetMessagesResponse::list)
+            .extracting(Message::getId, Message::getTextBody, 
Message::getHtmlBody)
+            .containsOnly(Tuple.tuple(message.getMessageId(), Optional.of("My 
plain message"), Optional.of("<a>The </a> <strong>HTML</strong> message")));
+    }
+
     @Test
     public void 
processShouldReturnHeadersFieldWhenSpecificHeadersRequestedInPropertyList() 
throws MailboxException {
         MessageManager inbox = mailboxManager.getMailbox(inboxPath, session);


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to