This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 0db23a4113e74ee200a3e590045e37bea63f885b
Author: Tung TRAN <[email protected]>
AuthorDate: Wed Aug 4 16:11:20 2021 +0700

    JAMES-3621 Mailbox webadmin - Clearing content of mailbox - TaskDTO & Guice 
binding
---
 .../WebadminMailboxTaskSerializationModule.java    | 12 ++++
 ...dminServerTaskSerializationIntegrationTest.java | 36 +++++++++++
 ...MailboxContentTaskAdditionalInformationDTO.java |  9 ++-
 .../service/ClearMailboxContentTaskDTO.java        | 73 ++++++++++++++++++++++
 ...boxContentTaskAdditionalInformationDTOTest.java | 43 +++++++++++++
 .../ClearMailboxContentTaskSerializationTest.java  | 48 ++++++++++++++
 .../clearMailboxContent.additionalInformation.json |  8 +++
 .../resources/json/clearMailboxContent.task.json   |  5 ++
 8 files changed, 233 insertions(+), 1 deletion(-)

diff --git 
a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxTaskSerializationModule.java
 
b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxTaskSerializationModule.java
index e9010a2..6db6e69 100644
--- 
a/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxTaskSerializationModule.java
+++ 
b/server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxTaskSerializationModule.java
@@ -31,6 +31,7 @@ import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
 import org.apache.james.webadmin.dto.DTOModuleInjections;
 import 
org.apache.james.webadmin.service.ClearMailboxContentTaskAdditionalInformationDTO;
+import org.apache.james.webadmin.service.ClearMailboxContentTaskDTO;
 import org.apache.james.webadmin.service.CreateMissingParentsTask;
 import 
org.apache.james.webadmin.service.CreateMissingParentsTaskAdditionalInformationDTO;
 import org.apache.james.webadmin.service.EventDeadLettersRedeliverAllTaskDTO;
@@ -40,6 +41,7 @@ import 
org.apache.james.webadmin.service.EventDeadLettersRedeliverService;
 import 
org.apache.james.webadmin.service.EventDeadLettersRedeliveryTaskAdditionalInformationDTO;
 import 
org.apache.james.webadmin.service.SubscribeAllTaskAdditionalInformationDTO;
 import org.apache.james.webadmin.service.SubscribeAllTaskDTO;
+import org.apache.james.webadmin.service.UserMailboxesService;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.multibindings.ProvidesIntoSet;
@@ -77,6 +79,11 @@ public class WebadminMailboxTaskSerializationModule extends 
AbstractModule {
     }
 
     @ProvidesIntoSet
+    public TaskDTOModule<? extends Task, ? extends TaskDTO> 
clearMailboxContentTask(UserMailboxesService userMailboxesService) {
+        return ClearMailboxContentTaskDTO.module(userMailboxesService);
+    }
+
+    @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> 
eventDeadLettersRedeliveryAdditionalInformationForAll() {
         return 
EventDeadLettersRedeliveryTaskAdditionalInformationDTO.EventDeadLettersRedeliveryTaskAdditionalInformationForAll.module();
     }
@@ -142,6 +149,11 @@ public class WebadminMailboxTaskSerializationModule 
extends AbstractModule {
         return 
CreateMissingParentsTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
     }
 
+    @ProvidesIntoSet
+    public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> clearMailboxContentAdditionalInformation() {
+        return 
ClearMailboxContentTaskAdditionalInformationDTO.SERIALIZATION_MODULE;
+    }
+
     @Named(DTOModuleInjections.WEBADMIN_DTO)
     @ProvidesIntoSet
     public AdditionalInformationDTOModule<? extends 
TaskExecutionDetails.AdditionalInformation, ? extends  
AdditionalInformationDTO> webAdminClearMailboxContentAdditionalInformation() {
diff --git 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
index 44f2c25..96680ec 100644
--- 
a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
+++ 
b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
@@ -32,6 +32,7 @@ import static 
org.hamcrest.collection.IsMapWithSize.anEmptyMap;
 
 import java.io.ByteArrayInputStream;
 import java.util.Date;
+import java.util.stream.IntStream;
 import java.util.stream.Stream;
 
 import javax.mail.Flags;
@@ -79,6 +80,7 @@ import 
org.apache.james.webadmin.routes.CassandraMailboxMergingRoutes;
 import org.apache.james.webadmin.routes.MailQueueRoutes;
 import org.apache.james.webadmin.routes.MailRepositoriesRoutes;
 import org.apache.james.webadmin.routes.TasksRoutes;
+import org.apache.james.webadmin.service.ClearMailboxContentTask;
 import org.apache.james.webadmin.vault.routes.DeletedMessagesVaultRoutes;
 import org.eclipse.jetty.http.HttpStatus;
 import org.hamcrest.Matchers;
@@ -87,6 +89,8 @@ import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
+import com.github.fge.lambdas.Throwing;
+
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
 
@@ -678,6 +682,38 @@ class 
RabbitMQWebAdminServerTaskSerializationIntegrationTest {
             .body("additionalInformation.deleteMessageId", 
is(composedMessageId.getMessageId().serialize()));
     }
 
+    @Test
+    void deleteMailboxContentShouldComplete(GuiceJamesServer server) throws 
Exception {
+        server.getProbe(DataProbeImpl.class).addUser(USERNAME, "secret");
+        mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, USERNAME, 
MailboxConstants.INBOX);
+
+        mailboxProbe.appendMessage(
+            USERNAME,
+            MailboxPath.inbox(Username.of(USERNAME)),
+            new ByteArrayInputStream("Subject: 
test\r\n\r\ntestmail".getBytes()),
+            new Date(),
+            false,
+            new Flags());
+
+        String taskId = given()
+            .delete("users/" + USERNAME + "/mailboxes/" + 
MailboxConstants.INBOX + "/messages")
+            .jsonPath()
+            .getString("taskId");
+
+        with()
+            .basePath(TasksRoutes.BASE)
+        .when()
+            .get(taskId + "/await")
+            .then()
+            .body("status", is(TaskManager.Status.COMPLETED.getValue()))
+            .body("taskId", is(taskId))
+            .body("type", is(ClearMailboxContentTask.TASK_TYPE.asString()))
+            .body("additionalInformation.messagesSuccessCount", is(1))
+            .body("additionalInformation.messagesFailCount", is(0))
+            .body("additionalInformation.username", is(USERNAME))
+            .body("additionalInformation.mailboxName", 
is(MailboxConstants.INBOX));
+    }
+
     private MailboxAdded createMailboxAdded() {
         String uuid = "6e0dd59d-660e-4d9b-b22f-0354479f47b4";
         return EventFactory.mailboxAdded()
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ClearMailboxContentTaskAdditionalInformationDTO.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ClearMailboxContentTaskAdditionalInformationDTO.java
index 0e37eb7..08c899e 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ClearMailboxContentTaskAdditionalInformationDTO.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ClearMailboxContentTaskAdditionalInformationDTO.java
@@ -27,6 +27,8 @@ import 
org.apache.james.server.task.json.dto.AdditionalInformationDTO;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
 import org.apache.james.webadmin.validation.MailboxName;
 
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 public class ClearMailboxContentTaskAdditionalInformationDTO implements 
AdditionalInformationDTO {
 
     public static final 
AdditionalInformationDTOModule<ClearMailboxContentTask.AdditionalInformation, 
ClearMailboxContentTaskAdditionalInformationDTO> SERIALIZATION_MODULE =
@@ -63,7 +65,12 @@ public class ClearMailboxContentTaskAdditionalInformationDTO 
implements Addition
     private final long messagesSuccessCount;
     private final long messagesFailCount;
 
-    public ClearMailboxContentTaskAdditionalInformationDTO(String type, String 
username, String mailboxName, Instant timestamp, long messagesSuccessCount, 
long messagesFailCount) {
+    public 
ClearMailboxContentTaskAdditionalInformationDTO(@JsonProperty("type") String 
type,
+                                                           
@JsonProperty("username") String username,
+                                                           
@JsonProperty("mailboxName") String mailboxName,
+                                                           
@JsonProperty("timestamp") Instant timestamp,
+                                                           
@JsonProperty("messagesSuccessCount") long messagesSuccessCount,
+                                                           
@JsonProperty("messagesFailCount") long messagesFailCount) {
         this.type = type;
         this.username = username;
         this.mailboxName = mailboxName;
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ClearMailboxContentTaskDTO.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ClearMailboxContentTaskDTO.java
new file mode 100644
index 0000000..8ea29ab
--- /dev/null
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ClearMailboxContentTaskDTO.java
@@ -0,0 +1,73 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.webadmin.service;
+
+import org.apache.james.core.Username;
+import org.apache.james.json.DTOModule;
+import org.apache.james.server.task.json.dto.TaskDTO;
+import org.apache.james.server.task.json.dto.TaskDTOModule;
+import org.apache.james.webadmin.validation.MailboxName;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class ClearMailboxContentTaskDTO implements TaskDTO {
+    private final String type;
+    private final String username;
+    private final String mailboxName;
+
+    public ClearMailboxContentTaskDTO(@JsonProperty("type") String type,
+                                      @JsonProperty("username") String 
username,
+                                      @JsonProperty("mailboxName") String 
mailboxName) {
+        this.type = type;
+        this.username = username;
+        this.mailboxName = mailboxName;
+    }
+
+    @Override
+    public String getType() {
+        return type;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public String getMailboxName() {
+        return mailboxName;
+    }
+
+    public static TaskDTOModule<ClearMailboxContentTask, 
ClearMailboxContentTaskDTO> module(UserMailboxesService userMailboxesService) {
+        return DTOModule
+            .forDomainObject(ClearMailboxContentTask.class)
+            .convertToDTO(ClearMailboxContentTaskDTO.class)
+            .toDomainObjectConverter(dto -> dto.fromDTO(userMailboxesService))
+            .toDTOConverter(ClearMailboxContentTaskDTO::toDTO)
+            .typeName(ClearMailboxContentTask.TASK_TYPE.asString())
+            .withFactory(TaskDTOModule::new);
+    }
+
+    public ClearMailboxContentTask fromDTO(UserMailboxesService 
userMailboxesService) {
+        return new ClearMailboxContentTask(Username.of(username), new 
MailboxName(mailboxName), userMailboxesService);
+    }
+
+    public static ClearMailboxContentTaskDTO toDTO(ClearMailboxContentTask 
domainObject, String typeName) {
+        return new ClearMailboxContentTaskDTO(typeName, 
domainObject.getUsername().asString(), 
domainObject.getMailboxName().asString());
+    }
+}
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ClearMailboxContentTaskAdditionalInformationDTOTest.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ClearMailboxContentTaskAdditionalInformationDTOTest.java
new file mode 100644
index 0000000..2647628
--- /dev/null
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ClearMailboxContentTaskAdditionalInformationDTOTest.java
@@ -0,0 +1,43 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.webadmin.service;
+
+import java.time.Instant;
+
+import org.apache.james.JsonSerializationVerifier;
+import org.apache.james.core.Username;
+import org.apache.james.util.ClassLoaderUtils;
+import org.apache.james.webadmin.validation.MailboxName;
+import org.junit.jupiter.api.Test;
+
+public class ClearMailboxContentTaskAdditionalInformationDTOTest {
+    private static final Instant INSTANT = 
Instant.parse("2007-12-03T10:15:30.00Z");
+
+    private static final ClearMailboxContentTask.AdditionalInformation 
DOMAIN_OBJECT = new ClearMailboxContentTask.AdditionalInformation(
+        Username.of("[email protected]"), new MailboxName("mbx1"), INSTANT, 10, 
9);
+
+    @Test
+    void shouldMatchJsonSerializationContract() throws Exception {
+        
JsonSerializationVerifier.dtoModule(ClearMailboxContentTaskAdditionalInformationDTO.SERIALIZATION_MODULE)
+            .bean(DOMAIN_OBJECT)
+            
.json(ClassLoaderUtils.getSystemResourceAsString("json/clearMailboxContent.additionalInformation.json"))
+            .verify();
+    }
+}
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ClearMailboxContentTaskSerializationTest.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ClearMailboxContentTaskSerializationTest.java
new file mode 100644
index 0000000..ca7cdb1
--- /dev/null
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ClearMailboxContentTaskSerializationTest.java
@@ -0,0 +1,48 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.webadmin.service;
+
+import static org.mockito.Mockito.mock;
+
+import org.apache.james.JsonSerializationVerifier;
+import org.apache.james.core.Username;
+import org.apache.james.util.ClassLoaderUtils;
+import org.apache.james.webadmin.validation.MailboxName;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class ClearMailboxContentTaskSerializationTest {
+    private UserMailboxesService userMailboxesService;
+    private static final Username USERNAME = Username.of("[email protected]");
+    private static final MailboxName MAILBOX_NAME = new MailboxName("mbn1");
+
+    @BeforeEach
+    void setUp() {
+        userMailboxesService = mock(UserMailboxesService.class);
+    }
+
+    @Test
+    void shouldMatchJsonSerializationContract() throws Exception {
+        
JsonSerializationVerifier.dtoModule(ClearMailboxContentTaskDTO.module(userMailboxesService))
+            .bean(new ClearMailboxContentTask(USERNAME, MAILBOX_NAME, 
userMailboxesService))
+            
.json(ClassLoaderUtils.getSystemResourceAsString("json/clearMailboxContent.task.json"))
+            .verify();
+    }
+}
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/clearMailboxContent.additionalInformation.json
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/clearMailboxContent.additionalInformation.json
new file mode 100644
index 0000000..b3c747e
--- /dev/null
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/clearMailboxContent.additionalInformation.json
@@ -0,0 +1,8 @@
+{
+  "mailboxName": "mbx1",
+  "messagesFailCount": 9,
+  "messagesSuccessCount": 10,
+  "timestamp": "2007-12-03T10:15:30Z",
+  "type": "ClearMailboxContentTask",
+  "username": "[email protected]"
+}
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/clearMailboxContent.task.json
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/clearMailboxContent.task.json
new file mode 100644
index 0000000..d9cd2ba
--- /dev/null
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/clearMailboxContent.task.json
@@ -0,0 +1,5 @@
+{
+  "mailboxName": "mbn1",
+  "type": "ClearMailboxContentTask",
+  "username": "[email protected]"
+}
\ No newline at end of file

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to