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/11/10 07:54:59 UTC

[james-project] 02/02: JAMES-3539 PushSubscriptionRepository::updateExpireTime should return PushSubscriptionExpiredTime

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 b114f1f139c7bd2e1a3b1af07c0f06bb29de0a75
Author: Quan Tran <hq...@linagora.com>
AuthorDate: Tue Nov 2 12:17:04 2021 +0700

    JAMES-3539 PushSubscriptionRepository::updateExpireTime should return PushSubscriptionExpiredTime
    
    This change allows knowing which how expires is updated
---
 .../CassandraPushSubscriptionRepository.java                |  6 +++---
 .../api/pushsubscription/PushSubscriptionRepository.java    |  3 ++-
 .../pushsubscription/MemoryPushSubscriptionRepository.java  | 13 ++++++++-----
 .../PushSubscriptionRepositoryContract.scala                | 12 ++++++++++++
 4 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/pushsubscription/CassandraPushSubscriptionRepository.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/pushsubscription/CassandraPushSubscriptionRepository.java
index a6d2c16..66856e4 100644
--- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/pushsubscription/CassandraPushSubscriptionRepository.java
+++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/pushsubscription/CassandraPushSubscriptionRepository.java
@@ -79,7 +79,7 @@ public class CassandraPushSubscriptionRepository implements PushSubscriptionRepo
     }
 
     @Override
-    public Publisher<Void> updateExpireTime(Username username, PushSubscriptionId id, ZonedDateTime newExpire) {
+    public Publisher<PushSubscriptionExpiredTime> updateExpireTime(Username username, PushSubscriptionId id, ZonedDateTime newExpire) {
         return Mono.just(newExpire)
             .handle((inputTime, sink) -> {
                 if (newExpire.isBefore(ZonedDateTime.now(clock))) {
@@ -89,8 +89,8 @@ public class CassandraPushSubscriptionRepository implements PushSubscriptionRepo
             .then(retrieveByPushSubscriptionId(username, id)
                 .flatMap(subscription -> dao.insert(username,
                     subscription.withExpires(evaluateExpiresTime(Optional.of(newExpire), clock))))
-                .switchIfEmpty(Mono.error(() -> new PushSubscriptionNotFoundException(id)))
-                .then());
+                .map(PushSubscription::expires)
+                .switchIfEmpty(Mono.error(() -> new PushSubscriptionNotFoundException(id))));
     }
 
     @Override
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/pushsubscription/PushSubscriptionRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/pushsubscription/PushSubscriptionRepository.java
index bb9c563..f8fa49f 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/pushsubscription/PushSubscriptionRepository.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/pushsubscription/PushSubscriptionRepository.java
@@ -25,6 +25,7 @@ import java.util.Set;
 import org.apache.james.core.Username;
 import org.apache.james.jmap.api.model.PushSubscription;
 import org.apache.james.jmap.api.model.PushSubscriptionCreationRequest;
+import org.apache.james.jmap.api.model.PushSubscriptionExpiredTime;
 import org.apache.james.jmap.api.model.PushSubscriptionId;
 import org.apache.james.jmap.api.model.TypeName;
 import org.reactivestreams.Publisher;
@@ -32,7 +33,7 @@ import org.reactivestreams.Publisher;
 public interface PushSubscriptionRepository {
     Publisher<PushSubscription> save(Username username, PushSubscriptionCreationRequest pushSubscriptionCreationRequest);
 
-    Publisher<Void> updateExpireTime(Username username, PushSubscriptionId id, ZonedDateTime newExpire);
+    Publisher<PushSubscriptionExpiredTime> updateExpireTime(Username username, PushSubscriptionId id, ZonedDateTime newExpire);
 
     Publisher<Void> updateTypes(Username username, PushSubscriptionId id, Set<TypeName> types);
 
diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/pushsubscription/MemoryPushSubscriptionRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/pushsubscription/MemoryPushSubscriptionRepository.java
index c6b42ed..aff9a18 100644
--- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/pushsubscription/MemoryPushSubscriptionRepository.java
+++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/pushsubscription/MemoryPushSubscriptionRepository.java
@@ -84,7 +84,7 @@ public class MemoryPushSubscriptionRepository implements PushSubscriptionReposit
     }
 
     @Override
-    public Publisher<Void> updateExpireTime(Username username, PushSubscriptionId id, ZonedDateTime newExpire) {
+    public Publisher<PushSubscriptionExpiredTime> updateExpireTime(Username username, PushSubscriptionId id, ZonedDateTime newExpire) {
         return Mono.just(newExpire)
             .handle((inputTime, sink) -> {
                 if (newExpire.isBefore(ZonedDateTime.now(clock))) {
@@ -92,10 +92,13 @@ public class MemoryPushSubscriptionRepository implements PushSubscriptionReposit
                 }
             })
             .then(Mono.justOrEmpty(table.get(username, id))
-                .doOnNext(pushSubscription -> table.put(username, id,
-                    pushSubscription.withExpires(evaluateExpiresTime(Optional.of(newExpire), clock))))
-                .switchIfEmpty(Mono.error(() -> new PushSubscriptionNotFoundException(id)))
-                .then());
+                .mapNotNull(pushSubscription -> {
+                    PushSubscription value = pushSubscription.withExpires(evaluateExpiresTime(Optional.of(newExpire), clock));
+                    table.put(username, id, value);
+                    return value;
+                })
+                .map(PushSubscription::expires)
+                .switchIfEmpty(Mono.error(() -> new PushSubscriptionNotFoundException(id))));
     }
 
     @Override
diff --git a/server/data/data-jmap/src/test/scala/org/apache/james/jmap/api/pushsubscription/PushSubscriptionRepositoryContract.scala b/server/data/data-jmap/src/test/scala/org/apache/james/jmap/api/pushsubscription/PushSubscriptionRepositoryContract.scala
index 7c87498..326626a 100644
--- a/server/data/data-jmap/src/test/scala/org/apache/james/jmap/api/pushsubscription/PushSubscriptionRepositoryContract.scala
+++ b/server/data/data-jmap/src/test/scala/org/apache/james/jmap/api/pushsubscription/PushSubscriptionRepositoryContract.scala
@@ -188,6 +188,18 @@ trait PushSubscriptionRepositoryContract {
   }
 
   @Test
+  def updateWithExpiresBiggerThanMaxExpiresShouldReturnServerFixedExpires(): Unit = {
+    val validRequest = PushSubscriptionCreationRequest(
+      deviceClientId = DeviceClientId("1"),
+      url = PushSubscriptionServerURL(new URL("https://example.com/push")),
+      types = Seq(CustomTypeName1))
+    val pushSubscriptionId = SMono.fromPublisher(testee.save(ALICE, validRequest)).block().id
+    val fixedExpires = SMono.fromPublisher(testee.updateExpireTime(ALICE, pushSubscriptionId, MAX_EXPIRE.plusDays(1))).block()
+
+    assertThat(fixedExpires).isEqualTo(PushSubscriptionExpiredTime(MAX_EXPIRE))
+  }
+
+  @Test
   def updateWithValidTypesShouldSucceed(): Unit = {
     val validRequest = PushSubscriptionCreationRequest(
       deviceClientId = DeviceClientId("1"),

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