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