JAMES-2257 isDraft should be a responsibility of CreationMessage
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/2f5f9f8c Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/2f5f9f8c Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/2f5f9f8c Branch: refs/heads/master Commit: 2f5f9f8c93f473b10d2ec506ea3a0f24c2b0e55f Parents: 8ef14e2 Author: benwa <btell...@linagora.com> Authored: Tue Dec 12 09:03:41 2017 +0700 Committer: benwa <btell...@linagora.com> Committed: Fri Dec 15 14:03:32 2017 +0700 ---------------------------------------------------------------------- .../methods/SetMessagesCreationProcessor.java | 14 +---- .../james/jmap/model/CreationMessage.java | 7 +++ .../james/jmap/model/CreationMessageTest.java | 65 ++++++++++++++++++++ 3 files changed, 73 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/2f5f9f8c/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 21a52c0..2f510f8 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 @@ -39,13 +39,11 @@ import org.apache.james.jmap.methods.ValueWithId.MessageWithId; import org.apache.james.jmap.model.CreationMessage; import org.apache.james.jmap.model.CreationMessage.DraftEmailer; import org.apache.james.jmap.model.Envelope; -import org.apache.james.jmap.model.Keyword; import org.apache.james.jmap.model.Message; import org.apache.james.jmap.model.MessageFactory; import org.apache.james.jmap.model.MessageFactory.MetaDataWithContent; import org.apache.james.jmap.model.MessageProperties; import org.apache.james.jmap.model.MessageProperties.MessageProperty; -import org.apache.james.jmap.model.OldKeyword; import org.apache.james.jmap.model.SetError; import org.apache.james.jmap.model.SetMessagesError; import org.apache.james.jmap.model.SetMessagesRequest; @@ -202,7 +200,7 @@ public class SetMessagesCreationProcessor implements SetMessagesProcessor { private void performCreate(CreationMessageEntry entry, Builder responseBuilder, MailboxSession session) throws MailboxException, InvalidMailboxForCreationException, MessagingException, AttachmentsNotFoundException { if (isAppendToMailboxWithRole(Role.OUTBOX, entry.getValue(), session)) { sendMailViaOutbox(entry, responseBuilder, session); - } else if (isDraft(entry.getValue())) { + } else if (entry.getValue().isDraft()) { assertNoOutbox(entry, session); saveDraft(entry, responseBuilder, session); } else { @@ -237,16 +235,6 @@ public class SetMessagesCreationProcessor implements SetMessagesProcessor { responseBuilder.created(created.getCreationId(), created.getValue()); } - - private Boolean isDraft(CreationMessage creationMessage) { - return creationMessage.getOldKeyword() - .map(OldKeyword::asKeywords) - .map(Optional::of) - .orElse(creationMessage.getKeywords()) - .map(keywords -> keywords.contains(Keyword.DRAFT)) - .orElse(false); - } - private void validateArguments(CreationMessageEntry entry, MailboxSession session) throws MailboxInvalidMessageCreationException, AttachmentsNotFoundException, MailboxException { CreationMessage message = entry.getValue(); if (!message.isValid()) { http://git-wip-us.apache.org/repos/asf/james-project/blob/2f5f9f8c/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java index 39840e5..6c7f170 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java @@ -333,6 +333,13 @@ public class CreationMessage { return validate().isEmpty(); } + public boolean isDraft() { + return oldKeyword + .map(OldKeyword::isDraft) + .orElse(keywords.map(keywords -> keywords.contains(Keyword.DRAFT))) + .orElse(false); + } + public Optional<Keywords> getKeywords() { return keywords; } http://git-wip-us.apache.org/repos/asf/james-project/blob/2f5f9f8c/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java index d31e0a1..ebc2660 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java @@ -159,4 +159,69 @@ public class CreationMessageTest { assertThat(message.getMailboxIds()).containsExactly(mailboxId); } + + @Test + public void isDraftShouldBeFalseWhenNoKeywordsSpecified() { + String mailboxId = "123"; + CreationMessage message = CreationMessage.builder() + .mailboxId(mailboxId) + .build(); + + assertThat(message.isDraft()).isFalse(); + } + + @Test + public void isDraftShouldBeTrueWhenOldKeywordDraft() { + String mailboxId = "123"; + CreationMessage message = CreationMessage.builder() + .mailboxId(mailboxId) + .isDraft(Optional.of(true)) + .build(); + + assertThat(message.isDraft()).isTrue(); + } + + @Test + public void isDraftShouldBeFalseWhenOldKeywordNonDraft() { + String mailboxId = "123"; + CreationMessage message = CreationMessage.builder() + .mailboxId(mailboxId) + .isAnswered(Optional.of(true)) + .build(); + + assertThat(message.isDraft()).isFalse(); + } + + @Test + public void isDraftShouldBeFalseWhenEmptyKeywords() { + String mailboxId = "123"; + CreationMessage message = CreationMessage.builder() + .keywords(ImmutableMap.of()) + .mailboxId(mailboxId) + .build(); + + assertThat(message.isDraft()).isFalse(); + } + + @Test + public void isDraftShouldBeFalseWhenKeywordsDoesNotContainsDraft() { + String mailboxId = "123"; + CreationMessage message = CreationMessage.builder() + .keywords(ImmutableMap.of(Keyword.ANSWERED.getFlagName(), true)) + .mailboxId(mailboxId) + .build(); + + assertThat(message.isDraft()).isFalse(); + } + + @Test + public void isDraftShouldBeTrueWhenKeywordsContainsDraft() { + String mailboxId = "123"; + CreationMessage message = CreationMessage.builder() + .keywords(ImmutableMap.of(Keyword.DRAFT.getFlagName(), true)) + .mailboxId(mailboxId) + .build(); + + assertThat(message.isDraft()).isTrue(); + } } \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org