Repository: james-project Updated Branches: refs/heads/master d0ba1776d -> 76664e4a7
MAILBOX-290 Should be normal attachment in case of inline but no cid Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/76664e4a Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/76664e4a Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/76664e4a Branch: refs/heads/master Commit: 76664e4a73d0bf15c2bbcbddcb19dc130fbbad31 Parents: d0ba177 Author: Quynh Nguyen <qngu...@linagora.com> Authored: Wed Mar 22 13:46:41 2017 +0700 Committer: Quynh Nguyen <qngu...@linagora.com> Committed: Fri Mar 24 16:16:16 2017 +0700 ---------------------------------------------------------------------- .../james/mailbox/model/MessageAttachment.java | 18 +++-- .../mailbox/model/MessageAttachmentTest.java | 63 +++++++++++++---- .../cassandra/mail/CassandraMessageDAO.java | 3 - ...MessageAttachmentRepresentationByIdTest.java | 9 ++- .../mailbox/store/StoreMessageManager.java | 15 ++-- .../mail/model/impl/MessageParserTest.java | 4 +- .../integration/SetMessagesMethodTest.java | 12 +++- .../cucumber/GetMessagesMethodStepdefs.java | 5 ++ .../test/resources/cucumber/GetMessages.feature | 15 +++- ...mbeddedMultipartWithInlineTextAttachment.eml | 1 + .../eml/mailWithInlinedAttachmentButNoCid.eml | 72 ++++++++++++++++++++ .../org/apache/james/jmap/model/Attachment.java | 4 ++ .../org/apache/james/jmap/model/Message.java | 2 +- .../apache/james/jmap/model/AttachmentTest.java | 37 ++++++++++ .../apache/james/jmap/model/MessageTest.java | 4 ++ 15 files changed, 221 insertions(+), 43 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageAttachment.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageAttachment.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageAttachment.java index f2a68cd..770efc7 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageAttachment.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageAttachment.java @@ -35,7 +35,7 @@ public class MessageAttachment { private Attachment attachment; private Optional<String> name; private Optional<Cid> cid; - private Boolean isInline; + private Optional<Boolean> isInline = Optional.absent(); private Builder() { name = Optional.absent(); @@ -65,20 +65,14 @@ public class MessageAttachment { return this; } - public Builder isInline(boolean isInline) { - this.isInline = isInline; + public Builder isInline(Boolean isInline) { + this.isInline = Optional.fromNullable(isInline); return this; } public MessageAttachment build() { Preconditions.checkState(attachment != null, "'attachment' is mandatory"); - if (isInline == null) { - isInline = false; - } - if (isInline && !cid.isPresent()) { - throw new IllegalStateException("'cid' is mandatory for inline attachments"); - } - return new MessageAttachment(attachment, name, cid, isInline); + return new MessageAttachment(attachment, name, cid, isInline.or(false)); } } @@ -114,6 +108,10 @@ public class MessageAttachment { return isInline; } + public boolean isInlinedWithCid() { + return isInline && cid.isPresent(); + } + @Override public boolean equals(Object obj) { if (obj instanceof MessageAttachment) { http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageAttachmentTest.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageAttachmentTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageAttachmentTest.java index 1fbe0ca..949a926 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageAttachmentTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageAttachmentTest.java @@ -21,9 +21,6 @@ package org.apache.james.mailbox.model; import static org.assertj.core.api.Assertions.assertThat; -import org.apache.james.mailbox.model.Attachment; -import org.apache.james.mailbox.model.Cid; -import org.apache.james.mailbox.model.MessageAttachment; import org.junit.Test; import com.google.common.base.Optional; @@ -58,7 +55,7 @@ public class MessageAttachmentTest { } @Test - public void buildShouldSetIsInlineDefaultValueWhenNotGiven() { + public void buildShouldAcceptIsInlineAndNoCid() { Attachment attachment = Attachment.builder() .bytes("content".getBytes()) .type("type") @@ -66,31 +63,36 @@ public class MessageAttachmentTest { MessageAttachment messageAttachment = MessageAttachment.builder() .attachment(attachment) + .isInline(true) .build(); - assertThat(messageAttachment.isInline()).isFalse(); + assertThat(messageAttachment.isInline()).isTrue(); } - @Test(expected=IllegalStateException.class) - public void buildShouldThrowWhenIsInlineAndNoCid() { + @Test + public void buildShouldSetAttributesWhenAllAreGiven() { Attachment attachment = Attachment.builder() .bytes("content".getBytes()) .type("type") .build(); + MessageAttachment expectedMessageAttachment = new MessageAttachment(attachment, Optional.of("name"), Optional.of(Cid.from("cid")), true); - MessageAttachment.builder() + MessageAttachment messageAttachment = MessageAttachment.builder() .attachment(attachment) + .name("name") + .cid(Cid.from("cid")) .isInline(true) .build(); + + assertThat(messageAttachment).isEqualTo(expectedMessageAttachment); } @Test - public void buildShouldSetAttributesWhenAllAreGiven() { + public void isInlinedWithCidShouldReturnTrueWhenIsInlineAndHasCid() throws Exception { Attachment attachment = Attachment.builder() - .bytes("content".getBytes()) - .type("type") - .build(); - MessageAttachment expectedMessageAttachment = new MessageAttachment(attachment, Optional.of("name"), Optional.of(Cid.from("cid")), true); + .bytes("content".getBytes()) + .type("type") + .build(); MessageAttachment messageAttachment = MessageAttachment.builder() .attachment(attachment) @@ -99,6 +101,39 @@ public class MessageAttachmentTest { .isInline(true) .build(); - assertThat(messageAttachment).isEqualTo(expectedMessageAttachment); + assertThat(messageAttachment.isInlinedWithCid()).isTrue(); + } + + @Test + public void isInlinedWithCidShouldReturnFalseWhenIsNotInline() throws Exception { + Attachment attachment = Attachment.builder() + .bytes("content".getBytes()) + .type("type") + .build(); + + MessageAttachment messageAttachment = MessageAttachment.builder() + .attachment(attachment) + .name("name") + .cid(Cid.from("cid")) + .isInline(false) + .build(); + + assertThat(messageAttachment.isInlinedWithCid()).isFalse(); + } + + @Test + public void isInlinedWithCidShouldReturnFalseWhenIsInlineButNoCid() throws Exception { + Attachment attachment = Attachment.builder() + .bytes("content".getBytes()) + .type("type") + .build(); + + MessageAttachment messageAttachment = MessageAttachment.builder() + .attachment(attachment) + .name("name") + .isInline(true) + .build(); + + assertThat(messageAttachment.isInlinedWithCid()).isFalse(); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java index 990d53d..3b39fac 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java @@ -381,9 +381,6 @@ public class CassandraMessageDAO { public MessageAttachmentRepresentation build() { Preconditions.checkState(attachmentId != null, "'attachmentId' is mandatory"); boolean builtIsInLine = isInline.orElse(false); - if (builtIsInLine && !cid.isPresent()) { - throw new IllegalStateException("'cid' is mandatory for inline attachments"); - } return new MessageAttachmentRepresentation(attachmentId, name, cid, builtIsInLine); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentationByIdTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentationByIdTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentationByIdTest.java index 0f8fba6..1ae585a 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentationByIdTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentationByIdTest.java @@ -65,14 +65,17 @@ public class MessageAttachmentRepresentationByIdTest { assertThat(messageAttachmentRepresentation.isInline()).isFalse(); } - @Test(expected=IllegalStateException.class) - public void buildShouldThrowWhenIsInlineAndNoCid() { + @Test + public void buildShouldAcceptInlineAndWithoutCid() { AttachmentId attachmentId = AttachmentId.from("1"); + CassandraMessageDAO.MessageAttachmentRepresentation expectedMessageAttachmentRepresentation = new CassandraMessageDAO.MessageAttachmentRepresentation(attachmentId, Optional.empty(), Optional.empty(), true); - CassandraMessageDAO.MessageAttachmentRepresentation.builder() + CassandraMessageDAO.MessageAttachmentRepresentation messageAttachmentRepresentation = CassandraMessageDAO.MessageAttachmentRepresentation.builder() .attachmentId(attachmentId) .isInline(true) .build(); + + assertThat(messageAttachmentRepresentation).isEqualTo(expectedMessageAttachmentRepresentation); } @Test http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java index 1fb527b..919b59b 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java @@ -138,6 +138,14 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana private static final Logger LOG = LoggerFactory.getLogger(StoreMessageManager.class); + private static final Predicate<MessageAttachment> NOT_INLINE_ATTACHMENT() { + return new Predicate<MessageAttachment>() { + @Override + public boolean apply(MessageAttachment input) { + return !input.isInlinedWithCid(); + } + }; + } private final Mailbox mailbox; @@ -453,12 +461,7 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana } private boolean hasNonInlinedAttachment(List<MessageAttachment> attachments) { - return FluentIterable.from(attachments).anyMatch(new Predicate<MessageAttachment>() { - @Override - public boolean apply(MessageAttachment input) { - return !input.isInline(); - } - }); + return FluentIterable.from(attachments).anyMatch(NOT_INLINE_ATTACHMENT()); } private List<MessageAttachment> extractAttachments(SharedFileInputStream contentIn) { http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java index 0ac16f8..d7825d7 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java @@ -200,10 +200,10 @@ public class MessageParserTest { } @Test - public void getAttachmentsShouldRetrieveAttachmentsWhenOneFailBecauseOfNonCIDForInlined() throws Exception { + public void getAttachmentsShouldRetrieveAttachmentsWhenNoCidForInlined() throws Exception { List<MessageAttachment> attachments = testee.retrieveAttachments(ClassLoader.getSystemResourceAsStream("eml/multiAttachmentsWithOneWrongInlinedAttachment.eml")); - assertThat(attachments).hasSize(1); + assertThat(attachments).hasSize(2); } @Test http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java index 8b6255e..f372583 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java @@ -3144,7 +3144,7 @@ public abstract class SetMessagesMethodTest { } @Test - public void setMessagesShouldReturnAttachmentsWhenMessageHasWrongInlinedAttachment() throws Exception { + public void setMessagesShouldReturnAttachmentsWhenMessageHasInlinedAttachmentButNoCid() throws Exception { Attachment attachment = Attachment.builder() .bytes("attachment".getBytes(Charsets.UTF_8)) .type("application/octet-stream") @@ -3186,6 +3186,7 @@ public abstract class SetMessagesMethodTest { String createdPath = ARGUMENTS + ".created[\""+messageCreationId+"\"]"; String firstAttachment = createdPath + ".attachments[0]"; + String secondAttachment = createdPath + ".attachments[1]"; given() .header("Authorization", accessToken.serialize()) @@ -3197,11 +3198,16 @@ public abstract class SetMessagesMethodTest { .body(NAME, equalTo("messagesSet")) .body(ARGUMENTS + ".notCreated", aMapWithSize(0)) .body(ARGUMENTS + ".created", aMapWithSize(1)) - .body(createdPath + ".attachments", hasSize(1)) + .body(createdPath + ".attachments", hasSize(2)) .body(firstAttachment + ".blobId", equalTo(attachment.getAttachmentId().getId())) .body(firstAttachment + ".type", equalTo("application/octet-stream; charset=UTF-8")) .body(firstAttachment + ".size", equalTo((int) attachment.getSize())) .body(firstAttachment + ".cid", nullValue()) - .body(firstAttachment + ".isInline", equalTo(false)); + .body(firstAttachment + ".isInline", equalTo(false)) + .body(secondAttachment + ".blobId", equalTo(attachment2.getAttachmentId().getId())) + .body(secondAttachment + ".type", equalTo("application/octet-stream; charset=UTF-8")) + .body(secondAttachment + ".size", equalTo((int) attachment2.getSize())) + .body(secondAttachment + ".cid", nullValue()) + .body(secondAttachment + ".isInline", equalTo(true)); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java index 070b219..620328e 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java @@ -208,6 +208,11 @@ public class GetMessagesMethodStepdefs { appendMessage(messageName, "eml/noTextBodyButHtmlBody.eml"); } + @Given("^the user has a message \"([^\"]*)\" in \"([^\"]*)\" mailbox with inline attachment but no CID$") + public void appendMessageWithInlineAttachmentButNoCid(String messageName, String mailbox) throws Throwable { + appendMessage(messageName, "eml/mailWithInlinedAttachmentButNoCid.eml"); + } + private void appendMessage(String messageName, String emlFileName) throws Exception { ZonedDateTime dateTime = ZonedDateTime.parse("2014-10-30T14:12:00Z"); MessageId id = mainStepdefs.jmapServer.getProbe(MailboxProbeImpl.class).appendMessage(userStepdefs.lastConnectedUser, http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature index c8d1050..7a27e6d 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/cucumber/GetMessages.feature @@ -247,4 +247,17 @@ Feature: GetMessages method Then no error is returned And the list should contain 1 message And the textBody of the message is "The Test User created an issue" - And the htmlBody of the message is "<a>The Test User</a> <strong>created</strong> an issue" \ No newline at end of file + And the htmlBody of the message is "<a>The Test User</a> <strong>created</strong> an issue" + + Scenario: Retrieving message with inline attachment but no CID should convert that inlined attachment to normal attachment + Given the user has a message "m1" in "INBOX" mailbox with inline attachment but no CID + When the user ask for messages "m1" + Then no error is returned + And the list should contain 1 message + And the hasAttachment of the message is "true" + And the list of attachments of the message contains 1 attachments + And the first attachment is: + |key | value | + |type |"application/pdf" | + |cid |null | + |isInline |true | http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/embeddedMultipartWithInlineTextAttachment.eml ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/embeddedMultipartWithInlineTextAttachment.eml b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/embeddedMultipartWithInlineTextAttachment.eml index f9c8665..7e572cd 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/embeddedMultipartWithInlineTextAttachment.eml +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/embeddedMultipartWithInlineTextAttachment.eml @@ -32,6 +32,7 @@ Content-Transfer-Encoding: 7bit --------------060506070600060108040700-- ------------=_1483455916-7086-3 +Content-ID: <14672787885774e5c4d4cee471352...@linagora.com> Content-Type: text/plain; charset="iso-8859-1"; name="avertissement.txt" Content-Disposition: inline; filename="avertissement.txt" Content-Transfer-Encoding: binary http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/mailWithInlinedAttachmentButNoCid.eml ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/mailWithInlinedAttachmentButNoCid.eml b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/mailWithInlinedAttachmentButNoCid.eml new file mode 100644 index 0000000..de13d72 --- /dev/null +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/resources/eml/mailWithInlinedAttachmentButNoCid.eml @@ -0,0 +1,72 @@ +Return-Path: <sen...@gmail.com> +MIME-Version: 1.0 +Delivered-To: test@localhost +Received: from localhost +X-Virus-Scanned: Debian +X-Spam-Flag: NO +X-Spam-Score: -1.78 +X-Spam-Level: +X-Spam-Status: No, score=-1.78 tagged_above=-99 required=2 + tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, FREEMAIL_FROM=0.001, + RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_DKIM_INVALID=0.01, + T_FREEMAIL_DOC_PDF=0.01] autolearn=no +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=gmail.com; s=20161025; + h=from:mime-version:subject:message-id:date:cc:to; + bh=lgK1xUjmh9FzAPFKLN2lvhSSlfI6ujj8K57kqImKrA8=; + b=tw7ave7egTqm3ZcXDe0NeuPSli3nkOBuqjOWLaK0MivSzO8FTQEWzCMEAlyhG4PMcP + jkxmhKAAjNPshiFnAYzPB4LNQV6GKPNUQ5igA9HDzh4dfbdT/6GiTEvUyWKZ6VpGVASR + x9Ioyiwxrdf4phsMYSHT7/Y+94/SvmAQj5gZZXfQ8JvmIAlxN9F4mvMnk2JQM4wcGv8Z + 15zNoTxcUPODEybnawotJUewQu2sCKL7S46vFfKiuYEiKPC/XhGPFsjvwBAvcMBfRgbm + jJSAPk0TlXERVjhd3CSCHC1ukQ1nICb3yTZacuOK0gUgJ7rKY25zQoq2QvYgX97SuThz + BpHw== +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20161025; + h=x-gm-message-state:from:mime-version:subject:message-id:date:cc:to; + bh=lgK1xUjmh9FzAPFKLN2lvhSSlfI6ujj8K57kqImKrA8=; + b=VmTt7K8LRHq/MdOYtIhRnA/Lkbx41VnZh6+SYior8s5kLaKgrJWi+N/ql7SU6lCR2m + JFTyvIfUqsNFiHy0wPMlI4RauXHNVQWe9C+UQ5hc5BT+Z67O/5dxe+KDhtchRqh7JWC5 + aWDjuvROFqhEEqphuEtGLqEqnHPbmweMZBIouasP2Z0TiHTSASSJq60HUcwf7UcVbmbw + m5O35XykCkecEX+H9fGAqgzlvFvtfy4PDENWfz8Yhzv730FsAmDutRjww0HYriyLwgpN + OjrT1o6p6DrWs5JlcgRh7F5qauiR/WTq+srbWbe/tLD7Lx8WRKyeXuzjKyTKJ5TjV6c5 + AHKA== +X-Gm-Message-State: AFeK/H1blcvejtSjL0KgKvb81Bc5uVOYQpq8wm/HouMZgtBr1kw+d9+VOes+FQrObRJdbQ== +X-Received: by 10.28.133.84 with SMTP id h81mr8649035wmd.23.1489999897292; + Mon, 20 Mar 2017 01:51:37 -0700 (PDT) +From: <from@localhost> +Content-Type: multipart/mixed; + boundary="Apple-Mail=_DF3869A6-784C-445C-8AA0-EBEFE28034A4" +Subject: mail with attachment from apple mail +Message-Id: <153836c4-4563-400a-acbf-e2e2ed0fb...@gmail.com> +Date: Mon, 20 Mar 2017 09:51:28 +0100 +To: <to@localhost> +X-Mailer: Apple Mail (2.3259) + + +--Apple-Mail=_DF3869A6-784C-445C-8AA0-EBEFE28034A4 +Content-Transfer-Encoding: quoted-printable +Content-Type: text/plain; + charset=utf-8 + +Voil=C3=A0 + +--=20 +Voila= + +--Apple-Mail=_DF3869A6-784C-445C-8AA0-EBEFE28034A4 +Content-Disposition: inline; + filename=deromaCollection-628.pdf +Content-Type: application/pdf; + x-unix-mode=0644; + name="deromaCollection-628.pdf" +Content-Transfer-Encoding: base64 + +JVBERi0xLjQKJeLjz9MKMSAwIG9iaiAKPDwvVHlwZSAvQ2F0YWxvZyAvVmVyc2lvbiAvMS40IC9Q +YWdlcyAyIDAgUiAvTmFtZXMgNiAwIFIgPj4KZW5kb2JqCjIgMCBvYmogCjw8L1R5cGUgL1BhZ2Vz +IC9LaWRzIFsxMCAwIFIgMTIgMCBSIDE5IDAgUiBdIC9Db3VudCAzID4+CmVuZG9iagozIDAgb2Jq +IAo8PC9UaXRsZSAo/v8AVADpAG4A6QByAOkpIC9BdXRob3IgKERlcm9tYSBTcGEpIC9TdWJqZWN0 +ICj+/wBDAG8AbABsAGUAYwB0AGkAbwBuACAAVADpAG4A6QByAOkpIC9LZXl3b3JkcyAo/v8ARABl +AHMALABwAGkA6ABjAGUAcwAsAHUAbgBpAHEAdQBlAHMALAAsAGMAcgDpAOkAZQBzACwAcABhAHIA +LABkAGUALAB0AGEAbABlAG4AdAB1AGUAdQB4ACwAYQByAHQAaQBzAGEAbgBzACwAcABvAHQAaQBl +bmZvIDMgMCBSID4+CnN0YXJ0eHJlZgoyOTQ0MDcKJSVFT0YK +--Apple-Mail=_DF3869A6-784C-445C-8AA0-EBEFE28034A4-- http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Attachment.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Attachment.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Attachment.java index 2a62684..68606cc 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Attachment.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Attachment.java @@ -139,6 +139,10 @@ public class Attachment { return isInline; } + public Boolean isInlinedWithCid() { + return isInline && cid.isPresent(); + } + public Optional<Long> getWidth() { return width; } http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java index 9351460..f9170a2 100644 --- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java +++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/Message.java @@ -244,7 +244,7 @@ public class Message { private static boolean hasAttachment(List<Attachment> attachments) { return attachments.stream() - .filter(attachment -> !attachment.isIsInline()) + .filter(attachment -> !attachment.isInlinedWithCid()) .findAny() .isPresent(); } http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/AttachmentTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/AttachmentTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/AttachmentTest.java index c6a433a..0632dda 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/AttachmentTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/AttachmentTest.java @@ -78,4 +78,41 @@ public class AttachmentTest { assertThat(tested).isEqualToComparingFieldByField(expected); } + @Test + public void isInlinedWithCidShouldReturnTrueWhenIsInlineAndHasCid() throws Exception { + Attachment tested = Attachment.builder() + .blobId(BlobId.of("blobId")) + .type("type") + .size(123) + .cid("cid") + .isInline(true) + .build(); + + assertThat(tested.isInlinedWithCid()).isTrue(); + } + + @Test + public void isInlinedWithCidShouldReturnFalseWhenIsNotInline() throws Exception { + Attachment tested = Attachment.builder() + .blobId(BlobId.of("blobId")) + .type("type") + .size(123) + .cid("cid") + .isInline(false) + .build(); + + assertThat(tested.isInlinedWithCid()).isFalse(); + } + + @Test + public void isInlinedWithCidShouldReturnFalseWhenIsInlineButNoCid() throws Exception { + Attachment tested = Attachment.builder() + .blobId(BlobId.of("blobId")) + .type("type") + .size(123) + .isInline(true) + .build(); + + assertThat(tested.isInlinedWithCid()).isFalse(); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/76664e4a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java index 844396d..dffd764 100644 --- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java +++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MessageTest.java @@ -291,12 +291,14 @@ public class MessageTest { .blobId(BlobId.of("key")) .size(1) .type("type") + .cid("cid1") .isInline(true) .build(), Attachment.builder() .blobId(BlobId.of("key2")) .size(2) .type("type2") + .cid("cid2") .isInline(true) .build())) .build(); @@ -321,6 +323,7 @@ public class MessageTest { .blobId(BlobId.of("key")) .size(1) .type("type") + .cid("cid1") .isInline(true) .build(), Attachment.builder() @@ -333,6 +336,7 @@ public class MessageTest { .blobId(BlobId.of("key3")) .size(3) .type("type3") + .cid("c") .isInline(true) .build())) .build(); --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org