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 2021/04/16 01:57:23 UTC
[james-project] 02/02: JAMES-3529 Add getLatestVersion
FilteringManagement
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 f129b692b8e64dedfb8a58c1d5b438cf3b203a64
Author: quanth <hq...@linagora.com>
AuthorDate: Fri Apr 9 14:35:57 2021 +0700
JAMES-3529 Add getLatestVersion FilteringManagement
---
.../jmap/api/filtering/FilteringManagement.java | 1 +
.../impl/EventSourcingFilteringManagement.java | 13 +++++++++
.../api/filtering/FilteringManagementContract.java | 32 ++++++++++++++++++++++
3 files changed, 46 insertions(+)
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FilteringManagement.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FilteringManagement.java
index bc1648b..eff685e 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FilteringManagement.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FilteringManagement.java
@@ -42,4 +42,5 @@ public interface FilteringManagement {
Publisher<Rules> listRulesForUser(Username username);
+ Publisher<Version> getLatestVersion(Username username);
}
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/EventSourcingFilteringManagement.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/EventSourcingFilteringManagement.java
index 58ac2e0..27cd52c 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/EventSourcingFilteringManagement.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/EventSourcingFilteringManagement.java
@@ -76,4 +76,17 @@ public class EventSourcingFilteringManagement implements FilteringManagement {
.map(history -> FilteringAggregate.load(aggregateId, history).listRules())
.defaultIfEmpty(new Rules(ImmutableList.of(), Version.INITIAL));
}
+
+ @Override
+ public Publisher<Version> getLatestVersion(Username username) {
+ Preconditions.checkNotNull(username);
+
+ FilteringAggregateId aggregateId = new FilteringAggregateId(username);
+
+ return Mono.from(eventStore.getEventsOfAggregate(aggregateId))
+ .map(History::getVersionAsJava)
+ .map(eventIdOptional -> eventIdOptional.map(eventId -> new Version(eventId.value()))
+ .orElse(Version.INITIAL));
+ }
+
}
diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/FilteringManagementContract.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/FilteringManagementContract.java
index a23f440..47ad1ba 100644
--- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/FilteringManagementContract.java
+++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/FilteringManagementContract.java
@@ -229,4 +229,36 @@ public interface FilteringManagementContract {
.isInstanceOf(StateMismatchException.class);
}
+ @Test
+ default void getLatestVersionWhenNonVersionIsDefinedShouldReturnVersionInitial(EventStore eventStore) {
+ FilteringManagement testee = instantiateFilteringManagement(eventStore);
+
+ assertThat(Mono.from(testee.getLatestVersion(USERNAME)).block())
+ .isEqualTo(Version.INITIAL);
+ }
+
+ @Test
+ default void getLatestVersionAfterSetRulesFirstTimeShouldReturnVersionZero(EventStore eventStore) {
+ FilteringManagement testee = instantiateFilteringManagement(eventStore);
+
+ Mono.from(testee.defineRulesForUser(USERNAME, Optional.empty(), RULE_3, RULE_2, RULE_1)).block();
+
+ assertThat(Mono.from(testee.getLatestVersion(USERNAME)).block())
+ .isEqualTo(new Version(0));
+ }
+
+ @Test
+ default void getLatestVersionAfterSetRulesNotSucceedShouldReturnOldVersion(EventStore eventStore) {
+ FilteringManagement testee = instantiateFilteringManagement(eventStore);
+
+ Mono.from(testee.defineRulesForUser(USERNAME, Optional.empty(), RULE_3, RULE_2, RULE_1)).block();
+ assertThat(Mono.from(testee.getLatestVersion(USERNAME)).block())
+ .isEqualTo(new Version(0));
+
+ assertThatThrownBy(() -> Mono.from(testee.defineRulesForUser(USERNAME, Optional.of(new Version(1)), RULE_3, RULE_2, RULE_1)).block())
+ .isInstanceOf(StateMismatchException.class);
+ assertThat(Mono.from(testee.getLatestVersion(USERNAME)).block())
+ .isEqualTo(new Version(0));
+ }
+
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org