JAMES-2365 Covers search filters for address headers with JMAP integration tests
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3197701c Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3197701c Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3197701c Branch: refs/heads/master Commit: 3197701ca09082ba7ff6b3ee049b08ed6ea89802 Parents: fa7bd96 Author: Antoine Duprat <[email protected]> Authored: Mon Mar 26 15:07:35 2018 +0200 Committer: benwa <[email protected]> Committed: Wed Mar 28 09:45:00 2018 +0700 ---------------------------------------------------------------------- .../integration/GetMessageListMethodTest.java | 189 ++++++++++++++++--- .../test/resources/eml/mailWithRecipients.eml | 14 ++ 2 files changed, 176 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/3197701c/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java index 664d1d4..3c5d7b7 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java @@ -640,7 +640,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldReturnErrorInvalidArgumentsWhenRequestIsInvalid() throws Exception { + public void getMessageListShouldReturnErrorInvalidArgumentsWhenRequestIsInvalid() { given() .header("Authorization", aliceAccessToken.serialize()) .body("[[\"getMessageList\", {\"filter\": true}, \"#0\"]]") @@ -653,7 +653,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldReturnErrorInvalidArgumentsWhenHeaderIsInvalid() throws Exception { + public void getMessageListShouldReturnErrorInvalidArgumentsWhenHeaderIsInvalid() { given() .header("Authorization", aliceAccessToken.serialize()) .body("[[\"getMessageList\", {\"filter\":{\"header\":[\"132\", \"456\", \"789\"]}}, \"#0\"]]") @@ -712,7 +712,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldNotFailWhenHeaderIsValid() throws Exception { + public void getMessageListShouldNotFailWhenHeaderIsValid() { given() .header("Authorization", aliceAccessToken.serialize()) .body("[[\"getMessageList\", {\"filter\":{\"header\":[\"132\", \"456\"]}}, \"#0\"]]") @@ -798,7 +798,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldFilterMessagesWhenInMailboxesFilterMatches() throws Exception { + public void getMessageListShouldExcludeMessagesWhenInMailboxesFilterMatches() throws Exception { MailboxId mailboxId = mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); ComposedMessageId message = mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags()); @@ -816,7 +816,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldFilterMessagesWhenMultipleInMailboxesFilterMatches() throws Exception { + public void getMessageListShouldExcludeMessagesWhenMultipleInMailboxesFilterMatches() throws Exception { MailboxId mailboxId = mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); ComposedMessageId message = mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags()); @@ -836,7 +836,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldFilterMessagesWhenNotInMailboxesFilterMatches() throws Exception { + public void getMessageListShouldExcludeMessagesWhenNotInMailboxesFilterMatches() throws Exception { MailboxId mailboxId = mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags()); @@ -855,7 +855,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldFilterMessagesWhenNotInMailboxesFilterMatchesTwice() throws Exception { + public void getMessageListShouldExcludeMessagesWhenNotInMailboxesFilterMatchesTwice() throws Exception { MailboxId mailboxId = mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags()); @@ -877,7 +877,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldFilterMessagesWhenIdenticalNotInMailboxesAndInmailboxesFilterMatch() throws Exception { + public void getMessageListShouldExcludeMessagesWhenIdenticalNotInMailboxesAndInmailboxesFilterMatch() throws Exception { MailboxId mailboxId = mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags()); @@ -895,7 +895,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldNotFilterMessagesWhenNotInMailboxesFilterDoesNotMatch() throws Exception { + public void getMessageListShouldIncludeMessagesWhenNotInMailboxesFilterDoesNotMatch() throws Exception { mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); ComposedMessageId message = mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags()); @@ -915,7 +915,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldNotFilterMessagesWhenEmptyNotInMailboxesFilter() throws Exception { + public void getMessageListShouldIncludeMessagesWhenEmptyNotInMailboxesFilter() throws Exception { mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); ComposedMessageId message = mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags()); @@ -935,7 +935,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldFilterMessagesWhenInMailboxesFilterDoesntMatches() throws Exception { + public void getMessageListShouldExcludeMessagesWhenInMailboxesFilterDoesntMatches() throws Exception { MailboxId emptyMailboxId = mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "emptyMailbox"); mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); @@ -954,7 +954,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldFilterMessagesWhenTextFilterDoesntMatches() throws Exception { + public void getMessageListShouldExcludeMessagesWhenTextFilterDoesntMatches() throws Exception { mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags()); @@ -962,7 +962,7 @@ public abstract class GetMessageListMethodTest { given() .header("Authorization", aliceAccessToken.serialize()) - .body(String.format("[[\"getMessageList\", {\"filter\":{\"text\":\"bad\"}}, \"#0\"]]")) + .body("[[\"getMessageList\", {\"filter\":{\"text\":\"bad\"}}, \"#0\"]]") .when() .post("/jmap") .then() @@ -971,7 +971,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldNotFilterMessagesWhenTextFilterMatchesBody() throws Exception { + public void getMessageListShouldIncludeMessagesWhenTextFilterMatchesBody() throws Exception { mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); ComposedMessageId message = mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml"), new Date(), false, new Flags()); @@ -979,7 +979,7 @@ public abstract class GetMessageListMethodTest { given() .header("Authorization", aliceAccessToken.serialize()) - .body(String.format("[[\"getMessageList\", {\"filter\":{\"text\":\"html\"}}, \"#0\"]]")) + .body("[[\"getMessageList\", {\"filter\":{\"text\":\"html\"}}, \"#0\"]]") .when() .post("/jmap") .then() @@ -988,7 +988,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldNotFilterMessagesWhenSubjectFilterMatchesSubject() throws Exception { + public void getMessageListShouldIncludeMessagesWhenSubjectFilterMatchesSubject() throws Exception { mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); ComposedMessageId message = mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml"), new Date(), false, new Flags()); @@ -996,16 +996,152 @@ public abstract class GetMessageListMethodTest { given() .header("Authorization", aliceAccessToken.serialize()) - .body(String.format("[[\"getMessageList\", {\"filter\":{\"subject\":\"Image\"}}, \"#0\"]]")) - .when() + .body("[[\"getMessageList\", {\"filter\":{\"subject\":\"Image\"}}, \"#0\"]]") + .when() + .post("/jmap") + .then() + .statusCode(200) + .body(ARGUMENTS + ".messageIds", contains(message.getMessageId().serialize())); + } + + @Test + public void getMessageListShouldIncludeMessagesWhenFromFilterMatchesFrom() throws Exception { + mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); + ComposedMessageId message = mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), + ClassLoader.getSystemResourceAsStream("eml/mailWithRecipients.eml"), new Date(), false, new Flags()); + await(); + + given() + .header("Authorization", aliceAccessToken.serialize()) + .body("[[\"getMessageList\", {\"filter\":{\"from\":\"[email protected]\"}}, \"#0\"]]") + .when() + .post("/jmap") + .then() + .statusCode(200) + .body(ARGUMENTS + ".messageIds", contains(message.getMessageId().serialize())); + } + + @Test + public void getMessageListShouldExcludeMessagesWhenFromFilterDoesntMatchFrom() throws Exception { + mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); + mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), + ClassLoader.getSystemResourceAsStream("eml/mailWithRecipients.eml"), new Date(), false, new Flags()); + await(); + + given() + .header("Authorization", aliceAccessToken.serialize()) + .body("[[\"getMessageList\", {\"filter\":{\"from\":\"[email protected]\"}}, \"#0\"]]") + .when() + .post("/jmap") + .then() + .statusCode(200) + .body(ARGUMENTS + ".messageIds", empty()); + } + + @Test + public void getMessageListShouldIncludeMessagesWhenToFilterMatchesTo() throws Exception { + mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); + ComposedMessageId message = mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), + ClassLoader.getSystemResourceAsStream("eml/mailWithRecipients.eml"), new Date(), false, new Flags()); + await(); + + given() + .header("Authorization", aliceAccessToken.serialize()) + .body("[[\"getMessageList\", {\"filter\":{\"to\":\"[email protected]\"}}, \"#0\"]]") + .when() + .post("/jmap") + .then() + .statusCode(200) + .body(ARGUMENTS + ".messageIds", contains(message.getMessageId().serialize())); + } + + @Test + public void getMessageListShouldExcludeMessagesWhenToFilterDoesntMatchTo() throws Exception { + mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); + mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), + ClassLoader.getSystemResourceAsStream("eml/mailWithRecipients.eml"), new Date(), false, new Flags()); + await(); + + given() + .header("Authorization", aliceAccessToken.serialize()) + .body("[[\"getMessageList\", {\"filter\":{\"to\":\"[email protected]\"}}, \"#0\"]]") + .when() .post("/jmap") - .then() + .then() + .statusCode(200) + .body(ARGUMENTS + ".messageIds", empty()); + } + + @Test + public void getMessageListShouldIncludeMessagesWhenCcFilterMatchesCc() throws Exception { + mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); + ComposedMessageId message = mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), + ClassLoader.getSystemResourceAsStream("eml/mailWithRecipients.eml"), new Date(), false, new Flags()); + await(); + + given() + .header("Authorization", aliceAccessToken.serialize()) + .body("[[\"getMessageList\", {\"filter\":{\"cc\":\"[email protected]\"}}, \"#0\"]]") + .when() + .post("/jmap") + .then() .statusCode(200) .body(ARGUMENTS + ".messageIds", contains(message.getMessageId().serialize())); } @Test - public void getMessageListShouldFilterMessagesWhenAttachmentFilterDoesntMatches() throws Exception { + public void getMessageListShouldExcludeMessagesWhenCcFilterDoesntMatchCc() throws Exception { + mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); + mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), + ClassLoader.getSystemResourceAsStream("eml/mailWithRecipients.eml"), new Date(), false, new Flags()); + await(); + + given() + .header("Authorization", aliceAccessToken.serialize()) + .body("[[\"getMessageList\", {\"filter\":{\"cc\":\"[email protected]\"}}, \"#0\"]]") + .when() + .post("/jmap") + .then() + .statusCode(200) + .body(ARGUMENTS + ".messageIds", empty()); + } + + @Test + public void getMessageListShouldIncludeMessagesWhenBccFilterMatchesBcc() throws Exception { + mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); + ComposedMessageId message = mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), + ClassLoader.getSystemResourceAsStream("eml/mailWithRecipients.eml"), new Date(), false, new Flags()); + await(); + + given() + .header("Authorization", aliceAccessToken.serialize()) + .body("[[\"getMessageList\", {\"filter\":{\"bcc\":\"[email protected]\"}}, \"#0\"]]") + .when() + .post("/jmap") + .then() + .statusCode(200) + .body(ARGUMENTS + ".messageIds", contains(message.getMessageId().serialize())); + } + + @Test + public void getMessageListShouldExcludeMessagesWhenBccFilterDoesntMatchBcc() throws Exception { + mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); + mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"), + ClassLoader.getSystemResourceAsStream("eml/mailWithRecipients.eml"), new Date(), false, new Flags()); + await(); + + given() + .header("Authorization", aliceAccessToken.serialize()) + .body("[[\"getMessageList\", {\"filter\":{\"bcc\":\"[email protected]\"}}, \"#0\"]]") + .when() + .post("/jmap") + .then() + .statusCode(200) + .body(ARGUMENTS + ".messageIds", empty()); + } + + @Test + public void getMessageListShouldExcludeMessagesWhenAttachmentFilterDoesntMatch() throws Exception { mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); byte[] attachmentContent = ClassLoaderUtils.getSystemResourceAsByteArray("eml/attachment.pdf"); BodyPart attachment = BodyPartBuilder.create() @@ -1026,7 +1162,7 @@ public abstract class GetMessageListMethodTest { given() .header("Authorization", aliceAccessToken.serialize()) - .body(String.format("[[\"getMessageList\", {\"filter\":{\"attachments\":\"no apple inside\"}}, \"#0\"]]")) + .body("[[\"getMessageList\", {\"filter\":{\"attachments\":\"no apple inside\"}}, \"#0\"]]") .when() .post("/jmap") .then() @@ -1035,7 +1171,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldNotFilterMessagesWhenAttachmentFilterMatches() throws Exception { + public void getMessageListShouldIncludeMessagesWhenAttachmentFilterMatches() throws Exception { mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox"); byte[] attachmentContent = ClassLoaderUtils.getSystemResourceAsByteArray("eml/attachment.pdf"); BodyPart attachment = BodyPartBuilder.create() @@ -1056,7 +1192,7 @@ public abstract class GetMessageListMethodTest { given() .header("Authorization", aliceAccessToken.serialize()) - .body(String.format("[[\"getMessageList\", {\"filter\":{\"attachments\":\"beautiful banana\"}}, \"#0\"]]")) + .body("[[\"getMessageList\", {\"filter\":{\"attachments\":\"beautiful banana\"}}, \"#0\"]]") .when() .post("/jmap") .then() @@ -1612,8 +1748,7 @@ public abstract class GetMessageListMethodTest { .body("[1][0]", equalTo("messages")) .body("[0][1].messageIds", hasSize(1)) .body("[1][1].list[0].htmlBody", equalTo("Hello <b>someone</b>, and thank you for joining example.com!")) - .body("[1][1].list[0].textBody", equalTo("Hello someone, and thank you for joining example.com!")) - ; + .body("[1][1].list[0].textBody", equalTo("Hello someone, and thank you for joining example.com!")); } @Test @@ -1894,7 +2029,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldAcceptLessThan2Pow53NumberForPosition() throws Exception { + public void getMessageListShouldAcceptLessThan2Pow53NumberForPosition() { given() .header("Authorization", aliceAccessToken.serialize()) .body("[[\"getMessageList\", {\"position\":" + Number.MAX_VALUE + "}, \"#0\"]]") @@ -1906,7 +2041,7 @@ public abstract class GetMessageListMethodTest { } @Test - public void getMessageListShouldErrorWhenPositionOver2Pow53() throws Exception { + public void getMessageListShouldErrorWhenPositionOver2Pow53() { given() .header("Authorization", aliceAccessToken.serialize()) .body("[[\"getMessageList\", {\"position\":" + Number.MAX_VALUE + 1 + "}, \"#0\"]]") http://git-wip-us.apache.org/repos/asf/james-project/blob/3197701c/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/mailWithRecipients.eml ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/mailWithRecipients.eml b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/mailWithRecipients.eml new file mode 100755 index 0000000..292033b --- /dev/null +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/mailWithRecipients.eml @@ -0,0 +1,14 @@ +Content-Type: text/plain; Charset=UTF-8 +Date: Fri, 17 Sep 2010 17:12:26 +0200 +Subject: my subject +To: to <[email protected]> +Cc: [email protected] +Bcc: [email protected] +MIME-Version: 1.0 +Message-Id: <20100917151246.2A9384BA1@lenny> +From: From <[email protected]> + +Mail content + +-- +Ad Min --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
