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/12/01 15:37:11 UTC

[3/4] james-project git commit: JAMES-2244 Ensure creation message being sent are just in outbox

JAMES-2244 Ensure creation message being sent are just in outbox


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

Branch: refs/heads/master
Commit: fa601b9fb559f68af91b9f4fe958712aa35f5e66
Parents: 1eef6ea
Author: benwa <bt...@linagora.com>
Authored: Thu Nov 30 17:34:33 2017 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Fri Dec 1 13:51:43 2017 +0100

----------------------------------------------------------------------
 .../integration/SetMessagesMethodTest.java       |  9 ++++++---
 .../methods/SetMessagesCreationProcessor.java    | 19 ++++++++++++++++---
 2 files changed, 22 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/fa601b9f/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 5652090..3842a0e 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
@@ -1496,9 +1496,12 @@ public abstract class SetMessagesMethodTest {
             .log().ifValidationFails()
             .statusCode(200)
             .body(NAME, equalTo("messagesSet"))
-            .body(ARGUMENTS + ".notCreated", aMapWithSize(0))
-            .body(ARGUMENTS + ".created", aMapWithSize(1))
-            .body(ARGUMENTS + ".created", hasKey(messageCreationId));
+            .body(ARGUMENTS + ".created", aMapWithSize(0))
+            .body(ARGUMENTS + ".notCreated", aMapWithSize(1))
+            .body(ARGUMENTS + ".notCreated", hasKey(messageCreationId))
+            .body(ARGUMENTS + ".notCreated." + messageCreationId + ".type", equalTo("invalidProperties"))
+            .body(ARGUMENTS + ".notCreated." + messageCreationId + ".description", equalTo("Message creation is only supported in mailboxes with role Draft and Outbox"))
+            .body(ARGUMENTS + ".notCreated." + messageCreationId + ".properties", contains("mailboxIds"));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/fa601b9f/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
index 5cd4882..7733b46 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesCreationProcessor.java
@@ -178,10 +178,11 @@ public class SetMessagesCreationProcessor implements SetMessagesProcessor {
     }
     
     private void performCreate(CreationMessageEntry entry, Builder responseBuilder, MailboxSession session) throws MailboxException, InvalidMailboxForCreationException, MessagingException, AttachmentsNotFoundException {
-        if (isDraft(entry.getValue())) {
-            saveDraft(entry, responseBuilder, session);
-        } else if (isAppendToMailboxWithRole(Role.OUTBOX, entry.getValue(), session)) {
+        if (isAppendToMailboxWithRole(Role.OUTBOX, entry.getValue(), session)) {
             sendMailViaOutbox(entry, responseBuilder, session);
+        } else if (isDraft(entry.getValue())) {
+            assertNoOutbox(entry, session);
+            saveDraft(entry, responseBuilder, session);
         } else {
             if (isAppendToMailboxWithRole(Role.DRAFTS, entry.getValue(), session)) {
                 throw new InvalidDraftKeywordsException("A draft message should be flagged as Draft");
@@ -190,6 +191,12 @@ public class SetMessagesCreationProcessor implements SetMessagesProcessor {
         }
     }
 
+    private void assertNoOutbox(CreationMessageEntry entry, MailboxSession session) throws MailboxException {
+        if (isTargettingAMailboxWithRole(Role.OUTBOX, entry.getValue(), session)) {
+            throw new InvalidMailboxForCreationException("Mailbox ids can combine Outbox with other mailbox");
+        }
+    }
+
     private void sendMailViaOutbox(CreationMessageEntry entry, Builder responseBuilder, MailboxSession session) throws AttachmentsNotFoundException, MailboxException, MessagingException {
         validateArguments(entry, session);
         MessageWithId created = handleOutboxMessages(entry, session);
@@ -270,6 +277,12 @@ public class SetMessagesCreationProcessor implements SetMessagesProcessor {
                 .orElse(false);
     }
 
+    private boolean isTargettingAMailboxWithRole(Role role, CreationMessage entry, MailboxSession mailboxSession) throws MailboxException {
+        return getMailboxWithRole(mailboxSession, role)
+                .map(entry::isIn)
+                .orElse(false);
+    }
+
     private Optional<MessageManager> getMailboxWithRole(MailboxSession mailboxSession, Role role) throws MailboxException {
         return systemMailboxesProvider.getMailboxByRole(role, mailboxSession).findFirst();
     }


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