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 6862555452f35de6664dbf0600e33be21210163b
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Wed Sep 4 16:49:19 2019 +0700

    JAMES-2442 Propose a fluent builder for behaviors
---
 .../james/mailets/RemoteDeliveryErrorTest.java     | 95 ++++++++++++++-------
 .../mock/smtp/server/model/MockSmtpBehaviors.java  | 99 ++++++++++++++++++++++
 2 files changed, 162 insertions(+), 32 deletions(-)

diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorTest.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorTest.java
index 443a5ad..ce4e2ef 100644
--- 
a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorTest.java
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorTest.java
@@ -41,8 +41,6 @@ import 
org.apache.james.mailets.configuration.CommonProcessors;
 import org.apache.james.mailets.configuration.MailetConfiguration;
 import org.apache.james.mailets.configuration.MailetContainer;
 import org.apache.james.mailets.configuration.ProcessorConfiguration;
-import org.apache.james.mock.smtp.server.model.Condition;
-import org.apache.james.mock.smtp.server.model.MockSMTPBehavior;
 import org.apache.james.mock.smtp.server.model.MockSmtpBehaviors;
 import org.apache.james.mock.smtp.server.model.Response;
 import org.apache.james.mock.smtp.server.model.SMTPCommand;
@@ -74,16 +72,69 @@ public class RemoteDeliveryErrorTest {
     private static final String FROM = "from@" + DEFAULT_DOMAIN;
     private static final String RECIPIENT = "touser@" + ANOTHER_DOMAIN;
 
-    private static final MockSMTPBehavior.NumberOfAnswersPolicy TWO_TIMES = 
MockSMTPBehavior.NumberOfAnswersPolicy.times(2);
-    private static final MockSmtpBehaviors ALWAYS_421_RCPT_BEHAVIOR = 
reject421Behavior(SMTPCommand.RCPT_TO);
-    private static final MockSmtpBehaviors ALWAYS_421_FROM_BEHAVIOR = 
reject421Behavior(SMTPCommand.MAIL_FROM);
-    private static final MockSmtpBehaviors ALWAYS_421_DATA_BEHAVIOR = 
reject421Behavior(SMTPCommand.DATA);
-    private static final MockSmtpBehaviors TWICE_421_RCPT_BEHAVIOR = 
reject421Behavior(SMTPCommand.RCPT_TO, TWO_TIMES);
-    private static final MockSmtpBehaviors TWICE_421_FROM_BEHAVIOR = 
reject421Behavior(SMTPCommand.RCPT_TO, TWO_TIMES);
-    private static final MockSmtpBehaviors TWICE_421_DATA_BEHAVIOR = 
reject421Behavior(SMTPCommand.RCPT_TO, TWO_TIMES);
-    private static final MockSmtpBehaviors SINGLE_500_RCPT_BEHAVIOR = 
reject521Behavior(SMTPCommand.RCPT_TO);
-    private static final MockSmtpBehaviors SINGLE_500_FROM_BEHAVIOR = 
reject521Behavior(SMTPCommand.MAIL_FROM);
-    private static final MockSmtpBehaviors SINGLE_500_DATA_BEHAVIOR = 
reject521Behavior(SMTPCommand.DATA);
+    private static final MockSmtpBehaviors ALWAYS_421_RCPT_BEHAVIOR = 
MockSmtpBehaviors.builder()
+        .addNewBehavior()
+        .onCommand(SMTPCommand.RCPT_TO)
+        .respond(Response.SMTPStatusCode.SERVICE_NOT_AVAILABLE_421, "mock 
response")
+        .forAnyInput()
+        .unlimitedNumberOfAnswer()
+        .build();
+    private static final MockSmtpBehaviors ALWAYS_421_FROM_BEHAVIOR = 
MockSmtpBehaviors.builder()
+        .addNewBehavior()
+        .onCommand(SMTPCommand.MAIL_FROM)
+        .respond(Response.SMTPStatusCode.SERVICE_NOT_AVAILABLE_421, "mock 
response")
+        .forAnyInput()
+        .unlimitedNumberOfAnswer()
+        .build();
+    private static final MockSmtpBehaviors ALWAYS_421_DATA_BEHAVIOR = 
MockSmtpBehaviors.builder()
+        .addNewBehavior()
+        .onCommand(SMTPCommand.DATA)
+        .respond(Response.SMTPStatusCode.SERVICE_NOT_AVAILABLE_421, "mock 
response")
+        .forAnyInput()
+        .unlimitedNumberOfAnswer()
+        .build();
+    private static final MockSmtpBehaviors TWICE_421_RCPT_BEHAVIOR = 
MockSmtpBehaviors.builder()
+        .addNewBehavior()
+        .onCommand(SMTPCommand.RCPT_TO)
+        .respond(Response.SMTPStatusCode.SERVICE_NOT_AVAILABLE_421, "mock 
response")
+        .forAnyInput()
+        .onlySomeAnswers(2)
+        .build();
+    private static final MockSmtpBehaviors TWICE_421_FROM_BEHAVIOR = 
MockSmtpBehaviors.builder()
+        .addNewBehavior()
+        .onCommand(SMTPCommand.MAIL_FROM)
+        .respond(Response.SMTPStatusCode.SERVICE_NOT_AVAILABLE_421, "mock 
response")
+        .forAnyInput()
+        .onlySomeAnswers(2)
+        .build();
+    private static final MockSmtpBehaviors TWICE_421_DATA_BEHAVIOR = 
MockSmtpBehaviors.builder()
+        .addNewBehavior()
+        .onCommand(SMTPCommand.DATA)
+        .respond(Response.SMTPStatusCode.SERVICE_NOT_AVAILABLE_421, "mock 
response")
+        .forAnyInput()
+        .onlySomeAnswers(2)
+        .build();
+    private static final MockSmtpBehaviors SINGLE_500_RCPT_BEHAVIOR = 
MockSmtpBehaviors.builder()
+        .addNewBehavior()
+        .onCommand(SMTPCommand.RCPT_TO)
+        .respond(Response.SMTPStatusCode.DOES_NOT_ACCEPT_MAIL_521, "mock 
response")
+        .forAnyInput()
+        .onlySomeAnswers(1)
+        .build();
+    private static final MockSmtpBehaviors SINGLE_500_FROM_BEHAVIOR = 
MockSmtpBehaviors.builder()
+        .addNewBehavior()
+        .onCommand(SMTPCommand.MAIL_FROM)
+        .respond(Response.SMTPStatusCode.DOES_NOT_ACCEPT_MAIL_521, "mock 
response")
+        .forAnyInput()
+        .onlySomeAnswers(1)
+        .build();
+    private static final MockSmtpBehaviors SINGLE_500_DATA_BEHAVIOR = 
MockSmtpBehaviors.builder()
+        .addNewBehavior()
+        .onCommand(SMTPCommand.DATA)
+        .respond(Response.SMTPStatusCode.DOES_NOT_ACCEPT_MAIL_521, "mock 
response")
+        .forAnyInput()
+        .onlySomeAnswers(1)
+        .build();
     private static final String BOUNCE_MESSAGE = "Hi. This is the James mail 
server at localhost.\n" +
         "I'm afraid I wasn't able to deliver your message to the following 
addresses.\n" +
         "This is a permanent error; I've given up. Sorry it didn't work out. 
Below\n" +
@@ -91,26 +142,6 @@ public class RemoteDeliveryErrorTest {
         "your message.";
     private static final ResponseSpecification RESPONSE_SPECIFICATION = new 
ResponseSpecBuilder().build();
 
-    private static MockSmtpBehaviors reject421Behavior(SMTPCommand 
smtpCommand) {
-        return reject421Behavior(smtpCommand, 
MockSMTPBehavior.NumberOfAnswersPolicy.anytime());
-    }
-
-    private static MockSmtpBehaviors reject421Behavior(SMTPCommand 
smtpCommand, MockSMTPBehavior.NumberOfAnswersPolicy numberOfAnswer) {
-        return new MockSmtpBehaviors(
-            new MockSMTPBehavior(smtpCommand,
-                Condition.MATCH_ALL,
-                new 
Response(Response.SMTPStatusCode.SERVICE_NOT_AVAILABLE_421, "mock response"),
-                numberOfAnswer));
-    }
-
-    private static MockSmtpBehaviors reject521Behavior(SMTPCommand 
smtpCommand) {
-        return new MockSmtpBehaviors(
-            new MockSMTPBehavior(smtpCommand,
-                Condition.MATCH_ALL,
-                new Response(Response.SMTPStatusCode.DOES_NOT_ACCEPT_MAIL_521, 
"mock response"),
-                MockSMTPBehavior.NumberOfAnswersPolicy.times(1)));
-    }
-
     @Rule
     public TemporaryFolder temporaryFolder = new TemporaryFolder();
     @Rule
diff --git 
a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/MockSmtpBehaviors.java
 
b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/MockSmtpBehaviors.java
index ad9f834..16a7bc7 100644
--- 
a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/MockSmtpBehaviors.java
+++ 
b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/MockSmtpBehaviors.java
@@ -25,9 +25,108 @@ import java.util.Objects;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonValue;
+import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 
 public class MockSmtpBehaviors {
+    public static class Builder {
+        public static class CommandStep {
+            private final Builder backReference;
+
+            CommandStep(Builder backReference) {
+                this.backReference = backReference;
+            }
+
+            public ResponseStep onCommand(SMTPCommand command) {
+                Preconditions.checkNotNull(command, "'command' should not be 
null");
+                return new ResponseStep(backReference, command);
+            }
+        }
+
+        public static class ResponseStep {
+            private final Builder backReference;
+            private final SMTPCommand command;
+
+            ResponseStep(Builder backReference, SMTPCommand command) {
+                this.backReference = backReference;
+                this.command = command;
+            }
+
+            public ConditionStep respond(Response.SMTPStatusCode statusCode, 
String message) {
+                return new ConditionStep(backReference, command, new 
Response(statusCode, message));
+            }
+        }
+
+        public static class ConditionStep {
+            private final Builder backReference;
+            private final SMTPCommand command;
+            private final Response response;
+
+            ConditionStep(Builder backReference, SMTPCommand command, Response 
response) {
+                this.backReference = backReference;
+                this.command = command;
+                this.response = response;
+            }
+
+            public NumberOfAnswerStep forAnyInput() {
+                return new NumberOfAnswerStep(backReference, command, 
response, Condition.MATCH_ALL);
+            }
+
+            public NumberOfAnswerStep forInputContaining(String value) {
+                return new NumberOfAnswerStep(backReference, command, 
response, new Condition.OperatorCondition(Operator.CONTAINS, value));
+            }
+        }
+
+        public static class NumberOfAnswerStep {
+            private final Builder backReference;
+            private final SMTPCommand command;
+            private final Response response;
+            private final Condition condition;
+
+            NumberOfAnswerStep(Builder backReference, SMTPCommand command, 
Response response, Condition condition) {
+                this.backReference = backReference;
+                this.command = command;
+                this.response = response;
+                this.condition = condition;
+            }
+
+            public Builder unlimitedNumberOfAnswer() {
+                return 
backReference.add(toBehavior(MockSMTPBehavior.NumberOfAnswersPolicy.anytime()));
+            }
+
+            public Builder onlySomeAnswers(int count) {
+                return 
backReference.add(toBehavior(MockSMTPBehavior.NumberOfAnswersPolicy.times(count)));
+            }
+
+            MockSMTPBehavior toBehavior(MockSMTPBehavior.NumberOfAnswersPolicy 
numberOfAnswersPolicy) {
+                return new MockSMTPBehavior(command, condition, response, 
numberOfAnswersPolicy);
+            }
+        }
+
+        private final ImmutableList.Builder<MockSMTPBehavior> behaviors;
+
+        public Builder() {
+            this.behaviors = ImmutableList.builder();
+        }
+
+        public CommandStep addNewBehavior() {
+            return new CommandStep(this);
+        }
+
+        Builder add(MockSMTPBehavior behavior) {
+            this.behaviors.add(behavior);
+            return this;
+        }
+
+        public MockSmtpBehaviors build() {
+            return new MockSmtpBehaviors(behaviors.build());
+        }
+    }
+
+    public static Builder builder() {
+        return new Builder();
+    }
+
     private final List<MockSMTPBehavior> behaviorList;
 
     @JsonCreator


---------------------------------------------------------------------
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