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