You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2017/08/25 08:32:46 UTC

[08/13] james-project git commit: JAMES-2110 IT for getMessages which return keywords of imap flags

JAMES-2110 IT for getMessages which return keywords of imap flags


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

Branch: refs/heads/master
Commit: 41e3d15d299a7d86dcc70a47eaab69f0d2c9c58c
Parents: 37cf8ff
Author: quynhn <qn...@linagora.com>
Authored: Tue Aug 15 16:48:11 2017 +0700
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Thu Aug 24 15:47:28 2017 +0200

----------------------------------------------------------------------
 .../cucumber/GetMessagesMethodStepdefs.java     |  38 +++++-
 .../test/resources/cucumber/GetMessages.feature |  33 +++++
 .../jmap/methods/GetMessagesMethodTest.java     | 135 ++++++++++++++++++-
 3 files changed, 193 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/41e3d15d/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 13200f9..f42a071 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
@@ -42,6 +42,7 @@ import org.apache.http.HttpResponse;
 import org.apache.http.client.fluent.Request;
 import org.apache.james.jmap.DefaultMailboxes;
 import org.apache.james.jmap.methods.integration.cucumber.util.TableRow;
+import org.apache.james.jmap.model.Keywords;
 import org.apache.james.jmap.model.MessagePreviewGenerator;
 import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MailboxId;
@@ -84,11 +85,11 @@ public class GetMessagesMethodStepdefs {
     private final MainStepdefs mainStepdefs;
     private final UserStepdefs userStepdefs;
     private final Map<String, MessageId> messageIdsByName;
-    
+
     private HttpResponse response;
     private DocumentContext jsonPath;
     private List<MessageId> requestedMessageIds;
-    
+
     @Inject
     private GetMessagesMethodStepdefs(MainStepdefs mainStepdefs, UserStepdefs userStepdefs) {
         this.mainStepdefs = mainStepdefs;
@@ -147,9 +148,9 @@ public class GetMessagesMethodStepdefs {
 
     private MessageId appendMessage(String mailbox, ContentType contentType, String subject, String content, Optional<Map<String, String>> headers) throws Exception {
         ZonedDateTime dateTime = ZonedDateTime.parse("2014-10-30T14:12:00Z");
-        return mainStepdefs.jmapServer.getProbe(MailboxProbeImpl.class).appendMessage(userStepdefs.lastConnectedUser, 
+        return mainStepdefs.jmapServer.getProbe(MailboxProbeImpl.class).appendMessage(userStepdefs.lastConnectedUser,
                 new MailboxPath(MailboxConstants.USER_NAMESPACE, userStepdefs.lastConnectedUser, mailbox),
-                new ByteArrayInputStream(message(contentType, subject, content, headers).getBytes(Charsets.UTF_8)), 
+                new ByteArrayInputStream(message(contentType, subject, content, headers).getBytes(Charsets.UTF_8)),
                 Date.from(dateTime.toInstant()), false, new Flags()).getMessageId();
     }
 
@@ -246,6 +247,25 @@ public class GetMessagesMethodStepdefs {
         appendMessage(messageName, "eml/htmlWithLongAndComplicatedContent.eml");
     }
 
+    @Given("^the user has a message \"([^\"]*)\" in the \"([^\"]*)\" mailbox with flags \"([^\"]*)\"$")
+    public void appendMessageWithFlags(String messageName, String mailbox, List<String> keywords) throws Exception {
+        Flags flags = Keywords.factory()
+            .fromList(keywords)
+            .asFlags();
+        appendMessage(messageName, flags);
+    }
+
+    private void appendMessage(String messageName, Flags flags) throws Exception {
+        ZonedDateTime dateTime = ZonedDateTime.parse("2014-10-30T14:12:00Z");
+        boolean isRecent = flags.contains(Flags.Flag.RECENT);
+        MessageId id = mainStepdefs.jmapServer.getProbe(MailboxProbeImpl.class).appendMessage(userStepdefs.lastConnectedUser,
+                new MailboxPath(MailboxConstants.USER_NAMESPACE, userStepdefs.lastConnectedUser, DefaultMailboxes.INBOX),
+                new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()),
+                Date.from(dateTime.toInstant()), isRecent, flags)
+                .getMessageId();
+        messageIdsByName.put(messageName, id);
+    }
+
     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,
@@ -377,12 +397,12 @@ public class GetMessagesMethodStepdefs {
         assertThat(jsonPath.<List<String>>read(ARGUMENTS + ".notFound")).containsExactlyElementsOf(elements);
     }
 
-    
+
     @Then("^the list should contain (\\d+) message$")
     public void assertListContains(int numberOfMessages) throws Exception {
         assertThat(jsonPath.<List<String>>read(ARGUMENTS + ".list")).hasSize(numberOfMessages);
     }
-    
+
     @Then("^the id of the message is \"([^\"]*)\"$")
     public void assertIdOfTheFirstMessage(String messageName) throws Exception {
         MessageId id = messageIdsByName.get(messageName);
@@ -503,6 +523,12 @@ public class GetMessagesMethodStepdefs {
         assertThat(actual).contains(preview);
     }
 
+    @Then("^the keywords of the message is (.*)$")
+    public void assertKeywordsOfMessageShouldDisplay(List<String> keywords) throws Exception {
+        assertThat(jsonPath.<Map<String, Boolean>>read(FIRST_MESSAGE + ".keywords").keySet())
+            .containsOnlyElementsOf(keywords);
+    }
+
     private void assertAttachment(String attachment, DataTable attachmentProperties) {
         attachmentProperties.asList(TableRow.class)
             .forEach(entry -> assertThat(jsonPath.<Object>read(attachment + "." + entry.getKey())).isEqualTo(entry.getValue()));

http://git-wip-us.apache.org/repos/asf/james-project/blob/41e3d15d/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 9f0255f..78addb9 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
@@ -318,3 +318,36 @@ Feature: GetMessages method
     Examples:
             |content-type                                       |tranfer-encoding   |content                                                                                                     |preview                                                                                      |
             |"text/html; charset=iso-8859-1"                    |quoted-printable   |"Dans le cadre du stage effectu=E9 Mlle 2017, =E0 sign=E9e d=E8s que possible, =E0, tr=E8s, journ=E9e.."    |effectué, à, signée dès, très, journée                                                                        |
+
+  Scenario Outline: Retrieving message should display keywords as jmap flag
+    Given the user has a message "m1" in the "inbox" mailbox with flags <flags>
+    When the user ask for messages "m1"
+    Then no error is returned
+    And the list should contain 1 message
+    And the keywords of the message is <keyword>
+
+    Examples:
+            |flags                          |keyword                        |
+            |"$Flagged,$Answered,$Draft"    |$Flagged,$Answered,$Draft      |
+
+  Scenario Outline: Retrieving message should display keywords without unsupported jmap flag
+    Given the user has a message "m1" in the "inbox" mailbox with flags <flags>
+    When the user ask for messages "m1"
+    Then no error is returned
+    And the list should contain 1 message
+    And the keywords of the message is <keyword>
+
+    Examples:
+            |flags                                  |keyword                 |
+            |"$Flagged,$Answered,$Deleted,$Recent"  |$Flagged,$Answered      |
+
+  Scenario Outline: Retrieving message should display keywords with custom user jmap flag
+    Given the user has a message "m1" in the "inbox" mailbox with flags <flags>
+    When the user ask for messages "m1"
+    Then no error is returned
+    And the list should contain 1 message
+    And the keywords of the message is <keyword>
+
+    Examples:
+            |flags                    |keyword                 |
+            |"$Flagged,$Forwarded"    |$Forwarded,$Flagged     |

http://git-wip-us.apache.org/repos/asf/james-project/blob/41e3d15d/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 c403251..6d7b06a 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
@@ -23,7 +23,6 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
-
 import java.io.ByteArrayInputStream;
 import java.util.Date;
 import java.util.List;
@@ -34,6 +33,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import javax.mail.Flags;
+import javax.mail.Flags.Flag;
 
 import com.google.common.collect.ImmutableSet;
 import org.apache.commons.lang.NotImplementedException;
@@ -46,6 +46,7 @@ import org.apache.james.jmap.model.MessagePreviewGenerator;
 import org.apache.james.jmap.model.MessageProperties.MessageProperty;
 import org.apache.james.jmap.utils.HtmlTextExtractor;
 import org.apache.james.jmap.utils.JsoupHtmlTextExtractor;
+import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
@@ -60,11 +61,6 @@ import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
 import org.apache.james.util.mime.MessageContentExtractor;
-import org.assertj.core.api.Condition;
-import org.assertj.core.data.MapEntry;
-import org.assertj.core.groups.Tuple;
-import org.junit.Before;
-import org.junit.Test;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
@@ -72,11 +68,18 @@ import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.base.Charsets;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Sets;
 import com.jayway.jsonpath.JsonPath;
 
-public class GetMessagesMethodTest {
+import org.assertj.core.api.Condition;
+import org.assertj.core.data.MapEntry;
+import org.assertj.core.groups.Tuple;
+import org.junit.Before;
+import org.junit.Test;
 
+public class GetMessagesMethodTest {
+    private final static String FORWARDED = "forwarded";
     public static final Flags FLAGS = null;
     public static final boolean NOT_RECENT = false;
     private MessageIdManager messageIdManager;
@@ -495,4 +498,122 @@ public class GetMessagesMethodTest {
         GetMessagesResponse getMessagesResponse = (GetMessagesResponse) response;
         assertThat(getMessagesResponse.list()).hasSize(1);
     }
+
+    @Test
+    public void processShouldReturnKeywordsForMessageFlags() throws MailboxException {
+        Flags flags = FlagsBuilder.builder()
+            .add(Flag.ANSWERED, Flag.DRAFT)
+            .build();
+        MessageManager inbox = mailboxManager.getMailbox(inboxPath, session);
+        Date now = new Date();
+        ByteArrayInputStream message1Content = new ByteArrayInputStream("Subject: message 1 subject\r\n\r\nmy message".getBytes(Charsets.UTF_8));
+        ComposedMessageId message1 = inbox.appendMessage(message1Content, now, session, false, flags);
+        ByteArrayInputStream message2Content = new ByteArrayInputStream("Subject: message 2 subject\r\n\r\nmy message".getBytes(Charsets.UTF_8));
+        ComposedMessageId message2 = inbox.appendMessage(message2Content, now, session, false, flags);
+        ByteArrayInputStream message3Content = new ByteArrayInputStream("Great-Header: message 3 subject\r\n\r\nmy message".getBytes(Charsets.UTF_8));
+        ComposedMessageId message3 = inbox.appendMessage(message3Content, now, session, false, flags);
+
+        GetMessagesRequest request = GetMessagesRequest.builder()
+            .ids(ImmutableList.of(message1.getMessageId(),
+                message2.getMessageId(),
+                message3.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::getKeywords)
+            .containsOnly(
+                ImmutableMap.of(
+                    "$Answered", true,
+                    "$Draft", true),
+                ImmutableMap.of(
+                    "$Answered", true,
+                    "$Draft", true),
+                ImmutableMap.of(
+                    "$Answered", true,
+                    "$Draft", true));
+
+    }
+
+
+    @Test
+    public void processShouldReturnKeywordsWithoutUnsupportedKeywordsForMessageFlags() throws MailboxException {
+        Flags flags1 = FlagsBuilder.builder()
+            .add(Flag.ANSWERED, Flag.DRAFT, Flag.DELETED)
+            .build();
+        Flags flags2 = FlagsBuilder.builder()
+            .add(Flag.ANSWERED, Flag.DRAFT)
+            .build();
+        Flags flags3 = FlagsBuilder.builder()
+            .add(Flag.ANSWERED, Flag.DRAFT, Flag.RECENT)
+            .build();
+        MessageManager inbox = mailboxManager.getMailbox(inboxPath, session);
+        Date now = new Date();
+        ByteArrayInputStream message1Content = new ByteArrayInputStream("Subject: message 1 subject\r\n\r\nmy message".getBytes(Charsets.UTF_8));
+        ComposedMessageId message1 = inbox.appendMessage(message1Content, now, session, false, flags1);
+        ByteArrayInputStream message2Content = new ByteArrayInputStream("Subject: message 2 subject\r\n\r\nmy message".getBytes(Charsets.UTF_8));
+        ComposedMessageId message2 = inbox.appendMessage(message2Content, now, session, false, flags2);
+        ByteArrayInputStream message3Content = new ByteArrayInputStream("Great-Header: message 3 subject\r\n\r\nmy message".getBytes(Charsets.UTF_8));
+        ComposedMessageId message3 = inbox.appendMessage(message3Content, now, session, false, flags3);
+
+        GetMessagesRequest request = GetMessagesRequest.builder()
+            .ids(ImmutableList.of(message1.getMessageId(),
+                message2.getMessageId(),
+                message3.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::getKeywords)
+            .containsOnly(
+                ImmutableMap.of(
+                    "$Answered", true,
+                    "$Draft", true),
+                ImmutableMap.of(
+                    "$Answered", true,
+                    "$Draft", true),
+                ImmutableMap.of(
+                    "$Answered", true,
+                    "$Draft", true));
+
+    }
+
+    @Test
+    public void processShouldReturnKeywordsWithoutForwardedWhenForwardedUserFlagsMessages() throws MailboxException {
+        Flags flags = FlagsBuilder.builder()
+            .add(Flag.ANSWERED, Flag.DELETED)
+            .add(FORWARDED)
+            .build();
+        MessageManager inbox = mailboxManager.getMailbox(inboxPath, session);
+        Date now = new Date();
+        ByteArrayInputStream message1Content = new ByteArrayInputStream("Subject: message 1 subject\r\n\r\nmy message".getBytes(Charsets.UTF_8));
+        ComposedMessageId message1 = inbox.appendMessage(message1Content, now, session, false, flags);
+
+        GetMessagesRequest request = GetMessagesRequest.builder()
+            .ids(ImmutableList.of(message1.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::getKeywords)
+            .containsOnly(
+                ImmutableMap.of(
+                    "$Answered", true,
+                    FORWARDED, true));
+    }
 }


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