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/11/04 02:17:01 UTC
[james-project] 09/09: JAMES-3368 Follow the specification for
default Email/get properties
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 9d16f687cea0924d1cc3e6b96e695031060dc966
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Nov 3 17:11:48 2020 +0700
JAMES-3368 Follow the specification for default Email/get properties
---
.../rfc8621/contract/EmailGetMethodContract.scala | 135 ++++++++++++++++++++-
.../scala/org/apache/james/jmap/mail/Email.scala | 5 +-
2 files changed, 134 insertions(+), 6 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/EmailGetMethodContract.scala b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailGetMethodContract.scala
index 01ae19e..20a1800 100644
--- a/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailGetMethodContract.scala
+++ b/server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailGetMethodContract.scala
@@ -297,7 +297,8 @@ trait EmailGetMethodContract {
| "Email/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "ids": ["${messageId.serialize}"]
+ | "ids": ["${messageId.serialize}"],
+ | "properties": ["id", "size"]
| },
| "c1"]]
|}""".stripMargin
@@ -2263,7 +2264,8 @@ trait EmailGetMethodContract {
| "Email/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "ids": ["${messageId.serialize}", "invalid", "${nonExistingMessageId.serialize}"]
+ | "ids": ["${messageId.serialize}", "invalid", "${nonExistingMessageId.serialize}"],
+ | "properties": ["id", "size"]
| },
| "c1"]]
|}""".stripMargin
@@ -2324,7 +2326,8 @@ trait EmailGetMethodContract {
| "Email/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "ids": ["${messageId1.serialize()}", "${messageId2.serialize()}"]
+ | "ids": ["${messageId1.serialize()}", "${messageId2.serialize()}"],
+ | "properties": ["id", "size"]
| },
| "c1"]]
|}""".stripMargin
@@ -2366,6 +2369,126 @@ trait EmailGetMethodContract {
}
@Test
+ def useDefaultPropertiesWhenNone(server: GuiceJamesServer): Unit = {
+ val path = MailboxPath.inbox(BOB)
+ val mailboxId = server.getProbe(classOf[MailboxProbeImpl]).createMailbox(path)
+ val messageId: MessageId = server.getProbe(classOf[MailboxProbeImpl])
+ .appendMessage(BOB.asString, path, AppendCommand.builder()
+ .withInternalDate(Date.from(ZonedDateTime.parse("2014-10-30T14:12:00Z").toInstant))
+ .build(ClassLoader.getSystemResourceAsStream("eml/multipart_simple.eml")))
+ .getMessageId
+
+ val request =
+ s"""{
+ | "using": [
+ | "urn:ietf:params:jmap:core",
+ | "urn:ietf:params:jmap:mail"],
+ | "methodCalls": [[
+ | "Email/get",
+ | {
+ | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "ids": ["${messageId.serialize}"]
+ | },
+ | "c1"]]
+ |}""".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).isEqualTo(
+ s"""{
+ | "sessionState": "75128aab4b1b",
+ | "methodResponses": [
+ | [
+ | "Email/get",
+ | {
+ | "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
+ | "state": "000001",
+ | "list": [
+ | {
+ | "threadId": "${messageId.serialize}",
+ | "size": 2695,
+ | "keywords": {},
+ | "blobId": "1",
+ | "mailboxIds": {"${mailboxId.serialize}": true},
+ | "id": "${messageId.serialize}",
+ | "receivedAt": "2014-10-30T14:12:00Z",
+ | "references": null,
+ | "subject": "MultiAttachment",
+ | "inReplyTo": null,
+ | "messageId": ["13d4375e-a4a9-f613-06a1-7e8cb1e0ea93@linagora.com"],
+ | "from": [{"name": "Lina","email": "from@linagora.com"}],
+ | "sentAt": "2017-02-27T04:24:48Z",
+ | "to": [{"email": "to@linagora.com"}],
+ | "textBody": [
+ | {
+ | "partId": "2",
+ | "blobId": "${messageId.serialize}_2",
+ | "size": 8,
+ | "type": "text/plain",
+ | "charset": "utf-8"
+ | }
+ | ],
+ | "attachments": [
+ | {
+ | "partId": "3",
+ | "blobId": "${messageId.serialize}_3",
+ | "size": 271,
+ | "name": "text1",
+ | "type": "text/plain",
+ | "charset": "UTF-8",
+ | "disposition": "attachment"
+ | },
+ | {
+ | "partId": "4",
+ | "blobId": "${messageId.serialize}_4",
+ | "size": 398,
+ | "name": "text2",
+ | "type": "application/vnd.ms-publisher",
+ | "charset": "us-ascii",
+ | "disposition": "attachment"
+ | },
+ | {
+ | "partId": "5",
+ | "blobId": "${messageId.serialize}_5",
+ | "size": 412,
+ | "name": "text3",
+ | "type": "text/plain",
+ | "charset": "UTF-8",
+ | "disposition": "attachment"
+ | }
+ | ],
+ | "htmlBody": [
+ | {
+ | "partId": "2",
+ | "blobId": "${messageId.serialize}_2",
+ | "size": 8,
+ | "type": "text/plain",
+ | "charset": "utf-8"
+ | }
+ | ],
+ | "bodyValues": {},
+ | "preview": "Send",
+ | "hasAttachment": true
+ | }
+ | ],
+ | "notFound": []
+ | },
+ | "c1"
+ | ]
+ | ]
+ |}""".stripMargin)
+ }
+
+ @Test
def requestingTheSameIdTwiceReturnsItOnce(server: GuiceJamesServer): Unit = {
val message: Message = Message.Builder
.of
@@ -2386,7 +2509,8 @@ trait EmailGetMethodContract {
| "Email/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "ids": ["${messageId.serialize}", "${messageId.serialize}"]
+ | "ids": ["${messageId.serialize}", "${messageId.serialize}"],
+ | "properties": ["id", "size"]
| },
| "c1"]]
|}""".stripMargin
@@ -2766,7 +2890,8 @@ trait EmailGetMethodContract {
| "Email/get",
| {
| "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
- | "ids": ["${messageId.serialize}"]
+ | "ids": ["${messageId.serialize}"],
+ | "properties": ["id", "size"]
| },
| "c1"]]
|}""".stripMargin
diff --git a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Email.scala b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Email.scala
index e978537..534b1ec 100644
--- a/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Email.scala
+++ b/server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Email.scala
@@ -63,7 +63,10 @@ object Email {
type UnparsedEmailIdConstraint = NonEmpty
type UnparsedEmailId = String Refined UnparsedEmailIdConstraint
- val defaultProperties: Properties = Properties("id", "size")
+ val defaultProperties: Properties = Properties("id", "blobId", "threadId", "mailboxIds", "keywords", "size",
+ "receivedAt", "messageId", "inReplyTo", "references", "sender", "from",
+ "to", "cc", "bcc", "replyTo", "subject", "sentAt", "hasAttachment",
+ "preview", "bodyValues", "textBody", "htmlBody", "attachments")
val allowedProperties: Properties = Properties("id", "size", "bodyStructure", "textBody", "htmlBody",
"attachments", "headers", "bodyValues", "messageId", "inReplyTo", "references", "to", "cc", "bcc",
"from", "sender", "replyTo", "subject", "sentAt", "mailboxIds", "blobId", "threadId", "receivedAt",
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org