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 f825b20e0890883fd2b6b966eb65214ac120582d
Author: Benoit Tellier <[email protected]>
AuthorDate: Thu Aug 20 09:15:03 2020 +0700

    JAMES-3357 Mailbox/set creation should not return isSubscribed when 
specified
---
 .../contract/MailboxSetMethodContract.scala        | 75 ++++++++++++++++++++++
 .../org/apache/james/jmap/mail/MailboxSet.scala    |  4 +-
 .../james/jmap/method/MailboxSetMethod.scala       |  9 ++-
 3 files changed, 84 insertions(+), 4 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/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 b1d70b0..365cf35 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
@@ -311,6 +311,80 @@ trait MailboxSetMethodContract {
   }
 
   @Test
+  def createSHouldNotReturnSubscribeWhenSpecified(server: GuiceJamesServer): 
Unit = {
+    val request =
+      """
+        |{
+        |   "using": [ "urn:ietf:params:jmap:core", 
"urn:ietf:params:jmap:mail" ],
+        |   "methodCalls": [
+        |       [
+        |           "Mailbox/set",
+        |           {
+        |                "accountId": 
"29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+        |                "create": {
+        |                    "C42": {
+        |                      "name": "myMailbox",
+        |                      "isSubscribed": true
+        |                    }
+        |                }
+        |           },
+        |    "c1"
+        |       ]
+        |   ]
+        |}
+        |""".stripMargin
+
+    val response = `given`
+      .header(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER)
+      .body(request)
+    .when
+      .post
+    .`then`
+      .log().ifValidationFails()
+      .statusCode(SC_OK)
+      .contentType(JSON)
+      .extract
+      .body
+      .asString
+
+    val mailboxId: String = server.getProbe(classOf[MailboxProbeImpl])
+      .getMailboxId("#private", BOB.asString(), "myMailbox")
+      .serialize()
+
+    assertThatJson(response).isEqualTo(
+      s"""{
+         |     "sessionState": "75128aab4b1b",
+         |     "methodResponses": [
+         |             ["Mailbox/set", {
+         |                     "accountId": 
"29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+         |                     "newState": "000001",
+         |                     "created": {
+         |                             "C42": {
+         |                                     "id": "${mailboxId}",
+         |          "sortOrder":1000,
+         |                                     "totalEmails": 0,
+         |                                     "unreadEmails": 0,
+         |                                     "totalThreads": 0,
+         |                                     "unreadThreads": 0,
+         |                                     "myRights": {
+         |                                             "mayReadItems": true,
+         |                                             "mayAddItems": true,
+         |                                             "mayRemoveItems": true,
+         |                                             "maySetSeen": true,
+         |                                             "maySetKeywords": true,
+         |                                             "mayCreateChild": true,
+         |                                             "mayRename": true,
+         |                                             "mayDelete": true,
+         |                                             "maySubmit": true
+         |                                     }
+         |                             }
+         |                     }
+         |             }, "c1"]
+         |     ]
+         |}""".stripMargin)
+  }
+
+  @Test
   def mailboxSetShouldNotSubscribeMailboxWhenRequired(server: 
GuiceJamesServer): Unit = {
     val request =
       """
@@ -961,6 +1035,7 @@ trait MailboxSetMethodContract {
          |      "created": {
          |        "C42": {
          |          "id": "$mailboxId",
+         |          "sortOrder":1000,
          |          "isSubscribed":true,
          |          
"myRights":{"mayAddItems":true,"mayCreateChild":true,"mayDelete":true,"mayReadItems":true,"mayRemoveItems":true,"mayRename":true,"maySetKeywords":true,"maySetSeen":true,"maySubmit":true},
          |          "totalEmails":0,
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxSet.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxSet.scala
index 4ae37ae..311182d 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxSet.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxSet.scala
@@ -112,7 +112,7 @@ case class MailboxSetError(`type`: SetErrorType, 
description: Option[SetErrorDes
 
 
 object MailboxCreationResponse {
-  def allProperties: Set[String] = Set("id", "role", "totalEmails", 
"unreadEmails",
+  def allProperties: Set[String] = Set("id", "sortOrder", "role", 
"totalEmails", "unreadEmails",
     "totalThreads", "unreadThreads", "myRights", "isSubscribed", "quotas")
 
   def propertiesFiltered(allowedCapabilities : Set[CapabilityIdentifier]) : 
Set[String] = {
@@ -136,7 +136,7 @@ case class MailboxCreationResponse(id: MailboxId,
                                    unreadThreads: UnreadThreads,
                                    myRights: MailboxRights,
                                    quotas: Option[Quotas],
-                                   isSubscribed: IsSubscribed)
+                                   isSubscribed: Option[IsSubscribed])
 
 object MailboxSetResponse {
   def empty: MailboxUpdateResponse = 
MailboxUpdateResponse(JsObject(Map[String, JsValue]()))
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala
index fd76d3d..90937ee 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala
@@ -331,7 +331,8 @@ class MailboxSetMethod @Inject()(serializer: Serializer,
       //can safely do a get as the Optional is empty only if the mailbox name 
is empty which is forbidden by the type constraint on MailboxName
       val mailboxId = mailboxManager.createMailbox(path, mailboxSession).get()
 
-      if 
(mailboxCreationRequest.isSubscribed.getOrElse(IsSubscribed(true)).value) {
+      val defaultSubscribed = IsSubscribed(true)
+      if 
(mailboxCreationRequest.isSubscribed.getOrElse(defaultSubscribed).value) {
         subscriptionManager.subscribe(mailboxSession, path.getName)
       }
 
@@ -352,7 +353,11 @@ class MailboxSetMethod @Inject()(serializer: Serializer,
         unreadThreads = UnreadThreads(0L),
         myRights = MailboxRights.FULL,
         quotas = Some(quotas),
-        isSubscribed = IsSubscribed(true)))
+        isSubscribed =  if (mailboxCreationRequest.isSubscribed.isEmpty) {
+          Some(defaultSubscribed)
+        } else {
+          None
+        }))
     } catch {
       case error: Exception => Left(error)
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to