You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2016/07/25 15:42:32 UTC
[1/2] james-project git commit: JAMES-1805 Allow empty subject when
sending mail
Repository: james-project
Updated Branches:
refs/heads/master f88895834 -> 1616042be
JAMES-1805 Allow empty subject when sending mail
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/a897f587
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/a897f587
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/a897f587
Branch: refs/heads/master
Commit: a897f587f539eb02f3e4925e220d7a5db21c4e09
Parents: 0ea95c3
Author: Laura Royet <lr...@linagora.com>
Authored: Fri Jul 22 12:11:04 2016 +0200
Committer: Laura Royet <lr...@linagora.com>
Committed: Mon Jul 25 10:08:21 2016 +0200
----------------------------------------------------------------------
.../integration/SetMessagesMethodTest.java | 82 +++++++++++++++++---
.../james/jmap/model/CreationMessage.java | 11 +--
.../org/apache/james/jmap/model/Message.java | 1 -
.../apache/james/jmap/model/MessageFactory.java | 13 ++--
.../jmap/methods/GetMessagesMethodTest.java | 2 +-
.../james/jmap/model/CreationMessageTest.java | 50 ++++++++++--
.../james/jmap/model/MailboxMessageTest.java | 2 +-
7 files changed, 126 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/a897f587/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
index 6ea553f..af0dc11 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
@@ -686,6 +686,74 @@ public abstract class SetMessagesMethodTest {
}
@Test
+ public void setMessageShouldReturnCreatedMessageWithEmptySubjectWhenSubjectIsNull() {
+ String messageCreationId = "user|inbox|1";
+ String fromAddress = username;
+ String requestBody = "[" +
+ " [" +
+ " \"setMessages\","+
+ " {" +
+ " \"create\": { \"" + messageCreationId + "\" : {" +
+ " \"from\": { \"name\": \"Me\", \"email\": \"" + fromAddress + "\"}," +
+ " \"to\": [{ \"name\": \"BOB\", \"email\": \"someone@example.com\"}]," +
+ " \"subject\": null," +
+ " \"mailboxIds\": [\"" + getOutboxId(accessToken) + "\"]" +
+ " }}" +
+ " }," +
+ " \"#0\"" +
+ " ]" +
+ "]";
+
+ given()
+ .header("Authorization", accessToken.serialize())
+ .body(requestBody)
+ .when()
+ .post("/jmap")
+ .then()
+ .log().ifValidationFails()
+ .statusCode(200)
+ .body(NAME, equalTo("messagesSet"))
+ .body(ARGUMENTS + ".notCreated", aMapWithSize(0))
+ .body(ARGUMENTS + ".created", aMapWithSize(1))
+ .body(ARGUMENTS + ".created", hasKey(messageCreationId))
+ .body(ARGUMENTS + ".created[\""+messageCreationId+"\"].subject", equalTo(""));
+ }
+
+ @Test
+ public void setMessageShouldReturnCreatedMessageWithEmptySubjectWhenSubjectIsEmpty() {
+ String messageCreationId = "user|inbox|1";
+ String fromAddress = username;
+ String requestBody = "[" +
+ " [" +
+ " \"setMessages\","+
+ " {" +
+ " \"create\": { \"" + messageCreationId + "\" : {" +
+ " \"from\": { \"name\": \"Me\", \"email\": \"" + fromAddress + "\"}," +
+ " \"to\": [{ \"name\": \"BOB\", \"email\": \"someone@example.com\"}]," +
+ " \"subject\": \"\"," +
+ " \"mailboxIds\": [\"" + getOutboxId(accessToken) + "\"]" +
+ " }}" +
+ " }," +
+ " \"#0\"" +
+ " ]" +
+ "]";
+
+ given()
+ .header("Authorization", accessToken.serialize())
+ .body(requestBody)
+ .when()
+ .post("/jmap")
+ .then()
+ .log().ifValidationFails()
+ .statusCode(200)
+ .body(NAME, equalTo("messagesSet"))
+ .body(ARGUMENTS + ".notCreated", aMapWithSize(0))
+ .body(ARGUMENTS + ".created", aMapWithSize(1))
+ .body(ARGUMENTS + ".created", hasKey(messageCreationId))
+ .body(ARGUMENTS + ".created[\""+messageCreationId+"\"].subject", equalTo(""));
+ }
+
+ @Test
public void setMessageShouldSupportArbitraryMessageId() {
String messageCreationId = "1717fcd1-603e-44a5-b2a6-1234dbcd5723";
String fromAddress = username;
@@ -998,9 +1066,8 @@ public abstract class SetMessagesMethodTest {
calmlyAwait.atMost(30, TimeUnit.SECONDS).until( () -> messageHasBeenMovedToSentBox(sentMailboxId));
}
-
@Test
- public void setMessagesShouldRejectWhenSendingMessageHasMissingSubject() {
+ public void setMessagesShouldNotRejectWhenSendingMessageHasMissingSubject() {
String messageCreationId = "user|inbox|1";
String fromAddress = username;
String requestBody = "[" +
@@ -1028,14 +1095,9 @@ public abstract class SetMessagesMethodTest {
.log().ifValidationFails()
.statusCode(200)
.body(NAME, equalTo("messagesSet"))
- .body(ARGUMENTS + ".notCreated", hasKey(messageCreationId))
- .body(ARGUMENTS + ".notCreated[\""+messageCreationId+"\"].type", equalTo("invalidProperties"))
- .body(ARGUMENTS + ".notCreated[\""+messageCreationId+"\"].properties", hasSize(1))
- .body(ARGUMENTS + ".notCreated[\""+messageCreationId+"\"].properties", contains("subject"))
- .body(ARGUMENTS + ".notCreated[\""+messageCreationId+"\"].description", endsWith("'subject' is missing"))
- .body(ARGUMENTS + ".created", aMapWithSize(0));
- }
-
+ .body(ARGUMENTS + ".notCreated", aMapWithSize(0))
+ .body(ARGUMENTS + ".created", aMapWithSize(1));
+}
@Test
public void setMessagesShouldRejectWhenSendingMessageUseSomeoneElseFromAddress() {
http://git-wip-us.apache.org/repos/asf/james-project/blob/a897f587/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
index 5202a15..b925cc5 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/CreationMessage.java
@@ -151,8 +151,8 @@ public class CreationMessage {
return this;
}
- public Builder subject(String subject) {
- this.subject = subject;
+ public Builder subject (String subject) {
+ this.subject = Strings.nullToEmpty(subject);
return this;
}
@@ -338,16 +338,9 @@ public class CreationMessage {
ImmutableList.Builder<ValidationResult> errors = ImmutableList.builder();
assertValidFromProvided(errors);
assertAtLeastOneValidRecipient(errors);
- assertSubjectProvided(errors);
return errors.build();
}
- private void assertSubjectProvided(ImmutableList.Builder<ValidationResult> errors) {
- if (Strings.isNullOrEmpty(subject)) {
- errors.add(ValidationResult.builder().message("'subject' is missing").property(MessageProperty.subject.asFieldName()).build());
- }
- }
-
private void assertAtLeastOneValidRecipient(ImmutableList.Builder<ValidationResult> errors) {
ImmutableList<DraftEmailer> recipients = ImmutableList.<DraftEmailer>builder().addAll(to).addAll(cc).addAll(bcc).build();
boolean hasAtLeastOneAddressToSendTo = recipients.stream().anyMatch(DraftEmailer::hasValidEmail);
http://git-wip-us.apache.org/repos/asf/james-project/blob/a897f587/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
index 2121843..1e334aa 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java
@@ -205,7 +205,6 @@ public class Message {
Preconditions.checkState(!Strings.isNullOrEmpty(threadId), "'threadId' is mandatory");
Preconditions.checkState(mailboxIds != null, "'mailboxIds' is mandatory");
Preconditions.checkState(headers != null, "'headers' is mandatory");
- Preconditions.checkState(!Strings.isNullOrEmpty(subject), "'subject' is mandatory");
Preconditions.checkState(size != null, "'size' is mandatory");
Preconditions.checkState(date != null, "'date' is mandatory");
Preconditions.checkState(!Strings.isNullOrEmpty(preview), "'preview' is mandatory");
http://git-wip-us.apache.org/repos/asf/james-project/blob/a897f587/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
index fb3571d..6eb9bda 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MessageFactory.java
@@ -44,7 +44,6 @@ import com.google.common.collect.Multimap;
public class MessageFactory {
- public static final String NO_SUBJECT = "(No subject)";
public static final String MULTIVALUED_HEADERS_SEPARATOR = ", ";
public static final ZoneId UTC_ZONE_ID = ZoneId.of("Z");
@@ -96,14 +95,12 @@ public class MessageFactory {
}
private String getSubject(IndexableMessage im) {
- return Optional.ofNullable(
- Strings.emptyToNull(
- im.getSubjects()
- .stream()
- .collect(Collectors.joining(MULTIVALUED_HEADERS_SEPARATOR))))
- .orElse(NO_SUBJECT);
+ return im.getSubjects()
+ .stream()
+ .map(String::trim)
+ .collect(Collectors.joining(MULTIVALUED_HEADERS_SEPARATOR));
}
-
+
private Emailer firstElasticSearchEmailers(Set<EMailer> emailers) {
return emailers.stream()
.findFirst()
http://git-wip-us.apache.org/repos/asf/james-project/blob/a897f587/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java
index 6bca35f..54463ea 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java
@@ -188,7 +188,7 @@ public class GetMessagesMethodTest {
.containsOnly(
Tuple.tuple(message1Uid, "message 1 subject", Optional.of("my message")),
Tuple.tuple(message2Uid, "message 2 subject", Optional.of("my message")),
- Tuple.tuple(message3Uid, "(No subject)", Optional.of("my message")));
+ Tuple.tuple(message3Uid, "", Optional.of("my message")));
}
@Test
http://git-wip-us.apache.org/repos/asf/james-project/blob/a897f587/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java
index 4b23626..a72647f 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/CreationMessageTest.java
@@ -38,12 +38,14 @@ public class CreationMessageTest {
public void setUp() {
testedBuilder = CreationMessage.builder()
.mailboxIds(ImmutableList.of("ba9-0f-dead-beef"))
- .headers(ImmutableMap.of())
- .subject("anything");
+ .headers(ImmutableMap.of());
}
@Test
public void validateShouldReturnErrorWhenFromIsMissing() {
+ testedBuilder = testedBuilder
+ .subject("anything");
+
CreationMessage sut = testedBuilder.build();
assertThat(sut.validate()).contains(ValidationResult.builder()
@@ -55,6 +57,9 @@ public class CreationMessageTest {
@Test
public void validateShouldReturnErrorWhenFromIsInvalid() {
+ testedBuilder = testedBuilder
+ .subject("anything");
+
CreationMessage sut = testedBuilder.from(DraftEmailer.builder().name("bob").email("bob@domain.com@example.com").build()).build();
assertThat(sut.validate()).contains(ValidationResult.builder()
@@ -66,6 +71,9 @@ public class CreationMessageTest {
@Test
public void validateShouldReturnErrorWhenNoRecipientSet () {
+ testedBuilder = testedBuilder
+ .subject("anything");
+
CreationMessage sut = testedBuilder
.from(DraftEmailer.builder().name("bob").email("bob@example.com").build()).build();
@@ -74,6 +82,9 @@ public class CreationMessageTest {
@Test
public void validateShouldReturnErrorWhenNoValidRecipientSet () {
+ testedBuilder = testedBuilder
+ .subject("anything");
+
CreationMessage sut = testedBuilder
.from(DraftEmailer.builder().name("bob").email("bob@example.com").build())
.to(ImmutableList.of(DraftEmailer.builder().name("riri").email("riri@acme.com@example.com").build()))
@@ -86,10 +97,39 @@ public class CreationMessageTest {
@Test
public void validateShouldReturnEmptyListWhenNoErrors () {
+ testedBuilder = testedBuilder
+ .subject("anything");
+
+ CreationMessage sut = testedBuilder
+ .from(DraftEmailer.builder().name("bob").email("bob@example.com").build())
+ .to(ImmutableList.of(DraftEmailer.builder().name("riri").email("riri@example.com").build()))
+ .build();
+
+ assertThat(sut.validate()).isEmpty();
+ }
+
+ @Test
+ public void validateShouldReturnEmptyListWhenSubjectIsNull () {
+ testedBuilder = testedBuilder
+ .subject(null);
+
CreationMessage sut = testedBuilder
- .from(DraftEmailer.builder().name("bob").email("bob@example.com").build())
- .to(ImmutableList.of(DraftEmailer.builder().name("riri").email("riri@example.com").build()))
- .build();
+ .from(DraftEmailer.builder().name("bob").email("bob@example.com").build())
+ .to(ImmutableList.of(DraftEmailer.builder().name("riri").email("riri@example.com").build()))
+ .build();
+
+ assertThat(sut.validate()).isEmpty();
+ }
+
+ @Test
+ public void validateShouldReturnEmptyListWhenSubjectIsEmpty () {
+ testedBuilder = testedBuilder
+ .subject("");
+
+ CreationMessage sut = testedBuilder
+ .from(DraftEmailer.builder().name("bob").email("bob@example.com").build())
+ .to(ImmutableList.of(DraftEmailer.builder().name("riri").email("riri@example.com").build()))
+ .build();
assertThat(sut.validate()).isEmpty();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/a897f587/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxMessageTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxMessageTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxMessageTest.java
index ac8e736..a9280e0 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxMessageTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxMessageTest.java
@@ -255,7 +255,7 @@ public class MailboxMessageTest {
Message testee = messageFactory.fromMailboxMessage(testMail, ImmutableList.of(), x -> MessageId.of("user|box|" + x));
assertThat(testee)
.extracting(Message::getPreview, Message::getSize, Message::getSubject, Message::getHeaders, Message::getDate)
- .containsExactly("(Empty)", 0L, "(No subject)", ImmutableMap.of(), ZONED_DATE);
+ .containsExactly("(Empty)", 0L, "", ImmutableMap.of(), ZONED_DATE);
}
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org
[2/2] james-project git commit: Merge remote-tracking branch
'laura/JAMES-1805'
Posted by ma...@apache.org.
Merge remote-tracking branch 'laura/JAMES-1805'
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1616042b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1616042b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1616042b
Branch: refs/heads/master
Commit: 1616042be691fab99ab1a1d6eaf920812153e4ec
Parents: f888958 a897f58
Author: Matthieu Baechler <ma...@linagora.com>
Authored: Mon Jul 25 17:42:05 2016 +0200
Committer: Matthieu Baechler <ma...@linagora.com>
Committed: Mon Jul 25 17:42:05 2016 +0200
----------------------------------------------------------------------
.../integration/SetMessagesMethodTest.java | 82 +++++++++++++++++---
.../james/jmap/model/CreationMessage.java | 11 +--
.../org/apache/james/jmap/model/Message.java | 1 -
.../apache/james/jmap/model/MessageFactory.java | 13 ++--
.../jmap/methods/GetMessagesMethodTest.java | 2 +-
.../james/jmap/model/CreationMessageTest.java | 50 ++++++++++--
.../james/jmap/model/MailboxMessageTest.java | 2 +-
7 files changed, 126 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org