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 ad...@apache.org on 2017/11/16 14:20:02 UTC

[15/18] james-project git commit: JAMES-2220 patch should not empty keywords when no keyword property given to SetMessages

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 <ma...@apache.org>
Authored: Wed Nov 15 17:15:42 2017 +0100
Committer: Antoine Duprat <ad...@linagora.com>
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: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org