This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch postgresql in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 34dc0ba6504ef68ce2f649a5f4081881af277a2a Author: vttran <vtt...@linagora.com> AuthorDate: Thu Feb 29 10:14:36 2024 +0700 JAMES-3925 - JMAP Upload - Method delete of Upload Repository should return Boolean value when applied --- .../jmap/cassandra/upload/CassandraUploadRepository.java | 2 +- .../org/apache/james/jmap/cassandra/upload/UploadDAO.java | 5 +++-- .../cassandra/upload/CassandraUploadRepositoryTest.java | 13 +++++++++++++ .../org/apache/james/jmap/api/upload/UploadRepository.java | 2 +- .../james/jmap/memory/upload/InMemoryUploadRepository.java | 9 ++++++--- .../james/jmap/api/upload/UploadRepositoryContract.scala | 13 +++++++++++++ 6 files changed, 37 insertions(+), 7 deletions(-) diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/CassandraUploadRepository.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/CassandraUploadRepository.java index 7afe42cbf0..10bd9e0aac 100644 --- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/CassandraUploadRepository.java +++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/CassandraUploadRepository.java @@ -79,7 +79,7 @@ public class CassandraUploadRepository implements UploadRepository { } @Override - public Mono<Void> delete(UploadId id, Username user) { + public Mono<Boolean> delete(UploadId id, Username user) { return uploadDAO.delete(user, id); } diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/UploadDAO.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/UploadDAO.java index 2f74a21b15..9bed016fd3 100644 --- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/UploadDAO.java +++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/UploadDAO.java @@ -202,10 +202,11 @@ public class UploadDAO { .map(rowToUploadRepresentation()); } - public Mono<Void> delete(Username username, UploadId uploadId) { + public Mono<Boolean> delete(Username username, UploadId uploadId) { return executor.executeVoid(delete.bind() .setString(USER, username.asString()) - .setUuid(ID, uploadId.getId())); + .setUuid(ID, uploadId.getId())) + .thenReturn(true); } public Flux<UploadRepresentation> all() { diff --git a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraUploadRepositoryTest.java b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraUploadRepositoryTest.java index 415ab6ddc0..025e0302b0 100644 --- a/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraUploadRepositoryTest.java +++ b/server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraUploadRepositoryTest.java @@ -31,6 +31,7 @@ import org.apache.james.jmap.api.upload.UploadRepositoryContract; import org.apache.james.server.blob.deduplication.DeDuplicationBlobStore; import org.apache.james.utils.UpdatableTickingClock; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.extension.RegisterExtension; import com.datastax.oss.driver.api.core.uuid.Uuids; @@ -62,4 +63,16 @@ class CassandraUploadRepositoryTest implements UploadRepositoryContract { public UpdatableTickingClock clock() { return clock; } + + @Disabled("Delete method always return true (to avoid LWT)") + @Override + public void deleteShouldReturnTrueWhenRowExists() { + UploadRepositoryContract.super.deleteShouldReturnTrueWhenRowExists(); + } + + @Disabled("Delete method always return true (to avoid LWT)") + @Override + public void deleteShouldReturnFalseWhenRowDoesNotExist() { + UploadRepositoryContract.super.deleteShouldReturnFalseWhenRowDoesNotExist(); + } } \ No newline at end of file diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/UploadRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/UploadRepository.java index 204726d2e4..60c7d207ac 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/UploadRepository.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/UploadRepository.java @@ -34,7 +34,7 @@ public interface UploadRepository { Publisher<Upload> retrieve(UploadId id, Username user); - Publisher<Void> delete(UploadId id, Username user); + Publisher<Boolean> delete(UploadId id, Username user); Publisher<UploadMetaData> listUploads(Username user); diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/upload/InMemoryUploadRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/upload/InMemoryUploadRepository.java index c887544cbe..c49a4399b6 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/upload/InMemoryUploadRepository.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/upload/InMemoryUploadRepository.java @@ -93,11 +93,14 @@ public class InMemoryUploadRepository implements UploadRepository { } @Override - public Publisher<Void> delete(UploadId id, Username user) { + public Publisher<Boolean> delete(UploadId id, Username user) { return Mono.justOrEmpty(uploadStore.get(id)) .filter(pair -> user.equals(pair.left)) - .doOnNext(pair -> uploadStore.remove(id)) - .then(); + .map(pair -> { + uploadStore.remove(id); + return true; + }) + .defaultIfEmpty(false); } @Override diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/upload/UploadRepositoryContract.scala b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/upload/UploadRepositoryContract.scala index 5ffced0db1..0f7f4871b2 100644 --- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/upload/UploadRepositoryContract.scala +++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/upload/UploadRepositoryContract.scala @@ -206,4 +206,17 @@ .isNotNull } + @Test + def deleteShouldReturnTrueWhenRowExists(): Unit = { + val uploadId: UploadId = SMono.fromPublisher(testee.upload(data(), CONTENT_TYPE, USER)).block().uploadId + + assertThat(SMono.fromPublisher(testee.delete(uploadId, USER)).block()).isTrue + } + + @Test + def deleteShouldReturnFalseWhenRowDoesNotExist(): Unit = { + val uploadIdOfAlice: UploadId = SMono.fromPublisher(testee.upload(data(), CONTENT_TYPE, Username.of("Alice"))).block().uploadId + assertThat(SMono.fromPublisher(testee.delete(uploadIdOfAlice, Username.of("Bob"))).block()).isFalse + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org