JAMES-2033 RemoteDelivery should not raise error on JMAP when message is moved 
out of OUTBOX


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9505324c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9505324c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9505324c

Branch: refs/heads/master
Commit: 9505324c1530cd5dd16c842120789ddb5175d632
Parents: 986059d
Author: quynhn <[email protected]>
Authored: Mon May 29 16:49:15 2017 +0700
Committer: benwa <[email protected]>
Committed: Tue May 30 15:32:27 2017 +0700

----------------------------------------------------------------------
 .../james/jmap/send/PostDequeueDecorator.java   |  2 ++
 .../jmap/send/PostDequeueDecoratorTest.java     | 26 +++++++++++++++++---
 2 files changed, 25 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9505324c/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 41add56..5631c83 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
@@ -80,6 +80,8 @@ public class PostDequeueDecorator extends 
MailQueueItemDecorator {
                     MailboxSession mailboxSession = 
mailboxManager.createSystemSession(username, LOG);
                     moveFromOutboxToSent(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);
                 } catch (MailboxException e) {
                     throw new MailQueueException(e.getMessage(), e);
                 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/9505324c/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 568aac9..beb0210 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
@@ -34,7 +34,6 @@ import javax.mail.Flags;
 
 import org.apache.james.jmap.DefaultMailboxes;
 import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
-import org.apache.james.jmap.send.exception.MailShouldBeInOutboxException;
 import org.apache.james.jmap.utils.SystemMailboxesProviderImpl;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
@@ -42,6 +41,7 @@ import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
+import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryMessageId;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;
 import org.apache.james.mailbox.model.ComposedMessageId;
@@ -52,6 +52,7 @@ import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.MessageResult;
 import org.apache.james.mailbox.model.MessageResultIterator;
+import org.apache.james.queue.api.MailQueue;
 import org.apache.james.queue.api.MailQueue.MailQueueItem;
 import org.apache.mailet.Mail;
 import org.apache.mailet.base.test.FakeMail;
@@ -100,8 +101,8 @@ public class PostDequeueDecoratorTest {
         verify(mockedMailQueueItem).done(true);
     }
     
-    @Test(expected=MailShouldBeInOutboxException.class)
-    public void doneShouldThrowWhenMessageIsNotInOutbox() throws Exception {
+    @Test
+    public void doneShouldNotThrowWhenMessageIsNotInOutbox() throws Exception {
         MailboxSession mailboxSession = 
mailboxManager.createSystemSession(USERNAME, LOGGER);
         mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
         mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession);
@@ -266,4 +267,23 @@ public class PostDequeueDecoratorTest {
 
         verifyNoMoreInteractions(messageIdManager);
     }
+
+    @Test(expected = MailQueue.MailQueueException.class)
+    public void doneShouldThrowWhenMailboxException() throws Exception {
+        MessageIdManager messageIdManager = mock(MessageIdManager.class);
+        testee = new PostDequeueDecorator(mockedMailQueueItem, mailboxManager, 
new InMemoryMessageId.Factory(),
+                messageIdManager, new 
SystemMailboxesProviderImpl(mailboxManager));
+
+        MailboxSession mailboxSession = 
mailboxManager.createSystemSession(USERNAME, LOGGER);
+        mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
+        mailboxManager.createMailbox(SENT_MAILBOX_PATH, mailboxSession).get();
+        MessageManager messageManager = 
mailboxManager.getMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
+        ComposedMessageId messageId = messageManager.appendMessage(new 
ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), 
mailboxSession, false, new Flags());
+        mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, 
messageId.getMessageId().serialize());
+        mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, 
USERNAME);
+
+        
when(messageIdManager.getMessages(eq(ImmutableList.of(messageId.getMessageId())),
 eq(FetchGroupImpl.MINIMAL), 
any(MailboxSession.class))).thenThrow(MailboxException.class);
+
+        testee.done(true);
+    }
 }


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

Reply via email to