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 d1ccaad97ebf1e850169be99b87812163e828a07
Author: Benoit Tellier <[email protected]>
AuthorDate: Wed Aug 21 15:09:41 2019 +0700

    JAMES-2866 JSON serialization for Response
---
 .../apache/james/mock/smtp/server/Response.java    | 29 +++++++++-
 .../james/mock/smtp/server/ResponseTest.java       | 65 ++++++++++++++++++++++
 2 files changed, 92 insertions(+), 2 deletions(-)

diff --git 
a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Response.java
 
b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Response.java
index 9adb043..04f3ea0 100644
--- 
a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Response.java
+++ 
b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/Response.java
@@ -19,8 +19,12 @@
 
 package org.apache.james.mock.smtp.server;
 
+import java.util.Arrays;
 import java.util.Objects;
 
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonValue;
 import com.google.common.base.Preconditions;
 
 class Response {
@@ -53,10 +57,19 @@ class Response {
 
         private final int code;
 
-        private SMTPStatusCode(int code) {
+        @JsonCreator
+        public static SMTPStatusCode of(int code) {
+            return Arrays.stream(values())
+                .filter(value -> value.code == code)
+                .findFirst()
+                .orElseThrow(() -> new IllegalArgumentException(code + " is 
not a supported SMTP code"));
+        }
+
+        SMTPStatusCode(int code) {
             this.code = code;
         }
 
+        @JsonValue
         public int getCode() {
             return code;
         }
@@ -74,7 +87,10 @@ class Response {
     private final String message;
     private final boolean serverRejected;
 
-    private Response(SMTPStatusCode code, String message, boolean 
serverRejected) {
+    @JsonCreator
+    private Response(@JsonProperty("code") SMTPStatusCode code,
+                     @JsonProperty("message") String message,
+                     @JsonProperty("rejected") boolean serverRejected) {
         Preconditions.checkNotNull(message);
         Preconditions.checkNotNull(code);
 
@@ -87,10 +103,19 @@ class Response {
         return code.getCode() + " " + message;
     }
 
+    @JsonProperty("rejected")
     boolean isServerRejected() {
         return serverRejected;
     }
 
+    public SMTPStatusCode getCode() {
+        return code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
     @Override
     public final boolean equals(Object o) {
         if (o instanceof Response) {
diff --git 
a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ResponseTest.java
 
b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ResponseTest.java
index cd5f39f..cc2cfb6 100644
--- 
a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ResponseTest.java
+++ 
b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ResponseTest.java
@@ -19,15 +19,61 @@
 
 package org.apache.james.mock.smtp.server;
 
+import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import org.apache.james.mock.smtp.server.Response.SMTPStatusCode;
+import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import nl.jqno.equalsverifier.EqualsVerifier;
 
 class ResponseTest {
+    static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+    static final int OK_250_CODE = 250;
+    static final Response.SMTPStatusCode OK_250 = 
Response.SMTPStatusCode.of(OK_250_CODE);
+
+    @Nested
+    class SMTPStatusCodeTest {
+        @Test
+        void shouldMatchBeanContract() {
+            EqualsVerifier.forClass(Response.SMTPStatusCode.class)
+                .verify();
+        }
+
+        @Test
+        void constructorShouldThrowWhenStatusCodeIsNegative() {
+            assertThatThrownBy(() -> Response.SMTPStatusCode.of(-1))
+                .isInstanceOf(IllegalArgumentException.class);
+        }
+
+        @Test
+        void constructorShouldThrowWhenStatusCodeIsZero() {
+            assertThatThrownBy(() -> Response.SMTPStatusCode.of(0))
+                .isInstanceOf(IllegalArgumentException.class);
+        }
+
+        @Test
+        void constructorShouldThrowWhenStatusCodeIsTooBig() {
+            assertThatThrownBy(() -> Response.SMTPStatusCode.of(600))
+                .isInstanceOf(IllegalArgumentException.class);
+        }
+
+        @Test
+        void constructorShouldThrowWhenStatusCodeIsTooLittle() {
+            assertThatThrownBy(() -> Response.SMTPStatusCode.of(99))
+                .isInstanceOf(IllegalArgumentException.class);
+        }
+
+        @Test
+        void getCodeShouldReturnInternalValue() {
+            assertThat(OK_250.getCode())
+                .isEqualTo(OK_250_CODE);
+        }
+    }
 
     @Test
     void shouldMatchBeanContract() {
@@ -70,4 +116,23 @@ class ResponseTest {
         assertThat(Response.serverAccept(SMTPStatusCode.ACTION_COMPLETE_250, 
"message").isServerRejected())
             .isFalse();
     }
+
+    @Nested
+    class JSONTest {
+        @Test
+        void jacksonShouldDeserializeResponse() throws Exception {
+            Response response = OBJECT_MAPPER.readValue(
+                "{\"code\":250, \"message\":\"OK\", \"rejected\":false}",
+                Response.class);
+
+            
assertThat(response).isEqualTo(Response.serverAccept(Response.SMTPStatusCode.of(250),
 "OK"));
+        }
+
+        @Test
+        void jacksonShouldSerializeResponse() throws Exception {
+            String json = 
OBJECT_MAPPER.writeValueAsString(Response.serverAccept(Response.SMTPStatusCode.of(250),
 "OK"));
+
+            assertThatJson(json).isEqualTo("{\"code\":250, \"message\":\"OK\", 
\"rejected\":false}");
+        }
+    }
 }
\ No newline at end of file


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

Reply via email to