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