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 70785f49d192968f2a3e82e57e5e0aa9300d60b5
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Tue Feb 19 14:33:30 2019 +0700

    JAMES-2661 WebAdmin for EventDeadLetter: Get event details
---
 server/protocols/webadmin/webadmin-mailbox/pom.xml |  4 ++
 .../webadmin/routes/EventDeadLettersRoutes.java    | 30 +++++++++-
 .../routes/EventDeadLettersRoutesTest.java         | 70 +++++++++++++++++++++-
 3 files changed, 102 insertions(+), 2 deletions(-)

diff --git a/server/protocols/webadmin/webadmin-mailbox/pom.xml 
b/server/protocols/webadmin/webadmin-mailbox/pom.xml
index c8d7b72..9ee023a 100644
--- a/server/protocols/webadmin/webadmin-mailbox/pom.xml
+++ b/server/protocols/webadmin/webadmin-mailbox/pom.xml
@@ -50,6 +50,10 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>apache-james-mailbox-event-json</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>apache-james-mailbox-event-memory</artifactId>
             <scope>test</scope>
         </dependency>
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/EventDeadLettersRoutes.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/EventDeadLettersRoutes.java
index 601ff86..2de2613 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/EventDeadLettersRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/EventDeadLettersRoutes.java
@@ -23,6 +23,7 @@ import java.util.UUID;
 
 import javax.inject.Inject;
 
+import org.apache.james.event.json.EventSerializer;
 import org.apache.james.mailbox.events.Event;
 import org.apache.james.mailbox.events.EventDeadLetters;
 import org.apache.james.mailbox.events.Group;
@@ -40,14 +41,17 @@ import spark.Service;
 public class EventDeadLettersRoutes implements Routes {
     private static final String BASE_PATH = "/events/deadLetter";
     private static final String GROUP_PARAM = ":group";
+    private static final String EVENT_ID_PARAM = ":eventId";
 
     private final EventDeadLetters deadLetters;
     private final JsonTransformer jsonTransformer;
+    private final EventSerializer eventSerializer;
 
     @Inject
-    EventDeadLettersRoutes(EventDeadLetters deadLetters, JsonTransformer 
jsonTransformer) {
+    EventDeadLettersRoutes(EventDeadLetters deadLetters, JsonTransformer 
jsonTransformer, EventSerializer eventSerializer) {
         this.deadLetters = deadLetters;
         this.jsonTransformer = jsonTransformer;
+        this.eventSerializer = eventSerializer;
     }
 
     @Override
@@ -59,6 +63,7 @@ public class EventDeadLettersRoutes implements Routes {
     public void define(Service service) {
         service.get(BASE_PATH + "/groups", this::listGroups, jsonTransformer);
         service.get(BASE_PATH + "/groups/" + GROUP_PARAM + "/events", 
this::listFailedEvents, jsonTransformer);
+        service.get(BASE_PATH + "/groups/" + GROUP_PARAM + "/events/" + 
EVENT_ID_PARAM, this::getEventDetails);
     }
 
     private Iterable<String> listGroups(Request request, Response response) {
@@ -77,6 +82,15 @@ public class EventDeadLettersRoutes implements Routes {
             .block();
     }
 
+    private String getEventDetails(Request request, Response response) {
+        Group group = parseGroup(request);
+        Event.EventId eventId = parseEventId(request);
+
+        return deadLetters.failedEvent(group, eventId)
+            .map(eventSerializer::toJson)
+            .block();
+    }
+
     private Group parseGroup(Request request) {
         String groupAsString = request.params(GROUP_PARAM);
         try {
@@ -90,4 +104,18 @@ public class EventDeadLettersRoutes implements Routes {
                 .haltError();
         }
     }
+
+    private Event.EventId parseEventId(Request request) {
+        String eventIdAsString = request.params(EVENT_ID_PARAM);
+        try {
+            return Event.EventId.of(eventIdAsString);
+        } catch (Exception e) {
+            throw ErrorResponder.builder()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .message("Can not deserialize the supplied eventId: " + 
eventIdAsString)
+                .cause(e)
+                .type(ErrorResponder.ErrorType.INVALID_ARGUMENT)
+                .haltError();
+        }
+    }
 }
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/EventDeadLettersRoutesTest.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/EventDeadLettersRoutesTest.java
index fa2b911..e2a89e1 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/EventDeadLettersRoutesTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/EventDeadLettersRoutesTest.java
@@ -20,6 +20,7 @@
 package org.apache.james.webadmin.routes;
 
 import static io.restassured.RestAssured.when;
+import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 import static org.apache.james.webadmin.WebAdminServer.NO_CONFIGURATION;
 import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.containsInAnyOrder;
@@ -27,6 +28,7 @@ import static org.hamcrest.Matchers.hasSize;
 import static org.hamcrest.Matchers.is;
 
 import org.apache.james.core.User;
+import org.apache.james.event.json.EventSerializer;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.events.Event;
 import org.apache.james.mailbox.events.EventBusTestFixture;
@@ -34,6 +36,7 @@ import org.apache.james.mailbox.events.EventDeadLetters;
 import org.apache.james.mailbox.events.MailboxListener;
 import org.apache.james.mailbox.events.MemoryEventDeadLetters;
 import org.apache.james.mailbox.inmemory.InMemoryId;
+import org.apache.james.mailbox.inmemory.InMemoryMessageId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.event.EventFactory;
 import org.apache.james.metrics.logger.DefaultMetricFactory;
@@ -68,6 +71,19 @@ class EventDeadLettersRoutesTest {
         .mailboxId(InMemoryId.of(456))
         .mailboxPath(MailboxPath.forUser(BOB, "project-3"))
         .build();
+    private static final String JSON_1 = "{" +
+        "  \"MailboxAdded\":{" +
+        "    \"eventId\":\"6e0dd59d-660e-4d9b-b22f-0354479f47b4\"," +
+        "    \"mailboxPath\":{" +
+        "      \"namespace\":\"#private\"," +
+        "      \"user\":\"b...@apache.org\"," +
+        "      \"name\":\"Important-mailbox\"" +
+        "     }," +
+        "     \"mailboxId\":\"453\"," +
+        "     \"user\":\"b...@apache.org\"," +
+        "     \"sessionId\":452" +
+        "  }" +
+        "}";
 
     private WebAdminServer webAdminServer;
     private EventDeadLetters deadLetters;
@@ -76,12 +92,14 @@ class EventDeadLettersRoutesTest {
     void beforeEach() throws Exception {
         deadLetters = new MemoryEventDeadLetters();
         JsonTransformer jsonTransformer = new JsonTransformer();
+        EventSerializer eventSerializer = new EventSerializer(new 
InMemoryId.Factory(), new InMemoryMessageId.Factory());
 
         webAdminServer = WebAdminUtils.createWebAdminServer(
             new DefaultMetricFactory(),
             new EventDeadLettersRoutes(
                 deadLetters,
-                jsonTransformer));
+                jsonTransformer,
+                eventSerializer));
         webAdminServer.configure(NO_CONFIGURATION);
         webAdminServer.await();
 
@@ -207,4 +225,54 @@ class EventDeadLettersRoutesTest {
                 .body(".", containsInAnyOrder(UUID_1, UUID_2));
         }
     }
+
+    @Nested
+    class GetEvent {
+        @Test
+        void getEventShouldReturnEvent() {
+            deadLetters.store(new EventBusTestFixture.GroupA(), 
EVENT_1).block();
+
+            String response = when()
+                .get("/events/deadLetter/groups/" + new 
EventBusTestFixture.GroupA().asString() + "/events/" + UUID_1)
+            .then()
+                .statusCode(HttpStatus.OK_200)
+                .contentType(ContentType.JSON)
+                .extract()
+                .asString();
+
+            assertThatJson(response).isEqualTo(JSON_1);
+        }
+
+        @Test
+        void getEventShouldReturn404WhenNotFound() {
+            when()
+                .get("/events/deadLetter/groups/" + new 
EventBusTestFixture.GroupA().asString() + "/events/" + UUID_1)
+            .then()
+                .statusCode(HttpStatus.NOT_FOUND_404);
+        }
+
+        @Test
+        void getEventShouldFailWhenInvalidEventId() {
+            when()
+                .get("/events/deadLetter/groups/" + new 
EventBusTestFixture.GroupA().asString() + "/events/invalid")
+            .then()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .contentType(ContentType.JSON)
+                .body("statusCode", is(400))
+                .body("type", 
is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
+                .body("message", is("Can not deserialize the supplied eventId: 
invalid"));
+        }
+
+        @Test
+        void getEventShouldFailWhenInvalidGroup() {
+            when()
+                .get("/events/deadLetter/groups/invalid/events/" + UUID_1)
+            .then()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .contentType(ContentType.JSON)
+                .body("statusCode", is(400))
+                .body("type", 
is(ErrorResponder.ErrorType.INVALID_ARGUMENT.getType()))
+                .body("message", is("Can not deserialize the supplied group: 
invalid"));
+        }
+    }
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to