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 ma...@apache.org on 2017/10/23 11:51:19 UTC
[08/16] james-project git commit: JAMES-2186 make GetMessages
cucumber test stateless
JAMES-2186 make GetMessages cucumber test stateless
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/eff87da0
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/eff87da0
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/eff87da0
Branch: refs/heads/master
Commit: eff87da0cd1710e0705bf7e1f6c6613bb0db7f04
Parents: 1a7ebcd
Author: Luc DUZAN <ld...@linagora.com>
Authored: Thu Oct 19 14:17:48 2017 +0700
Committer: Matthieu Baechler <ma...@apache.org>
Committed: Mon Oct 23 13:50:39 2017 +0200
----------------------------------------------------------------------
.../cucumber/GetMessageListMethodStepdefs.java | 4 +-
.../cucumber/GetMessagesMethodStepdefs.java | 238 +++++++++++++++----
.../integration/cucumber/ImapStepdefs.java | 16 +-
.../cucumber/SetMailboxesMethodStepdefs.java | 14 +-
.../cucumber/SetMessagesMethodStepdefs.java | 12 +-
.../integration/cucumber/UserStepdefs.java | 23 +-
.../test/resources/cucumber/GetMessages.feature | 144 ++++++-----
7 files changed, 307 insertions(+), 144 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/eff87da0/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessageListMethodStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessageListMethodStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessageListMethodStepdefs.java
index c718803..74346e0 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessageListMethodStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessageListMethodStepdefs.java
@@ -63,7 +63,7 @@ public class GetMessageListMethodStepdefs {
public void getMessageList(String mailbox, String flag) throws Exception {
MailboxId mailboxId = mainStepdefs.jmapServer
.getProbe(MailboxProbeImpl.class)
- .getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.lastConnectedUser, mailbox)
+ .getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.getConnectedUser(), mailbox)
.getMailboxId();
post(String.format(
@@ -105,7 +105,7 @@ public class GetMessageListMethodStepdefs {
private void post(String requestBody) throws Exception {
response = Request.Post(mainStepdefs.baseUri().setPath("/jmap").build())
- .addHeader("Authorization", userStepdefs.tokenByUser.get(userStepdefs.lastConnectedUser).serialize())
+ .addHeader("Authorization", userStepdefs.tokenByUser.get(userStepdefs.getConnectedUser()).serialize())
.addHeader("Accept", org.apache.http.entity.ContentType.APPLICATION_JSON.getMimeType())
.bodyString(requestBody, org.apache.http.entity.ContentType.APPLICATION_JSON)
.execute()
http://git-wip-us.apache.org/repos/asf/james-project/blob/eff87da0/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 08f4a79..2be46bf 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
@@ -103,26 +103,46 @@ public class GetMessagesMethodStepdefs {
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" and \"([^\"]*)\" mailboxes with subject \"([^\"]*)\", content \"([^\"]*)\"$")
public void appendMessageInTwoMailboxes(String messageName, String mailbox1, String mailbox2, String subject, String content) throws Exception {
MessageId id = appendMessage(mailbox1, ContentType.noContentType(), subject, content, NO_HEADERS);
- MailboxId mailboxId1 = mainStepdefs.mailboxProbe.getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.lastConnectedUser, mailbox1).getMailboxId();
- MailboxId mailboxId2 = mainStepdefs.mailboxProbe.getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.lastConnectedUser, mailbox2).getMailboxId();
+ MailboxId mailboxId1 = mainStepdefs.mailboxProbe.getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.getConnectedUser(), mailbox1).getMailboxId();
+ MailboxId mailboxId2 = mainStepdefs.mailboxProbe.getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.getConnectedUser(), mailbox2).getMailboxId();
- mainStepdefs.jmapServer.getProbe(JmapGuiceProbe.class).setInMailboxes(id, userStepdefs.lastConnectedUser, mailboxId1, mailboxId2);
+ mainStepdefs.jmapServer.getProbe(JmapGuiceProbe.class).setInMailboxes(id, userStepdefs.getConnectedUser(), mailboxId1, mailboxId2);
messageIdsByName.put(messageName, id);
mainStepdefs.awaitMethod.run();
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" and \"([^\"]*)\" mailboxes with subject \"([^\"]*)\", content \"([^\"]*)\"$")
+ public void appendMessageInTwoMailboxes(String username, String messageName, String mailbox1, String mailbox2, String subject, String content) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageInTwoMailboxes(messageName, mailbox1, mailbox2, subject, content));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with subject \"([^\"]*)\", content \"([^\"]*)\"$")
public void appendMessage(String messageName, String mailbox, String subject, String content) throws Exception {
MessageId id = appendMessage(mailbox, ContentType.noContentType(), subject, content, NO_HEADERS);
messageIdsByName.put(messageName, id);
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with subject \"([^\"]*)\", content \"([^\"]*)\"$")
+ public void appendMessage(String username, String messageName, String mailbox, String subject, String content) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessage(messageName, mailbox, subject, content));
+ }
+
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with content-type \"([^\"]*)\" subject \"([^\"]*)\", content \"([^\"]*)\"$")
+ public void appendMessageWithContentType(String username, String messageName, String mailbox, String contentType, String subject, String content) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageWithContentType(messageName, mailbox, contentType, subject, content));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with content-type \"([^\"]*)\" subject \"([^\"]*)\", content \"([^\"]*)\"$")
- public void appendMessage(String messageName, String mailbox, String contentType, String subject, String content) throws Exception {
+ public void appendMessageWithContentType(String messageName, String mailbox, String contentType, String subject, String content) throws Throwable {
MessageId id = appendMessage(mailbox, ContentType.from(contentType), subject, content, NO_HEADERS);
messageIdsByName.put(messageName, id);
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with content-type \"([^\"]*)\" subject \"([^\"]*)\", content \"([^\"]*)\", headers$")
+ public void appendMessage(String username, String messageName, String mailbox, String contentType, String subject, String content, DataTable headers) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessage(messageName, mailbox, contentType, subject, content, headers));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with content-type \"([^\"]*)\" subject \"([^\"]*)\", content \"([^\"]*)\", headers$")
public void appendMessage(String messageName, String mailbox, String contentType, String subject, String content, DataTable headers) throws Exception {
MessageId id = appendMessage(mailbox, ContentType.from(contentType), subject, content, Optional.of(headers.asMap(String.class, String.class)));
@@ -130,19 +150,29 @@ public class GetMessagesMethodStepdefs {
}
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with subject \"([^\"]*)\", content \"([^\"]*)\", headers$")
- public void appendMessage(String messageName, String mailbox, String subject, String content, DataTable headers) throws Exception {
+ public void appendMessageWithHeader(String messageName, String mailbox, String subject, String content, DataTable headers) throws Exception {
MessageId id = appendMessage(mailbox, ContentType.noContentType(), subject, content, Optional.of(headers.asMap(String.class, String.class)));
messageIdsByName.put(messageName, id);
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with subject \"([^\"]*)\", content \"([^\"]*)\", headers$")
+ public void appendMessageWithHeader(String username, String messageName, String mailbox, String subject, String content, DataTable headers) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageWithHeader(messageName, mailbox, subject, content, headers));
+ }
+
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox, composed of a multipart with inlined text part and inlined html part$")
+ public void appendMessageFromFileInlinedMultipart(String username, String messageName, String mailbox) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageFromFileInlinedMultipart(messageName, mailbox));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox, composed of a multipart with inlined text part and inlined html part$")
public void appendMessageFromFileInlinedMultipart(String messageName, String mailbox) throws Exception {
ZonedDateTime dateTime = ZonedDateTime.parse("2014-10-30T14:12:00Z");
- MessageId id = mainStepdefs.mailboxProbe.appendMessage(userStepdefs.lastConnectedUser,
- MailboxPath.forUser(userStepdefs.lastConnectedUser, mailbox),
- ClassLoader.getSystemResourceAsStream("eml/inlinedMultipart.eml"),
- Date.from(dateTime.toInstant()), false, new Flags())
- .getMessageId();
+ MessageId id = mainStepdefs.mailboxProbe.appendMessage(userStepdefs.getConnectedUser(),
+ MailboxPath.forUser(userStepdefs.getConnectedUser(), mailbox),
+ ClassLoader.getSystemResourceAsStream("eml/inlinedMultipart.eml"),
+ Date.from(dateTime.toInstant()), false, new Flags())
+ .getMessageId();
messageIdsByName.put(messageName, id);
mainStepdefs.awaitMethod.run();
}
@@ -150,8 +180,8 @@ 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");
try {
- return mainStepdefs.mailboxProbe.appendMessage(userStepdefs.lastConnectedUser,
- MailboxPath.forUser(userStepdefs.lastConnectedUser, mailbox),
+ return mainStepdefs.mailboxProbe.appendMessage(userStepdefs.getConnectedUser(),
+ MailboxPath.forUser(userStepdefs.getConnectedUser(), mailbox),
new ByteArrayInputStream(message(contentType, subject, content, headers).getBytes(Charsets.UTF_8)),
Date.from(dateTime.toInstant()), false, new Flags()).getMessageId();
} finally {
@@ -165,16 +195,16 @@ public class GetMessagesMethodStepdefs {
private String serialize(Optional<Map<String,String>> headers) {
return headers
- .map(Map::entrySet)
- .map(entriesToString())
- .orElse("");
+ .map(Map::entrySet)
+ .map(entriesToString())
+ .orElse("");
}
private Function<Set<Entry<String, String>>, String> entriesToString() {
return entries -> entries.stream()
- .map(this::entryToPair)
- .map(this::joinKeyValue)
- .collect(Collectors.joining("\r\n", "", "\r\n"));
+ .map(this::entryToPair)
+ .map(this::joinKeyValue)
+ .collect(Collectors.joining("\r\n", "", "\r\n"));
}
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with two attachments$")
@@ -182,76 +212,157 @@ public class GetMessagesMethodStepdefs {
appendMessage(messageName, "eml/twoAttachments.eml");
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with two attachments$")
+ public void appendHtmlMessageWithTwoAttachments(String username, String messageName, String mailbox) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendHtmlMessageWithTwoAttachments(messageName, mailbox));
+ }
+
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with two attachments in text$")
+ public void appendTextMessageWithTwoAttachments(String username, String messageName, String mailbox) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendTextMessageWithTwoAttachments(messageName, mailbox));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with two attachments in text$")
public void appendTextMessageWithTwoAttachments(String messageName, String mailbox) throws Exception {
appendMessage(messageName, "eml/twoAttachmentsTextPlain.eml");
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with two same attachments in text$")
+ public void appendTextMessageWithTwoSameAttachments(String username, String messageName, String mailbox) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendTextMessageWithTwoAttachments(messageName, mailbox));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with two same attachments in text$")
public void appendTextMessageWithTwoSameAttachments(String messageName, String mailbox) throws Exception {
appendMessage(messageName, "eml/twoSameAttachments.eml");
}
+ @Given("^\"([^\"]*)\" has a multipart message \"([^\"]*)\" in \"([^\"]*)\" mailbox$")
+ public void appendMultipartMessageWithOneAttachments(String username, String messageName, String arg1) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMultipartMessageWithOneAttachments(messageName, arg1));
+ }
+
@Given("^the user has a multipart message \"([^\"]*)\" in \"([^\"]*)\" mailbox$")
public void appendMultipartMessageWithOneAttachments(String messageName, String arg1) throws Exception {
appendMessage(messageName, "eml/htmlAndTextMultipartWithOneAttachment.eml");
}
+ @Given("\"([^\"]*)\" has a multipart/related message \"([^\"]*)\" in \"([^\"]*)\" mailbox$")
+ public void appendMultipartRelated(String username, String messageName, String mailbox) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMultipartRelated(messageName, mailbox));
+ }
+
@Given("^the user has a multipart/related message \"([^\"]*)\" in \"([^\"]*)\" mailbox$")
public void appendMultipartRelated(String messageName, String mailbox) throws Exception {
appendMessage(messageName, "eml/multipartRelated.eml");
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox beginning by a long line$")
+ public void appendMessageBeginningByALongLine(String username, String messageName, String mailbox) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageBeginningByALongLine(messageName, mailbox));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox beginning by a long line$")
public void appendMessageBeginningByALongLine(String messageName, String mailbox) throws Exception {
appendMessage(messageName, "eml/longLine.eml");
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with plain/text inline attachment$")
+ public void appendMessageWithPlainTextInlineAttachment(String username, String messageName, String mailbox) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageWithPlainTextInlineAttachment(messageName, mailbox));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with plain/text inline attachment$")
public void appendMessageWithPlainTextInlineAttachment(String messageName, String mailbox) throws Exception {
appendMessage(messageName, "eml/embeddedMultipartWithInlineTextAttachment.eml");
}
+
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with text in main multipart and html in inner multipart$")
+ public void appendMessageWithTextInMainMultipartAndHtmlInInnerMultipart(String username, String messageName, String mailbox) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageWithTextInMainMultipartAndHtmlInInnerMultipart(messageName, mailbox));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with text in main multipart and html in inner multipart$")
public void appendMessageWithTextInMainMultipartAndHtmlInInnerMultipart(String messageName, String mailbox) throws Exception {
appendMessage(messageName, "eml/textInMainMultipartHtmlInInnerMultipart.eml");
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with html body and no text body$")
+ public void appendMessageWithNoTextButHtml(String username, String messageName, String mailbox) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageWithNoTextButHtml(messageName, mailbox));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with html body and no text body$")
public void appendMessageWithNoTextButHtml(String messageName, String mailbox) throws Exception {
appendMessage(messageName, "eml/noTextBodyButHtmlBody.eml");
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with inline attachment but no CID$")
+ public void appendMessageWithInlineAttachmentButNoCid(String username, String messageName, String mailbox) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageWithInlineAttachmentButNoCid(messageName, mailbox));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with inline attachment but no CID$")
public void appendMessageWithInlineAttachmentButNoCid(String messageName, String mailbox) throws Exception {
appendMessage(messageName, "eml/mailWithInlinedAttachmentButNoCid.eml");
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with inline attachment and blank CID$")
+ public void appendMessageWithInlineAttachmentAndBlankCid(String username, String messageName, String mailbox) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageWithInlineAttachmentAndBlankCid(messageName, mailbox));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with inline attachment and blank CID$")
public void appendMessageWithInlineAttachmentAndBlankCid(String messageName, String mailbox) throws Throwable {
appendMessage(messageName, "eml/mailWithInlinedAttachmentAndBlankCid.eml");
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with HTML body with many empty tags$")
+ public void appendMessageWithNoPreview(String username, String messageName, String mailbox) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageWithNoPreview(messageName, mailbox));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with HTML body with many empty tags$")
public void appendMessageWithNoPreview(String messageName, String mailbox) throws Exception {
appendMessage(messageName, "eml/htmlBodyWithManyEmptyTags.eml");
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in the \"([^\"]*)\" mailbox with multiple same inlined attachments \"([^\"]*)\"$")
+ public void appendMessageWithSameInlinedAttachmentsToMailbox(String username, String messageName, String mailbox, String attachmentId) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageWithSameInlinedAttachmentsToMailbox(messageName, mailbox, attachmentId));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in the \"([^\"]*)\" mailbox with multiple same inlined attachments \"([^\"]*)\"$")
public void appendMessageWithSameInlinedAttachmentsToMailbox(String messageName, String mailbox, String attachmentId) throws Exception {
appendMessage(messageName, "eml/sameInlinedImages.eml");
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with specific charset$")
+ public void appendMessageWithSpecificCharset(String username, String messageName, String mailbox) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageWithSpecificCharset(messageName, mailbox));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with specific charset$")
public void appendMessageWithSpecificCharset(String messageName, String mailbox) throws Exception {
appendMessage(messageName, "eml/windows1252charset.eml");
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with long and complicated HTML content$")
+ public void appendMessageWithSpecialCase(String username, String messageName, String mailbox) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageWithSpecialCase(messageName, mailbox));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with long and complicated HTML content$")
public void appendMessageWithSpecialCase(String messageName, String mailbox) throws Exception {
appendMessage(messageName, "eml/htmlWithLongAndComplicatedContent.eml");
}
+ @Given("^\"([^\"]*)\" has a message \"([^\"]*)\" in the \"([^\"]*)\" mailbox with flags \"([^\"]*)\"$")
+ public void appendMessageWithFlags(String username, String messageName, String mailbox, List<String> flagList) throws Throwable {
+ userStepdefs.execWithUser(username, () -> appendMessageWithFlags(messageName, mailbox, flagList));
+ }
+
@Given("^the user has a message \"([^\"]*)\" in the \"([^\"]*)\" mailbox with flags \"([^\"]*)\"$")
public void appendMessageWithFlags(String messageName, String mailbox, List<String> flagList) throws Exception {
appendMessage(messageName, StringListToFlags.fromFlagList(flagList));
@@ -260,29 +371,39 @@ public class GetMessagesMethodStepdefs {
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.mailboxProbe.appendMessage(userStepdefs.lastConnectedUser,
- MailboxPath.forUser(userStepdefs.lastConnectedUser, DefaultMailboxes.INBOX),
- new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()),
- Date.from(dateTime.toInstant()), isRecent, flags)
- .getMessageId();
+ MessageId id = mainStepdefs.mailboxProbe.appendMessage(userStepdefs.getConnectedUser(),
+ MailboxPath.forUser(userStepdefs.getConnectedUser(), 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.mailboxProbe.appendMessage(userStepdefs.lastConnectedUser,
- MailboxPath.forUser(userStepdefs.lastConnectedUser, DefaultMailboxes.INBOX),
- ClassLoader.getSystemResourceAsStream(emlFileName),
- Date.from(dateTime.toInstant()), false, new Flags())
- .getMessageId();
+ MessageId id = mainStepdefs.mailboxProbe.appendMessage(userStepdefs.getConnectedUser(),
+ MailboxPath.forUser(userStepdefs.getConnectedUser(), DefaultMailboxes.INBOX),
+ ClassLoader.getSystemResourceAsStream(emlFileName),
+ Date.from(dateTime.toInstant()), false, new Flags())
+ .getMessageId();
messageIdsByName.put(messageName, id);
}
- @When("^the user ask for messages using its accountId$")
+ @When("^\"([^\"]*)\" ask for messages using its accountId$")
+ public void postWithAccountId(String user) throws Throwable {
+ userStepdefs.execWithUser(user, this::postWithAccountId);
+ }
+
+ @When("^\the user ask for messages using its accountId$")
public void postWithAccountId() throws Exception {
post("[[\"getMessages\", {\"accountId\": \"1\"}, \"#0\"]]");
}
+ @When("^\"([^\"]*)\" ask for messages using unknown arguments$")
+ public void postWithUnknownArguments(String user) throws Throwable {
+ userStepdefs.execWithUser(user, this::postWithUnknownArguments);
+ }
+
@When("^the user ask for messages using unknown arguments$")
public void postWithUnknownArguments() throws Exception {
post("[[\"getMessages\", {\"WAT\": true}, \"#0\"]]");
@@ -293,19 +414,39 @@ public class GetMessagesMethodStepdefs {
post("[[\"getMessages\", {\"ids\": null}, \"#0\"]]");
}
+ @When("^\"([^\"]*)\" ask for messages using invalid argument$")
+ public void postWithInvalidArguments(String user) throws Throwable {
+ userStepdefs.execWithUser(user, this::postWithInvalidArguments);
+ }
+
@When("^the user ask for messages$")
public void post() throws Exception {
post("[[\"getMessages\", {\"ids\": []}, \"#0\"]]");
}
+ @When("^\"(.*?)\" ask for messages$")
+ public void postWithGivenUser(String username) throws Throwable {
+ userStepdefs.execWithUser(username, this::post);
+ }
+
@When("^the user ask for messages \"(.*?)\"$")
public void postWithAListOfIds(List<String> ids) throws Exception {
requestedMessageIds = ids.stream()
- .map(messageIdsByName::get)
- .collect(Guavate.toImmutableList());
+ .map(messageIdsByName::get)
+ .collect(Guavate.toImmutableList());
askMessages(requestedMessageIds);
}
+ @When("^\"(.*?)\" ask for messages \"(.*?)\"$")
+ public void postWithAListOfIds(String user, List<String> ids) throws Throwable {
+ userStepdefs.execWithUser(user, () -> postWithAListOfIds(ids));
+ }
+
+ @When("^\"(.*?)\" ask for an unknown message$")
+ public void requestUnknownMessage(String user) throws Throwable {
+ userStepdefs.execWithUser(user, this::requestUnknownMessage);
+ }
+
@When("^the user ask for an unknown message$")
public void requestUnknownMessage() throws Exception {
askMessages(ImmutableList.of(mainStepdefs.messageIdFactory.generate()));
@@ -314,9 +455,9 @@ public class GetMessagesMethodStepdefs {
private void askMessages(List<MessageId> messageIds) throws Exception {
requestedMessageIds = messageIds;
String serializedIds = requestedMessageIds.stream()
- .map(MessageId::serialize)
- .map(toJsonString())
- .collect(Collectors.joining(",", "[", "]" ));
+ .map(MessageId::serialize)
+ .map(toJsonString())
+ .collect(Collectors.joining(",", "[", "]" ));
post("[[\"getMessages\", {\"ids\": " + serializedIds + "}, \"#0\"]]");
}
@@ -324,20 +465,25 @@ public class GetMessagesMethodStepdefs {
return string -> "\"" + string + "\"";
}
+ @When("^\"(.*?)\" is getting messages \"(.*?)\" with properties \"(.*?)\"$")
+ public void postWithParameters(String username, List<String> ids, List<String> properties) throws Throwable {
+ userStepdefs.execWithUser(username, () -> postWithParameters(ids, properties));
+ }
+
@When("^the user is getting messages \"(.*?)\" with properties \"(.*?)\"$")
public void postWithParameters(List<String> ids, List<String> properties) throws Exception {
requestedMessageIds = ids.stream()
- .map(messageIdsByName::get)
- .collect(Guavate.toImmutableList());
+ .map(messageIdsByName::get)
+ .collect(Guavate.toImmutableList());
String serializedIds = requestedMessageIds.stream()
- .map(MessageId::serialize)
- .map(toJsonString())
- .collect(Collectors.joining(",", "[", "]" ));
+ .map(MessageId::serialize)
+ .map(toJsonString())
+ .collect(Collectors.joining(",", "[", "]" ));
String serializedProperties = properties.stream()
- .map(toJsonString())
- .collect(Collectors.joining(",", "[", "]" ));
+ .map(toJsonString())
+ .collect(Collectors.joining(",", "[", "]" ));
post("[[\"getMessages\", {\"ids\": " + serializedIds + ", \"properties\": " + serializedProperties + "}, \"#0\"]]");
}
@@ -352,7 +498,7 @@ public class GetMessagesMethodStepdefs {
private void post(String requestBody) throws Exception {
response = Request.Post(mainStepdefs.baseUri().setPath("/jmap").build())
- .addHeader("Authorization", userStepdefs.tokenByUser.get(userStepdefs.lastConnectedUser).serialize())
+ .addHeader("Authorization", userStepdefs.tokenByUser.get(userStepdefs.getConnectedUser()).serialize())
.addHeader("Accept", org.apache.http.entity.ContentType.APPLICATION_JSON.getMimeType())
.bodyString(requestBody, org.apache.http.entity.ContentType.APPLICATION_JSON)
.execute()
@@ -417,7 +563,7 @@ public class GetMessagesMethodStepdefs {
.splitToList(mailboxIds).stream()
.map(Throwing.function(name -> mainStepdefs.jmapServer
.getProbe(MailboxProbeImpl.class)
- .getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.lastConnectedUser, name)
+ .getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.getConnectedUser(), name)
.getMailboxId()
.serialize()))
.distinct()
@@ -469,9 +615,9 @@ public class GetMessagesMethodStepdefs {
public void assertPreviewShouldBeNormalized() throws Exception {
String actual = jsonPath.<String>read(FIRST_MESSAGE + ".preview");
assertThat(actual).hasSize(MessagePreviewGenerator.MAX_PREVIEW_LENGTH)
- .doesNotMatch(" ")
- .doesNotContain(StringUtils.CR)
- .doesNotContain(StringUtils.LF);
+ .doesNotMatch(" ")
+ .doesNotContain(StringUtils.CR)
+ .doesNotContain(StringUtils.LF);
}
@Then("^the headers of the message contains:$")
http://git-wip-us.apache.org/repos/asf/james-project/blob/eff87da0/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java
index 4f0f5f6..f135de4 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/ImapStepdefs.java
@@ -55,8 +55,8 @@ public class ImapStepdefs {
public void hasMessageInMailbox(String mailbox) throws Throwable {
try (IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST, IMAP_PORT);) {
assertThat(
- imapMessageReader.userReceivedMessageInMailbox(userStepdefs.lastConnectedUser,
- userStepdefs.passwordByUser.get(userStepdefs.lastConnectedUser),
+ imapMessageReader.userReceivedMessageInMailbox(userStepdefs.getConnectedUser(),
+ userStepdefs.passwordByUser.get(userStepdefs.getConnectedUser()),
mailbox))
.isTrue();
}
@@ -66,8 +66,8 @@ public class ImapStepdefs {
public void hasANotificationAboutNewMessagesInMailbox(int numOfNewMessage, String mailbox) throws Throwable {
try (IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST, IMAP_PORT);) {
assertThat(
- imapMessageReader.userGetNotifiedForNewMessagesWhenSelectingMailbox(userStepdefs.lastConnectedUser,
- userStepdefs.passwordByUser.get(userStepdefs.lastConnectedUser),
+ imapMessageReader.userGetNotifiedForNewMessagesWhenSelectingMailbox(userStepdefs.getConnectedUser(),
+ userStepdefs.passwordByUser.get(userStepdefs.getConnectedUser()),
numOfNewMessage, mailbox))
.isTrue();
}
@@ -77,8 +77,8 @@ public class ImapStepdefs {
public void hasNoMessageInMailbox(String mailbox) throws Throwable {
try (IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST, IMAP_PORT);) {
assertThat(
- imapMessageReader.userDoesNotReceiveMessageInMailbox(userStepdefs.lastConnectedUser,
- userStepdefs.passwordByUser.get(userStepdefs.lastConnectedUser),
+ imapMessageReader.userDoesNotReceiveMessageInMailbox(userStepdefs.getConnectedUser(),
+ userStepdefs.passwordByUser.get(userStepdefs.getConnectedUser()),
mailbox))
.isTrue();
}
@@ -88,7 +88,7 @@ public class ImapStepdefs {
public void openImapConnectionAndSelectMailbox(String mailbox) throws Throwable {
IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST, IMAP_PORT);
- String login = userStepdefs.lastConnectedUser;
+ String login = userStepdefs.getConnectedUser();
String password = userStepdefs.passwordByUser.get(login);
imapMessageReader.connectAndSelect(login, password, mailbox);
@@ -113,7 +113,7 @@ public class ImapStepdefs {
public void copyAMessageByIMAP(String srcMailbox, String destMailbox) throws Throwable {
IMAPMessageReader imapMessageReader = new IMAPMessageReader(LOCALHOST, IMAP_PORT);
- String login = userStepdefs.lastConnectedUser;
+ String login = userStepdefs.getConnectedUser();
String password = userStepdefs.passwordByUser.get(login);
imapMessageReader.connectAndSelect(login, password, srcMailbox);
http://git-wip-us.apache.org/repos/asf/james-project/blob/eff87da0/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMailboxesMethodStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMailboxesMethodStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMailboxesMethodStepdefs.java
index 59fef05..5104a28 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMailboxesMethodStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMailboxesMethodStepdefs.java
@@ -64,8 +64,8 @@ public class SetMailboxesMethodStepdefs {
@Given("^mailbox \"([^\"]*)\" with (\\d+) messages$")
public void mailboxWithMessages(String mailboxName, int messageCount) throws Throwable {
- mainStepdefs.mailboxProbe.createMailbox("#private", userStepdefs.lastConnectedUser, mailboxName);
- MailboxPath mailboxPath = MailboxPath.forUser(userStepdefs.lastConnectedUser, mailboxName);
+ mainStepdefs.mailboxProbe.createMailbox("#private", userStepdefs.getConnectedUser(), mailboxName);
+ MailboxPath mailboxPath = MailboxPath.forUser(userStepdefs.getConnectedUser(), mailboxName);
IntStream
.range(0, messageCount)
.forEach(Throwing.intConsumer(i -> appendMessage(mailboxPath, i)));
@@ -75,14 +75,14 @@ public class SetMailboxesMethodStepdefs {
private void appendMessage(MailboxPath mailboxPath, int i) throws MailboxException {
String content = "Subject: test" + i + "\r\n\r\n"
+ "testBody" + i;
- mainStepdefs.mailboxProbe.appendMessage(userStepdefs.lastConnectedUser, mailboxPath,
+ mainStepdefs.mailboxProbe.appendMessage(userStepdefs.getConnectedUser(), mailboxPath,
new ByteArrayInputStream(content.getBytes()), new Date(), false, new Flags());
}
@When("^renaming mailbox \"([^\"]*)\" to \"([^\"]*)\"")
public void renamingMailbox(String actualMailboxName, String newMailboxName) throws Throwable {
- String username = userStepdefs.lastConnectedUser;
- Mailbox mailbox = mainStepdefs.mailboxProbe.getMailbox("#private", userStepdefs.lastConnectedUser, actualMailboxName);
+ String username = userStepdefs.getConnectedUser();
+ Mailbox mailbox = mainStepdefs.mailboxProbe.getMailbox("#private", userStepdefs.getConnectedUser(), actualMailboxName);
String mailboxId = mailbox.getMailboxId().serialize();
String requestBody =
"[" +
@@ -106,7 +106,7 @@ public class SetMailboxesMethodStepdefs {
@When("^moving mailbox \"([^\"]*)\" to \"([^\"]*)\"$")
public void movingMailbox(String actualMailboxPath, String newParentMailboxPath) throws Throwable {
- String username = userStepdefs.lastConnectedUser;
+ String username = userStepdefs.getConnectedUser();
Mailbox mailbox = mainStepdefs.mailboxProbe.getMailbox("#private", username, actualMailboxPath);
String mailboxId = mailbox.getMailboxId().serialize();
Mailbox parent = mainStepdefs.mailboxProbe.getMailbox("#private", username, newParentMailboxPath);
@@ -136,7 +136,7 @@ public class SetMailboxesMethodStepdefs {
@Then("^mailbox \"([^\"]*)\" contains (\\d+) messages$")
public void mailboxContainsMessages(String mailboxName, int messageCount) throws Throwable {
Duration slowPacedPollInterval = Duration.FIVE_HUNDRED_MILLISECONDS;
- String username = userStepdefs.lastConnectedUser;
+ String username = userStepdefs.getConnectedUser();
Mailbox mailbox = mainStepdefs.mailboxProbe.getMailbox("#private", username, mailboxName);
String mailboxId = mailbox.getMailboxId().serialize();
http://git-wip-us.apache.org/repos/asf/james-project/blob/eff87da0/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMessagesMethodStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMessagesMethodStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMessagesMethodStepdefs.java
index 364c39e..5438e27 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMessagesMethodStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/SetMessagesMethodStepdefs.java
@@ -50,11 +50,11 @@ public class SetMessagesMethodStepdefs {
@When("^the user move \"([^\"]*)\" to mailbox \"([^\"]*)\"")
public void moveMessageToMailbox(String message, String mailbox) throws Throwable {
- String username = userStepdefs.lastConnectedUser;
+ String username = userStepdefs.getConnectedUser();
MessageId messageId = getMessagesMethodStepdefs.getMessageId(message);
MailboxId mailboxId = mainStepdefs.jmapServer
.getProbe(MailboxProbeImpl.class)
- .getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.lastConnectedUser, mailbox)
+ .getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.getConnectedUser(), mailbox)
.getMailboxId();
String requestBody = "[" +
@@ -78,15 +78,15 @@ public class SetMessagesMethodStepdefs {
@When("^the user copy \"([^\"]*)\" from mailbox \"([^\"]*)\" to mailbox \"([^\"]*)\"")
public void copyMessageToMailbox(String message, String sourceMailbox, String destinationMailbox) throws Throwable {
- String username = userStepdefs.lastConnectedUser;
+ String username = userStepdefs.getConnectedUser();
MessageId messageId = getMessagesMethodStepdefs.getMessageId(message);
MailboxId sourceMailboxId = mainStepdefs.jmapServer
.getProbe(MailboxProbeImpl.class)
- .getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.lastConnectedUser, sourceMailbox)
+ .getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.getConnectedUser(), sourceMailbox)
.getMailboxId();
MailboxId destinationMailboxId = mainStepdefs.jmapServer
.getProbe(MailboxProbeImpl.class)
- .getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.lastConnectedUser, destinationMailbox)
+ .getMailbox(MailboxConstants.USER_NAMESPACE, userStepdefs.getConnectedUser(), destinationMailbox)
.getMailboxId();
String requestBody = "[" +
@@ -110,7 +110,7 @@ public class SetMessagesMethodStepdefs {
@When("^the user set flags on \"([^\"]*)\" to \"([^\"]*)\"")
public void setFlags(String message, List<String> keywords) throws Throwable {
- String username = userStepdefs.lastConnectedUser;
+ String username = userStepdefs.getConnectedUser();
MessageId messageId = getMessagesMethodStepdefs.getMessageId(message);
String keywordString = keywords
.stream()
http://git-wip-us.apache.org/repos/asf/james-project/blob/eff87da0/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UserStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UserStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UserStepdefs.java
index b8e8737..c435b3c 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UserStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/UserStepdefs.java
@@ -23,10 +23,12 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import javax.inject.Inject;
+import com.github.fge.lambdas.runnable.ThrowingRunnable;
import org.apache.james.jmap.HttpJmapAuthentication;
import org.apache.james.jmap.api.access.AccessToken;
import org.apache.james.mailbox.model.MailboxACL;
@@ -50,7 +52,7 @@ public class UserStepdefs {
protected Map<String, String> passwordByUser;
protected Set<String> domains;
protected Map<String, AccessToken> tokenByUser;
- protected String lastConnectedUser;
+ protected Optional<String> lastConnectedUser;
@Inject
private UserStepdefs(MainStepdefs mainStepdefs) {
@@ -58,6 +60,23 @@ public class UserStepdefs {
this.domains = new HashSet<>();
this.passwordByUser = new HashMap<>();
this.tokenByUser = new HashMap<>();
+ this.lastConnectedUser = Optional.empty();
+ }
+
+ public void execWithUser(String user, ThrowingRunnable sideEffect) throws Throwable {
+ Optional<String> previousConnectedUser = lastConnectedUser;
+ connectUser(user);
+ try {
+ sideEffect.run();
+ } finally {
+ previousConnectedUser.ifPresent(Throwing.consumer(this::connectUser));
+ }
+ }
+
+ public String getConnectedUser() {
+ Preconditions.checkArgument(lastConnectedUser.isPresent(), "No user is connected");
+
+ return lastConnectedUser.get();
}
@Given("^a domain named \"([^\"]*)\"$")
@@ -102,7 +121,7 @@ public class UserStepdefs {
Preconditions.checkState(password != null, "unknown user " + username);
AccessToken accessToken = HttpJmapAuthentication.authenticateJamesUser(mainStepdefs.baseUri(), username, password);
tokenByUser.put(username, accessToken);
- lastConnectedUser = username;
+ lastConnectedUser = Optional.of(username);
}
@Given("^\"([^\"]*)\" shares its mailbox \"([^\"]*)\" with \"([^\"]*)\"$")
http://git-wip-us.apache.org/repos/asf/james-project/blob/eff87da0/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 d586941..fd5a10a 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
@@ -23,14 +23,14 @@ Feature: GetMessages method
Background:
Given a domain named "domain.tld"
- And a connected user "alice@domain.tld"
+ And a user "alice@domain.tld"
And a user "bob@domain.tld"
And "alice@domain.tld" has a mailbox "INBOX"
Scenario: Retrieving a message in several mailboxes should return a single message in these mailboxes
Given "alice@domain.tld" has a mailbox "custom"
- And the user has a message "m1" in "INBOX" and "custom" mailboxes with subject "my test subject", content "testmail"
- When the user ask for messages "m1"
+ And "alice@domain.tld" has a message "m1" in "INBOX" and "custom" mailboxes with subject "my test subject", content "testmail"
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the id of the message is "m1"
@@ -38,50 +38,48 @@ Feature: GetMessages method
Scenario: Retrieving a message in a mailbox delegated to me
Given "alice@domain.tld" has a mailbox "shared"
- Given "alice@domain.tld" shares its mailbox "shared" with "bob@domain.tld"
- And the user has a message "m1" in "shared" mailbox with subject "my test subject", content "testmail"
- Given "bob@domain.tld" is connected
- When the user ask for messages "m1"
+ And "alice@domain.tld" shares its mailbox "shared" with "bob@domain.tld"
+ And "alice@domain.tld" has a message "m1" in "shared" mailbox with subject "my test subject", content "testmail"
+ When "bob@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the id of the message is "m1"
Scenario: Retrieving a message in a mailbox not delegated to me
Given "alice@domain.tld" has a mailbox "notShared"
- And the user has a message "m1" in "notShared" mailbox with subject "my test subject", content "testmail"
- Given "bob@domain.tld" is connected
- When the user ask for messages "m1"
+ And "alice@domain.tld" has a message "m1" in "notShared" mailbox with subject "my test subject", content "testmail"
+ When "bob@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 0 message
Scenario: Retrieving messages with a non null accountId should return a NotSupported error
- When the user ask for messages using its accountId
+ When "alice@domain.tld" ask for messages using its accountId
Then an error "Not yet implemented" is returned
Scenario: Unknown arguments should be ignored when retrieving messages
- When the user ask for messages using unknown arguments
+ When "alice@domain.tld" ask for messages using unknown arguments
Then no error is returned
And the list of unknown messages is empty
And the list of messages is empty
Scenario: Retrieving messages with invalid argument should return an InvalidArguments error
- When the user ask for messages using invalid argument
+ When "alice@domain.tld" ask for messages using invalid argument
Then an error "invalidArguments" is returned
And the description is "N/A (through reference chain: org.apache.james.jmap.model.Builder["ids"])"
Scenario: Retrieving messages should return empty list when no message
- When the user ask for messages
+ When "alice@domain.tld" ask for messages
Then no error is returned
And the list of messages is empty
Scenario: Retrieving message should return not found when message doesn't exist
- When the user ask for an unknown message
+ When "alice@domain.tld" ask for an unknown message
Then no error is returned
And the notFound list should contain the requested message id
Scenario: Retrieving message should return messages when exists
- Given the user has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail"
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail"
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the id of the message is "m1"
@@ -97,8 +95,8 @@ Feature: GetMessages method
And the list of attachments of the message is empty
Scenario Outline: Retrieving message should return messages when exists and is a html message
- Given the user has a message "m1" in <mailbox> mailbox with content-type <content-type> subject <subject>, content <content>
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in <mailbox> mailbox with content-type <content-type> subject <subject>, content <content>
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the id of the message is "m1"
@@ -119,8 +117,8 @@ Feature: GetMessages method
|"INBOX" |"text/html" |"my test subject" |my test subject |"This is a <ganan>HTML</b> mail" |"This is a HTML mail" |
Scenario Outline: Retrieving message should return preview with tags when text message
- Given the user has a message "m1" in <mailbox> mailbox with content-type <content-type> subject <subject>, content <content>
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in <mailbox> mailbox with content-type <content-type> subject <subject>, content <content>
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the preview of the message is <preview>
@@ -130,8 +128,8 @@ Feature: GetMessages method
|"INBOX" |"text/plain" |"my test subject" |"Here is a listing of HTML tags : <b>jfjfjfj</b>, <i>jfhdgdgdfj</i>, <u>jfjaaafj</u>" |"Here is a listing of HTML tags : <b>jfjfjfj</b>, <i>jfhdgdgdfj</i>, <u>jfjaaafj</u>" |
Scenario: Retrieving message should filter properties
- Given the user has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail"
- When the user is getting messages "m1" with properties "id, subject"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail"
+ When "alice@domain.tld" is getting messages "m1" with properties "id, subject"
Then no error is returned
And the list should contain 1 message
And the id of the message is "m1"
@@ -143,11 +141,11 @@ Feature: GetMessages method
And the property "date" of the message is null
Scenario: Retrieving message should filter header properties
- Given the user has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail", headers
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail", headers
|From |user@domain.tld |
|header1 |Header1Content |
|HEADer2 |Header2Content |
- When the user is getting messages "m1" with properties "headers.from, headers.heADER2"
+ When "alice@domain.tld" is getting messages "m1" with properties "headers.from, headers.heADER2"
Then no error is returned
And the list should contain 1 message
And the id of the message is "m1"
@@ -161,23 +159,23 @@ Feature: GetMessages method
And the property "date" of the message is null
Scenario: Retrieving message should return not found when id does not match
- Given the user has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail"
- When the user ask for an unknown message
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail"
+ When "alice@domain.tld" ask for an unknown message
Then no error is returned
And the list of messages is empty
And the notFound list should contain the requested message id
Scenario: Retrieving message should return mandatory properties when not asked
- Given the user has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail"
- When the user is getting messages "m1" with properties "subject"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with subject "my test subject", content "testmail"
+ When "alice@domain.tld" is getting messages "m1" with properties "subject"
Then no error is returned
And the list should contain 1 message
And the id of the message is "m1"
And the subject of the message is "my test subject"
Scenario: Retrieving message should return attachments when some
- Given the user has a message "m1" in "INBOX" mailbox with two attachments
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with two attachments
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the hasAttachment of the message is "true"
@@ -198,8 +196,8 @@ Feature: GetMessages method
|isInline |true |
Scenario: Retrieving message should return attachments and html body when some attachments and html message
- Given the user has a message "m1" in "INBOX" mailbox with two attachments
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with two attachments
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the hasAttachment of the message is "true"
@@ -209,8 +207,8 @@ Feature: GetMessages method
And the htmlBody of the message is "<b>html</b>\n"
Scenario: Retrieving message should return attachments and text body when some attachments and text message
- Given the user has a message "m1" in "INBOX" mailbox with two attachments in text
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with two attachments in text
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the hasAttachment of the message is "true"
@@ -220,8 +218,8 @@ Feature: GetMessages method
And the property "htmlBody" of the message is null
Scenario: Retrieving message should return attachments and both html/text body when some attachments and both html/text message
- Given the user has a multipart message "m1" in "INBOX" mailbox
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a multipart message "m1" in "INBOX" mailbox
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the hasAttachment of the message is "true"
@@ -231,8 +229,8 @@ Feature: GetMessages method
And the htmlBody of the message is "<i>blabla</i>\n<b>bloblo</b>\n"
Scenario: Retrieving message should return image and html body when multipart/alternative where first part is multipart/related with html and image
- Given the user has a multipart/related message "m1" in "INBOX" mailbox
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a multipart/related message "m1" in "INBOX" mailbox
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the hasAttachment of the message is "true"
@@ -242,29 +240,29 @@ Feature: GetMessages method
And the htmlBody of the message is "<html>multipart/related content</html>\n"
Scenario: Retrieving message should return textBody and htmlBody when incoming mail have an inlined HTML and text body without Content-ID
- Given the user has a message "m1" in "INBOX" mailbox, composed of a multipart with inlined text part and inlined html part
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox, composed of a multipart with inlined text part and inlined html part
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the textBody of the message is "Hello text body\n"
And the htmlBody of the message is "<html>Hello html body</html>\n"
Scenario: Retrieving message with more than 1000 char by line should return message when exists
- Given the user has a message "m1" in "INBOX" mailbox beginning by a long line
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox beginning by a long line
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the id of the message is "m1"
Scenario:
- Given the user has a message "m1" in "INBOX" mailbox with two same attachments in text
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with two same attachments in text
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list of attachments of the message contains 2 attachments
Scenario: Retrieving message should read content from multipart when some inline attachment and both html/text multipart
- Given the user has a message "m1" in "INBOX" mailbox with plain/text inline attachment
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with plain/text inline attachment
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the hasAttachment of the message is "false"
@@ -272,24 +270,24 @@ Feature: GetMessages method
And the htmlBody of the message is "<i>blabla</i>\n<b>bloblo</b>\n"
Scenario: Retrieving message should find html body when text in main multipart and html in inner multipart
- Given the user has a message "m1" in "INBOX" mailbox with text in main multipart and html in inner multipart
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with text in main multipart and html in inner multipart
+ When "alice@domain.tld" ask for messages "m1"
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"
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"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with html body and no text body
+ When "alice@domain.tld" 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"
Scenario: Retrieving message with inline attachment but no CID should convert that inlined attachment to normal attachment
- Given the user has a message "m1" in "INBOX" mailbox with inline attachment but no CID
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with inline attachment but no CID
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the hasAttachment of the message is "true"
@@ -301,8 +299,8 @@ Feature: GetMessages method
|isInline |true |
Scenario: Retrieving message with inline attachment and blank CID should convert that inlined attachment to normal attachment
- Given the user has a message "m1" in "INBOX" mailbox with inline attachment and blank CID
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with inline attachment and blank CID
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the hasAttachment of the message is "true"
@@ -314,23 +312,23 @@ Feature: GetMessages method
|isInline |true |
Scenario: Preview should be computed even when HTML body contains many tags without content
- Given the user has a message "m1" in "INBOX" mailbox with HTML body with many empty tags
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with HTML body with many empty tags
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the preview of the message is not empty
Scenario: Retrieving message which contains multiple same inlined attachments
- Given the user has a message "m1" in the "inbox" mailbox with multiple same inlined attachments "ia1"
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in the "inbox" mailbox with multiple same inlined attachments "ia1"
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the hasAttachment of the message is "false"
And the list of attachments of the message contains only one attachment with cid "1482981567586480bfca67b793175279@linagora.com"
Scenario: Preview and bodies should respect given charset
- Given the user has a message "m1" in "INBOX" mailbox with specific charset
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with specific charset
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the preview of the message is "àààà éééé èèèè"
@@ -338,17 +336,17 @@ Feature: GetMessages method
And the htmlBody of the message is "<html>\r\n <p>àààà</p>\r\n <p>éééé</p>\r\n <p>èèèè</p>\r\n</html>\r\n"
Scenario: Preview should be normalized in case of long and complicated HTML content
- Given the user has a message "m1" in "INBOX" mailbox with long and complicated HTML content
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with long and complicated HTML content
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the preview of the message is not empty
And the preview should not contain consecutive spaces or blank characters
Scenario Outline: Preview should display printable characters with charset
- Given the user has a message "m1" in "INBOX" mailbox with content-type <content-type> subject "Subject", content <content>, headers
+ Given "alice@domain.tld" has a message "m1" in "INBOX" mailbox with content-type <content-type> subject "Subject", content <content>, headers
|Content-Transfer-Encoding |<tranfer-encoding> |
- When the user ask for messages "m1"
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the preview of the message contains: <preview>
@@ -358,8 +356,8 @@ Feature: GetMessages method
|"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"
+ Given "alice@domain.tld" has a message "m1" in the "inbox" mailbox with flags <flags>
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the keywords of the message is <keyword>
@@ -369,8 +367,8 @@ Feature: GetMessages method
|"$Flagged,$Answered,$Draft" |$Flagged,$Answered,$Draft |
Scenario Outline: GetMessages should filter invalid keywords
- Given the user has a message "m1" in the "inbox" mailbox with flags <flags>
- When the user ask for messages "m1"
+ Given "alice@domain.tld" has a message "m1" in the "inbox" mailbox with flags <flags>
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the keywords of the message is <keyword>
@@ -380,8 +378,8 @@ Feature: GetMessages method
|"$Draft,@ert,t^a,op§,$user_flag" |$Draft,$user_flag |
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"
+ Given "alice@domain.tld" has a message "m1" in the "inbox" mailbox with flags <flags>
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the keywords of the message is <keyword>
@@ -391,8 +389,8 @@ Feature: GetMessages method
|"$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"
+ Given "alice@domain.tld" has a message "m1" in the "inbox" mailbox with flags <flags>
+ When "alice@domain.tld" ask for messages "m1"
Then no error is returned
And the list should contain 1 message
And the keywords of the message is <keyword>
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org