fixup! JAMES-1676 setMessages/update: moved json parsing
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/bec76243 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/bec76243 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/bec76243 Branch: refs/heads/master Commit: bec76243665ccc377fff33bfe322958c3520cfd1 Parents: 35b62b2 Author: Fabien Vignon <fvig...@linagora.com> Authored: Thu Feb 11 17:51:40 2016 +0100 Committer: Fabien Vignon <fvig...@linagora.com> Committed: Thu Feb 11 17:51:40 2016 +0100 ---------------------------------------------------------------------- .../jmap/methods/SetMessagesMethodTest.java | 87 +++++++++----------- .../methods/SetMessagesUpdateProcessor.java | 20 ++--- .../james/jmap/model/SetMessagesRequest.java | 2 +- .../jmap/model/UpdateMessagePatchTest.java | 3 +- 4 files changed, 49 insertions(+), 63 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/bec76243/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/SetMessagesMethodTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/SetMessagesMethodTest.java b/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/SetMessagesMethodTest.java index 97be3d4..b94fecd 100644 --- a/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/SetMessagesMethodTest.java +++ b/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/SetMessagesMethodTest.java @@ -31,7 +31,6 @@ import static org.hamcrest.Matchers.hasKey; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.isEmptyOrNullString; import static org.hamcrest.Matchers.not; -import static org.hamcrest.Matchers.startsWith; import static org.hamcrest.collection.IsMapWithSize.aMapWithSize; import static org.hamcrest.collection.IsMapWithSize.anEmptyMap; @@ -47,6 +46,7 @@ import org.apache.james.mailbox.elasticsearch.EmbeddedElasticSearch; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MailboxConstants; import org.apache.james.mailbox.model.MailboxPath; + import org.junit.Ignore; import com.google.common.base.Charsets; @@ -331,15 +331,13 @@ public abstract class SetMessagesMethodTest { } private ResponseSpecification getSetMessagesUpdateOKResponseAssertions(String messageId) { - String responseHeaderPath = "[0][0]"; - String responseBodyBasePath = "[0][1]"; ResponseSpecBuilder builder = new ResponseSpecBuilder() .expectStatusCode(200) - .expectBody(responseHeaderPath, equalTo("messagesSet")) - .expectBody(responseBodyBasePath +".updated", hasSize(1)) - .expectBody(responseBodyBasePath +".updated", contains(messageId)) - .expectBody(responseBodyBasePath +".error", isEmptyOrNullString()) - .expectBody(responseBodyBasePath +".notUpdated", not(hasKey(messageId))); + .expectBody(NAME, equalTo("messagesSet")) + .expectBody(ARGUMENTS + ".updated", hasSize(1)) + .expectBody(ARGUMENTS + ".updated", contains(messageId)) + .expectBody(ARGUMENTS + ".error", isEmptyOrNullString()) + .expectBody(ARGUMENTS + ".notUpdated", not(hasKey(messageId))); return builder.build(); } @@ -361,18 +359,17 @@ public abstract class SetMessagesMethodTest { // When .post("/jmap"); // Then - given() + with() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) .body("[[\"getMessages\", {\"ids\": [\"" + presumedMessageId + "\"]}, \"#0\"]]") - .when() .post("/jmap") .then() .statusCode(200) - .body("[0][0]", equalTo("messages")) - .body("[0][1].list", hasSize(1)) - .body("[0][1].list[0].isUnread", equalTo(false)) + .body(NAME, equalTo("messages")) + .body(ARGUMENTS + ".list", hasSize(1)) + .body(ARGUMENTS + ".list[0].isUnread", equalTo(false)) .log().ifValidationFails(); } @@ -418,17 +415,16 @@ public abstract class SetMessagesMethodTest { // When .post("/jmap"); // Then - given() + with() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) .body("[[\"getMessages\", {\"ids\": [\"" + presumedMessageId + "\"]}, \"#0\"]]") - .when() .post("/jmap") .then() - .body("[0][0]", equalTo("messages")) - .body("[0][1].list", hasSize(1)) - .body("[0][1].list[0].isUnread", equalTo(true)) + .body(NAME, equalTo("messages")) + .body(ARGUMENTS + ".list", hasSize(1)) + .body(ARGUMENTS + ".list[0].isUnread", equalTo(true)) .log().ifValidationFails(); } @@ -475,17 +471,16 @@ public abstract class SetMessagesMethodTest { // When .post("/jmap"); // Then - given() + with() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) .body("[[\"getMessages\", {\"ids\": [\"" + presumedMessageId + "\"]}, \"#0\"]]") - .when() .post("/jmap") .then() - .body("[0][0]", equalTo("messages")) - .body("[0][1].list", hasSize(1)) - .body("[0][1].list[0].isFlagged", equalTo(true)) + .body(NAME, equalTo("messages")) + .body(ARGUMENTS + ".list", hasSize(1)) + .body(ARGUMENTS + ".list[0].isFlagged", equalTo(true)) .log().ifValidationFails(); } @@ -509,13 +504,13 @@ public abstract class SetMessagesMethodTest { .then() .log().ifValidationFails() .statusCode(200) - .body("[0][0]", equalTo("messagesSet")) - .body("[0][1].notUpdated", hasKey(messageId)) - .body("[0][1].notUpdated[\""+messageId+"\"].type", equalTo("invalidProperties")) - .body("[0][1].notUpdated[\""+messageId+"\"].properties[0]", equalTo("isUnread")) - .body("[0][1].notUpdated[\""+messageId+"\"].description", startsWith("isUnread: Can not construct instance of java.lang.Boolean from String value '123': only \"true\" or \"false\" recognized\n" + + .body(NAME, equalTo("messagesSet")) + .body(ARGUMENTS + ".notUpdated", hasKey(messageId)) + .body(ARGUMENTS + ".notUpdated[\""+messageId+"\"].type", equalTo("invalidProperties")) + .body(ARGUMENTS + ".notUpdated[\""+messageId+"\"].properties[0]", equalTo("isUnread")) + .body(ARGUMENTS + ".notUpdated[\""+messageId+"\"].description", equalTo("isUnread: Can not construct instance of java.lang.Boolean from String value '123': only \"true\" or \"false\" recognized\n" + " at [Source: {\"isUnread\":\"123\"}; line: 1, column: 2] (through reference chain: org.apache.james.jmap.model.Builder[\"isUnread\"])")) - .body("[0][1].updated", hasSize(0)); + .body(ARGUMENTS + ".updated", hasSize(0)); } @Test @@ -539,14 +534,13 @@ public abstract class SetMessagesMethodTest { .then() .log().ifValidationFails() .statusCode(200) - .body("[0][0]", equalTo("messagesSet")) - .body("[0][1].notUpdated", hasKey(messageId)) - .body("[0][1].notUpdated[\""+messageId+"\"].type", equalTo("invalidProperties")) - .body("[0][1].notUpdated[\""+messageId+"\"].properties", hasSize(2)) - .body("[0][1].notUpdated[\""+messageId+"\"].properties[0]", equalTo("isUnread")) - .body("[0][1].notUpdated[\""+messageId+"\"].properties[1]", equalTo("isFlagged")) - // .body("[0][1].notUpdated[\""+messageId+"\"].description", startsWith("Can not construct instance of java.lang.Boolean from String value '123': only \"true\" or \"false\" recognized")) - .body("[0][1].updated", hasSize(0)); + .body(NAME, equalTo("messagesSet")) + .body(ARGUMENTS + ".notUpdated", hasKey(messageId)) + .body(ARGUMENTS + ".notUpdated[\""+messageId+"\"].type", equalTo("invalidProperties")) + .body(ARGUMENTS + ".notUpdated[\""+messageId+"\"].properties", hasSize(2)) + .body(ARGUMENTS + ".notUpdated[\""+messageId+"\"].properties[0]", equalTo("isUnread")) + .body(ARGUMENTS + ".notUpdated[\""+messageId+"\"].properties[1]", equalTo("isFlagged")) + .body(ARGUMENTS + ".updated", hasSize(0)); } @Test @@ -591,17 +585,16 @@ public abstract class SetMessagesMethodTest { // When .post("/jmap"); // Then - given() + with() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) .body("[[\"getMessages\", {\"ids\": [\"" + presumedMessageId + "\"]}, \"#0\"]]") - .when() .post("/jmap") .then() - .body("[0][0]", equalTo("messages")) - .body("[0][1].list", hasSize(1)) - .body("[0][1].list[0].isAnswered", equalTo(true)) + .body(NAME, equalTo("messages")) + .body(ARGUMENTS + ".list", hasSize(1)) + .body(ARGUMENTS + ".list[0].isAnswered", equalTo(true)) .log().ifValidationFails(); } @@ -621,10 +614,10 @@ public abstract class SetMessagesMethodTest { .then() .log().ifValidationFails() .statusCode(200) - .body("[0][0]", equalTo("messagesSet")) - .body("[0][1].notUpdated", hasKey(nonExistingMessageId)) - .body("[0][1].notUpdated[\""+nonExistingMessageId+"\"].type", equalTo("notFound")) - .body("[0][1].notUpdated[\""+nonExistingMessageId+"\"].description", equalTo("message not found")) - .body("[0][1].updated", hasSize(0)); + .body(NAME, equalTo("messagesSet")) + .body(ARGUMENTS + ".notUpdated", hasKey(nonExistingMessageId)) + .body(ARGUMENTS + ".notUpdated[\""+nonExistingMessageId+"\"].type", equalTo("notFound")) + .body(ARGUMENTS + ".notUpdated[\""+nonExistingMessageId+"\"].description", equalTo("message not found")) + .body(ARGUMENTS + ".updated", hasSize(0)); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/james-project/blob/bec76243/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java index bec653e..458e748 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java @@ -21,7 +21,6 @@ package org.apache.james.jmap.methods; import java.util.Iterator; import java.util.List; -import java.util.Map; import java.util.NoSuchElementException; import java.util.Set; import java.util.stream.Collectors; @@ -74,16 +73,12 @@ public class SetMessagesUpdateProcessor<Id extends MailboxId> { public SetMessagesResponse processUpdates(SetMessagesRequest request, MailboxSession mailboxSession) { SetMessagesResponse.Builder responseBuilder = SetMessagesResponse.builder(); - - List<Map.Entry<MessageId, UpdateMessagePatch>> updatePatchesById = request.buildUpdatePatchs(updatePatchConverter) - .entrySet().stream() - .collect(Collectors.toList()); - updatePatchesById.stream() - .filter(mwp -> ! mwp.getValue().isValid()) - .forEach(mwp -> handleInvalidRequest(responseBuilder, mwp.getKey(), mwp.getValue().getValidationErrors())); - updatePatchesById.stream() - .filter(mwp -> mwp.getValue().isValid()) - .forEach(e -> update(e.getKey(), e.getValue(), mailboxSession, responseBuilder)); + request.buildUpdatePatches(updatePatchConverter).forEach( (id, patch) -> { + if (patch.isValid()) { + update(id, patch, mailboxSession, responseBuilder); + } else { + handleInvalidRequest(responseBuilder, id, patch.getValidationErrors()); + }}); return responseBuilder.build(); } @@ -110,8 +105,7 @@ public class SetMessagesUpdateProcessor<Id extends MailboxId> { return messageMapper.updateFlags(mailbox, new FlagsUpdateCalculator(message.createFlags(), MessageManager.FlagsUpdateMode.REPLACE), MessageRange.one(messageId.getUid())) - .hasNext() - ; + .hasNext(); } private void addMessageIdNotFoundToResponse(MessageId messageId, SetMessagesResponse.Builder builder) { http://git-wip-us.apache.org/repos/asf/james-project/blob/bec76243/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMessagesRequest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMessagesRequest.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMessagesRequest.java index f53c918..ba81c35 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMessagesRequest.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/SetMessagesRequest.java @@ -121,7 +121,7 @@ public class SetMessagesRequest implements JmapRequest { return create; } - public Map<MessageId, UpdateMessagePatch> buildUpdatePatchs(UpdateMessagePatchConverter converter) { + public Map<MessageId, UpdateMessagePatch> buildUpdatePatches(UpdateMessagePatchConverter converter) { return Maps.transformValues(update, func -> func.apply(converter)); } http://git-wip-us.apache.org/repos/asf/james-project/blob/bec76243/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java index 877fa87..cc98092 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/UpdateMessagePatchTest.java @@ -40,11 +40,10 @@ public class UpdateMessagePatchTest { } @Test - public void builderShouldSetSeenFlagWhenBuiltWithIsUnreadFalse() { + public void builderShouldSetUnreadFalseWhenBuiltWithIsUnreadFalse() { UpdateMessagePatch testee = UpdateMessagePatch.builder().isUnread(false).build(); assertThat(testee.isUnread()).isPresent(); assertThat(testee.isUnread().get()).isFalse(); - assertThat(testee.isFlagged()).isEmpty(); // belts and braces ! } @Test --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org