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]
