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]

Reply via email to