You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ro...@apache.org on 2017/11/16 18:41:03 UTC
james-project git commit: JAMES-2222 Add seen flag on message sent
Repository: james-project
Updated Branches:
refs/heads/master fb73fe9e1 -> 3d70052ec
JAMES-2222 Add seen flag on message sent
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3d70052e
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3d70052e
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3d70052e
Branch: refs/heads/master
Commit: 3d70052ec8711e498fe8c8826a944733046aa73b
Parents: fb73fe9
Author: Antoine Duprat <ad...@linagora.com>
Authored: Thu Nov 16 15:58:31 2017 +0100
Committer: Raphael Ouazana <ra...@linagora.com>
Committed: Thu Nov 16 19:35:24 2017 +0100
----------------------------------------------------------------------
.../integration/SetMessagesMethodTest.java | 58 ++++++++++++++++++--
.../james/jmap/send/PostDequeueDecorator.java | 12 +++-
.../jmap/send/PostDequeueDecoratorTest.java | 2 +
3 files changed, 64 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/3d70052e/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 88767b6..1e78fa6 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
@@ -198,11 +198,6 @@ public abstract class SetMessagesMethodTest {
return getMailboxId(accessToken, Role.DRAFTS);
}
- private String getInboxId(AccessToken accessToken) {
- return getMailboxId(accessToken, Role.INBOX);
- }
-
-
private String getMailboxId(AccessToken accessToken, Role role) {
return getAllMailboxesIds(accessToken).stream()
.filter(x -> x.get("role").equalsIgnoreCase(role.serialize()))
@@ -4719,4 +4714,57 @@ public abstract class SetMessagesMethodTest {
.body(firstAttachment + ".type", equalTo("text/calendar"))
.body(firstAttachment + ".blobId", not(isEmptyOrNullString()));
}
+
+ @Test
+ public void setMessagesShouldSetTheSeenKeywordOnMessageInSentMailbox() throws Exception {
+ // Sender
+ String sentMailboxId = getMailboxId(accessToken, Role.SENT);
+
+ // Recipient
+ String recipientAddress = "recipient" + "@" + USERS_DOMAIN;
+ String password = "password";
+ dataProbe.addUser(recipientAddress, password);
+ mailboxProbe.createMailbox(MailboxConstants.USER_NAMESPACE, recipientAddress, DefaultMailboxes.INBOX);
+ await();
+
+ String messageCreationId = "creationId1337";
+ String fromAddress = USERNAME;
+ String requestBody = "[" +
+ " [" +
+ " \"setMessages\","+
+ " {" +
+ " \"create\": { \"" + messageCreationId + "\" : {" +
+ " \"from\": { \"email\": \"" + fromAddress + "\"}," +
+ " \"to\": [{ \"name\": \"recipient\", \"email\": \"" + recipientAddress + "\"}]," +
+ " \"subject\": \"Thank you for joining example.com!\"," +
+ " \"textBody\": \"Hello someone, and thank you for joining example.com!\"," +
+ " \"mailboxIds\": [\"" + getOutboxId(accessToken) + "\"]" +
+ " }}" +
+ " }," +
+ " \"#0\"" +
+ " ]" +
+ "]";
+
+ // Given
+ given()
+ .header("Authorization", this.accessToken.serialize())
+ .body(requestBody)
+ // When
+ .when()
+ .post("/jmap");
+
+ // Then
+ calmlyAwait.atMost(30, TimeUnit.SECONDS).until(() -> messageHasBeenMovedToSentBox(sentMailboxId));
+ with()
+ .header("Authorization", this.accessToken.serialize())
+ .body("[[\"getMessageList\", {\"fetchMessages\":true, \"fetchMessageProperties\": [\"keywords\"], \"filter\":{\"inMailboxes\":[\"" + sentMailboxId + "\"]}}, \"#0\"]]")
+ .when()
+ .post("/jmap")
+ .then()
+ .log().ifValidationFails()
+ .statusCode(200)
+ .body(SECOND_NAME, equalTo("messages"))
+ .body(SECOND_ARGUMENTS + ".list", hasSize(1))
+ .body(SECOND_ARGUMENTS + ".list[0].keywords.$Seen", equalTo(true));
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/3d70052e/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
index b8e9853..1b383e5 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
@@ -21,6 +21,9 @@ package org.apache.james.jmap.send;
import java.io.Serializable;
import java.util.List;
+import javax.mail.Flags;
+import javax.mail.Flags.Flag;
+
import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
import org.apache.james.jmap.model.mailbox.Role;
import org.apache.james.jmap.send.exception.MailShouldBeInOutboxException;
@@ -28,6 +31,7 @@ import org.apache.james.jmap.utils.SystemMailboxesProvider;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageIdManager;
+import org.apache.james.mailbox.MessageManager;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.FetchGroupImpl;
import org.apache.james.mailbox.model.MailboxId;
@@ -78,7 +82,7 @@ public class PostDequeueDecorator extends MailQueueItemDecorator {
if (getMail().getAttribute(IS_DELIVERED) == null) {
try {
MailboxSession mailboxSession = mailboxManager.createSystemSession(username);
- moveFromOutboxToSent(messageId, mailboxSession);
+ moveFromOutboxToSentWithSeenFlag(messageId, mailboxSession);
getMail().setAttribute(IS_DELIVERED, IS_DELIVERED);
} catch (MailShouldBeInOutboxException e) {
LOG.info("Message does not exist on Outbox anymore, it could have already been sent {}", e);
@@ -113,9 +117,11 @@ public class PostDequeueDecorator extends MailQueueItemDecorator {
return (username != null && username instanceof String);
}
- private void moveFromOutboxToSent(MessageId messageId, MailboxSession mailboxSession) throws MailQueueException, MailboxException {
+ private void moveFromOutboxToSentWithSeenFlag(MessageId messageId, MailboxSession mailboxSession) throws MailQueueException, MailboxException {
assertMessageBelongsToOutbox(messageId, mailboxSession);
- messageIdManager.setInMailboxes(messageId, ImmutableList.of(getSentMailboxId(mailboxSession)), mailboxSession);
+ MailboxId sentMailboxId = getSentMailboxId(mailboxSession);
+ messageIdManager.setInMailboxes(messageId, ImmutableList.of(sentMailboxId), mailboxSession);
+ messageIdManager.setFlags(new Flags(Flag.SEEN), MessageManager.FlagsUpdateMode.ADD, messageId, ImmutableList.of(sentMailboxId), mailboxSession);
}
private void assertMessageBelongsToOutbox(MessageId messageId, MailboxSession mailboxSession) throws MailboxException, MailShouldBeInOutboxException {
http://git-wip-us.apache.org/repos/asf/james-project/blob/3d70052e/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java
index 7e5bff9..1a11c98 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/send/PostDequeueDecoratorTest.java
@@ -31,6 +31,7 @@ import java.io.ByteArrayInputStream;
import java.util.Date;
import javax.mail.Flags;
+import javax.mail.Flags.Flag;
import org.apache.james.jmap.DefaultMailboxes;
import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
@@ -260,6 +261,7 @@ public class PostDequeueDecoratorTest {
verify(messageIdManager, times(1)).getMessages(eq(ImmutableList.of(messageId.getMessageId())), eq(FetchGroupImpl.MINIMAL), any(MailboxSession.class));
verify(messageIdManager, times(1)).setInMailboxes(eq(messageId.getMessageId()), eq(ImmutableList.of(sentMailboxId)), any(MailboxSession.class));
+ verify(messageIdManager, times(1)).setFlags(eq(new Flags(Flag.SEEN)), eq(MessageManager.FlagsUpdateMode.ADD), eq(messageId.getMessageId()), eq(ImmutableList.of(sentMailboxId)), any(MailboxSession.class));
verifyNoMoreInteractions(messageIdManager);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org