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