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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
