JAMES-1943 Correct JMAP GetMessageList flags filter convertion
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c1ae26ed Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c1ae26ed Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c1ae26ed Branch: refs/heads/master Commit: c1ae26ede8b0a42c5ac3f4bcc694b29a7a19ea0c Parents: 8048946 Author: Benoit Tellier <btell...@linagora.com> Authored: Thu Feb 16 10:47:39 2017 +0700 Committer: Benoit Tellier <btell...@linagora.com> Committed: Mon Feb 20 16:07:11 2017 +0700 ---------------------------------------------------------------------- .../apache/james/mailbox/model/SearchQuery.java | 4 ++ .../james/jmap/utils/FilterToSearchQuery.java | 8 ++-- .../jmap/utils/FilterToSearchQueryTest.java | 49 ++++++++++++++++++++ 3 files changed, 57 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/c1ae26ed/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java index 0c2203b..6c7e1cc 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java @@ -633,6 +633,10 @@ public class SearchQuery implements Serializable { return new FlagCriterion(flag, BooleanOperator.unset()); } + public static Criterion flag(Flag flag, boolean isSet) { + return new FlagCriterion(flag, new BooleanOperator(isSet)); + } + /** * Creates a filter on the given flag. * http://git-wip-us.apache.org/repos/asf/james-project/blob/c1ae26ed/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 d30c692..b96d6a4 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 @@ -68,10 +68,10 @@ public class FilterToSearchQuery { filter.getAfter().ifPresent(after -> searchQuery.andCriteria(SearchQuery.internalDateAfter(Date.from(after.toInstant()), DateResolution.Second))); filter.getBefore().ifPresent(before -> searchQuery.andCriteria(SearchQuery.internalDateBefore(Date.from(before.toInstant()), DateResolution.Second))); filter.getHeader().ifPresent(header -> searchQuery.andCriteria(SearchQuery.headerContains(header.getName(), header.getValue().orElse(null)))); - filter.getIsAnswered().ifPresent(isAnswered -> searchQuery.andCriteria(SearchQuery.flagIsSet(Flag.ANSWERED))); - filter.getIsDraft().ifPresent(isDraft -> searchQuery.andCriteria(SearchQuery.flagIsSet(Flag.DRAFT))); - filter.getIsFlagged().ifPresent(isFlagged -> searchQuery.andCriteria(SearchQuery.flagIsSet(Flag.FLAGGED))); - filter.getIsUnread().ifPresent(isUnread -> searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flag.SEEN))); + filter.getIsAnswered().ifPresent(isAnswered -> searchQuery.andCriteria(SearchQuery.flag(Flag.ANSWERED, isAnswered))); + 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.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/c1ae26ed/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java index 6b3f6bf..9b2eb17 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java @@ -251,6 +251,55 @@ public class FilterToSearchQueryTest { assertThat(searchQuery).isEqualTo(expectedSearchQuery); } + + @Test + public void filterConditionShouldMapWhenIsNotAnswered() { + SearchQuery expectedSearchQuery = new SearchQuery(); + expectedSearchQuery.andCriteria(SearchQuery.flagIsUnSet(Flag.ANSWERED)); + + SearchQuery searchQuery = new FilterToSearchQuery().convert(FilterCondition.builder() + .isAnswered(false) + .build()); + + assertThat(searchQuery).isEqualTo(expectedSearchQuery); + } + + @Test + public void filterConditionShouldMapWhenIsNotDraft() { + SearchQuery expectedSearchQuery = new SearchQuery(); + expectedSearchQuery.andCriteria(SearchQuery.flagIsUnSet(Flag.DRAFT)); + + SearchQuery searchQuery = new FilterToSearchQuery().convert(FilterCondition.builder() + .isDraft(false) + .build()); + + assertThat(searchQuery).isEqualTo(expectedSearchQuery); + } + + @Test + public void filterConditionShouldMapWhenIsNotFlagged() { + SearchQuery expectedSearchQuery = new SearchQuery(); + expectedSearchQuery.andCriteria(SearchQuery.flagIsUnSet(Flag.FLAGGED)); + + SearchQuery searchQuery = new FilterToSearchQuery().convert(FilterCondition.builder() + .isFlagged(false) + .build()); + + assertThat(searchQuery).isEqualTo(expectedSearchQuery); + } + + @Test + public void filterConditionShouldMapWhenIsRead() { + SearchQuery expectedSearchQuery = new SearchQuery(); + expectedSearchQuery.andCriteria(SearchQuery.flagIsSet(Flag.SEEN)); + + SearchQuery searchQuery = new FilterToSearchQuery().convert(FilterCondition.builder() + .isUnread(false) + .build()); + + assertThat(searchQuery).isEqualTo(expectedSearchQuery); + } + @Test public void filterConditionShouldMapWhenMaxSize() { int maxSize = 123; --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org