Author: aduprat Date: Wed Jan 13 10:12:01 2016 New Revision: 1724385 URL: http://svn.apache.org/viewvc?rev=1724385&view=rev Log: JAMES-1648 Make json assertion more robust. Contributed by Baechler <matthieu.baech...@gmail.com>
Modified: james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMessageListMethodTest.java james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java Modified: james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java?rev=1724385&r1=1724384&r2=1724385&view=diff ============================================================================== --- james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java (original) +++ james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java Wed Jan 13 10:12:01 2016 @@ -23,7 +23,6 @@ import static com.jayway.restassured.Res import static com.jayway.restassured.config.EncoderConfig.encoderConfig; import static com.jayway.restassured.config.RestAssuredConfig.newConfig; import static org.assertj.core.api.Assertions.assertThat; -import static org.hamcrest.Matchers.endsWith; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.startsWith; @@ -34,8 +33,6 @@ import java.util.Map; import javax.mail.Flags; -import com.google.common.collect.ImmutableMap; -import com.jayway.jsonpath.JsonPath; import org.apache.james.backends.cassandra.EmbeddedCassandra; import org.apache.james.jmap.JmapAuthentication; import org.apache.james.jmap.JmapServer; @@ -50,6 +47,8 @@ import org.junit.rules.RuleChain; import org.junit.rules.TemporaryFolder; import com.google.common.base.Charsets; +import com.google.common.collect.ImmutableMap; +import com.jayway.jsonpath.JsonPath; import com.jayway.restassured.RestAssured; import com.jayway.restassured.http.ContentType; @@ -142,7 +141,7 @@ public abstract class GetMailboxesMethod @Test public void getMailboxesShouldReturnEmptyListWhenNoMailboxes() throws Exception { - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -151,7 +150,12 @@ public abstract class GetMailboxesMethod .post("/jmap") .then() .statusCode(200) - .content(equalTo("[[\"mailboxes\",{\"accountId\":null,\"state\":null,\"list\":[],\"notFound\":null},\"#0\"]]")); + .content(startsWith("[[\"mailboxes\",")) + .extract() + .asString(); + + String firstResponsePath = "$.[0].[1]"; + assertThat(JsonPath.parse(response).<Integer>read(firstResponsePath + ".list.length()")).isEqualTo(0); } @Test @@ -162,7 +166,7 @@ public abstract class GetMailboxesMethod jmapServer.serverProbe().appendMessage(user, new MailboxPath(MailboxConstants.USER_NAMESPACE, user, "name"), new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags()); - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -171,8 +175,25 @@ public abstract class GetMailboxesMethod .post("/jmap") .then() .statusCode(200) - .content(startsWith("[[\"mailboxes\",{\"accountId\":null,\"state\":null,\"list\":[{\"id\":\""), - endsWith("\",\"name\":\"name\",\"parentId\":null,\"role\":null,\"sortOrder\":1000,\"mustBeOnlyMailbox\":false,\"mayReadItems\":false,\"mayAddItems\":false,\"mayRemoveItems\":false,\"mayCreateChild\":false,\"mayRename\":false,\"mayDelete\":false,\"totalMessages\":1,\"unreadMessages\":1,\"totalThreads\":0,\"unreadThreads\":0}],\"notFound\":null},\"#0\"]]")); + .content(startsWith("[[\"mailboxes\",")) + .extract() + .asString(); + + String firstMailboxPath = "$.[0].[1].list.[0]"; + assertThat(JsonPath.parse(response).<String>read(firstMailboxPath + ".name")).isEqualTo("name"); + assertThat(JsonPath.parse(response).<String>read(firstMailboxPath + ".parentId")).isNull(); + assertThat(JsonPath.parse(response).<String>read(firstMailboxPath + ".role")).isNull(); + assertThat(JsonPath.parse(response).<Integer>read(firstMailboxPath + ".sortOrder")).isEqualTo(1000); + assertThat(JsonPath.parse(response).<Boolean>read(firstMailboxPath + ".mustBeOnlyMailbox")).isFalse(); + assertThat(JsonPath.parse(response).<Boolean>read(firstMailboxPath + ".mayReadItems")).isFalse(); + assertThat(JsonPath.parse(response).<Boolean>read(firstMailboxPath + ".mayAddItems")).isFalse(); + assertThat(JsonPath.parse(response).<Boolean>read(firstMailboxPath + ".mayRemoveItems")).isFalse(); + assertThat(JsonPath.parse(response).<Boolean>read(firstMailboxPath + ".mayCreateChild")).isFalse(); + assertThat(JsonPath.parse(response).<Boolean>read(firstMailboxPath + ".mayRename")).isFalse(); + assertThat(JsonPath.parse(response).<Boolean>read(firstMailboxPath + ".mayDelete")).isFalse(); + assertThat(JsonPath.parse(response).<Integer>read(firstMailboxPath + ".totalMessages")).isEqualTo(1); + assertThat(JsonPath.parse(response).<Integer>read(firstMailboxPath + ".unreadMessages")).isEqualTo(1); + assertThat(JsonPath.parse(response).<Integer>read(firstMailboxPath + ".unreadThreads")).isEqualTo(0); } @SuppressWarnings("unchecked") Modified: james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMessageListMethodTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMessageListMethodTest.java?rev=1724385&r1=1724384&r2=1724385&view=diff ============================================================================== --- james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMessageListMethodTest.java (original) +++ james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMessageListMethodTest.java Wed Jan 13 10:12:01 2016 @@ -22,12 +22,14 @@ package org.apache.james.jmap.methods; import static com.jayway.restassured.RestAssured.given; import static com.jayway.restassured.config.EncoderConfig.encoderConfig; import static com.jayway.restassured.config.RestAssuredConfig.newConfig; +import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.startsWith; import java.io.ByteArrayInputStream; import java.time.LocalDate; import java.util.Date; +import java.util.List; import javax.mail.Flags; @@ -46,6 +48,7 @@ import org.junit.rules.RuleChain; import org.junit.rules.TemporaryFolder; import com.google.common.base.Charsets; +import com.jayway.jsonpath.JsonPath; import com.jayway.restassured.RestAssured; import com.jayway.restassured.http.ContentType; @@ -104,7 +107,7 @@ public abstract class GetMessageListMeth new ByteArrayInputStream("Subject: test2\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags()); embeddedElasticSearch.awaitForElasticSearch(); - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -113,11 +116,12 @@ public abstract class GetMessageListMeth .post("/jmap") .then() .statusCode(200) - .content(startsWith("[[\"messageList\"," - + "{\"accountId\":null,\"filter\":null,\"sort\":[],\"collapseThreads\":false,\"state\":null," - + "\"canCalculateUpdates\":false,\"position\":0,\"total\":0,\"threadIds\":[]," - + "\"messageIds\":[\"usern...@domain.tld-mailbox-1\",\"usern...@domain.tld-mailbox-2\"]}," - + "\"#0\"]]")); + .content(startsWith("[[\"messageList\",")) + .extract() + .asString(); + + assertThat(JsonPath.parse(response).<List<String>>read("$.[0].[1].messageIds")) + .containsOnly("usern...@domain.tld-mailbox-1", "usern...@domain.tld-mailbox-2"); } @Ignore("ISSUE-53") @@ -132,7 +136,7 @@ public abstract class GetMessageListMeth new ByteArrayInputStream("Subject: test2\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags()); embeddedElasticSearch.awaitForElasticSearch(); - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -141,10 +145,12 @@ public abstract class GetMessageListMeth .post("/jmap") .then() .statusCode(200) - .content(startsWith("[[\"messageList\"," - + "{\"accountId\":null,\"filter\":null,\"sort\":[],\"collapseThreads\":false,\"state\":null," - + "\"canCalculateUpdates\":false,\"position\":0,\"total\":0,\"threadIds\":[],\"messageIds\":[\"1\",\"2\"]}," - + "\"#0\"]]")); + .content(startsWith("[[\"messageList\",")) + .extract() + .asString(); + + assertThat(JsonPath.parse(response).<List<String>>read("$.[0].[1].messageIds")) + .containsOnly("1", "2"); } @Test @@ -155,7 +161,7 @@ public abstract class GetMessageListMeth new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags()); embeddedElasticSearch.awaitForElasticSearch(); - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -164,20 +170,12 @@ public abstract class GetMessageListMeth .post("/jmap") .then() .statusCode(200) - .content(startsWith("" - + "[" - + "[\"messageList\"," - + "{\"accountId\":null," - + "\"filter\":null," - + "\"sort\":[]," - + "\"collapseThreads\":false," - + "\"state\":null," - + "\"canCalculateUpdates\":false," - + "\"position\":0," - + "\"total\":0," - + "\"threadIds\":[]," - + "\"messageIds\":[\"usern...@domain.tld-mailbox-1\"]}," - + "\"#0\"]]")); + .content(startsWith("[[\"messageList\",")) + .extract() + .asString(); + + assertThat(JsonPath.parse(response).<List<String>>read("$.[0].[1].messageIds")) + .containsOnly("usern...@domain.tld-mailbox-1"); } @Test @@ -189,7 +187,7 @@ public abstract class GetMessageListMeth jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, username, "mailbox2"); embeddedElasticSearch.awaitForElasticSearch(); - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -198,11 +196,12 @@ public abstract class GetMessageListMeth .post("/jmap") .then() .statusCode(200) - .content(startsWith("[[\"messageList\"," - + "{\"accountId\":null,\"filter\":null,\"sort\":[],\"collapseThreads\":false,\"state\":null," - + "\"canCalculateUpdates\":false,\"position\":0,\"total\":0,\"threadIds\":[]," - + "\"messageIds\":[\"usern...@domain.tld-mailbox-1\"]}," - + "\"#0\"]]")); + .content(startsWith("[[\"messageList\",")) + .extract() + .asString(); + + assertThat(JsonPath.parse(response).<List<String>>read("$.[0].[1].messageIds")) + .containsOnly("usern...@domain.tld-mailbox-1"); } @Test @@ -213,7 +212,7 @@ public abstract class GetMessageListMeth new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags()); embeddedElasticSearch.awaitForElasticSearch(); - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -222,10 +221,12 @@ public abstract class GetMessageListMeth .post("/jmap") .then() .statusCode(200) - .content(startsWith("[[\"messageList\"," - + "{\"accountId\":null,\"filter\":null,\"sort\":[],\"collapseThreads\":false,\"state\":null," - + "\"canCalculateUpdates\":false,\"position\":0,\"total\":0,\"threadIds\":[],\"messageIds\":[]}," - + "\"#0\"]]")); + .content(startsWith("[[\"messageList\",")) + .extract() + .asString(); + + assertThat(JsonPath.parse(response).<List<String>>read("$.[0].[1].messageIds")) + .isEmpty(); } @Test @@ -239,7 +240,7 @@ public abstract class GetMessageListMeth new ByteArrayInputStream("Subject: test2\r\n\r\ntestmail".getBytes()), new Date(date.toEpochDay()), false, new Flags()); embeddedElasticSearch.awaitForElasticSearch(); - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -248,11 +249,12 @@ public abstract class GetMessageListMeth .post("/jmap") .then() .statusCode(200) - .content(startsWith("[[\"messageList\"," - + "{\"accountId\":null,\"filter\":null,\"sort\":[],\"collapseThreads\":false,\"state\":null," - + "\"canCalculateUpdates\":false,\"position\":0,\"total\":0,\"threadIds\":[]," - + "\"messageIds\":[\"usern...@domain.tld-mailbox-1\",\"usern...@domain.tld-mailbox-2\"]}," - + "\"#0\"]]")); + .content(startsWith("[[\"messageList\",")) + .extract() + .asString(); + + assertThat(JsonPath.parse(response).<List<String>>read("$.[0].[1].messageIds")) + .containsExactly("usern...@domain.tld-mailbox-1", "usern...@domain.tld-mailbox-2"); } @Test @@ -266,7 +268,7 @@ public abstract class GetMessageListMeth new ByteArrayInputStream("Subject: test2\r\n\r\ntestmail".getBytes()), new Date(date.toEpochDay()), false, new Flags()); embeddedElasticSearch.awaitForElasticSearch(); - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -275,11 +277,12 @@ public abstract class GetMessageListMeth .post("/jmap") .then() .statusCode(200) - .content(startsWith("[[\"messageList\"," - + "{\"accountId\":null,\"filter\":null,\"sort\":[],\"collapseThreads\":false,\"state\":null," - + "\"canCalculateUpdates\":false,\"position\":0,\"total\":0,\"threadIds\":[]," - + "\"messageIds\":[\"usern...@domain.tld-mailbox-2\",\"usern...@domain.tld-mailbox-1\"]}," - + "\"#0\"]]")); + .content(startsWith("[[\"messageList\",")) + .extract() + .asString(); + + assertThat(JsonPath.parse(response).<List<String>>read("$.[0].[1].messageIds")) + .containsExactly("usern...@domain.tld-mailbox-2", "usern...@domain.tld-mailbox-1"); } @Test @@ -293,7 +296,7 @@ public abstract class GetMessageListMeth new ByteArrayInputStream("Subject: test2\r\n\r\ntestmail".getBytes()), new Date(date.toEpochDay()), false, new Flags()); embeddedElasticSearch.awaitForElasticSearch(); - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -302,11 +305,12 @@ public abstract class GetMessageListMeth .post("/jmap") .then() .statusCode(200) - .content(startsWith("[[\"messageList\"," - + "{\"accountId\":null,\"filter\":null,\"sort\":[],\"collapseThreads\":false,\"state\":null," - + "\"canCalculateUpdates\":false,\"position\":0,\"total\":0,\"threadIds\":[]," - + "\"messageIds\":[\"usern...@domain.tld-mailbox-1\",\"usern...@domain.tld-mailbox-2\"]}," - + "\"#0\"]]")); + .content(startsWith("[[\"messageList\",")) + .extract() + .asString(); + + assertThat(JsonPath.parse(response).<List<String>>read("$.[0].[1].messageIds")) + .containsExactly("usern...@domain.tld-mailbox-1", "usern...@domain.tld-mailbox-2"); } @Test @@ -320,7 +324,7 @@ public abstract class GetMessageListMeth new ByteArrayInputStream("Subject: test2\r\n\r\ntestmail".getBytes()), new Date(date.toEpochDay()), false, new Flags()); embeddedElasticSearch.awaitForElasticSearch(); - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -329,11 +333,12 @@ public abstract class GetMessageListMeth .post("/jmap") .then() .statusCode(200) - .content(startsWith("[[\"messageList\"," - + "{\"accountId\":null,\"filter\":null,\"sort\":[],\"collapseThreads\":false,\"state\":null," - + "\"canCalculateUpdates\":false,\"position\":0,\"total\":0,\"threadIds\":[]," - + "\"messageIds\":[\"usern...@domain.tld-mailbox-1\",\"usern...@domain.tld-mailbox-2\"]}," - + "\"#0\"]]")); + .content(startsWith("[[\"messageList\",")) + .extract() + .asString(); + + assertThat(JsonPath.parse(response).<List<String>>read("$.[0].[1].messageIds")) + .containsOnly("usern...@domain.tld-mailbox-1", "usern...@domain.tld-mailbox-2"); } @Test @@ -347,7 +352,7 @@ public abstract class GetMessageListMeth new ByteArrayInputStream("Subject: test2\r\n\r\ntestmail".getBytes()), new Date(date.toEpochDay()), false, new Flags()); embeddedElasticSearch.awaitForElasticSearch(); - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -356,11 +361,12 @@ public abstract class GetMessageListMeth .post("/jmap") .then() .statusCode(200) - .content(startsWith("[[\"messageList\"," - + "{\"accountId\":null,\"filter\":null,\"sort\":[],\"collapseThreads\":false,\"state\":null," - + "\"canCalculateUpdates\":false,\"position\":0,\"total\":0,\"threadIds\":[]," - + "\"messageIds\":[\"usern...@domain.tld-mailbox-2\"]}," - + "\"#0\"]]")); + .content(startsWith("[[\"messageList\",")) + .extract() + .asString(); + + assertThat(JsonPath.parse(response).<List<String>>read("$.[0].[1].messageIds")) + .containsOnly("usern...@domain.tld-mailbox-2"); } @Test @@ -374,7 +380,7 @@ public abstract class GetMessageListMeth new ByteArrayInputStream("Subject: test2\r\n\r\ntestmail".getBytes()), new Date(date.toEpochDay()), false, new Flags()); embeddedElasticSearch.awaitForElasticSearch(); - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -383,11 +389,12 @@ public abstract class GetMessageListMeth .post("/jmap") .then() .statusCode(200) - .content(startsWith("[[\"messageList\"," - + "{\"accountId\":null,\"filter\":null,\"sort\":[],\"collapseThreads\":false,\"state\":null," - + "\"canCalculateUpdates\":false,\"position\":0,\"total\":0,\"threadIds\":[]," - + "\"messageIds\":[\"usern...@domain.tld-mailbox-1\",\"usern...@domain.tld-mailbox-2\"]}," - + "\"#0\"]]")); + .content(startsWith("[[\"messageList\",")) + .extract() + .asString(); + + assertThat(JsonPath.parse(response).<List<String>>read("$.[0].[1].messageIds")) + .containsOnly("usern...@domain.tld-mailbox-1", "usern...@domain.tld-mailbox-2"); } @Test @@ -401,7 +408,7 @@ public abstract class GetMessageListMeth new ByteArrayInputStream("Subject: test2\r\n\r\ntestmail".getBytes()), new Date(date.toEpochDay()), false, new Flags()); embeddedElasticSearch.awaitForElasticSearch(); - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -410,11 +417,12 @@ public abstract class GetMessageListMeth .post("/jmap") .then() .statusCode(200) - .content(startsWith("[[\"messageList\"," - + "{\"accountId\":null,\"filter\":null,\"sort\":[],\"collapseThreads\":false,\"state\":null," - + "\"canCalculateUpdates\":false,\"position\":0,\"total\":0,\"threadIds\":[]," - + "\"messageIds\":[\"usern...@domain.tld-mailbox-1\"]}," - + "\"#0\"]]")); + .content(startsWith("[[\"messageList\",")) + .extract() + .asString(); + + assertThat(JsonPath.parse(response).<List<String>>read("$.[0].[1].messageIds")) + .containsOnly("usern...@domain.tld-mailbox-1"); } @Test @@ -432,7 +440,7 @@ public abstract class GetMessageListMeth new ByteArrayInputStream("Subject: test4\r\n\r\ntestmail".getBytes()), new Date(date.toEpochDay()), false, new Flags()); embeddedElasticSearch.awaitForElasticSearch(); - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -441,10 +449,11 @@ public abstract class GetMessageListMeth .post("/jmap") .then() .statusCode(200) - .content(startsWith("[[\"messageList\"," - + "{\"accountId\":null,\"filter\":null,\"sort\":[],\"collapseThreads\":false,\"state\":null," - + "\"canCalculateUpdates\":false,\"position\":0,\"total\":0,\"threadIds\":[]," - + "\"messageIds\":[\"usern...@domain.tld-mailbox-1\",\"usern...@domain.tld-mailbox-2\",\"usern...@domain.tld-mailbox-3\"]}," - + "\"#0\"]]")); + .content(startsWith("[[\"messageList\",")) + .extract() + .asString(); + + assertThat(JsonPath.parse(response).<List<String>>read("$.[0].[1].messageIds")) + .containsOnly("usern...@domain.tld-mailbox-1", "usern...@domain.tld-mailbox-2", "usern...@domain.tld-mailbox-3"); } } Modified: james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java URL: http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java?rev=1724385&r1=1724384&r2=1724385&view=diff ============================================================================== --- james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java (original) +++ james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMessagesMethodTest.java Wed Jan 13 10:12:01 2016 @@ -49,11 +49,7 @@ import org.junit.rules.RuleChain; import org.junit.rules.TemporaryFolder; import com.google.common.base.Charsets; -import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.JsonPath; -import com.jayway.jsonpath.ParseContext; -import com.jayway.jsonpath.spi.json.JacksonJsonProvider; -import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider; import com.jayway.restassured.RestAssured; import com.jayway.restassured.http.ContentType; @@ -73,16 +69,11 @@ public abstract class GetMessagesMethodT .around(jmapServer); private AccessToken accessToken; - private ParseContext jsonPath; @Before public void setup() throws Exception { RestAssured.port = jmapServer.getPort(); RestAssured.config = newConfig().encoderConfig(encoderConfig().defaultContentCharset(Charsets.UTF_8)); - jsonPath = JsonPath.using(Configuration.builder() - .jsonProvider(new JacksonJsonProvider()) - .mappingProvider(new JacksonMappingProvider()) - .build()); String domain = "domain.tld"; String username = "username@" + domain; @@ -109,7 +100,7 @@ public abstract class GetMessagesMethodT @Test public void getMessagesShouldIgnoreUnknownArguments() throws Exception { - given() + String response = given() .accept(ContentType.JSON) .contentType(ContentType.JSON) .header("Authorization", accessToken.serialize()) @@ -118,7 +109,13 @@ public abstract class GetMessagesMethodT .post("/jmap") .then() .statusCode(200) - .content(equalTo("[[\"messages\",{\"notFound\":[],\"list\":[]},\"#0\"]]")); + .content(startsWith("[[\"messages\",")) + .extract() + .asString(); + + String firstResponsePath = "$.[0].[1]"; + assertThat(JsonPath.parse(response).<Integer>read(firstResponsePath + ".notFound.length()")).isEqualTo(0); + assertThat(JsonPath.parse(response).<Integer>read(firstResponsePath + ".list.length()")).isEqualTo(0); } @Test @@ -150,8 +147,8 @@ public abstract class GetMessagesMethodT .extract() .asString(); - assertThat(jsonPath.parse(response).<Integer>read("$.length()")).isEqualTo(1); - assertThat(jsonPath.parse(response).<Integer>read("$.[0].[1].list.length()")).isEqualTo(0); + assertThat(JsonPath.parse(response).<Integer>read("$.length()")).isEqualTo(1); + assertThat(JsonPath.parse(response).<Integer>read("$.[0].[1].list.length()")).isEqualTo(0); } @Test @@ -169,8 +166,8 @@ public abstract class GetMessagesMethodT .extract() .asString(); - assertThat(jsonPath.parse(response).<Integer>read("$.length()")).isEqualTo(1); - assertThat(jsonPath.parse(response).<List<String>>read("$.[0].[1].notFound")).containsExactly("username-inbox-12"); + assertThat(JsonPath.parse(response).<Integer>read("$.length()")).isEqualTo(1); + assertThat(JsonPath.parse(response).<List<String>>read("$.[0].[1].notFound")).containsExactly("username-inbox-12"); } @Test @@ -197,15 +194,15 @@ public abstract class GetMessagesMethodT String firstResponsePath = "$.[0].[1]"; String firstMessagePath = firstResponsePath + ".list[0]"; - assertThat(jsonPath.parse(response).<Integer>read("$.length()")).isEqualTo(1); - assertThat(jsonPath.parse(response).<Integer>read(firstResponsePath + ".list.length()")).isEqualTo(1); - assertThat(jsonPath.parse(response).<String>read(firstMessagePath + ".id")).isEqualTo("usern...@domain.tld-inbox-1"); - assertThat(jsonPath.parse(response).<String>read(firstMessagePath + ".subject")).isEqualTo("my test subject"); - assertThat(jsonPath.parse(response).<String>read(firstMessagePath + ".textBody")).isEqualTo("testmail"); - assertThat(jsonPath.parse(response).<Boolean>read(firstMessagePath + ".isUnread")).isTrue(); - assertThat(jsonPath.parse(response).<String>read(firstMessagePath + ".preview")).isEqualTo("testmail"); - assertThat(jsonPath.parse(response).<Map<String, String>>read(firstMessagePath + ".headers")).containsExactly(MapEntry.entry("subject", "my test subject")); - assertThat(jsonPath.parse(response).<String>read(firstMessagePath + ".date")).isEqualTo("2014-10-30T14:12:00Z"); + assertThat(JsonPath.parse(response).<Integer>read("$.length()")).isEqualTo(1); + assertThat(JsonPath.parse(response).<Integer>read(firstResponsePath + ".list.length()")).isEqualTo(1); + assertThat(JsonPath.parse(response).<String>read(firstMessagePath + ".id")).isEqualTo("usern...@domain.tld-inbox-1"); + assertThat(JsonPath.parse(response).<String>read(firstMessagePath + ".subject")).isEqualTo("my test subject"); + assertThat(JsonPath.parse(response).<String>read(firstMessagePath + ".textBody")).isEqualTo("testmail"); + assertThat(JsonPath.parse(response).<Boolean>read(firstMessagePath + ".isUnread")).isTrue(); + assertThat(JsonPath.parse(response).<String>read(firstMessagePath + ".preview")).isEqualTo("testmail"); + assertThat(JsonPath.parse(response).<Map<String, String>>read(firstMessagePath + ".headers")).containsExactly(MapEntry.entry("subject", "my test subject")); + assertThat(JsonPath.parse(response).<String>read(firstMessagePath + ".date")).isEqualTo("2014-10-30T14:12:00Z"); } } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org