Repository: james-project Updated Branches: refs/heads/master f3eb9b1fb -> b9ee90776
JAMES-2293 WebAdmin should allow to remove a mail from a mail repository Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9118fd0c Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9118fd0c Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9118fd0c Branch: refs/heads/master Commit: 9118fd0cba3694d21a8d1a003a284b23c5d4d5e8 Parents: 2fd2e22 Author: benwa <[email protected]> Authored: Mon Jan 22 13:11:28 2018 +0700 Committer: benwa <[email protected]> Committed: Wed Jan 24 15:09:50 2018 +0700 ---------------------------------------------------------------------- .../webadmin/routes/MailRepositoriesRoutes.java | 32 ++++++++++++- .../service/MailRepositoryStoreService.java | 6 +++ .../routes/MailRepositoriesRoutesTest.java | 49 ++++++++++++++++++++ 3 files changed, 86 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/9118fd0c/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java index 55dc43e..4f106b7 100644 --- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java +++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java @@ -26,6 +26,7 @@ import java.util.Optional; import javax.inject.Inject; import javax.mail.MessagingException; +import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; @@ -33,6 +34,7 @@ import javax.ws.rs.Produces; import org.apache.james.mailrepository.api.MailRepositoryStore; import org.apache.james.util.streams.Limit; import org.apache.james.util.streams.Offset; +import org.apache.james.webadmin.Constants; import org.apache.james.webadmin.Routes; import org.apache.james.webadmin.dto.ExtendedMailRepositoryResponse; import org.apache.james.webadmin.service.MailRepositoryStoreService; @@ -80,6 +82,8 @@ public class MailRepositoriesRoutes implements Routes { defineGetMailRepository(); defineGetMail(); + + defineDeleteMail(); } @GET @@ -207,7 +211,33 @@ public class MailRepositoriesRoutes implements Routes { }, jsonTransformer); } - private Optional<Integer> assertPositiveInteger(Request request, String parameterName) { + @DELETE + @Path("/{encodedUrl}/mails/{mailKey}") + @ApiOperation(value = "Deleting a specific mail from that mailRepository") + @ApiResponses(value = { + @ApiResponse(code = HttpStatus.OK_200, message = "Mail is no more stored in the repository", response = List.class), + @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "Internal server error - Something went bad on the server side."), + }) + public void defineDeleteMail() { + service.delete(MAIL_REPOSITORIES + "/:encodedUrl/mails/:mailKey", (request, response) -> { + String url = URLDecoder.decode(request.params("encodedUrl"), StandardCharsets.UTF_8.displayName()); + String mailKey = request.params("mailKey"); + try { + response.status(HttpStatus.NO_CONTENT_204); + repositoryStoreService.deleteMail(url, mailKey); + return Constants.EMPTY_BODY; + } catch (MailRepositoryStore.MailRepositoryStoreException | MessagingException e) { + throw ErrorResponder.builder() + .statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500) + .type(ErrorResponder.ErrorType.SERVER_ERROR) + .cause(e) + .message("Error while deleting mail") + .haltError(); + } + }); + } + +private Optional<Integer> assertPositiveInteger(Request request, String parameterName) { try { return Optional.ofNullable(request.queryParams(parameterName)) .filter(s -> !Strings.isNullOrEmpty(s)) http://git-wip-us.apache.org/repos/asf/james-project/blob/9118fd0c/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java index d1117c5..d7ca74a 100644 --- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java +++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java @@ -79,4 +79,10 @@ public class MailRepositoryStoreService { return Optional.ofNullable(mailRepository.retrieve(mailKey)) .map(Throwing.function(MailDto::fromMail).sneakyThrow()); } + + public void deleteMail(String url, String mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException { + mailRepositoryStore.select(url) + .remove(mailKey); + } + } http://git-wip-us.apache.org/repos/asf/james-project/blob/9118fd0c/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java index 56543ce..6a3f0ac 100644 --- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java +++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java @@ -423,4 +423,53 @@ public class MailRepositoriesRoutesTest { .body("message", is("Could not retrieve " + name)); } + @Test + public void deletingAMailShouldRemoveIt() throws Exception { + when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository); + + String name1 = "name1"; + String name2 = "name2"; + mailRepository.store(FakeMail.builder() + .name(name1) + .build()); + mailRepository.store(FakeMail.builder() + .name(name2) + .build()); + + given() + .delete(URL_ESCAPED_MY_REPO + "/mails/" + name1); + + when() + .get(URL_ESCAPED_MY_REPO + "/mails") + .then() + .statusCode(HttpStatus.OK_200) + .body("", hasSize(1)) + .body("mailKey", contains(name2)); + } + + @Test + public void deletingAMailShouldReturnOkWhenExist() throws Exception { + when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository); + + String name1 = "name1"; + mailRepository.store(FakeMail.builder() + .name(name1) + .build()); + + when() + .delete(URL_ESCAPED_MY_REPO + "/mails/" + name1) + .then() + .statusCode(HttpStatus.NO_CONTENT_204); + } + + @Test + public void deletingAMailShouldReturnOkWhenNotExist() throws Exception { + when(mailRepositoryStore.select(URL_MY_REPO)).thenReturn(mailRepository); + + when() + .delete(URL_ESCAPED_MY_REPO + "/mails/name") + .then() + .statusCode(HttpStatus.NO_CONTENT_204); + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
