Repository: james-project Updated Branches: refs/heads/master cc93b6d12 -> 1ed51b587
JAMES-1717 Vacation should allow user to specify a subject Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1ed51b58 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1ed51b58 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1ed51b58 Branch: refs/heads/master Commit: 1ed51b58720aebfe716ab2ae4da014f539eed4a1 Parents: cc93b6d Author: Benoit Tellier <[email protected]> Authored: Fri Apr 15 11:34:02 2016 +0700 Committer: Benoit Tellier <[email protected]> Committed: Mon May 23 17:51:40 2016 +0700 ---------------------------------------------------------------------- .../vacation/CassandraVacationDAO.java | 7 +++- .../vacation/CassandraVacationModule.java | 3 +- .../vacation/tables/CassandraVacationTable.java | 1 + .../james/jmap/api/vacation/Vacation.java | 22 ++++++++-- .../AbstractVacationRepositoryTest.java | 11 ++++- .../integration/GetVacationResponseTest.java | 8 +++- .../integration/SetVacationResponseTest.java | 5 ++- .../apache/james/jmap/mailet/VacationReply.java | 10 +++++ .../jmap/methods/SetVacationResponseMethod.java | 1 + .../james/jmap/model/VacationResponse.java | 23 +++++++++-- .../james/jmap/mailet/VacationReplyTest.java | 43 +++++++++++++++++--- .../methods/GetVacationResponseMethodTest.java | 2 + .../methods/SetVacationResponseMethodTest.java | 4 ++ .../james/jmap/model/VacationResponseTest.java | 3 ++ 14 files changed, 121 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/1ed51b58/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationDAO.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationDAO.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationDAO.java index cc1c647..3bf5e18 100644 --- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationDAO.java +++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationDAO.java @@ -61,7 +61,8 @@ public class CassandraVacationDAO { .value(CassandraVacationTable.IS_ENABLED, bindMarker(CassandraVacationTable.IS_ENABLED)) .value(CassandraVacationTable.FROM_DATE, bindMarker(CassandraVacationTable.FROM_DATE)) .value(CassandraVacationTable.TO_DATE, bindMarker(CassandraVacationTable.TO_DATE)) - .value(CassandraVacationTable.TEXT, bindMarker(CassandraVacationTable.TEXT))); + .value(CassandraVacationTable.TEXT, bindMarker(CassandraVacationTable.TEXT)) + .value(CassandraVacationTable.SUBJECT, bindMarker(CassandraVacationTable.SUBJECT))); this.readStatement = session.prepare(select() .from(CassandraVacationTable.TABLE_NAME) @@ -76,7 +77,8 @@ public class CassandraVacationDAO { .setBool(CassandraVacationTable.IS_ENABLED, vacation.isEnabled()) .setUDTValue(CassandraVacationTable.FROM_DATE, convertToUDTValue(vacation.getFromDate())) .setUDTValue(CassandraVacationTable.TO_DATE, convertToUDTValue(vacation.getToDate())) - .setString(CassandraVacationTable.TEXT, vacation.getTextBody())); + .setString(CassandraVacationTable.TEXT, vacation.getTextBody()) + .setString(CassandraVacationTable.SUBJECT, vacation.getSubject().orElse(null))); } public CompletableFuture<Optional<Vacation>> retrieveVacation(AccountId accountId) { @@ -87,6 +89,7 @@ public class CassandraVacationDAO { .fromDate(retrieveDate(row, CassandraVacationTable.FROM_DATE)) .toDate(retrieveDate(row, CassandraVacationTable.TO_DATE)) .textBody(row.getString(CassandraVacationTable.TEXT)) + .subject(Optional.ofNullable(row.getString(CassandraVacationTable.SUBJECT))) .build())); } http://git-wip-us.apache.org/repos/asf/james-project/blob/1ed51b58/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java index dae2451..00233e0 100644 --- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java +++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/CassandraVacationModule.java @@ -49,7 +49,8 @@ public class CassandraVacationModule implements CassandraModule { .addColumn(CassandraVacationTable.IS_ENABLED, cboolean()) .addUDTColumn(CassandraVacationTable.FROM_DATE, SchemaBuilder.frozen(CassandraZonedDateTimeModule.ZONED_DATE_TIME)) .addUDTColumn(CassandraVacationTable.TO_DATE, SchemaBuilder.frozen(CassandraZonedDateTimeModule.ZONED_DATE_TIME)) - .addColumn(CassandraVacationTable.TEXT, text()))); + .addColumn(CassandraVacationTable.TEXT, text()) + .addColumn(CassandraVacationTable.SUBJECT, text()))); index = ImmutableList.of(); types = ImmutableList.of(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/1ed51b58/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/tables/CassandraVacationTable.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/tables/CassandraVacationTable.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/tables/CassandraVacationTable.java index 7e9b3e2..271820b 100644 --- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/tables/CassandraVacationTable.java +++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/vacation/tables/CassandraVacationTable.java @@ -27,5 +27,6 @@ public interface CassandraVacationTable { String TO_DATE = "to_date"; String IS_ENABLED = "is_enabled"; String TEXT = "text"; + String SUBJECT = "subject"; } http://git-wip-us.apache.org/repos/asf/james-project/blob/1ed51b58/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/Vacation.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/Vacation.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/Vacation.java index cb0fbfe..9b76409 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/Vacation.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/vacation/Vacation.java @@ -38,6 +38,7 @@ public class Vacation { private Optional<Boolean> isEnabled = Optional.empty(); private Optional<ZonedDateTime> fromDate = Optional.empty(); private Optional<ZonedDateTime> toDate = Optional.empty(); + private Optional<String> subject = Optional.empty(); private String textBody = ""; public Builder enabled(boolean enabled) { @@ -62,30 +63,38 @@ public class Vacation { return this; } + public Builder subject(Optional<String> subject) { + this.subject = subject; + return this; + } + public Builder copy(Vacation vacation) { this.textBody = vacation.getTextBody(); this.fromDate = vacation.getFromDate(); this.toDate = vacation.getToDate(); this.isEnabled = Optional.of(vacation.isEnabled()); + this.subject = vacation.getSubject(); return this; } public Vacation build() { Preconditions.checkNotNull(textBody); - return new Vacation(isEnabled.orElse(DEFAULT_DISABLED), fromDate, toDate, textBody); + return new Vacation(isEnabled.orElse(DEFAULT_DISABLED), fromDate, toDate, textBody, subject); } } private final boolean isEnabled; private final Optional<ZonedDateTime> fromDate; private final Optional<ZonedDateTime> toDate; + private final Optional<String> subject; private final String textBody; - private Vacation(boolean isEnabled, Optional<ZonedDateTime> fromDate, Optional<ZonedDateTime> toDate, String textBody) { + private Vacation(boolean isEnabled, Optional<ZonedDateTime> fromDate, Optional<ZonedDateTime> toDate, String textBody, Optional<String> subject) { this.isEnabled = isEnabled; this.fromDate = fromDate; this.toDate = toDate; this.textBody = textBody; + this.subject = subject; } @@ -105,6 +114,10 @@ public class Vacation { return textBody; } + public Optional<String> getSubject() { + return subject; + } + public boolean isActiveAtDate(ZonedDateTime instant) { Preconditions.checkNotNull(instant); return isEnabled @@ -130,12 +143,13 @@ public class Vacation { return Objects.equals(this.isEnabled, vacation.isEnabled) && Objects.equals(this.fromDate, vacation.fromDate) && Objects.equals(this.toDate, vacation.toDate) && - Objects.equals(this.textBody, vacation.textBody); + Objects.equals(this.textBody, vacation.textBody) && + Objects.equals(this.subject, vacation.subject); } @Override public int hashCode() { - return Objects.hash(isEnabled, fromDate, toDate, textBody); + return Objects.hash(isEnabled, fromDate, toDate, textBody, subject); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/1ed51b58/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/vacation/AbstractVacationRepositoryTest.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/vacation/AbstractVacationRepositoryTest.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/vacation/AbstractVacationRepositoryTest.java index ba15584..4b4c932 100644 --- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/vacation/AbstractVacationRepositoryTest.java +++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/vacation/AbstractVacationRepositoryTest.java @@ -31,8 +31,15 @@ public abstract class AbstractVacationRepositoryTest { public static final AccountId ACCOUNT_ID = AccountId.fromString("identifier"); public static final ZonedDateTime ZONED_DATE_TIME = ZonedDateTime.parse("2016-04-03T02:01+07:00[Asia/Vientiane]"); - public static final Vacation VACATION_1 = Vacation.builder().enabled(true).build(); - public static final Vacation VACATION_2 = Vacation.builder().fromDate(Optional.of(ZONED_DATE_TIME)).enabled(true).build(); + public static final Vacation VACATION_1 = Vacation.builder() + .enabled(true) + .build(); + public static final Vacation VACATION_2 = Vacation.builder() + .fromDate(Optional.of(ZONED_DATE_TIME)) + .enabled(true) + .subject(Optional.of("subject")) + .build(); + private VacationRepository vacationRepository; http://git-wip-us.apache.org/repos/asf/james-project/blob/1ed51b58/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetVacationResponseTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetVacationResponseTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetVacationResponseTest.java index f2a5498..7e49b56 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetVacationResponseTest.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetVacationResponseTest.java @@ -49,6 +49,7 @@ public abstract class GetVacationResponseTest { private static final String USERS_DOMAIN = "domain.tld"; public static final String USER = "username@" + USERS_DOMAIN; public static final String PASSWORD = "password"; + public static final String SUBJECT = "subject"; protected abstract GuiceJamesServer createJmapServer(); @@ -98,7 +99,8 @@ public abstract class GetVacationResponseTest { .body(ARGUMENTS + ".list[0].fromDate", nullValue()) .body(ARGUMENTS + ".list[0].toDate", nullValue()) .body(ARGUMENTS + ".list[0].isEnabled", equalTo(false)) - .body(ARGUMENTS + ".list[0].textBody", equalTo("")); + .body(ARGUMENTS + ".list[0].textBody", equalTo("")) + .body(ARGUMENTS + ".list[0].subject", nullValue()); } @Test @@ -109,6 +111,7 @@ public abstract class GetVacationResponseTest { .fromDate(Optional.of(ZonedDateTime.parse("2014-09-30T14:10:00Z"))) .toDate(Optional.of(ZonedDateTime.parse("2014-10-30T14:10:00Z"))) .textBody("Test explaining my vacations") + .subject(Optional.of(SUBJECT)) .build()); given() @@ -131,7 +134,8 @@ public abstract class GetVacationResponseTest { .body(ARGUMENTS + ".list[0].fromDate", equalTo("2014-09-30T14:10:00Z")) .body(ARGUMENTS + ".list[0].toDate", equalTo("2014-10-30T14:10:00Z")) .body(ARGUMENTS + ".list[0].isEnabled", equalTo(true)) - .body(ARGUMENTS + ".list[0].textBody", equalTo("Test explaining my vacations")); + .body(ARGUMENTS + ".list[0].textBody", equalTo("Test explaining my vacations")) + .body(ARGUMENTS + ".list[0].subject", equalTo(SUBJECT)); } @Test http://git-wip-us.apache.org/repos/asf/james-project/blob/1ed51b58/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetVacationResponseTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetVacationResponseTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetVacationResponseTest.java index d74526e..dcf46e7 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetVacationResponseTest.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetVacationResponseTest.java @@ -48,6 +48,7 @@ public abstract class SetVacationResponseTest { private static final String USERS_DOMAIN = "domain.tld"; public static final String USER = "username@" + USERS_DOMAIN; public static final String PASSWORD = "password"; + public static final String SUBJECT = "subject"; protected abstract GuiceJamesServer createJmapServer(); @@ -146,7 +147,8 @@ public abstract class SetVacationResponseTest { "\"isEnabled\": \"true\"," + "\"textBody\": \"Message explaining my wonderful vacations\"," + "\"fromDate\":\"2014-09-30T14:10:00Z[GMT]\"," + - "\"toDate\":\"2014-10-30T14:10:00Z[GMT]\"" + + "\"toDate\":\"2014-10-30T14:10:00Z[GMT]\"," + + "\"subject\":\"" + SUBJECT + "\"" + "}" + "}" + "}, " + @@ -170,6 +172,7 @@ public abstract class SetVacationResponseTest { assertThat(vacation.isEnabled()).isTrue(); assertThat(vacation.getFromDate()).contains(ZonedDateTime.parse("2014-09-30T14:10:00Z[GMT]")); assertThat(vacation.getToDate()).contains(ZonedDateTime.parse("2014-10-30T14:10:00Z[GMT]")); + assertThat(vacation.getSubject()).contains(SUBJECT); } @Test http://git-wip-us.apache.org/repos/asf/james-project/blob/1ed51b58/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationReply.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationReply.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationReply.java index bd15641..222644a 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationReply.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/mailet/VacationReply.java @@ -20,6 +20,7 @@ package org.apache.james.jmap.mailet; import java.util.List; +import java.util.Optional; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; @@ -27,6 +28,8 @@ import javax.mail.internet.MimeMessage; import org.apache.mailet.Mail; import org.apache.mailet.MailAddress; +import com.github.fge.lambdas.Throwing; +import com.github.fge.lambdas.consumers.ThrowingConsumer; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; @@ -42,6 +45,7 @@ public class VacationReply { private final Mail originalMail; private MailAddress mailRecipient; private String reason; + private Optional<String> subject = Optional.empty(); private Builder(Mail originalMail) { Preconditions.checkNotNull(originalMail, "Origin mail shall not be null"); @@ -60,6 +64,11 @@ public class VacationReply { return this; } + public Builder subject(Optional<String> subject) { + this.subject = subject; + return this; + } + public VacationReply build() throws MessagingException { Preconditions.checkState(mailRecipient != null, "Original recipient address should not be null"); Preconditions.checkState(originalMail.getSender() != null, "Original sender address should not be null"); @@ -69,6 +78,7 @@ public class VacationReply { private MimeMessage generateMimeMessage() throws MessagingException { MimeMessage reply = (MimeMessage) originalMail.getMessage().reply(NOT_REPLY_TO_ALL); + subject.ifPresent(Throwing.consumer(subjectString -> reply.setHeader("subject", subjectString))); reply.setText(reason); reply.setHeader("from", mailRecipient.toString()); reply.setHeader("to", originalMail.getSender().toString()); http://git-wip-us.apache.org/repos/asf/james-project/blob/1ed51b58/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetVacationResponseMethod.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetVacationResponseMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetVacationResponseMethod.java index dde98f5..cc022c3 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetVacationResponseMethod.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetVacationResponseMethod.java @@ -118,6 +118,7 @@ public class SetVacationResponseMethod implements Method { .fromDate(vacationResponse.getFromDate()) .toDate(vacationResponse.getToDate()) .textBody(vacationResponse.getTextBody()) + .subject(vacationResponse.getSubject()) .build(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/1ed51b58/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java index 6d88e0c..410ab2c 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/VacationResponse.java @@ -47,6 +47,7 @@ public class VacationResponse { private boolean isEnabled; private Optional<ZonedDateTime> fromDate = Optional.empty(); private Optional<ZonedDateTime> toDate = Optional.empty(); + private Optional<String> subject = Optional.empty(); private String textBody; public Builder id(String id) { @@ -77,18 +78,24 @@ public class VacationResponse { return this; } + public Builder subject(Optional<String> subject) { + this.subject = subject; + return this; + } + public Builder fromVacation(Vacation vacation) { this.id = Vacation.ID; this.isEnabled = vacation.isEnabled(); this.fromDate = vacation.getFromDate(); this.toDate = vacation.getToDate(); this.textBody = vacation.getTextBody(); + this.subject = vacation.getSubject(); return this; } public VacationResponse build() { Preconditions.checkState(textBody != null, "textBody property of vacationResponse object should not be null"); - return new VacationResponse(id, isEnabled, fromDate, toDate, textBody); + return new VacationResponse(id, isEnabled, fromDate, toDate, textBody, subject); } } @@ -96,14 +103,17 @@ public class VacationResponse { private final boolean isEnabled; private final Optional<ZonedDateTime> fromDate; private final Optional<ZonedDateTime> toDate; + private final Optional<String> subject; private final String textBody; - private VacationResponse(String id, boolean isEnabled, Optional<ZonedDateTime> fromDate, Optional<ZonedDateTime> toDate, String textBody) { + private VacationResponse(String id, boolean isEnabled, Optional<ZonedDateTime> fromDate, Optional<ZonedDateTime> toDate, + String textBody, Optional<String> subject) { this.id = id; this.isEnabled = isEnabled; this.fromDate = fromDate; this.toDate = toDate; this.textBody = textBody; + this.subject = subject; } public String getId() { @@ -129,6 +139,10 @@ public class VacationResponse { return textBody; } + public Optional<String> getSubject() { + return subject; + } + @JsonIgnore public boolean isValid() { return id.equals(Vacation.ID); @@ -146,11 +160,12 @@ public class VacationResponse { && Objects.equals(this.isEnabled, that.isEnabled) && Objects.equals(this.fromDate, that.fromDate) && Objects.equals(this.toDate, that.toDate) - && Objects.equals(this.textBody, that.textBody); + && Objects.equals(this.textBody, that.textBody) + && Objects.equals(this.subject, that.subject); } @Override public int hashCode() { - return Objects.hash(id, isEnabled, fromDate, toDate, textBody); + return Objects.hash(id, isEnabled, fromDate, toDate, textBody, subject); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/1ed51b58/server/protocols/jmap/src/test/java/org/apache/james/jmap/mailet/VacationReplyTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/mailet/VacationReplyTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/mailet/VacationReplyTest.java index 64bb6bf..93d7ffc 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/mailet/VacationReplyTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/mailet/VacationReplyTest.java @@ -21,6 +21,7 @@ package org.apache.james.jmap.mailet; import static org.assertj.core.api.Assertions.assertThat; +import java.util.Optional; import java.util.Properties; import javax.mail.Session; @@ -29,19 +30,29 @@ import javax.mail.internet.MimeMessage; import org.apache.commons.io.IOUtils; import org.apache.mailet.MailAddress; import org.apache.mailet.base.test.FakeMail; +import org.junit.Before; import org.junit.Test; public class VacationReplyTest { public static final String REASON = "I am in vacation dudes !"; + public static final Optional<String> SUBJECT = Optional.of("Vacation subject specified by the user!"); + private MailAddress originalSender; + private MailAddress originalRecipient; + private FakeMail mail; - @Test - public void vacationReplyShouldGenerateASuitableAnswer() throws Exception { - MailAddress originalSender = new MailAddress("[email protected]"); - MailAddress originalRecipient = new MailAddress("[email protected]"); - FakeMail mail = new FakeMail(); + @Before + public void setUp() throws Exception { + originalSender = new MailAddress("[email protected]"); + originalRecipient = new MailAddress("[email protected]"); + + mail = new FakeMail(); mail.setMessage(new MimeMessage(Session.getInstance(new Properties()) ,ClassLoader.getSystemResourceAsStream("spamMail.eml"))); mail.setSender(originalSender); + } + + @Test + public void vacationReplyShouldGenerateASuitableAnswer() throws Exception { VacationReply vacationReply = VacationReply.builder(mail) .reason(REASON) @@ -50,10 +61,30 @@ public class VacationReplyTest { assertThat(vacationReply.getRecipients()).containsExactly(originalSender); assertThat(vacationReply.getSender()).isEqualTo(originalRecipient); - assertThat(vacationReply.getMimeMessage().getHeader("subject")).containsExactly("Re: Original subject"); assertThat(IOUtils.toString(vacationReply.getMimeMessage().getInputStream())).contains(REASON); } + @Test + public void vacationReplyShouldAddReSuffixToSubjectByDefault() throws Exception { + VacationReply vacationReply = VacationReply.builder(mail) + .reason(REASON) + .receivedMailRecipient(originalRecipient) + .build(); + + assertThat(vacationReply.getMimeMessage().getHeader("subject")).containsExactly("Re: Original subject"); + } + + @Test + public void aUserShouldBeAbleToSetTheSubjectOfTheGeneratedMimeMessage() throws Exception { + VacationReply vacationReply = VacationReply.builder(mail) + .reason(REASON) + .subject(SUBJECT) + .receivedMailRecipient(originalRecipient) + .build(); + + assertThat(vacationReply.getMimeMessage().getHeader("subject")).containsExactly(SUBJECT.get()); + } + @Test(expected = NullPointerException.class) public void vacationReplyShouldThrowOnNullMail() { VacationReply.builder(null); http://git-wip-us.apache.org/repos/asf/james-project/blob/1ed51b58/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetVacationResponseMethodTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetVacationResponseMethodTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetVacationResponseMethodTest.java index a03a844..2bb3902 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetVacationResponseMethodTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetVacationResponseMethodTest.java @@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.stream.Stream; @@ -81,6 +82,7 @@ public class GetVacationResponseMethodTest { Vacation vacation = Vacation.builder() .enabled(true) .textBody("I am in vacation") + .subject(Optional.of("subject")) .build(); when(vacationRepository.retrieveVacation(AccountId.fromString(USERNAME))).thenReturn(CompletableFuture.completedFuture(vacation)); when(mailboxSession.getUser()).thenReturn(user); http://git-wip-us.apache.org/repos/asf/james-project/blob/1ed51b58/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetVacationResponseMethodTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetVacationResponseMethodTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetVacationResponseMethodTest.java index 5244ccd..338430f 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetVacationResponseMethodTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/SetVacationResponseMethodTest.java @@ -27,6 +27,7 @@ import static org.mockito.Mockito.when; import java.util.List; import java.util.Locale; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.stream.Stream; @@ -67,6 +68,7 @@ public class SetVacationResponseMethodTest { return null; } }; + public static final String SUBJECT = "subject"; private SetVacationResponseMethod testee; private VacationRepository vacationRepository; @@ -178,11 +180,13 @@ public class SetVacationResponseMethodTest { .id(Vacation.ID) .enabled(false) .textBody(TEXT_BODY) + .subject(Optional.of(SUBJECT)) .build())) .build(); Vacation vacation = Vacation.builder() .enabled(false) .textBody(TEXT_BODY) + .subject(Optional.of(SUBJECT)) .build(); AccountId accountId = AccountId.fromString(USERNAME); http://git-wip-us.apache.org/repos/asf/james-project/blob/1ed51b58/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/VacationResponseTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/VacationResponseTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/VacationResponseTest.java index c4d8aa7..63f68bc 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/VacationResponseTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/VacationResponseTest.java @@ -32,6 +32,7 @@ public class VacationResponseTest { public static final String MESSAGE = "A message explaining I am in vacation"; public static final ZonedDateTime FROM_DATE = ZonedDateTime.parse("2016-04-15T11:56:32.224+07:00[Asia/Vientiane]"); public static final ZonedDateTime TO_DATE = ZonedDateTime.parse("2016-04-16T11:56:32.224+07:00[Asia/Vientiane]"); + public static final String SUBJECT = "subject"; @Test public void vacationResponseBuilderShouldBeConstructedWithTheRightInformation() { @@ -41,6 +42,7 @@ public class VacationResponseTest { .fromDate(Optional.of(FROM_DATE)) .toDate(Optional.of(TO_DATE)) .textBody(MESSAGE) + .subject(Optional.of(SUBJECT)) .build(); assertThat(vacationResponse.getId()).isEqualTo(IDENTIFIER); @@ -48,6 +50,7 @@ public class VacationResponseTest { assertThat(vacationResponse.getTextBody()).isEqualTo(MESSAGE); assertThat(vacationResponse.getFromDate()).contains(FROM_DATE); assertThat(vacationResponse.getToDate()).contains(TO_DATE); + assertThat(vacationResponse.getSubject()).contains(SUBJECT); } @Test(expected = IllegalStateException.class) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
