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/11/14 09:04:51 UTC

[1/5] james-project git commit: JAMES-2213 isForwarded getMessages integration test

Repository: james-project
Updated Branches:
  refs/heads/master 3aa1732b3 -> 5ceee7866


JAMES-2213 isForwarded getMessages integration test


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

Branch: refs/heads/master
Commit: 5ceee7866af13c6d9d36dc0c86f1d8052274279b
Parents: 39e9e3e
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Mon Nov 13 17:54:25 2017 +0100
Committer: quynhn <qn...@linagora.com>
Committed: Tue Nov 14 10:27:40 2017 +0700

----------------------------------------------------------------------
 .../cucumber/GetMessagesMethodStepdefs.java           |  5 +++++
 .../src/test/resources/cucumber/GetMessages.feature   | 14 ++++++++++++++
 2 files changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/5ceee786/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
index 5000ac4..9d353f6 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
@@ -639,6 +639,11 @@ public class GetMessagesMethodStepdefs {
         assertThat(httpClient.jsonPath.<Boolean>read(FIRST_MESSAGE + ".hasAttachment")).isEqualTo(Boolean.valueOf(hasAttachment));
     }
 
+    @Then("^the isForwarded property of the message is \"([^\"]*)\"$")
+    public void assertIsForwardedOfTheFirstMessage(String isForwarded) throws Exception {
+        assertThat(httpClient.jsonPath.<Boolean>read(FIRST_MESSAGE + ".isForwarded")).isEqualTo(Boolean.valueOf(isForwarded));
+    }
+
     @Then("^the list of attachments of the message is empty$")
     public void assertAttachmentsOfTheFirstMessageIsEmpty() throws Exception {
         assertThat(httpClient.jsonPath.<List<Object>>read(ATTACHMENTS)).isEmpty();

http://git-wip-us.apache.org/repos/asf/james-project/blob/5ceee786/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
index e786976..f0f8418 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
@@ -406,3 +406,17 @@ Feature: GetMessages method
     Examples:
             |flags                    |keyword                 |
             |"$Flagged,$Forwarded"    |$Forwarded,$Flagged     |
+
+  Scenario: Retrieving message should include true isForwarded property when set
+    Given "alice@domain.tld" has a message "m1" in the "inbox" mailbox with flags "$Forwarded"
+    When "alice@domain.tld" ask for messages "m1"
+    Then no error is returned
+    And the list should contain 1 message
+    And the isForwarded property of the message is "true"
+
+  Scenario: Retrieving message should include false isForwarded property when not set
+    Given "alice@domain.tld" has a message "m1" in the "inbox" mailbox with flags "$Answered"
+    When "alice@domain.tld" ask for messages "m1"
+    Then no error is returned
+    And the list should contain 1 message
+    And the isForwarded property of the message is "false"
\ No newline at end of file


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


[3/5] james-project git commit: JAMES-2213 OldKeyword will support isForwarded now and - Converting from Keyword to OldKeyword - Add needed unit testing

Posted by ad...@apache.org.
JAMES-2213 OldKeyword will support isForwarded now and
- Converting from Keyword to OldKeyword
- Add needed unit testing


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

Branch: refs/heads/master
Commit: b1e43fca9e419630ce2b9125618c1c52632c5db4
Parents: 3aa1732
Author: quynhn <qn...@linagora.com>
Authored: Mon Nov 13 10:53:14 2017 +0700
Committer: quynhn <qn...@linagora.com>
Committed: Tue Nov 14 10:27:40 2017 +0700

----------------------------------------------------------------------
 .../james/jmap/model/CreationMessage.java       | 11 ++++-
 .../org/apache/james/jmap/model/Keyword.java    |  1 +
 .../org/apache/james/jmap/model/Keywords.java   |  3 ++
 .../org/apache/james/jmap/model/OldKeyword.java | 18 ++++++--
 .../james/jmap/model/UpdateMessagePatch.java    | 11 ++++-
 .../apache/james/jmap/model/KeywordsTest.java   | 48 +++++++++++++++-----
 6 files changed, 72 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/b1e43fca/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 f67185d..8bcbe4b 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
@@ -27,6 +27,7 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
+
 import javax.mail.internet.AddressException;
 import javax.mail.internet.InternetAddress;
 
@@ -62,6 +63,7 @@ public class CreationMessage {
         private Optional<Boolean> isFlagged = Optional.empty();
         private Optional<Boolean> isAnswered = Optional.empty();
         private Optional<Boolean> isDraft = Optional.empty();
+        private Optional<Boolean> isForwarded = Optional.empty();
         private final ImmutableMap.Builder<String, String> headers;
         private Optional<DraftEmailer> from = Optional.empty();
         private final ImmutableList.Builder<DraftEmailer> to;
@@ -121,6 +123,11 @@ public class CreationMessage {
             return this;
         }
 
+        public Builder isForwarded(Optional<Boolean> isForwarded) {
+            this.isForwarded = isForwarded;
+            return this;
+        }
+
         public Builder headers(ImmutableMap<String, String> headers) {
             this.headers.putAll(headers);
             return this;
@@ -225,8 +232,8 @@ public class CreationMessage {
         }
 
         private Optional<OldKeyword> getOldKeywords() {
-            if (isAnswered.isPresent() || isFlagged.isPresent() || isUnread.isPresent() || isDraft.isPresent()) {
-                return Optional.of(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft));
+            if (isAnswered.isPresent() || isFlagged.isPresent() || isUnread.isPresent() || isDraft.isPresent() || isForwarded.isPresent()) {
+                return Optional.of(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded));
             }
             return Optional.empty();
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b1e43fca/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java
index 72918d0..ca18d2b 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keyword.java
@@ -46,6 +46,7 @@ public class Keyword {
     public final static Keyword ANSWERED = new Keyword("$Answered");
     public final static Keyword DELETED = new Keyword("$Deleted");
     public final static Keyword RECENT = new Keyword("$Recent");
+    public final static Keyword FORWARDED = new Keyword("$Forwarded");
     public final static Boolean FLAG_VALUE = true;
 
     private final static ImmutableList<Keyword> NON_EXPOSED_IMAP_KEYWORDS = ImmutableList.of(Keyword.RECENT, Keyword.DELETED);

http://git-wip-us.apache.org/repos/asf/james-project/blob/b1e43fca/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java
index c410cf9..286468f 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Keywords.java
@@ -126,6 +126,9 @@ public class Keywords {
             if (oldKeyword.isUnread().isPresent() && oldKeyword.isUnread().get() == false) {
                 builder.add(Keyword.SEEN);
             }
+            if (oldKeyword.isForwarded().orElse(false)) {
+                builder.add(Keyword.FORWARDED);
+            }
             return fromSet(builder.build());
         }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/b1e43fca/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/OldKeyword.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/OldKeyword.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/OldKeyword.java
index e2cb2b3..207b275 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/OldKeyword.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/OldKeyword.java
@@ -30,20 +30,24 @@ public class OldKeyword {
     private final Optional<Boolean> isFlagged;
     private final Optional<Boolean> isAnswered;
     private final Optional<Boolean> isDraft;
+    private final Optional<Boolean> isForwarded;
 
     @VisibleForTesting
-    OldKeyword(boolean isUnread, boolean isFlagged, boolean isAnswered, boolean isDraft) {
+    OldKeyword(boolean isUnread, boolean isFlagged, boolean isAnswered, boolean isDraft, boolean isForwarded) {
         this.isUnread = Optional.of(isUnread);
         this.isFlagged = Optional.of(isFlagged);
         this.isAnswered = Optional.of(isAnswered);
         this.isDraft = Optional.of(isDraft);
+        this.isForwarded = Optional.of(isForwarded);
     }
 
-    public OldKeyword(Optional<Boolean> isUnread, Optional<Boolean> isFlagged, Optional<Boolean> isAnswered, Optional<Boolean> isDraft) {
+    public OldKeyword(Optional<Boolean> isUnread, Optional<Boolean> isFlagged, Optional<Boolean> isAnswered,
+                      Optional<Boolean> isDraft, Optional<Boolean> isForwarded) {
         this.isUnread = isUnread;
         this.isFlagged = isFlagged;
         this.isAnswered = isAnswered;
         this.isDraft = isDraft;
+        this.isForwarded = isForwarded;
     }
 
     public Optional<Boolean> isUnread() {
@@ -62,6 +66,10 @@ public class OldKeyword {
         return isDraft;
     }
 
+    public Optional<Boolean> isForwarded() {
+        return isForwarded;
+    }
+
     @Override
     public final boolean equals(Object other) {
         if (other instanceof OldKeyword) {
@@ -69,14 +77,15 @@ public class OldKeyword {
             return Objects.equal(isUnread, oldKeyword.isUnread)
                 && Objects.equal(isFlagged, oldKeyword.isFlagged)
                 && Objects.equal(isAnswered, oldKeyword.isAnswered)
-                && Objects.equal(isDraft, oldKeyword.isDraft);
+                && Objects.equal(isDraft, oldKeyword.isDraft)
+                && Objects.equal(isForwarded, oldKeyword.isForwarded);
         }
         return false;
     }
 
     @Override
     public final int hashCode() {
-        return Objects.hashCode(isUnread, isFlagged, isAnswered, isDraft);
+        return Objects.hashCode(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
     }
 
     @Override
@@ -86,6 +95,7 @@ public class OldKeyword {
                 .add("isFlagged", isFlagged)
                 .add("isAnswered", isAnswered)
                 .add("isDraft", isDraft)
+                .add("isForwarded", isForwarded)
                 .toString();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/b1e43fca/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
index 6a46bf8..49a2ac8 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/UpdateMessagePatch.java
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
+
 import javax.mail.Flags;
 
 import org.apache.james.jmap.methods.ValidationResult;
@@ -48,6 +49,7 @@ public class UpdateMessagePatch {
         private Optional<Boolean> isFlagged = Optional.empty();
         private Optional<Boolean> isUnread = Optional.empty();
         private Optional<Boolean> isAnswered = Optional.empty();
+        private Optional<Boolean> isForwarded = Optional.empty();
         private Optional<Map<String, Boolean>> keywords = Optional.empty();
         private Set<ValidationResult> validationResult = Sets.newHashSet();
 
@@ -76,6 +78,11 @@ public class UpdateMessagePatch {
             return this;
         }
 
+        public Builder isForwarded(Boolean isForwarded) {
+            this.isForwarded = Optional.of(isForwarded);
+            return this;
+        }
+
         public Builder validationResult(Set<ValidationResult> validationResult) {
             this.validationResult.addAll(validationResult);
             return this;
@@ -97,9 +104,9 @@ public class UpdateMessagePatch {
         }
 
         private Optional<OldKeyword> getOldKeywords() {
-            if (isAnswered.isPresent() || isFlagged.isPresent() || isUnread.isPresent()) {
+            if (isAnswered.isPresent() || isFlagged.isPresent() || isUnread.isPresent() || isForwarded.isPresent()) {
                 Optional<Boolean> isDraft = Optional.empty();
-                return Optional.of(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft));
+                return Optional.of(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded));
             }
             return Optional.empty();
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b1e43fca/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java
index e992c59..5fa1d56 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/KeywordsTest.java
@@ -20,21 +20,23 @@
 package org.apache.james.jmap.model;
 
 import static org.assertj.core.api.Assertions.assertThat;
+
 import java.util.Map;
 import java.util.Optional;
+
 import javax.mail.Flags;
 import javax.mail.Flags.Flag;
 
 import org.apache.james.mailbox.FlagsBuilder;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
 
 public class KeywordsTest {
     public static final String ANY_KEYWORD = "AnyKeyword";
@@ -87,21 +89,37 @@ public class KeywordsTest {
         Optional<Boolean> isUnread = Optional.empty();
         Optional<Boolean> isFlagged = Optional.empty();
         Optional<Boolean> isDraft = Optional.empty();
+        Optional<Boolean> isForwarded = Optional.empty();
         Keywords keywords = Keywords.factory()
-            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft));
+            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded));
 
         assertThat(keywords.getKeywords())
             .containsOnly(Keyword.ANSWERED);
     }
 
     @Test
+    public void fromOldKeywordsShouldReturnKeywordsFromIsForwarded() throws Exception {
+        Optional<Boolean> isAnswered = Optional.empty();
+        Optional<Boolean> isUnread = Optional.empty();
+        Optional<Boolean> isFlagged = Optional.empty();
+        Optional<Boolean> isDraft = Optional.empty();
+        Optional<Boolean> isForwarded = Optional.of(true);
+        Keywords keywords = Keywords.factory()
+            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded));
+
+        assertThat(keywords.getKeywords())
+            .containsOnly(Keyword.FORWARDED);
+    }
+
+    @Test
     public void fromOldKeywordsShouldReturnKeywordsFromIsDraft() throws Exception {
         Optional<Boolean> isAnswered = Optional.empty();
         Optional<Boolean> isUnread = Optional.empty();
         Optional<Boolean> isFlagged = Optional.empty();
         Optional<Boolean> isDraft = Optional.of(true);
+        Optional<Boolean> isForwarded = Optional.empty();
         Keywords keywords = Keywords.factory()
-            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft));
+            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded));
 
         assertThat(keywords.getKeywords())
             .containsOnly(Keyword.DRAFT);
@@ -113,8 +131,9 @@ public class KeywordsTest {
         Optional<Boolean> isUnread = Optional.empty();
         Optional<Boolean> isFlagged = Optional.of(true);
         Optional<Boolean> isDraft = Optional.empty();
+        Optional<Boolean> isForwarded = Optional.empty();
         Keywords keywords = Keywords.factory()
-            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft));
+            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded));
 
         assertThat(keywords.getKeywords())
             .containsOnly(Keyword.FLAGGED);
@@ -126,8 +145,9 @@ public class KeywordsTest {
         Optional<Boolean> isUnread = Optional.of(false);
         Optional<Boolean> isFlagged = Optional.empty();
         Optional<Boolean> isDraft = Optional.empty();
+        Optional<Boolean> isForwarded = Optional.empty();
         Keywords keywords = Keywords.factory()
-            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft));
+            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded));
 
         assertThat(keywords.getKeywords())
             .containsOnly(Keyword.SEEN);
@@ -139,8 +159,9 @@ public class KeywordsTest {
         Optional<Boolean> isUnread = Optional.of(true);
         Optional<Boolean> isFlagged = Optional.of(true);
         Optional<Boolean> isDraft = Optional.of(true);
+        Optional<Boolean> isForwarded = Optional.empty();
         Keywords keywords = Keywords.factory()
-            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft));
+            .fromOldKeyword(new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded));
 
         assertThat(keywords.getKeywords())
             .containsOnly(Keyword.ANSWERED, Keyword.DRAFT, Keyword.FLAGGED);
@@ -166,8 +187,9 @@ public class KeywordsTest {
         Optional<Boolean> isUnread = Optional.of(true);
         Optional<Boolean> isFlagged = Optional.of(true);
         Optional<Boolean> isDraft = Optional.of(true);
+        Optional<Boolean> isForwarded = Optional.of(true);
 
-        OldKeyword oldKeyword = new OldKeyword(isUnread, isFlagged, isAnswered, isDraft);
+        OldKeyword oldKeyword = new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
 
         assertThat(Keywords.factory()
             .fromMapOrOldKeyword(Optional.empty(), Optional.of(oldKeyword)))
@@ -181,8 +203,9 @@ public class KeywordsTest {
         Optional<Boolean> isUnread = Optional.of(true);
         Optional<Boolean> isFlagged = Optional.of(true);
         Optional<Boolean> isDraft = Optional.of(true);
+        Optional<Boolean> isForwarded = Optional.of(true);
 
-        OldKeyword oldKeyword = new OldKeyword(isUnread, isFlagged, isAnswered, isDraft);
+        OldKeyword oldKeyword = new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
 
         Keywords.factory()
             .fromMapOrOldKeyword(Optional.of(ImmutableMap.of()), Optional.of(oldKeyword));
@@ -205,14 +228,15 @@ public class KeywordsTest {
         Optional<Boolean> isUnread = Optional.of(true);
         Optional<Boolean> isFlagged = Optional.of(true);
         Optional<Boolean> isDraft = Optional.of(true);
+        Optional<Boolean> isForwarded = Optional.of(true);
 
-        OldKeyword oldKeyword = new OldKeyword(isUnread, isFlagged, isAnswered, isDraft);
+        OldKeyword oldKeyword = new OldKeyword(isUnread, isFlagged, isAnswered, isDraft, isForwarded);
 
         Keywords keywords = Keywords.factory()
             .fromMapOrOldKeyword(Optional.empty(), Optional.of(oldKeyword))
             .get();
         assertThat(keywords.getKeywords())
-            .containsOnly(Keyword.ANSWERED, Keyword.DRAFT, Keyword.FLAGGED);
+            .containsOnly(Keyword.ANSWERED, Keyword.DRAFT, Keyword.FLAGGED, Keyword.FORWARDED);
     }
 
     @Test


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


[5/5] james-project git commit: JAMES-2213 GetMessageList should support filtering by isForwarded

Posted by ad...@apache.org.
JAMES-2213 GetMessageList should support filtering by isForwarded


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

Branch: refs/heads/master
Commit: a345a328c83d838a2f0e7ba5d1d4fc091f5ef0c7
Parents: b1e43fc
Author: quynhn <qn...@linagora.com>
Authored: Mon Nov 13 11:34:05 2017 +0700
Committer: quynhn <qn...@linagora.com>
Committed: Tue Nov 14 10:27:40 2017 +0700

----------------------------------------------------------------------
 .../integration/GetMessageListMethodTest.java   | 50 +++++++++++++++++++-
 .../james/jmap/model/FilterCondition.java       | 22 +++++++--
 .../james/jmap/utils/FilterToSearchQuery.java   |  2 +
 .../james/jmap/model/FilterConditionTest.java   |  4 +-
 4 files changed, 73 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/a345a328/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
index e9b1ea4..9423e41 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
@@ -396,7 +396,55 @@ public abstract class GetMessageListMethodTest {
                     containsInAnyOrder(messageNotAnswered.getMessageId().serialize()), 
                     not(containsInAnyOrder(messageAnswered.getMessageId().serialize()))));
     }
-    
+
+    @Test
+    public void getMessageListSetForwardedFilterShouldReturnOnlyForwardedMessages() throws Exception {
+        mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox");
+
+        ComposedMessageId messageNotForwarded = mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"),
+            new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags());
+        ComposedMessageId messageForwarded = mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"),
+            ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml"), new Date(), false, new Flags(FORWARDED));
+
+        await();
+
+        given()
+            .header("Authorization", aliceAccessToken.serialize())
+            .body("[[\"getMessageList\", {\"filter\":{\"isForwarded\":\"true\"}}, \"#0\"]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .statusCode(200)
+            .body(NAME, equalTo("messageList"))
+            .body(ARGUMENTS + ".messageIds", allOf(
+                containsInAnyOrder(messageForwarded.getMessageId().serialize()),
+                not(containsInAnyOrder(messageNotForwarded.getMessageId().serialize()))));
+    }
+
+    @Test
+    public void getMessageListUnsetForwardedFilterShouldReturnOnlyNotForwardedMessages() throws Exception {
+        mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox");
+
+        ComposedMessageId messageNotForwarded = mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"),
+            new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags());
+        ComposedMessageId messageForwarded = mailboxProbe.appendMessage(alice, MailboxPath.forUser(alice, "mailbox"),
+            ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml"), new Date(), false, new Flags(FORWARDED));
+
+        await();
+
+        given()
+            .header("Authorization", aliceAccessToken.serialize())
+            .body("[[\"getMessageList\", {\"filter\":{\"isForwarded\":\"false\"}}, \"#0\"]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .statusCode(200)
+            .body(NAME, equalTo("messageList"))
+            .body(ARGUMENTS + ".messageIds", allOf(
+                containsInAnyOrder(messageNotForwarded.getMessageId().serialize()),
+                not(containsInAnyOrder(messageForwarded.getMessageId().serialize()))));
+    }
+
     @Test
     public void getMessageListANDOperatorShouldReturnMessagesWhichMatchAllConditions() throws Exception {
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, alice, "mailbox");

http://git-wip-us.apache.org/repos/asf/james-project/blob/a345a328/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/FilterCondition.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/FilterCondition.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/FilterCondition.java
index 0dd14a1..f1e94ce 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/FilterCondition.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/FilterCondition.java
@@ -51,6 +51,7 @@ public class FilterCondition implements Filter {
         private Boolean isFlagged;
         private Boolean isUnread;
         private Boolean isAnswered;
+        private Boolean isForwarded;
         private Boolean isDraft;
         private Boolean hasAttachment;
         private String text;
@@ -146,6 +147,11 @@ public class FilterCondition implements Filter {
             return this;
         }
 
+        public Builder isForwarded(boolean isForwarded) {
+            this.isForwarded = isForwarded;
+            return this;
+        }
+
         public Builder hasAttachment(boolean hasAttachment) {
             this.hasAttachment = hasAttachment;
             return this;
@@ -200,7 +206,8 @@ public class FilterCondition implements Filter {
             Preconditions.checkArgument(!hasKeyword.isPresent() || (new Keyword(hasKeyword.get()) != null), "hasKeyword is not valid");
             Preconditions.checkArgument(!notKeyword.isPresent() || (new Keyword(notKeyword.get()) != null), "notKeyword is not valid");
             return new FilterCondition(inMailboxes, notInMailboxes, Optional.ofNullable(before), Optional.ofNullable(after), Optional.ofNullable(minSize), Optional.ofNullable(maxSize),
-                    Optional.ofNullable(isFlagged), Optional.ofNullable(isUnread), Optional.ofNullable(isAnswered), Optional.ofNullable(isDraft), Optional.ofNullable(hasAttachment),
+                    Optional.ofNullable(isFlagged), Optional.ofNullable(isUnread), Optional.ofNullable(isAnswered), Optional.ofNullable(isDraft), Optional.ofNullable(isForwarded),
+                    Optional.ofNullable(hasAttachment),
                     Optional.ofNullable(text), Optional.ofNullable(from), Optional.ofNullable(to), Optional.ofNullable(cc), Optional.ofNullable(bcc), Optional.ofNullable(subject),
                     Optional.ofNullable(body), Optional.ofNullable(attachments), Optional.ofNullable(header), hasKeyword, notKeyword);
         }
@@ -216,6 +223,7 @@ public class FilterCondition implements Filter {
     private final Optional<Boolean> isUnread;
     private final Optional<Boolean> isAnswered;
     private final Optional<Boolean> isDraft;
+    private final Optional<Boolean> isForwarded;
     private final Optional<Boolean> hasAttachment;
     private final Optional<String> text;
     private final Optional<String> from;
@@ -230,7 +238,8 @@ public class FilterCondition implements Filter {
     private final Optional<String> notKeyword;
 
     @VisibleForTesting FilterCondition(Optional<List<String>> inMailboxes, Optional<List<String>> notInMailboxes, Optional<ZonedDateTime> before, Optional<ZonedDateTime> after, Optional<Integer> minSize, Optional<Integer> maxSize,
-                                       Optional<Boolean> isFlagged, Optional<Boolean> isUnread, Optional<Boolean> isAnswered, Optional<Boolean> isDraft, Optional<Boolean> hasAttachment,
+                                       Optional<Boolean> isFlagged, Optional<Boolean> isUnread, Optional<Boolean> isAnswered, Optional<Boolean> isDraft, Optional<Boolean> isForwarded,
+                                       Optional<Boolean> hasAttachment,
                                        Optional<String> text, Optional<String> from, Optional<String> to, Optional<String> cc, Optional<String> bcc, Optional<String> subject,
                                        Optional<String> body, Optional<String> attachments, Optional<Header> header, Optional<String> hasKeyword, Optional<String> notKeyword) {
 
@@ -244,6 +253,7 @@ public class FilterCondition implements Filter {
         this.isUnread = isUnread;
         this.isAnswered = isAnswered;
         this.isDraft = isDraft;
+        this.isForwarded = isForwarded;
         this.hasAttachment = hasAttachment;
         this.text = text;
         this.from = from;
@@ -298,6 +308,10 @@ public class FilterCondition implements Filter {
         return isDraft;
     }
 
+    public Optional<Boolean> getIsForwarded() {
+        return isForwarded;
+    }
+
     public Optional<Boolean> getHasAttachment() {
         return hasAttachment;
     }
@@ -360,6 +374,7 @@ public class FilterCondition implements Filter {
                 && Objects.equals(this.isUnread, other.isUnread)
                 && Objects.equals(this.isAnswered, other.isAnswered)
                 && Objects.equals(this.isDraft, other.isDraft)
+                && Objects.equals(this.isForwarded, other.isForwarded)
                 && Objects.equals(this.hasAttachment, other.hasAttachment)
                 && Objects.equals(this.text, other.text)
                 && Objects.equals(this.from, other.from)
@@ -378,7 +393,7 @@ public class FilterCondition implements Filter {
 
     @Override
     public final int hashCode() {
-        return Objects.hash(inMailboxes, notInMailboxes, before, after, minSize, maxSize, isFlagged, isUnread, isAnswered, isDraft, hasAttachment,
+        return Objects.hash(inMailboxes, notInMailboxes, before, after, minSize, maxSize, isFlagged, isUnread, isAnswered, isDraft, isForwarded, hasAttachment,
                 text, from, to, cc, bcc, subject, body, attachments, header, hasKeyword, notKeyword);
     }
 
@@ -395,6 +410,7 @@ public class FilterCondition implements Filter {
         isUnread.ifPresent(x -> helper.add("isUnread", x));
         isAnswered.ifPresent(x -> helper.add("isAnswered", x));
         isDraft.ifPresent(x -> helper.add("isDraft", x));
+        isForwarded.ifPresent(x -> helper.add("isForwarded", x));
         hasAttachment.ifPresent(x -> helper.add("hasAttachment", x));
         text.ifPresent(x -> helper.add("text", x));
         from.ifPresent(x -> helper.add("from", x));

http://git-wip-us.apache.org/repos/asf/james-project/blob/a345a328/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
index d364b59..e0b9cc6 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
@@ -28,6 +28,7 @@ import org.apache.james.jmap.model.Filter;
 import org.apache.james.jmap.model.FilterCondition;
 import org.apache.james.jmap.model.FilterOperator;
 import org.apache.james.jmap.model.Keyword;
+import org.apache.james.jmap.model.Keywords;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.mailbox.model.SearchQuery.AddressType;
 import org.apache.james.mailbox.model.SearchQuery.Criterion;
@@ -76,6 +77,7 @@ public class FilterToSearchQuery {
         filter.getIsDraft().ifPresent(isDraft -> searchQuery.andCriteria(SearchQuery.flag(Flag.DRAFT, isDraft)));
         filter.getIsFlagged().ifPresent(isFlagged -> searchQuery.andCriteria(SearchQuery.flag(Flag.FLAGGED, isFlagged)));
         filter.getIsUnread().ifPresent(isUnread -> searchQuery.andCriteria(SearchQuery.flag(Flag.SEEN, !isUnread)));
+        filter.getIsForwarded().ifPresent(isForwarded -> searchQuery.andCriteria(SearchQuery.flagSet(Keyword.FORWARDED.getFlagName(), isForwarded)));
         filter.getMaxSize().ifPresent(maxSize -> searchQuery.andCriteria(SearchQuery.sizeLessThan(maxSize)));
         filter.getMinSize().ifPresent(minSize -> searchQuery.andCriteria(SearchQuery.sizeGreaterThan(minSize)));
         filter.getHasAttachment().ifPresent(hasAttachment -> searchQuery.andCriteria(SearchQuery.hasAttachment(hasAttachment)));

http://git-wip-us.apache.org/repos/asf/james-project/blob/a345a328/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterConditionTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterConditionTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterConditionTest.java
index 828c94a..8cac964 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterConditionTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/FilterConditionTest.java
@@ -85,6 +85,7 @@ public class FilterConditionTest {
         boolean isUnread = true;
         boolean isAnswered = true;
         boolean isDraft = true;
+        boolean isForwarded = true;
         boolean hasAttachment = true;
         String text = "text";
         String from = "sender@james.org";
@@ -99,7 +100,7 @@ public class FilterConditionTest {
         Optional<String> notKeyword = Optional.of("$Flagged");
 
         FilterCondition expectedFilterCondition = new FilterCondition(Optional.of(ImmutableList.of("1")), Optional.of(ImmutableList.of("2")), Optional.of(before), Optional.of(after), Optional.of(minSize), Optional.of(maxSize),
-                Optional.of(isFlagged), Optional.of(isUnread), Optional.of(isAnswered), Optional.of(isDraft), Optional.of(hasAttachment), Optional.of(text), Optional.of(from), 
+                Optional.of(isFlagged), Optional.of(isUnread), Optional.of(isAnswered), Optional.of(isDraft), Optional.of(isForwarded), Optional.of(hasAttachment), Optional.of(text), Optional.of(from),
                 Optional.of(to), Optional.of(cc), Optional.of(bcc), Optional.of(subject), Optional.of(body), Optional.of(attachments), Optional.of(header),
                 hasKeyword, notKeyword);
 
@@ -114,6 +115,7 @@ public class FilterConditionTest {
                 .isUnread(isUnread)
                 .isAnswered(isAnswered)
                 .isDraft(isDraft)
+                .isForwarded(isForwarded)
                 .hasAttachment(hasAttachment)
                 .text(text)
                 .from(from)


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


[2/5] james-project git commit: JAMES-2213 Allow createMessage and updateMessage with isForwarded and later can retrieve message with isForwarded value

Posted by ad...@apache.org.
JAMES-2213 Allow createMessage and updateMessage with isForwarded and
later can retrieve message with isForwarded value


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

Branch: refs/heads/master
Commit: 35b1d1219927a4c8df8c8c872704184edc4df945
Parents: a345a32
Author: quynhn <qn...@linagora.com>
Authored: Mon Nov 13 15:12:15 2017 +0700
Committer: quynhn <qn...@linagora.com>
Committed: Tue Nov 14 10:27:40 2017 +0700

----------------------------------------------------------------------
 .../integration/SetMessagesMethodTest.java      | 47 ++++++++++++++++++++
 .../org/apache/james/jmap/model/Message.java    |  4 ++
 .../james/jmap/model/MessageProperties.java     |  1 +
 .../james/jmap/json/ParsingWritingObjects.java  |  2 +-
 .../james/jmap/model/MessageFactoryTest.java    |  6 +--
 .../jmap/src/test/resources/json/message.json   |  3 +-
 6 files changed, 58 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/35b1d121/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 d72a60e..6e74189 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
@@ -994,6 +994,53 @@ public abstract class SetMessagesMethodTest {
             .body(ARGUMENTS + ".list[0].isAnswered", equalTo(true));
     }
 
+
+    @Test
+    public void setMessagesShouldMarkMessageAsForwardWhenIsForwardedPassed() throws MailboxException {
+        mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, USERNAME, "mailbox");
+
+        ComposedMessageId message = mailboxProbe.appendMessage(USERNAME, USER_MAILBOX,
+            new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(Charsets.UTF_8)), new Date(), false, new Flags());
+        await();
+
+        String serializedMessageId = message.getMessageId().serialize();
+
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body(String.format("[[\"setMessages\", {\"update\": {\"%s\" : { \"isForwarded\" : true } } }, \"#0\"]]", serializedMessageId))
+        .when()
+            .post("/jmap")
+        .then()
+            .log().ifValidationFails()
+            .spec(getSetMessagesUpdateOKResponseAssertions(serializedMessageId));
+    }
+
+    @Test
+    public void setMessagesShouldMarkAsForwardedWhenIsForwardedPassed() throws MailboxException {
+        mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, USERNAME, "mailbox");
+
+        ComposedMessageId message = mailboxProbe.appendMessage(USERNAME, USER_MAILBOX,
+            new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes(Charsets.UTF_8)), new Date(), false, new Flags());
+        await();
+
+        String serializedMessageId = message.getMessageId().serialize();
+        given()
+            .header("Authorization", accessToken.serialize())
+            .body(String.format("[[\"setMessages\", {\"update\": {\"%s\" : { \"isForwarded\" : true } } }, \"#0\"]]", serializedMessageId))
+        .when()
+            .post("/jmap");
+
+        with()
+            .header("Authorization", accessToken.serialize())
+            .body("[[\"getMessages\", {\"ids\": [\"" + serializedMessageId + "\"]}, \"#0\"]]")
+            .post("/jmap")
+        .then()
+            .log().ifValidationFails()
+            .body(NAME, equalTo("messages"))
+            .body(ARGUMENTS + ".list", hasSize(1))
+            .body(ARGUMENTS + ".list[0].isForwarded", equalTo(true));
+    }
+
     @Test
     public void setMessagesShouldReturnNotFoundWhenUpdateUnknownMessage() {
         mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, USERNAME, "mailbox");

http://git-wip-us.apache.org/repos/asf/james-project/blob/35b1d121/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
index 797d191..557e99f 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
@@ -332,6 +332,10 @@ public class Message {
         return keywords.contains(Keyword.DRAFT);
     }
 
+    public boolean isIsForwarded() {
+        return keywords.contains(Keyword.FORWARDED);
+    }
+
     public boolean isHasAttachment() {
         return hasAttachment;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/35b1d121/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageProperties.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageProperties.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageProperties.java
index bf1bff5..ca71165 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageProperties.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageProperties.java
@@ -128,6 +128,7 @@ public class MessageProperties {
         isFlagged("isFlagged"),
         isAnswered("isAnswered"),
         isDraft("isDraft"),
+        isForwarded("isForwarded"),
         hasAttachment("hasAttachment"),
         headers("headers"),
         from("from"),

http://git-wip-us.apache.org/repos/asf/james-project/blob/35b1d121/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java
index 7a7a04e..b81731a 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/json/ParsingWritingObjects.java
@@ -51,7 +51,7 @@ public interface ParsingWritingObjects {
         Flags FLAGS = FlagsBuilder.builder()
                 .add(Flags.Flag.FLAGGED, Flags.Flag.ANSWERED, Flags.Flag.DRAFT, Flags.Flag.SEEN)
                 .build();
-        ImmutableSet<Keyword> KEYWORDS = ImmutableSet.of(Keyword.DRAFT, Keyword.FLAGGED, Keyword.ANSWERED, Keyword.SEEN);
+        ImmutableSet<Keyword> KEYWORDS = ImmutableSet.of(Keyword.DRAFT, Keyword.FLAGGED, Keyword.ANSWERED, Keyword.SEEN, Keyword.FORWARDED);
         boolean HAS_ATTACHMENT = true;
         ImmutableMap<String, String> HEADERS = ImmutableMap.of("h1", "h1Value", "h2", "h2Value");
         Emailer FROM = Emailer.builder().name("myName").email("myEmail@james.org").build();

http://git-wip-us.apache.org/repos/asf/james-project/blob/35b1d121/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
index 5637620..434ca06 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageFactoryTest.java
@@ -90,7 +90,7 @@ public class MessageFactoryTest {
     public void flagsShouldBeSetIntoMessage() throws Exception {
         MetaDataWithContent testMail = MetaDataWithContent.builder()
                 .uid(MessageUid.of(2))
-                .keywords(Keywords.factory().from(Keyword.ANSWERED, Keyword.FLAGGED, Keyword.DRAFT))
+                .keywords(Keywords.factory().from(Keyword.ANSWERED, Keyword.FLAGGED, Keyword.DRAFT, Keyword.FORWARDED))
                 .size(0)
                 .internalDate(INTERNAL_DATE)
                 .content(new ByteArrayInputStream("".getBytes(Charsets.UTF_8)))
@@ -100,8 +100,8 @@ public class MessageFactoryTest {
                 .build();
         Message testee = messageFactory.fromMetaDataWithContent(testMail);
         assertThat(testee)
-            .extracting(Message::isIsUnread, Message::isIsFlagged, Message::isIsAnswered, Message::isIsDraft)
-            .containsExactly(true, true, true, true);
+            .extracting(Message::isIsUnread, Message::isIsFlagged, Message::isIsAnswered, Message::isIsDraft, Message::isIsForwarded)
+            .containsExactly(true, true, true, true, true);
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/35b1d121/server/protocols/jmap/src/test/resources/json/message.json
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/resources/json/message.json b/server/protocols/jmap/src/test/resources/json/message.json
index ba0c82f..264c6fb 100644
--- a/server/protocols/jmap/src/test/resources/json/message.json
+++ b/server/protocols/jmap/src/test/resources/json/message.json
@@ -8,6 +8,7 @@
     "isFlagged": true,
     "isAnswered": true,
     "isDraft": true,
+    "isForwarded": true,
     "hasAttachment": false,
     "headers": { "h1": "h1Value", "h2": "h2Value" },
     "from": { "name": "myName", "email": "myEmail@james.org"},
@@ -23,5 +24,5 @@
     "htmlBody": "<h1>myHtmlBody</h1>",
     "attachments": [ ],
     "attachedMessages": { },
-    "keywords": {"$Draft" : true, "$Flagged" : true, "$Answered" : true, "$Seen" : true}
+    "keywords": {"$Draft" : true, "$Flagged" : true, "$Answered" : true, "$Seen" : true, "$Forwarded" : true}
 }


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


[4/5] james-project git commit: Fix Eclipse warnings

Posted by ad...@apache.org.
Fix Eclipse warnings


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

Branch: refs/heads/master
Commit: 39e9e3e3283d448c8d446edf3bd8cce71433c707
Parents: 35b1d12
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Mon Nov 13 17:29:43 2017 +0100
Committer: quynhn <qn...@linagora.com>
Committed: Tue Nov 14 10:27:40 2017 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/mailbox/model/AttachmentIdTest.java     | 2 --
 .../apache/james/mailbox/store/mail/model/FlagsFactoryTest.java   | 2 +-
 .../org/apache/james/imap/encode/LSubResponseEncoderTest.java     | 3 ---
 .../org/apache/james/imap/encode/ListResponseEncoderTest.java     | 2 --
 .../org/apache/james/imap/encode/SearchResponseEncoderTest.java   | 2 --
 .../org/apache/james/imap/encode/XListResponseEncoderTest.java    | 1 -
 .../java/org/apache/james/jmap/utils/FilterToSearchQuery.java     | 1 -
 7 files changed, 1 insertion(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/39e9e3e3/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentIdTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentIdTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentIdTest.java
index baf826b..29bd55d 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentIdTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentIdTest.java
@@ -22,9 +22,7 @@ package org.apache.james.mailbox.model;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
-import java.io.InputStream;
 import java.util.UUID;
-import java.util.stream.Stream;
 
 import org.apache.commons.io.IOUtils;
 import org.junit.Test;

http://git-wip-us.apache.org/repos/asf/james-project/blob/39e9e3e3/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/FlagsFactoryTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/FlagsFactoryTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/FlagsFactoryTest.java
index 5f32579..053bfd1 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/FlagsFactoryTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/FlagsFactoryTest.java
@@ -63,7 +63,7 @@ public class FlagsFactoryTest {
     public void builderShouldAcceptNullUserFlags() {
         assertThat(
             FlagsFactory.builder()
-                .addUserFlags(null)
+                .addUserFlags((String)null)
                 .build())
             .isEqualTo(new Flags());
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/39e9e3e3/protocols/imap/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java
index 119a0e4..91690bc 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java
@@ -20,9 +20,6 @@
 package org.apache.james.imap.encode;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
 
 import org.apache.james.imap.api.ImapMessage;
 import org.apache.james.imap.encode.base.ByteImapResponseWriter;

http://git-wip-us.apache.org/repos/asf/james-project/blob/39e9e3e3/protocols/imap/src/test/java/org/apache/james/imap/encode/ListResponseEncoderTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/ListResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/ListResponseEncoderTest.java
index 2aef368..8ce7e83 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/encode/ListResponseEncoderTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/ListResponseEncoderTest.java
@@ -20,9 +20,7 @@
 package org.apache.james.imap.encode;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
 
 import org.apache.james.imap.api.ImapMessage;
 import org.apache.james.imap.encode.base.ByteImapResponseWriter;

http://git-wip-us.apache.org/repos/asf/james-project/blob/39e9e3e3/protocols/imap/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java
index 70ea129..4f4d18c 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java
@@ -27,9 +27,7 @@ import org.apache.james.imap.api.ImapMessage;
 import org.apache.james.imap.encode.base.ByteImapResponseWriter;
 import org.apache.james.imap.encode.base.ImapResponseComposerImpl;
 import org.apache.james.imap.message.response.LSubResponse;
-import org.apache.james.imap.message.response.ListResponse;
 import org.apache.james.imap.message.response.SearchResponse;
-import org.apache.james.mailbox.model.MailboxMetaData;
 import org.jmock.Mockery;
 import org.jmock.integration.junit4.JUnit4Mockery;
 import org.junit.Before;

http://git-wip-us.apache.org/repos/asf/james-project/blob/39e9e3e3/protocols/imap/src/test/java/org/apache/james/imap/encode/XListResponseEncoderTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/XListResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/XListResponseEncoderTest.java
index c11b1f0..cb0fdff 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/encode/XListResponseEncoderTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/XListResponseEncoderTest.java
@@ -27,7 +27,6 @@ import org.apache.james.imap.api.process.MailboxType;
 import org.apache.james.imap.encode.base.ByteImapResponseWriter;
 import org.apache.james.imap.encode.base.ImapResponseComposerImpl;
 import org.apache.james.imap.message.response.LSubResponse;
-import org.apache.james.imap.message.response.ListResponse;
 import org.apache.james.imap.message.response.XListResponse;
 import org.apache.james.mailbox.model.MailboxMetaData;
 import org.jmock.Mockery;

http://git-wip-us.apache.org/repos/asf/james-project/blob/39e9e3e3/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
index e0b9cc6..da6fca8 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
@@ -28,7 +28,6 @@ import org.apache.james.jmap.model.Filter;
 import org.apache.james.jmap.model.FilterCondition;
 import org.apache.james.jmap.model.FilterOperator;
 import org.apache.james.jmap.model.Keyword;
-import org.apache.james.jmap.model.Keywords;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.mailbox.model.SearchQuery.AddressType;
 import org.apache.james.mailbox.model.SearchQuery.Criterion;


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