JAMES-2220 patch should not empty keywords when no keyword property given to SetMessages
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/85ad8743 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/85ad8743 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/85ad8743 Branch: refs/heads/master Commit: 85ad874381d2f4da9cf12e244c717ba8cc73f963 Parents: 0349ca6 Author: Matthieu Baechler <[email protected]> Authored: Wed Nov 15 17:15:42 2017 +0100 Committer: Antoine Duprat <[email protected]> Committed: Thu Nov 16 12:30:31 2017 +0100 ---------------------------------------------------------------------- .../integration/SetMessagesMethodTest.java | 26 ++++++++++++++++++++ .../methods/SetMessagesUpdateProcessor.java | 2 +- .../james/jmap/model/UpdateMessagePatch.java | 9 ++----- .../jmap/model/UpdateMessagePatchTest.java | 10 ++++++++ 4 files changed, 39 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/85ad8743/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java index 054b589..c29302b 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java @@ -564,6 +564,31 @@ public abstract class SetMessagesMethodTest { } @Test + @Ignore("gitlab-446 should allowed in drafts mailbox, rejected outside") + public void setMessagesShouldReturnAnErrorWhenKeywordsWithAddingDraftArePassed() throws MailboxException { + mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, USERNAME, "mailbox"); + + ComposedMessageId message = mailboxProbe.appendMessage(USERNAME, USER_MAILBOX, + new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(Charsets.UTF_8)), new Date(), false, new Flags(Flags.Flag.ANSWERED)); + await(); + + String messageId = message.getMessageId().serialize(); + + given() + .header("Authorization", accessToken.serialize()) + .body(String.format("[[\"setMessages\", {\"update\": {\"%s\" : { \"keywords\": {\"$Draft\": true} } } }, \"#0\"]]", messageId)) + .when() + .post("/jmap") + .then() + .log().ifValidationFails() + .body(NOT_UPDATED, hasKey(messageId)) + .body(NOT_UPDATED + "[\""+messageId+"\"].type", equalTo("invalidProperties")) + .body(NOT_UPDATED + "[\""+messageId+"\"].properties[0]", equalTo("keywords")) + .body(NOT_UPDATED + "[\""+messageId+"\"].description", equalTo("keywords: Cannot add or remove draft flag")) + .body(ARGUMENTS + ".updated", hasSize(0)); + } + + @Test public void setMessagesShouldReturnAnErrorWhenKeywordsWithDeletedArePassed() throws MailboxException { mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, USERNAME, "mailbox"); @@ -675,6 +700,7 @@ public abstract class SetMessagesMethodTest { } @Test + @Ignore("gitlab-446 should allowed outside drafts mailbox, rejected inside") public void setMessagesShouldReturnAnErrorWhenKeywordsWithRemoveDraftArePassed() throws MailboxException { mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, USERNAME, "mailbox"); http://git-wip-us.apache.org/repos/asf/james-project/blob/85ad8743/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java index 2497cea..c54deec 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java @@ -185,7 +185,7 @@ public class SetMessagesUpdateProcessor implements SetMessagesProcessor { private List<Flags> patchFlags(List<MessageResult> messagesToBeUpdated, UpdateMessagePatch updateMessagePatch) { return messagesToBeUpdated.stream() .map(MessageResult::getFlags) - .map(updateMessagePatch::applyToStateNoReset) + .map(updateMessagePatch::applyToState) .collect(Guavate.toImmutableList()); } http://git-wip-us.apache.org/repos/asf/james-project/blob/85ad8743/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java index a49df67..e0b73e2 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java @@ -149,13 +149,8 @@ public class UpdateMessagePatch { } public Flags applyToState(Flags currentFlags) { - return keywords.map(keyword -> keyword.asFlagsWithRecentAndDeletedFrom(currentFlags)) - .orElse(new Flags()); - } - - public Flags applyToStateNoReset(Flags currentFlags) { - return keywords.map(keyword -> keyword.asFlagsWithRecentAndDeletedFrom(currentFlags)) + return keywords + .map(keyword -> keyword.asFlagsWithRecentAndDeletedFrom(currentFlags)) .orElse(currentFlags); } - } http://git-wip-us.apache.org/repos/asf/james-project/blob/85ad8743/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java index 00aeee3..c556ce6 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java @@ -257,4 +257,14 @@ public class UpdateMessagePatchTest { messagePatch.isFlagsIdentity(); } + + @Test + public void applyStateShouldKeepKeywordsWhenNoKeywordPatchDefined() { + UpdateMessagePatch messagePatch = UpdateMessagePatch.builder() + .build(); + Flags flags = FlagsBuilder.builder() + .add(Flags.Flag.DELETED, Flags.Flag.RECENT, Flags.Flag.DRAFT) + .build(); + assertThat(messagePatch.applyToState(flags)).isEqualTo(flags); + } } \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
