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 15ddca9951b619aef93bf6ac543087d5fe5b16ec Author: Benoit Tellier <[email protected]> AuthorDate: Sun Apr 12 13:55:04 2020 +0700 JAMES-3148 CassandraMessageDAO::delete --- .../cassandra/mail/CassandraAttachmentDAOV2.java | 14 ++++++++++++ .../mail/CassandraAttachmentDAOV2Test.java | 25 ++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java index 8627a73..ff3ddfe 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java @@ -45,6 +45,7 @@ import org.apache.james.mailbox.model.ContentType; import com.datastax.driver.core.PreparedStatement; import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; +import com.datastax.driver.core.querybuilder.QueryBuilder; import com.google.common.base.Preconditions; import reactor.core.publisher.Mono; @@ -125,6 +126,7 @@ public class CassandraAttachmentDAOV2 { private final BlobId.Factory blobIdFactory; private final CassandraAsyncExecutor cassandraAsyncExecutor; private final PreparedStatement insertStatement; + private final PreparedStatement deleteStatement; private final PreparedStatement selectStatement; @Inject @@ -134,6 +136,13 @@ public class CassandraAttachmentDAOV2 { this.selectStatement = prepareSelect(session); this.insertStatement = prepareInsert(session); + this.deleteStatement = prepareDelete(session); + } + + private PreparedStatement prepareDelete(Session session) { + return session.prepare( + QueryBuilder.delete().from(TABLE_NAME) + .where(eq(ID, bindMarker(ID)))); } private PreparedStatement prepareInsert(Session session) { @@ -171,4 +180,9 @@ public class CassandraAttachmentDAOV2 { .setString(BLOB_ID, attachment.getBlobId().asString())); } + public Mono<Void> delete(AttachmentId attachmentId) { + return cassandraAsyncExecutor.executeVoid( + deleteStatement.bind() + .setUUID(ID_AS_UUID, attachmentId.asUUID())); + } } diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java index 23032e1..94a05ba 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java @@ -20,6 +20,7 @@ package org.apache.james.mailbox.cassandra.mail; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatCode; import java.util.Optional; @@ -57,6 +58,12 @@ class CassandraAttachmentDAOV2Test { } @Test + void deleteShouldNotThrowWhenDoesNotExist() { + assertThatCode(() -> testee.delete(ATTACHMENT_ID).block()) + .doesNotThrowAnyException(); + } + + @Test void getAttachmentShouldReturnAttachmentWhenStored() { AttachmentMetadata attachment = AttachmentMetadata.builder() .attachmentId(ATTACHMENT_ID) @@ -71,4 +78,22 @@ class CassandraAttachmentDAOV2Test { assertThat(actual).contains(daoAttachment); } + + @Test + void getAttachmentShouldNotReturnDeletedAttachments() { + Attachment attachment = Attachment.builder() + .attachmentId(ATTACHMENT_ID) + .type("application/json") + .bytes("{\"property\":`\"value\"}".getBytes(StandardCharsets.UTF_8)) + .build(); + BlobId blobId = BLOB_ID_FACTORY.from("blobId"); + DAOAttachment daoAttachment = CassandraAttachmentDAOV2.from(attachment, blobId); + testee.storeAttachment(daoAttachment).block(); + + testee.delete(ATTACHMENT_ID).block(); + + Optional<DAOAttachment> actual = testee.getAttachment(ATTACHMENT_ID).blockOptional(); + + assertThat(actual).isEmpty(); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
