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