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