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/18 07:27:31 UTC
[james-project] 03/13: JAMES-3463
MailboxChangeRepository::getLatestState
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 33a65de0a28be8dc59705670f06279f4a3d587e5
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Dec 15 10:31:58 2020 +0700
JAMES-3463 MailboxChangeRepository::getLatestState
---
.../change/CassandraMailboxChangeRepository.java | 5 +++++
.../jmap/api/change/MailboxChangeRepository.java | 2 ++
.../change/MemoryMailboxChangeRepository.java | 8 ++++++++
.../change/MailboxChangeRepositoryContract.java | 23 ++++++++++++++++++++++
4 files changed, 38 insertions(+)
diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepository.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepository.java
index 65b6d3f..738d9c2 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepository.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepository.java
@@ -39,4 +39,9 @@ public class CassandraMailboxChangeRepository implements MailboxChangeRepository
public Mono<MailboxChanges> getSinceState(AccountId accountId, MailboxChange.State state, Optional<MailboxChange.Limit> maxIdsToReturn) {
return Mono.empty();
}
+
+ @Override
+ public Mono<MailboxChange.State> getLatestState(AccountId accountId) {
+ return Mono.just(MailboxChange.State.INITIAL);
+ }
}
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java
index fb965be..ccc0a36 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java
@@ -32,4 +32,6 @@ public interface MailboxChangeRepository {
Mono<Void> save(MailboxChange change);
Mono<MailboxChanges> getSinceState(AccountId accountId, State state, Optional<Limit> maxIdsToReturn);
+
+ Mono<State> getLatestState(AccountId accountId);
}
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 0ff0fa5..5dad517 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
@@ -79,4 +79,12 @@ public class MemoryMailboxChangeRepository implements MailboxChangeRepository {
.switchIfEmpty(Mono.error(new ChangeNotFoundException(state, String.format("State '%s' could not be found", state.getValue()))))
.single();
}
+
+ @Override
+ public Mono<State> getLatestState(AccountId accountId) {
+ return Flux.fromIterable(mailboxChangeMap.get(accountId))
+ .sort(Comparator.comparing(MailboxChange::getDate))
+ .map(MailboxChange::getState)
+ .last(State.INITIAL);
+ }
}
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 75f10af..fe9764f 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
@@ -56,6 +56,29 @@ public interface MailboxChangeRepositoryContract {
}
@Test
+ default void getLatestStateShouldReturnInitialWhenEmpty() {
+ MailboxChangeRepository repository = mailboxChangeRepository();
+
+ assertThat(repository.getLatestState(ACCOUNT_ID).block())
+ .isEqualTo(State.INITIAL);
+ }
+
+ @Test
+ default void getLatestStateShouldReturnLastPersistedState() {
+ MailboxChangeRepository repository = mailboxChangeRepository();
+
+ MailboxChange change1 = MailboxChange.of(ACCOUNT_ID, State.of(UUID.randomUUID()), DATE.minusHours(2), ImmutableList.of(TestId.of(2)), ImmutableList.of(), ImmutableList.of());
+ MailboxChange change2 = MailboxChange.of(ACCOUNT_ID, State.of(UUID.randomUUID()), DATE.minusHours(1), ImmutableList.of(TestId.of(3)), ImmutableList.of(), ImmutableList.of());
+ MailboxChange change3 = MailboxChange.of(ACCOUNT_ID, State.of(UUID.randomUUID()), DATE, ImmutableList.of(TestId.of(4)), ImmutableList.of(), ImmutableList.of());
+ repository.save(change1);
+ repository.save(change2);
+ repository.save(change3);
+
+ assertThat(repository.getLatestState(ACCOUNT_ID).block())
+ .isEqualTo(change3.getState());
+ }
+
+ @Test
default void saveChangeShouldFailWhenNoAccountId() {
MailboxChangeRepository repository = mailboxChangeRepository();
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org