Author: matthieu
Date: Mon Jan 25 15:22:19 2016
New Revision: 1726641

URL: http://svn.apache.org/viewvc?rev=1726641&view=rev
Log:
JAMES-1661 getMailboxes should not fail when MailboxManagerErrors

        Contributed by Raphaƫl Ouazana

Modified:
    
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
    
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java

Modified: 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java?rev=1726641&r1=1726640&r2=1726641&view=diff
==============================================================================
--- 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
 (original)
+++ 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
 Mon Jan 25 15:22:19 2016
@@ -96,7 +96,9 @@ public class GetMailboxesMethod<Id exten
             mailboxManager.list(mailboxSession)
                 .stream()
                 .map(mailboxPath -> mailboxFromMailboxPath(mailboxPath, 
mailboxSession))
-                .forEach(mailbox -> builder.add(mailbox.get()));
+                .filter(Optional::isPresent)
+                .map(Optional::get)
+                .forEach(mailbox -> builder.add(mailbox));
             return builder.build();
         } catch (MailboxException e) {
             throw Throwables.propagate(e);

Modified: 
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java?rev=1726641&r1=1726640&r2=1726641&view=diff
==============================================================================
--- 
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
 (original)
+++ 
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
 Mon Jan 25 15:22:19 2016
@@ -19,6 +19,9 @@
 package org.apache.james.jmap.methods;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.ByteArrayInputStream;
 import java.util.Date;
@@ -31,6 +34,7 @@ import org.apache.james.jmap.model.Clien
 import org.apache.james.jmap.model.GetMailboxesRequest;
 import org.apache.james.jmap.model.GetMailboxesResponse;
 import org.apache.james.jmap.model.mailbox.Mailbox;
+import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
@@ -42,6 +46,7 @@ import org.apache.james.mailbox.inmemory
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.store.MockAuthenticator;
+import org.apache.james.mailbox.store.SimpleMailboxSession;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.assertj.core.groups.Tuple;
 import org.junit.Before;
@@ -49,6 +54,8 @@ import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.ImmutableList;
+
 public class GetMailboxesMethodTest {
 
     private static final Logger LOGGER = 
LoggerFactory.getLogger(GetMailboxesMethodTest.class);
@@ -57,11 +64,12 @@ public class GetMailboxesMethodTest {
     private StoreMailboxManager<InMemoryId> mailboxManager;
     private GetMailboxesMethod<InMemoryId> getMailboxesMethod;
     private ClientId clientId;
+    private InMemoryMailboxSessionMapperFactory mailboxMapperFactory;
 
     @Before
     public void setup() throws Exception {
         clientId = ClientId.of("#0");
-        InMemoryMailboxSessionMapperFactory mailboxMapperFactory = new 
InMemoryMailboxSessionMapperFactory();
+        mailboxMapperFactory = new InMemoryMailboxSessionMapperFactory();
         MailboxACLResolver aclResolver = new UnionMailboxACLResolver();
         GroupMembershipResolver groupMembershipResolver = new 
SimpleGroupMembershipResolver();
         mailboxManager = new 
StoreMailboxManager<InMemoryId>(mailboxMapperFactory, new MockAuthenticator(), 
aclResolver, groupMembershipResolver);
@@ -81,6 +89,30 @@ public class GetMailboxesMethodTest {
         
         assertThat(getMailboxesResponse)
                 .hasSize(1)
+                .extracting(JmapResponse::getResponse)
+                .hasOnlyElementsOfType(GetMailboxesResponse.class)
+                .extracting(GetMailboxesResponse.class::cast)
+                .flatExtracting(GetMailboxesResponse::getList)
+                .isEmpty();
+    }
+    
+    @Test
+    public void getMailboxesShouldNotFailWhenMailboxManagerErrors() throws 
Exception {
+        MailboxManager mockedMailboxManager = mock(MailboxManager.class);
+        when(mockedMailboxManager.list(any()))
+            .thenReturn(ImmutableList.of(new MailboxPath("namespace", "user", 
"name")));
+        when(mockedMailboxManager.getMailbox(any(), any()))
+            .thenThrow(new MailboxException());
+        GetMailboxesMethod<InMemoryId> testee = new 
GetMailboxesMethod<>(mockedMailboxManager, mailboxMapperFactory);
+        
+        GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder()
+                .build();
+        MailboxSession session = new SimpleMailboxSession(0, USERNAME, "", 
null, null, '.', null);
+        
+        List<JmapResponse> getMailboxesResponse = 
testee.process(getMailboxesRequest, clientId, 
session).collect(Collectors.toList());
+        
+        assertThat(getMailboxesResponse)
+                .hasSize(1)
                 .extracting(JmapResponse::getResponse)
                 .hasOnlyElementsOfType(GetMailboxesResponse.class)
                 .extracting(GetMailboxesResponse.class::cast)



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to