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

Reply via email to