You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2020/12/15 01:52:57 UTC

[james-project] 03/07: JAMES-3461 MemoryMailboxChangeRepository should return state when no newer state

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit d38f8fe7a179f22ec3a9ab48683c00b540b3a85f
Author: LanKhuat <dl...@linagora.com>
AuthorDate: Tue Dec 8 11:16:09 2020 +0700

    JAMES-3461 MemoryMailboxChangeRepository should return state when no newer state
---
 .../org/apache/james/jmap/api/change/MailboxChanges.java    | 13 ++++++-------
 .../jmap/memory/change/MemoryMailboxChangeRepository.java   |  2 +-
 .../jmap/api/change/MailboxChangeRepositoryContract.java    | 11 +++++++++++
 3 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChanges.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChanges.java
index 0dc1bc9..a3f9366 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChanges.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChanges.java
@@ -40,14 +40,16 @@ public class MailboxChanges {
 
         public static class MailboxChangeCollector implements Collector<MailboxChange, MailboxChangesBuilder, MailboxChanges> {
             private final MailboxChange.Limit limit;
+            private final MailboxChange.State state;
 
-            public MailboxChangeCollector(MailboxChange.Limit limit) {
+            public MailboxChangeCollector(MailboxChange.State state, MailboxChange.Limit limit) {
                 this.limit = limit;
+                this.state = state;
             }
 
             @Override
             public Supplier<MailboxChangesBuilder> supplier() {
-                return () -> new MailboxChangesBuilder(limit);
+                return () -> new MailboxChangesBuilder(state, limit);
             }
 
             public BiConsumer<MailboxChangesBuilder, MailboxChange> accumulator() {
@@ -78,8 +80,9 @@ public class MailboxChanges {
         private Set<MailboxId> updated;
         private Set<MailboxId> destroyed;
 
-        public MailboxChangesBuilder(MailboxChange.Limit limit) {
+        public MailboxChangesBuilder(MailboxChange.State state, MailboxChange.Limit limit) {
             this.limit = limit;
+            this.state = state;
             this.hasMoreChanges = false;
             this.canAddMoreItem = true;
             this.created = new HashSet<>();
@@ -132,10 +135,6 @@ public class MailboxChanges {
         this.destroyed = destroyed;
     }
 
-    public MailboxChangesBuilder build(MailboxChange.Limit limit) {
-        return new MailboxChangesBuilder(limit);
-    }
-
     public MailboxChange.State getNewState() {
         return newState;
     }
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java
index e920904..e9a2a79 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java
@@ -65,7 +65,7 @@ public class MemoryMailboxChangeRepository implements MailboxChangeRepository {
             .flatMapMany(currentState -> Flux.fromIterable(mailboxChangeMap.get(accountId))
                 .filter(change -> change.getDate().isAfter(currentState.getDate()))
                 .sort(Comparator.comparing(MailboxChange::getDate)))
-            .collect(new MailboxChangeCollector(maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
+            .collect(new MailboxChangeCollector(state, maxChanges.orElse(DEFAULT_NUMBER_OF_CHANGES)));
     }
 
     private Mono<MailboxChange> findByState(AccountId accountId, State state) {
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java
index 66f27e3..2f3209b 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java
@@ -100,6 +100,17 @@ public interface MailboxChangeRepositoryContract {
     }
 
     @Test
+    default void getChangesShouldReturnCurrentStateWhenNoNewerState() {
+        MailboxChangeRepository repository = mailboxChangeRepository();
+
+        MailboxChange oldState = MailboxChange.of(ACCOUNT_ID, STATE_0, DATE, ImmutableList.of(TestId.of(1)), ImmutableList.of(), ImmutableList.of());
+        repository.save(oldState);
+
+        assertThat(repository.getSinceState(ACCOUNT_ID, STATE_0, Optional.empty()).block().getNewState())
+            .isEqualTo(oldState.getState());
+    }
+
+    @Test
     default void getChangesShouldLimitChanges() {
         MailboxChangeRepository repository = mailboxChangeRepository();
 


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