Repository: james-project
Updated Branches:
  refs/heads/master 129480e17 -> f2d4d61bf


JAMES-1919 Move should not fail when user has no Trash folder


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1b6020ef
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1b6020ef
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1b6020ef

Branch: refs/heads/master
Commit: 1b6020ef134fa485228879a4cce63e80145327ec
Parents: 9ff71bd
Author: Raphael Ouazana <raphael.ouaz...@linagora.com>
Authored: Tue Jan 24 15:00:54 2017 +0100
Committer: Raphael Ouazana <raphael.ouaz...@linagora.com>
Committed: Tue Jan 24 15:00:54 2017 +0100

----------------------------------------------------------------------
 .../integration/SetMessagesMethodTest.java      | 46 ++++++++++++++++++++
 .../methods/SetMessagesUpdateProcessor.java     | 12 +++--
 2 files changed, 55 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/1b6020ef/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 caf57a2..671f299 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
@@ -1716,6 +1716,52 @@ public abstract class SetMessagesMethodTest {
             .body(firstMessage + ".mailboxIds", contains(heartFolderId));
     }
 
+
+    @Test
+    public void 
mailboxIdsShouldBeInDestinationWhenUsingForMoveWithoutTrashFolder() throws 
Exception {
+        jmapServer.serverProbe().deleteMailbox("#private", USERNAME, "trash");
+        String newMailboxName = "heartFolder";
+        jmapServer.serverProbe().createMailbox("#private", USERNAME, 
newMailboxName);
+        Mailbox heartFolder = jmapServer.serverProbe().getMailbox("#private", 
USERNAME, newMailboxName);
+        String heartFolderId = heartFolder.getMailboxId().serialize();
+
+        ZonedDateTime dateTime = ZonedDateTime.parse("2014-10-30T14:12:00Z");
+        ComposedMessageId message = 
jmapServer.serverProbe().appendMessage(USERNAME, new MailboxPath("#private", 
USERNAME, "inbox"),
+            new ByteArrayInputStream("Subject: my test 
subject\r\n\r\ntestmail".getBytes(Charsets.UTF_8)), 
Date.from(dateTime.toInstant()), false, new Flags());
+
+        String messageToMoveId = message.getMessageId().serialize();
+        String requestBody = "[" +
+            "  [" +
+            "    \"setMessages\","+
+            "    {" +
+            "      \"update\": { \"" + messageToMoveId + "\" : {" +
+            "        \"mailboxIds\": [\"" + heartFolderId + "\"]" +
+            "      }}" +
+            "    }," +
+            "    \"#0\"" +
+            "  ]" +
+            "]";
+
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body(requestBody)
+        .when()
+            .post("/jmap");
+
+        String firstMessage = ARGUMENTS + ".list[0]";
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body("[[\"getMessages\", {\"ids\": [\"" + messageToMoveId + 
"\"]}, \"#0\"]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .statusCode(200)
+            .log().ifValidationFails()
+            .body(NAME, equalTo("messages"))
+            .body(ARGUMENTS + ".list", hasSize(1))
+            .body(firstMessage + ".mailboxIds", contains(heartFolderId));
+    }
+
     @Test
     public void mailboxIdsShouldNotBeAnymoreInSourceWhenUsingForMove() throws 
Exception {
         String newMailboxName = "heartFolder";

http://git-wip-us.apache.org/repos/asf/james-project/blob/1b6020ef/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 5ceaba0..aaae397 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
@@ -29,6 +29,7 @@ import javax.inject.Inject;
 import javax.mail.Flags;
 
 import org.apache.commons.lang.NotImplementedException;
+import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
 import org.apache.james.jmap.model.MessageProperties;
 import org.apache.james.jmap.model.SetError;
 import org.apache.james.jmap.model.SetMessagesRequest;
@@ -141,9 +142,14 @@ public class SetMessagesUpdateProcessor implements 
SetMessagesProcessor {
     }
 
     private boolean isMoveToTrash(MailboxSession mailboxSession, 
List<MailboxId> mailboxIds) throws MailboxException {
-        return mailboxIds.size() == 1
-            && mailboxIds.get(0)
-                .equals(systemMailboxesProvider.findMailbox(Role.TRASH, 
mailboxSession).getId());
+        try {
+            return mailboxIds.size() == 1
+                && mailboxIds.get(0)
+                    .equals(systemMailboxesProvider.findMailbox(Role.TRASH, 
mailboxSession).getId());
+        } catch (MailboxRoleNotFoundException e) {
+            LOGGER.debug("Unable to find Trash mailbox for user: " + 
mailboxSession.getUser().getUserName(), e);
+            return false;
+        }
     }
 
     private void addMessageIdNotFoundToResponse(MessageId messageId, 
SetMessagesResponse.Builder builder) {


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to