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

Reply via email to