You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2020/12/18 07:27:33 UTC
[james-project] 05/13: JAMES-3463 Mailbox/get should read last
state from MailboxChangesRepository
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 11bfe3e0b883cfc77d503f1cfe9d71d8cf163df6
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Dec 15 12:38:35 2020 +0700
JAMES-3463 Mailbox/get should read last state from MailboxChangesRepository
---
.../rfc8621/contract/BackReferenceContract.scala | 25 ++--
.../contract/MailboxGetMethodContract.scala | 115 +++++++++++++----
.../contract/MailboxSetMethodContract.scala | 143 +++++++++++++--------
.../james/jmap/method/MailboxGetMethod.scala | 12 +-
4 files changed, 201 insertions(+), 94 deletions(-)
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/BackReferenceContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/BackReferenceContract.scala
index 27cc525..535bfd1 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/BackReferenceContract.scala
+++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/BackReferenceContract.scala
@@ -89,7 +89,9 @@ trait BackReferenceContract {
.body()
.asString()
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state", "methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -114,7 +116,6 @@ trait BackReferenceContract {
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {"id": "1"},
| {"id": "5"},
@@ -168,7 +169,9 @@ trait BackReferenceContract {
.body()
.asString()
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -176,7 +179,6 @@ trait BackReferenceContract {
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {"id": "1"},
| {"id": "5"},
@@ -238,7 +240,9 @@ trait BackReferenceContract {
.body()
.asString()
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -246,7 +250,6 @@ trait BackReferenceContract {
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {"id": "1"},
| {"id": "5"},
@@ -308,7 +311,9 @@ trait BackReferenceContract {
.body()
.asString()
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -316,7 +321,6 @@ trait BackReferenceContract {
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {"id": "1"},
| {"id": "5"},
@@ -378,7 +382,9 @@ trait BackReferenceContract {
.body()
.asString()
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -386,7 +392,6 @@ trait BackReferenceContract {
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {"id": "1"},
| {"id": "5"},
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxGetMethodContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxGetMethodContract.scala
index 82f18c4..dce8b7d 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxGetMethodContract.scala
+++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxGetMethodContract.scala
@@ -27,6 +27,8 @@ import io.restassured.RestAssured._
import io.restassured.http.ContentType.JSON
import javax.mail.Flags
import net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson
+import net.javacrumbs.jsonunit.core.Option
+import net.javacrumbs.jsonunit.core.internal.Options
import org.apache.http.HttpStatus.SC_OK
import org.apache.james.GuiceJamesServer
import org.apache.james.core.quota.{QuotaCountLimit, QuotaSizeLimit}
@@ -146,14 +148,15 @@ trait MailboxGetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [[
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {
| "id": "${mailboxId}",
@@ -215,14 +218,15 @@ trait MailboxGetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [[
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {
| "id": "${mailboxId}",
@@ -289,14 +293,15 @@ trait MailboxGetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [[
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {
| "id": "${mailboxId}",
@@ -364,14 +369,15 @@ trait MailboxGetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [[
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {
| "id": "${mailboxId}",
@@ -431,14 +437,15 @@ trait MailboxGetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [[
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {
| "id": "${mailboxId}"
@@ -480,14 +487,15 @@ trait MailboxGetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [[
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {
| "id": "${mailboxId}",
@@ -530,14 +538,15 @@ trait MailboxGetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [[
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {
| "id": "${mailboxId}",
@@ -581,14 +590,15 @@ trait MailboxGetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [[
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {
| "id": "${mailboxId}",
@@ -627,14 +637,15 @@ trait MailboxGetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [[
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [],
| "notFound": ["invalid"]
| },
@@ -667,14 +678,15 @@ trait MailboxGetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [[
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [],
| "notFound": ["#C42"]
| },
@@ -1208,14 +1220,15 @@ trait MailboxGetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [[
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {
| "id": "${mailboxId}",
@@ -1282,14 +1295,15 @@ trait MailboxGetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [[
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [
| {
| "id": "${mailboxId}",
@@ -1525,4 +1539,57 @@ trait MailboxGetMethodContract {
| "c1"]]
|}""".stripMargin)
}
+
+ @Test
+ def mailboxStateShouldBeTheLatestOne(server: GuiceJamesServer): Unit = {
+ val mailboxProbe: MailboxProbeImpl = server.getProbe(classOf[MailboxProbeImpl])
+ mailboxProbe.createMailbox(MailboxPath.inbox(BOB))
+
+ val response = `given`
+ .header(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER)
+ .body(
+ s"""{
+ | "using": ["urn:ietf:params:jmap:core", "urn:ietf:params:jmap:mail"],
+ | "methodCalls": [[
+ | "Mailbox/get",
+ | {
+ | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "ids": null,
+ | "properties": ["id"]
+ | },
+ | "c1"],[
+ | "Mailbox/changes",
+ | {
+ | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "#sinceState": {
+ | "resultOf":"c1",
+ | "name":"Mailbox/get",
+ | "path":"state"
+ | }
+ | },
+ | "c2"]]
+ |}""".stripMargin)
+ .when
+ .post
+ .`then`
+ .statusCode(SC_OK)
+ .extract()
+ .body()
+ .asString()
+
+ // No changes as Mailbox/get state property is the latest one
+ assertThatJson(response)
+ .withOptions(new Options(Option.IGNORING_ARRAY_ORDER))
+ .whenIgnoringPaths("methodResponses[1][1].oldState", "methodResponses[1][1].newState")
+ .inPath("methodResponses[1][1]")
+ .isEqualTo(
+ s"""{
+ | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "hasMoreChanges": false,
+ | "updatedProperties": [],
+ | "created": [],
+ | "updated": [],
+ | "destroyed": []
+ |}""".stripMargin)
+ }
}
diff --git a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxSetMethodContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxSetMethodContract.scala
index 7b1a213..2d58022 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxSetMethodContract.scala
+++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxSetMethodContract.scala
@@ -1336,7 +1336,9 @@ trait MailboxSetMethodContract {
.getMailboxId("#private", BOB.asString(), "myMailbox")
.serialize
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -1543,7 +1545,9 @@ trait MailboxSetMethodContract {
.getMailboxId("#private", BOB.asString(), "myMailbox")
.serialize
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -2222,7 +2226,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -2299,6 +2305,7 @@ trait MailboxSetMethodContract {
.asString
assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
.withOptions(new Options(Option.IGNORING_ARRAY_ORDER))
.isEqualTo(
s"""{
@@ -2986,7 +2993,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -3717,7 +3726,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -3789,7 +3800,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -3802,7 +3815,6 @@ trait MailboxSetMethodContract {
| }, "c1"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${childId.serialize}",
| "name": "child",
@@ -3931,7 +3943,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[0][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -3939,13 +3953,8 @@ trait MailboxSetMethodContract {
| "Mailbox/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
- | "list": [
- |
- | ],
- | "notFound": [
- | "${mailboxId.serialize}"
- | ]
+ | "list": [],
+ | "notFound": ["${mailboxId.serialize}"]
| },
| "c1"
| ]
@@ -4114,7 +4123,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -4127,7 +4138,6 @@ trait MailboxSetMethodContract {
| }, "c2"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "isSubscribed": true
@@ -4191,7 +4201,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[2][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -4211,7 +4223,6 @@ trait MailboxSetMethodContract {
| }, "c3"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "isSubscribed": false
@@ -4265,7 +4276,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -4278,7 +4291,6 @@ trait MailboxSetMethodContract {
| }, "c3"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "isSubscribed": true
@@ -4337,7 +4349,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -4350,7 +4364,6 @@ trait MailboxSetMethodContract {
| }, "c3"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "isSubscribed": true,
@@ -4419,7 +4432,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[2][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -4439,7 +4454,6 @@ trait MailboxSetMethodContract {
| }, "c3"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "isSubscribed": false,
@@ -4640,7 +4654,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[2][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -4660,7 +4676,6 @@ trait MailboxSetMethodContract {
| }, "c3"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "isSubscribed": false,
@@ -5041,7 +5056,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -5054,7 +5071,6 @@ trait MailboxSetMethodContract {
| }, "c1"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "rights": {
@@ -5122,7 +5138,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -5135,7 +5153,6 @@ trait MailboxSetMethodContract {
| }, "c1"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "rights": {
@@ -5201,7 +5218,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -5217,7 +5236,6 @@ trait MailboxSetMethodContract {
| }, "c1"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "namespace": "Delegated[andre@domain.tld]",
@@ -5405,7 +5423,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -5792,7 +5812,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -5805,7 +5827,6 @@ trait MailboxSetMethodContract {
| }, "c1"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "name": "mailbox",
@@ -6145,7 +6166,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -6158,7 +6181,6 @@ trait MailboxSetMethodContract {
| }, "c1"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "name": "mailbox",
@@ -6217,7 +6239,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -6230,7 +6254,6 @@ trait MailboxSetMethodContract {
| }, "c1"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "name": "newName",
@@ -6290,7 +6313,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -6303,7 +6328,6 @@ trait MailboxSetMethodContract {
| }, "c1"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "name": "newName",
@@ -6362,7 +6386,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -6375,7 +6401,6 @@ trait MailboxSetMethodContract {
| }, "c1"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "name": "mailbox"
@@ -6433,7 +6458,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -6446,7 +6473,6 @@ trait MailboxSetMethodContract {
| }, "c1"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "name": "newName"
@@ -6505,7 +6531,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -6518,7 +6546,6 @@ trait MailboxSetMethodContract {
| }, "c1"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "name": "newName"
@@ -6574,7 +6601,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -6587,7 +6616,6 @@ trait MailboxSetMethodContract {
| }, "c1"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "name": "mailbox"
@@ -6645,7 +6673,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -6658,7 +6688,6 @@ trait MailboxSetMethodContract {
| }, "c1"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "parentId": "${parentId.serialize}",
@@ -6731,7 +6760,9 @@ trait MailboxSetMethodContract {
.getMailboxId("#private", BOB.asString(), "parent")
.serialize
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[2][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -6770,7 +6801,6 @@ trait MailboxSetMethodContract {
| }, "c2"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${mailboxId.serialize}",
| "name": "mailbox",
@@ -7305,7 +7335,9 @@ trait MailboxSetMethodContract {
.body
.asString
- assertThatJson(response).isEqualTo(
+ assertThatJson(response)
+ .whenIgnoringPaths("methodResponses[1][1].state")
+ .isEqualTo(
s"""{
| "sessionState": "${SESSION_STATE.value}",
| "methodResponses": [
@@ -7318,7 +7350,6 @@ trait MailboxSetMethodContract {
| }, "c1"],
| ["Mailbox/get", {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "state": "${INSTANCE.value}",
| "list": [{
| "id": "${parentId.serialize}",
| "name": "parent",
diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
index 85a8c6e..9f2b735 100644
--- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
+++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
@@ -21,10 +21,12 @@ package org.apache.james.jmap.method
import eu.timepit.refined.auto._
import javax.inject.Inject
+import org.apache.james.jmap.api.change.MailboxChangeRepository
+import org.apache.james.jmap.api.model.{AccountId => JavaAccountId}
import org.apache.james.jmap.core.CapabilityIdentifier.{CapabilityIdentifier, JMAP_CORE, JMAP_MAIL}
import org.apache.james.jmap.core.Invocation.{Arguments, MethodName}
import org.apache.james.jmap.core.State.INSTANCE
-import org.apache.james.jmap.core.{AccountId, CapabilityIdentifier, ErrorCode, Invocation, Properties}
+import org.apache.james.jmap.core.{AccountId, CapabilityIdentifier, ErrorCode, Invocation, Properties, State}
import org.apache.james.jmap.http.MailboxesProvisioner
import org.apache.james.jmap.json.{MailboxSerializer, ResponseSerializer}
import org.apache.james.jmap.mail.MailboxGet.UnparsedMailboxId
@@ -54,9 +56,9 @@ object MailboxGetResults {
case class MailboxGetResults(mailboxes: Set[Mailbox], notFound: NotFound) {
def merge(other: MailboxGetResults): MailboxGetResults = MailboxGetResults(this.mailboxes ++ other.mailboxes, this.notFound.merge(other.notFound))
- def asResponse(accountId: AccountId): MailboxGetResponse = MailboxGetResponse(
+ def asResponse(accountId: AccountId, state: State): MailboxGetResponse = MailboxGetResponse(
accountId = accountId,
- state = INSTANCE,
+ state = state,
list = mailboxes.toList.sortBy(_.sortOrder),
notFound = notFound)
}
@@ -68,6 +70,7 @@ class MailboxGetMethod @Inject() (serializer: MailboxSerializer,
mailboxIdFactory: MailboxId.Factory,
mailboxFactory: MailboxFactory,
provisioner: MailboxesProvisioner,
+ mailboxChangeRepository: MailboxChangeRepository,
val metricFactory: MetricFactory,
val sessionSupplier: SessionSupplier) extends MethodRequiringAccountId[MailboxGetRequest] {
override val methodName: MethodName = MethodName("Mailbox/get")
@@ -78,7 +81,8 @@ class MailboxGetMethod @Inject() (serializer: MailboxSerializer,
(requestedProperties -- Mailbox.allProperties match {
case invalidProperties if invalidProperties.isEmpty() => getMailboxes(capabilities, request, mailboxSession)
.reduce(MailboxGetResults.empty(), MailboxGetResults.merge)
- .map(mailboxes => mailboxes.asResponse(request.accountId))
+ .flatMap(mailboxes => SMono(mailboxChangeRepository.getLatestState(JavaAccountId.fromUsername(mailboxSession.getUser)))
+ .map(state => mailboxes.asResponse(request.accountId, State.fromJava(state))))
.map(mailboxGetResponse => Invocation(
methodName = methodName,
arguments = Arguments(serializer.serialize(mailboxGetResponse, requestedProperties, capabilities).as[JsObject]),
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org