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

    JAMES-2866 JSON serialization for MockSMTPBehavior
---
 server/mailet/mock-smtp-server/pom.xml             |  4 ++
 .../james/mock/smtp/server/MockSMTPBehavior.java   | 55 ++++++++++++++++-
 .../mock/smtp/server/MockSMTPBehaviorTest.java     | 68 ++++++++++++++++++++++
 3 files changed, 125 insertions(+), 2 deletions(-)

diff --git a/server/mailet/mock-smtp-server/pom.xml 
b/server/mailet/mock-smtp-server/pom.xml
index bdcbea7..ce806b9 100644
--- a/server/mailet/mock-smtp-server/pom.xml
+++ b/server/mailet/mock-smtp-server/pom.xml
@@ -46,6 +46,10 @@
             <artifactId>jackson-databind</artifactId>
         </dependency>
         <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jdk8</artifactId>
+        </dependency>
+        <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
         </dependency>
diff --git 
a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPBehavior.java
 
b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPBehavior.java
index 371b2ea..2d8596a 100644
--- 
a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPBehavior.java
+++ 
b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPBehavior.java
@@ -22,8 +22,13 @@ package org.apache.james.mock.smtp.server;
 import java.util.Objects;
 import java.util.Optional;
 
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonValue;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
 import com.google.common.base.Preconditions;
 
+@JsonDeserialize(builder = MockSMTPBehavior.Builder.class)
 public class MockSMTPBehavior {
     public static final class NumberOfAnswersPolicy {
 
@@ -31,6 +36,7 @@ public class MockSMTPBehavior {
             return new NumberOfAnswersPolicy(Optional.empty());
         }
 
+        @JsonCreator
         public static NumberOfAnswersPolicy times(int times) {
             Preconditions.checkArgument(times > 0, "times should be positive");
             return new NumberOfAnswersPolicy(Optional.of(times));
@@ -42,6 +48,7 @@ public class MockSMTPBehavior {
             this.numberOfAnswers = numberOfAnswers;
         }
 
+        @JsonValue
         public Optional<Integer> getNumberOfAnswers() {
             return numberOfAnswers;
         }
@@ -62,6 +69,50 @@ public class MockSMTPBehavior {
         }
     }
 
+    @JsonPOJOBuilder(withPrefix = "")
+    public static class Builder {
+        private SMTPCommand smtpCommand;
+        private Optional<Condition> condition;
+        private Response response;
+        private Optional<NumberOfAnswersPolicy> numberOfAnswers;
+
+        public Builder() {
+            condition = Optional.empty();
+            numberOfAnswers = Optional.empty();
+        }
+
+        public Builder command(SMTPCommand command) {
+            this.smtpCommand = command;
+            return this;
+        }
+
+        public Builder response(Response response) {
+            this.response = response;
+            return this;
+        }
+
+        public Builder condition(Condition condition) {
+            this.condition = Optional.of(condition);
+            return this;
+        }
+
+        public Builder numberOfAnswer(Optional<NumberOfAnswersPolicy> 
numberOfAnswers) {
+            this.numberOfAnswers = numberOfAnswers;
+            return this;
+        }
+
+        public MockSMTPBehavior build() {
+            Preconditions.checkState(smtpCommand != null, "You need to specify 
an smtpCommand");
+            Preconditions.checkState(response != null, "You need to specify a 
response");
+
+            return new MockSMTPBehavior(
+                smtpCommand,
+                condition,
+                response,
+                numberOfAnswers.orElse(NumberOfAnswersPolicy.anytime()));
+        }
+    }
+
     private final SMTPCommand smtpCommand;
     private final Optional<Condition> condition;
     private final Response response;
@@ -79,7 +130,7 @@ public class MockSMTPBehavior {
         this.numberOfAnswers = numberOfAnswers;
     }
 
-    public SMTPCommand getSmtpCommand() {
+    public SMTPCommand getCommand() {
         return smtpCommand;
     }
 
@@ -91,7 +142,7 @@ public class MockSMTPBehavior {
         return response;
     }
 
-    public NumberOfAnswersPolicy getNumberOfAnswers() {
+    public NumberOfAnswersPolicy getNumberOfAnswer() {
         return numberOfAnswers;
     }
 
diff --git 
a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSMTPBehaviorTest.java
 
b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSMTPBehaviorTest.java
index 57f16cd..606c4bc 100644
--- 
a/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSMTPBehaviorTest.java
+++ 
b/server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSMTPBehaviorTest.java
@@ -19,6 +19,7 @@
 
 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;
 
@@ -28,10 +29,40 @@ 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 com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
+
+import net.javacrumbs.jsonunit.core.Option;
+import net.javacrumbs.jsonunit.core.internal.Options;
 import nl.jqno.equalsverifier.EqualsVerifier;
 
 class MockSMTPBehaviorTest {
     private static final Response RESPONSE = 
Response.serverAccept(SMTPStatusCode.ACTION_COMPLETE_250, "message");
+    private static final ObjectMapper OBJECT_MAPPER = new 
ObjectMapper().registerModule(new Jdk8Module());
+
+    private static final String JSON_COMPULSORY_FIELDS = "{" +
+        "  \"response\": {\"code\":250, \"message\":\"OK\", 
\"rejected\":false}," +
+        "  \"command\": \"EHLO\"" +
+        "}";
+
+    private static final MockSMTPBehavior POJO_COMPULSORY_FIELDS = new 
MockSMTPBehavior(
+        SMTPCommand.EHLO,
+        Optional.empty(),
+        Response.serverAccept(Response.SMTPStatusCode.of(250), "OK"),
+        MockSMTPBehavior.NumberOfAnswersPolicy.anytime());
+
+    private static final String JSON_ALL_FIELDS = "{" +
+        "  \"response\": {\"code\":250, \"message\":\"OK\", 
\"rejected\":false}," +
+        "  \"condition\": {\"operator\":\"contains\", 
\"matchingValue\":\"matchme\"}," +
+        "  \"command\": \"EHLO\"," +
+        "  \"numberOfAnswer\": 7" +
+        "}";
+
+    private static final MockSMTPBehavior POJO_ALL_FIELDS = new 
MockSMTPBehavior(
+        SMTPCommand.EHLO,
+        Optional.of(new Condition.OperatorCondition(Operator.CONTAINS, 
"matchme")),
+        Response.serverAccept(Response.SMTPStatusCode.of(250), "OK"),
+        MockSMTPBehavior.NumberOfAnswersPolicy.times(7));
 
     @Nested
     class NumberOfAnswersPolicyTest {
@@ -95,4 +126,41 @@ class MockSMTPBehaviorTest {
         assertThatThrownBy(() -> new MockSMTPBehavior(SMTPCommand.NOOP, 
Optional.empty(), RESPONSE, null))
             .isInstanceOf(NullPointerException.class);
     }
+
+    @Nested
+    class JSONTest {
+        @Test
+        void jacksonShouldDeserializeMockSMTPBehaviorWithAllField() throws 
Exception {
+            MockSMTPBehavior behavior = 
OBJECT_MAPPER.readValue(JSON_ALL_FIELDS, MockSMTPBehavior.class);
+
+            assertThat(behavior)
+                .isEqualTo(POJO_ALL_FIELDS);
+        }
+
+        @Test
+        void jacksonShouldSerializeMockSMTPBehaviorWithAllField() throws 
Exception {
+            String json = OBJECT_MAPPER.writeValueAsString(POJO_ALL_FIELDS);
+
+            assertThatJson(json)
+                .withOptions(new Options(Option.TREATING_NULL_AS_ABSENT))
+                .isEqualTo(JSON_ALL_FIELDS);
+        }
+
+        @Test
+        void jacksonShouldDeserializeMockSMTPBehaviorWithCompulsoryField() 
throws Exception {
+            MockSMTPBehavior behavior = 
OBJECT_MAPPER.readValue(JSON_COMPULSORY_FIELDS, MockSMTPBehavior.class);
+
+            assertThat(behavior)
+                .isEqualTo(POJO_COMPULSORY_FIELDS);
+        }
+
+        @Test
+        void jacksonShouldSerializeMockSMTPBehaviorWithCompulsoryField() 
throws Exception {
+            String json = 
OBJECT_MAPPER.writeValueAsString(POJO_COMPULSORY_FIELDS);
+
+            assertThatJson(json)
+                .withOptions(new Options(Option.TREATING_NULL_AS_ABSENT))
+                .isEqualTo(JSON_COMPULSORY_FIELDS);
+        }
+    }
 }


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

Reply via email to