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 17d98a0bc52cd1372911efdbb60bc973129e17f4
Author: Benoit Tellier <[email protected]>
AuthorDate: Mon Oct 26 14:24:47 2020 +0700

    JAMES-3436 Email/set create: Support keywords
---
 .../rfc8621/contract/EmailSetMethodContract.scala  | 64 +++++++++++++++++++++-
 .../org/apache/james/jmap/mail/EmailSet.scala      |  3 +-
 .../apache/james/jmap/method/EmailSetMethod.scala  |  1 +
 3 files changed, 66 insertions(+), 2 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/EmailSetMethodContract.scala
 
b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailSetMethodContract.scala
index 0e8595b..6992bb6 100644
--- 
a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailSetMethodContract.scala
+++ 
b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailSetMethodContract.scala
@@ -223,12 +223,74 @@ trait EmailSetMethodContract {
     assertThatJson(response)
       .whenIgnoringPaths("methodResponses[1][1].list[0].id")
       .inPath(s"methodResponses[1][1].list")
+      .isEqualTo(s"""[{
+          |  "mailboxIds": {
+          |    "${mailboxId.serialize}": true
+          |  },
+          |  "subject": "Boredome comes from a boring mind!"
+          |}]""".stripMargin)
+  }
+
+  @Test
+  def createShouldSupportKeywords(server: GuiceJamesServer): Unit = {
+    val bobPath = MailboxPath.inbox(BOB)
+    val mailboxId = 
server.getProbe(classOf[MailboxProbeImpl]).createMailbox(bobPath)
+
+    val request = s"""{
+         |  "using": ["urn:ietf:params:jmap:core", 
"urn:ietf:params:jmap:mail"],
+         |  "methodCalls": [
+         |    ["Email/set", {
+         |      "accountId": "$ACCOUNT_ID",
+         |      "create": {
+         |        "aaaaaa":{
+         |          "mailboxIds": {
+         |             "${mailboxId.serialize}": true
+         |          },
+         |          "keywords": {
+         |            "$$answered": true,
+         |            "music": true
+         |          }
+         |        }
+         |      }
+         |    }, "c1"],
+         |    ["Email/get",
+         |     {
+         |       "accountId": "$ACCOUNT_ID",
+         |       "ids": ["#aaaaaa"],
+         |       "properties": ["mailboxIds", "keywords"]
+         |     },
+         |     "c2"]]
+         |}""".stripMargin
+
+    val response = `given`
+      .header(ACCEPT.toString, ACCEPT_RFC8621_VERSION_HEADER)
+      .body(request)
+    .when
+      .post
+    .`then`
+      .statusCode(SC_OK)
+      .contentType(JSON)
+      .extract
+      .body
+      .asString
+
+    assertThatJson(response)
+      .whenIgnoringPaths("methodResponses[0][1].created.aaaaaa.id")
+      .inPath("methodResponses[0][1].created.aaaaaa")
+      .isEqualTo("{}".stripMargin)
+
+    assertThatJson(response)
+      .whenIgnoringPaths("methodResponses[1][1].list[0].id")
+      .inPath(s"methodResponses[1][1].list")
       .isEqualTo(
         s"""[{
           |  "mailboxIds": {
           |    "${mailboxId.serialize}": true
           |  },
-          |  "subject": "Boredome comes from a boring mind!"
+          |  "keywords": {
+          |    "$$answered": true,
+          |    "music": true
+          |  }
           |}]""".stripMargin)
   }
 
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailSet.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailSet.scala
index 5985147..baedcf7 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailSet.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailSet.scala
@@ -49,7 +49,8 @@ object EmailSet {
 }
 
 case class EmailCreationRequest(mailboxIds: MailboxIds,
-                                subject: Option[Subject]) {
+                                subject: Option[Subject],
+                                keywords: Option[Keywords]) {
   def toMime4JMessage: Message = {
     val builder = Message.Builder.of
     subject.foreach(value => builder.setSubject(value.value))
diff --git 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetMethod.scala
 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetMethod.scala
index e95abb9..759cd30 100644
--- 
a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetMethod.scala
+++ 
b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetMethod.scala
@@ -231,6 +231,7 @@ class EmailSetMethod @Inject()(serializer: 
EmailSetSerializer,
         val appendResult = mailboxManager.getMailbox(mailboxId, mailboxSession)
           .appendMessage(AppendCommand.builder()
             .recent()
+            .withFlags(request.keywords.map(_.asFlags).getOrElse(new Flags()))
             .build(request.toMime4JMessage),
             mailboxSession)
         CreationSuccess(clientId, 
EmailCreationResponse(appendResult.getId.getMessageId))


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

Reply via email to