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