Author: matthieu
Date: Fri Dec 11 12:30:00 2015
New Revision: 1719364

URL: http://svn.apache.org/viewvc?rev=1719364&view=rev
Log:
JAMES-1644 getMailboxes implementation for simple case

Added:
    
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/GetMailboxesMethodTest.java
      - copied, changed from r1719363, 
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPGetMailboxesTest.java
Removed:
    
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPGetMailboxesTest.java
Modified:
    
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/MethodsModule.java
    
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
    james/project/trunk/server/pom.xml
    james/project/trunk/server/protocols/jmap/pom.xml
    
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
    
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/Method.java
    
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/RequestHandler.java
    
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetMailboxesRequest.java
    
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java

Modified: 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/MethodsModule.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/MethodsModule.java?rev=1719364&r1=1719363&r2=1719364&view=diff
==============================================================================
--- 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/MethodsModule.java
 (original)
+++ 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/jmap/MethodsModule.java
 Fri Dec 11 12:30:00 2015
@@ -25,11 +25,13 @@ import org.apache.james.jmap.methods.Jma
 import org.apache.james.jmap.methods.JmapResponseWriter;
 import org.apache.james.jmap.methods.JmapResponseWriterImpl;
 import org.apache.james.jmap.methods.Method;
+import org.apache.james.mailbox.cassandra.CassandraId;
 
 import com.fasterxml.jackson.databind.Module;
 import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
 import com.google.inject.AbstractModule;
 import com.google.inject.Singleton;
+import com.google.inject.TypeLiteral;
 import com.google.inject.multibindings.Multibinder;
 
 public class MethodsModule extends AbstractModule {
@@ -42,7 +44,7 @@ public class MethodsModule extends Abstr
         
bind(JmapResponseWriter.class).to(JmapResponseWriterImpl.class).in(Singleton.class);
 
         Multibinder<Method> methods = Multibinder.newSetBinder(binder(), 
Method.class);
-        methods.addBinding().to(GetMailboxesMethod.class);
+        methods.addBinding().to(new 
TypeLiteral<GetMailboxesMethod<CassandraId>>(){});
     }
 
 }

Modified: 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java?rev=1719364&r1=1719363&r2=1719364&view=diff
==============================================================================
--- 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
 (original)
+++ 
james/project/trunk/server/container/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
 Fri Dec 11 12:30:00 2015
@@ -59,14 +59,11 @@ public class CassandraMailboxModule exte
         bind(new TypeLiteral<UidProvider<CassandraId>>(){}).to(new 
TypeLiteral<CassandraUidProvider>(){});
 
         bind(SubscriptionManager.class).to(CassandraSubscriptionManager.class);
-        bind(new 
TypeLiteral<MessageMapperFactory<CassandraId>>(){}).to(CassandraMailboxSessionMapperFactory.class);
         
bind(MailboxSessionMapperFactory.class).to(CassandraMailboxSessionMapperFactory.class);
-        
         bind(MailboxPathLocker.class).to(NoMailboxPathLocker.class);
         bind(Authenticator.class).to(UserRepositoryAuthenticator.class);
+        bind(MailboxManager.class).to(CassandraMailboxManager.class);
 
-        bind(new TypeLiteral<ModSeqProvider<CassandraId>>(){}).to(new 
TypeLiteral<CassandraModSeqProvider>(){});
-        bind(new TypeLiteral<UidProvider<CassandraId>>(){}).to(new 
TypeLiteral<CassandraUidProvider>(){});
         Multibinder<CassandraModule> cassandraDataDefinitions = 
Multibinder.newSetBinder(binder(), CassandraModule.class);
         
cassandraDataDefinitions.addBinding().to(org.apache.james.mailbox.cassandra.modules.CassandraAclModule.class);
         
cassandraDataDefinitions.addBinding().to(org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule.class);
@@ -75,7 +72,7 @@ public class CassandraMailboxModule exte
         
cassandraDataDefinitions.addBinding().to(org.apache.james.mailbox.cassandra.modules.CassandraSubscriptionModule.class);
         
cassandraDataDefinitions.addBinding().to(org.apache.james.mailbox.cassandra.modules.CassandraUidAndModSeqModule.class);
     }
-    
+
     @Provides @Named(MAILBOXMANAGER_NAME) @Singleton
     public MailboxManager provideMailboxManager(CassandraMailboxManager 
cassandraMailboxManager) throws MailboxException {
         cassandraMailboxManager.init();

Modified: james/project/trunk/server/pom.xml
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/pom.xml?rev=1719364&r1=1719363&r2=1719364&view=diff
==============================================================================
--- james/project/trunk/server/pom.xml (original)
+++ james/project/trunk/server/pom.xml Fri Dec 11 12:30:00 2015
@@ -694,6 +694,22 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.james</groupId>
+                <artifactId>apache-james-mailbox-store</artifactId>
+                <version>${mailbox.version}</version>
+                <type>test-jar</type>
+                <exclusions>
+                    <exclusion>
+                        <groupId>commons-collections</groupId>
+                        <artifactId>commons-collections</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>commons-logging</groupId>
+                        <artifactId>commons-logging</artifactId>
+                    </exclusion>
+                </exclusions>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.james</groupId>
                 <artifactId>james-server-protocols-smtp</artifactId>
                 <version>${project.version}</version>
                 <type>test-jar</type>

Modified: james/project/trunk/server/protocols/jmap/pom.xml
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/pom.xml?rev=1719364&r1=1719363&r2=1719364&view=diff
==============================================================================
--- james/project/trunk/server/protocols/jmap/pom.xml (original)
+++ james/project/trunk/server/protocols/jmap/pom.xml Fri Dec 11 12:30:00 2015
@@ -155,6 +155,10 @@
                 </dependency>
                 <dependency>
                     <groupId>org.apache.james</groupId>
+                    <artifactId>apache-james-mailbox-store</artifactId>
+                </dependency>
+                <dependency>
+                    <groupId>org.apache.james</groupId>
                     <artifactId>james-server-core</artifactId>
                 </dependency>
                 <dependency>
@@ -212,6 +216,12 @@
                     <scope>provided</scope>
                 </dependency>
                 <dependency>
+                    <groupId>org.apache.james</groupId>
+                    <artifactId>apache-james-mailbox-store</artifactId>
+                    <scope>test</scope>
+                    <type>test-jar</type>
+                </dependency>
+                <dependency>
                     <groupId>junit</groupId>
                     <artifactId>junit</artifactId>
                     <scope>test</scope>

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=1719364&r1=1719363&r2=1719364&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
 Fri Dec 11 12:30:00 2015
@@ -20,33 +20,55 @@
 package org.apache.james.jmap.methods;
 
 import java.io.IOException;
+import java.util.Optional;
 
 import javax.inject.Inject;
 
 import org.apache.commons.lang.NotImplementedException;
+import org.apache.james.jmap.model.AuthenticatedProtocolRequest;
 import org.apache.james.jmap.model.GetMailboxesRequest;
-import org.apache.james.jmap.model.ProtocolRequest;
+import org.apache.james.jmap.model.GetMailboxesResponse;
+import org.apache.james.jmap.model.Mailbox;
 import org.apache.james.jmap.model.ProtocolResponse;
+import org.apache.james.jmap.model.Role;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageManager.MetaData.FetchGroup;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.exception.MailboxNotFoundException;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.store.mail.MailboxMapperFactory;
+import org.apache.james.mailbox.store.mail.model.MailboxId;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.annotations.VisibleForTesting;
 
-public class GetMailboxesMethod implements Method {
+public class GetMailboxesMethod<Id extends MailboxId> implements Method {
     
+    private static final boolean DONT_RESET_RECENT = false;
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(GetMailboxesMethod.class);
+
     private final JmapRequestParser jmapRequestParser;
     private final JmapResponseWriter jmapResponseWriter;
+    private final MailboxManager mailboxManager; 
+    private final MailboxMapperFactory<Id> mailboxMapperFactory;
 
     @Inject
-    @VisibleForTesting public GetMailboxesMethod(JmapRequestParser 
jmapRequestParser, JmapResponseWriter jmapResponseWriter) {
+    @VisibleForTesting public GetMailboxesMethod(JmapRequestParser 
jmapRequestParser, JmapResponseWriter jmapResponseWriter, 
+            MailboxManager mailboxManager, MailboxMapperFactory<Id> 
mailboxMapperFactory) {
 
         this.jmapRequestParser = jmapRequestParser;
         this.jmapResponseWriter = jmapResponseWriter;
+        this.mailboxManager = mailboxManager;
+        this.mailboxMapperFactory = mailboxMapperFactory;
     }
 
     public String methodName() {
         return "getMailboxes";
     }
 
-    public ProtocolResponse process(ProtocolRequest request) {
+    public ProtocolResponse process(AuthenticatedProtocolRequest request) {
         try {
             jmapRequestParser.extractJmapRequest(request, 
GetMailboxesRequest.class);
         } catch (IOException e) {
@@ -56,7 +78,52 @@ public class GetMailboxesMethod implemen
                 return jmapResponseWriter.formatErrorResponse(request, 
"invalidArguments");
             }
         }
-        return jmapResponseWriter.formatErrorResponse(request);
+        
+        try {
+            MailboxSession mailboxSession = request.getMailboxSession();
+            GetMailboxesResponse mailboxesResponse = 
getMailboxesResponse(mailboxSession);
+            return jmapResponseWriter.formatMethodResponse(request, 
mailboxesResponse);
+        } catch (MailboxException e) {
+            return jmapResponseWriter.formatErrorResponse(request);
+        }
+    }
+
+    private GetMailboxesResponse getMailboxesResponse(MailboxSession 
mailboxSession) throws MailboxException {
+        GetMailboxesResponse.Builder builder = GetMailboxesResponse.builder();
+
+        mailboxManager.list(mailboxSession)
+            .stream()
+            .map(mailboxPath -> mailboxFromMailboxPath(mailboxPath, 
mailboxSession))
+            .forEach(mailbox -> builder.add(mailbox.get()));
+
+        return builder.build();
+    }
+    
+    private Optional<Mailbox> mailboxFromMailboxPath(MailboxPath mailboxPath, 
MailboxSession mailboxSession) {
+        try {
+            return Optional.ofNullable(Mailbox.builder()
+                    .id(getMailboxId(mailboxPath, mailboxSession))
+                    .name(mailboxPath.getName())
+                    .role(Role.from(mailboxPath.getName()))
+                    .unreadMessages(unreadMessages(mailboxPath, 
mailboxSession))
+                    .build());
+        } catch (MailboxException e) {
+            LOGGER.warn("Cannot find mailbox for :" + mailboxPath.getName(), 
e);
+            return Optional.empty();
+        }
+    }
+
+    private String getMailboxId(MailboxPath mailboxPath, MailboxSession 
mailboxSession) throws MailboxException, MailboxNotFoundException {
+        return mailboxMapperFactory.getMailboxMapper(mailboxSession)
+                .findMailboxByPath(mailboxPath)
+                .getMailboxId()
+                .serialize();
+    }
+
+    private long unreadMessages(MailboxPath mailboxPath, MailboxSession 
mailboxSession) throws MailboxException {
+        return mailboxManager.getMailbox(mailboxPath, mailboxSession)
+                .getMetaData(DONT_RESET_RECENT, mailboxSession, 
FetchGroup.UNSEEN_COUNT)
+                .getUnseenCount();
     }
 
 }

Modified: 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/Method.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/Method.java?rev=1719364&r1=1719363&r2=1719364&view=diff
==============================================================================
--- 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/Method.java
 (original)
+++ 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/Method.java
 Fri Dec 11 12:30:00 2015
@@ -19,13 +19,13 @@
 
 package org.apache.james.jmap.methods;
 
-import org.apache.james.jmap.model.ProtocolRequest;
+import org.apache.james.jmap.model.AuthenticatedProtocolRequest;
 import org.apache.james.jmap.model.ProtocolResponse;
 
 public interface Method {
 
     String methodName();
 
-    ProtocolResponse process(ProtocolRequest request);
+    ProtocolResponse process(AuthenticatedProtocolRequest request);
 
 }

Modified: 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/RequestHandler.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/RequestHandler.java?rev=1719364&r1=1719363&r2=1719364&view=diff
==============================================================================
--- 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/RequestHandler.java
 (original)
+++ 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/RequestHandler.java
 Fri Dec 11 12:30:00 2015
@@ -26,7 +26,7 @@ import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 
-import org.apache.james.jmap.model.ProtocolRequest;
+import org.apache.james.jmap.model.AuthenticatedProtocolRequest;
 import org.apache.james.jmap.model.ProtocolResponse;
 
 public class RequestHandler {
@@ -39,7 +39,7 @@ public class RequestHandler {
                 .collect(Collectors.toMap(Method::methodName, method -> 
method));
     }
 
-    public ProtocolResponse handle(ProtocolRequest request) {
+    public ProtocolResponse handle(AuthenticatedProtocolRequest request) {
         return Optional.ofNullable(methods.get(request.getMethod()))
             .map(method -> method.process(request))
             .orElseThrow(() -> new IllegalStateException("unknown method"));

Modified: 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetMailboxesRequest.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetMailboxesRequest.java?rev=1719364&r1=1719363&r2=1719364&view=diff
==============================================================================
--- 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetMailboxesRequest.java
 (original)
+++ 
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/GetMailboxesRequest.java
 Fri Dec 11 12:30:00 2015
@@ -18,11 +18,15 @@
  ****************************************************************/
 package org.apache.james.jmap.model;
 
+import java.util.List;
+import java.util.Optional;
+
 import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.jmap.methods.JmapRequest;
 
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
+import com.google.common.collect.ImmutableList;
 
 @JsonDeserialize(builder = GetMailboxesRequest.Builder.class)
 public class GetMailboxesRequest implements JmapRequest {
@@ -35,10 +39,12 @@ public class GetMailboxesRequest impleme
     public static class Builder {
 
         private String accountId;
-        private String[] ids;
-        private String[] properties;
+        private ImmutableList.Builder<String> ids;
+        private ImmutableList.Builder<String> properties;
 
         private Builder() {
+            ids = ImmutableList.builder();
+            properties = ImmutableList.builder();
         }
 
         public Builder accountId(String accountId) {
@@ -48,14 +54,14 @@ public class GetMailboxesRequest impleme
             return this;
         }
 
-        public Builder ids(String[] ids) {
+        public Builder ids(List<String> ids) {
             if (ids != null) {
                 throw new NotImplementedException();
             }
             return this;
         }
 
-        public Builder properties(String[] properties) {
+        public Builder properties(List<String> properties) {
             if (properties != null) {
                 throw new NotImplementedException();
             }
@@ -63,29 +69,29 @@ public class GetMailboxesRequest impleme
         }
 
         public GetMailboxesRequest build() {
-            return new GetMailboxesRequest(accountId, ids, properties);
+            return new GetMailboxesRequest(Optional.ofNullable(accountId), 
ids.build(), properties.build());
         }
     }
 
-    private final String accountId;
-    private final String[] ids;
-    private final String[] properties;
+    private final Optional<String> accountId;
+    private final List<String> ids;
+    private final List<String> properties;
 
-    private GetMailboxesRequest(String accountId, String[] ids, String[] 
properties) {
+    private GetMailboxesRequest(Optional<String> accountId, List<String> ids, 
List<String> properties) {
         this.accountId = accountId;
         this.ids = ids;
         this.properties = properties;
     }
 
-    public String getAccountId() {
+    public Optional<String> getAccountId() {
         return accountId;
     }
 
-    public String[] getIds() {
+    public List<String> getIds() {
         return ids;
     }
 
-    public String[] getProperties() {
+    public List<String> getProperties() {
         return properties;
     }
 }

Copied: 
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/GetMailboxesMethodTest.java
 (from r1719363, 
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPGetMailboxesTest.java)
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/GetMailboxesMethodTest.java?p2=james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/GetMailboxesMethodTest.java&p1=james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPGetMailboxesTest.java&r1=1719363&r2=1719364&rev=1719364&view=diff
==============================================================================
--- 
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPGetMailboxesTest.java
 (original)
+++ 
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/GetMailboxesMethodTest.java
 Fri Dec 11 12:30:00 2015
@@ -23,6 +23,7 @@ import static com.jayway.restassured.con
 import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
 import static org.hamcrest.Matchers.equalTo;
 import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -38,33 +39,58 @@ import org.apache.james.jmap.methods.Jma
 import org.apache.james.jmap.methods.JmapResponseWriter;
 import org.apache.james.jmap.methods.JmapResponseWriterImpl;
 import org.apache.james.jmap.methods.RequestHandler;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.MessageManager.MetaData.FetchGroup;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.store.MailboxMetaData;
+import org.apache.james.mailbox.store.TestId;
+import org.apache.james.mailbox.store.mail.MailboxMapper;
+import org.apache.james.mailbox.store.mail.MailboxMapperFactory;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.slf4j.Logger;
 
+import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
 import com.google.common.base.Charsets;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.jayway.restassured.RestAssured;
 import com.jayway.restassured.http.ContentType;
 
-public class JMAPGetMailboxesTest {
+public class GetMailboxesMethodTest {
 
     private RequestHandler requestHandler;
     private JettyHttpServer server;
     private UUID accessToken;
+    private MailboxManager mockedMailboxManager;
+    private MailboxMapperFactory<TestId> mockedMailboxMapperFactory;
+    private MailboxSession mockedMailboxSession;
     
+    @SuppressWarnings("unchecked")
     @Before
     public void setup() throws Exception {
+        String username = "[email protected]";
+
         AccessTokenManager mockedAccessTokenManager = 
mock(AccessTokenManager.class);
-        JmapRequestParser jmapRequestParser = new JmapRequestParserImpl();
-        JmapResponseWriter jmapResponseWriter = new JmapResponseWriterImpl();
+        mockedMailboxMapperFactory = mock(MailboxMapperFactory.class);
+        mockedMailboxManager = mock(MailboxManager.class);
+        mockedMailboxSession = mock(MailboxSession.class);
+
+        JmapRequestParser jmapRequestParser = new 
JmapRequestParserImpl(ImmutableSet.of(new Jdk8Module()));
+        JmapResponseWriter jmapResponseWriter = new 
JmapResponseWriterImpl(ImmutableSet.of(new Jdk8Module()));
 
-        requestHandler = new RequestHandler(ImmutableSet.of(new 
GetMailboxesMethod(jmapRequestParser, jmapResponseWriter)));
+        requestHandler = new RequestHandler(ImmutableSet.of(new 
GetMailboxesMethod<>(jmapRequestParser, jmapResponseWriter, 
mockedMailboxManager, mockedMailboxMapperFactory)));
         JMAPServlet jmapServlet = new JMAPServlet(requestHandler);
 
-        AuthenticationFilter authenticationFilter = new 
AuthenticationFilter(mockedAccessTokenManager);
+        AuthenticationFilter authenticationFilter = new 
AuthenticationFilter(mockedAccessTokenManager, mockedMailboxManager);
         
+        when(mockedMailboxManager.createSystemSession(eq(username), 
any(Logger.class))).thenReturn(mockedMailboxSession);
         
when(mockedAccessTokenManager.isValid(any(AccessToken.class))).thenReturn(true);
+        
when(mockedAccessTokenManager.getUsernameFromToken(any(AccessToken.class))).thenReturn(username);
         
         accessToken = UUID.randomUUID();
         
@@ -144,4 +170,56 @@ public class JMAPGetMailboxesTest {
             .statusCode(200)
             
.content(equalTo("[[\"error\",{\"type\":\"invalidArguments\"},\"#0\"]]"));
     }
+
+    @Test
+    public void getMailboxesShouldReturnEmptyListWhenNoMailboxes() throws 
Exception {
+        when(mockedMailboxManager.list(any()))
+            .thenReturn(ImmutableList.<MailboxPath>of());
+        given()
+            .accept(ContentType.JSON)
+            .contentType(ContentType.JSON)
+            .header("Authorization", accessToken)
+            .body("[[\"getMailboxes\", {}, \"#0\"]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .statusCode(200)
+            
.content(equalTo("[[\"getMailboxes\",{\"accountId\":null,\"state\":null,\"list\":[],\"notFound\":null},\"#0\"]]"));
+    }
+
+    @Test
+    @SuppressWarnings("unchecked")
+    public void getMailboxesShouldReturnMailboxesWhenAvailable() throws 
Exception {
+        MailboxPath mailboxPath = new MailboxPath("namespace", "user", "name");
+        when(mockedMailboxManager.list(eq(mockedMailboxSession)))
+            .thenReturn(ImmutableList.<MailboxPath>of(mailboxPath));
+
+        MessageManager mockedMessageManager = mock(MessageManager.class);
+        when(mockedMailboxManager.getMailbox(eq(mailboxPath), 
eq(mockedMailboxSession)))
+            .thenReturn(mockedMessageManager);
+
+        MailboxMetaData mailboxMetaData = new 
MailboxMetaData(ImmutableList.of(), null, 123L, 5L, 10L, 3L, 2L, 1L, false, 
false, null);
+        when(mockedMessageManager.getMetaData(eq(false), 
eq(mockedMailboxSession), eq(FetchGroup.UNSEEN_COUNT)))
+            .thenReturn(mailboxMetaData);
+
+        MailboxMapper<TestId> mockedMailboxMapper = mock(MailboxMapper.class);
+        
when(mockedMailboxMapperFactory.getMailboxMapper(eq(mockedMailboxSession)))
+            .thenReturn(mockedMailboxMapper);
+
+        SimpleMailbox<TestId> simpleMailbox = new 
SimpleMailbox<TestId>(mailboxPath, 5L);
+        simpleMailbox.setMailboxId(TestId.of(23432L));
+        when(mockedMailboxMapper.findMailboxByPath(mailboxPath))
+            .thenReturn(simpleMailbox);
+
+        given()
+            .accept(ContentType.JSON)
+            .contentType(ContentType.JSON)
+            .header("Authorization", accessToken)
+            .body("[[\"getMailboxes\", {}, \"#0\"]]")
+        .when()
+            .post("/jmap")
+        .then()
+            .statusCode(200)
+            
.content(equalTo("[[\"getMailboxes\",{\"accountId\":null,\"state\":null,\"list\":[{\"id\":\"23432\",\"name\":\"name\",\"parentId\":null,\"role\":null,\"sortOrder\":0,\"mustBeOnlyMailbox\":false,\"mayReadItems\":false,\"mayAddItems\":false,\"mayRemoveItems\":false,\"mayCreateChild\":false,\"mayRename\":false,\"mayDelete\":false,\"totalMessages\":0,\"unreadMessages\":2,\"totalThreads\":0,\"unreadThreads\":0}],\"notFound\":null},\"#0\"]]"));
+    }
 }

Modified: 
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java
URL: 
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java?rev=1719364&r1=1719363&r2=1719364&view=diff
==============================================================================
--- 
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java
 (original)
+++ 
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/RequestHandlerTest.java
 Fri Dec 11 12:30:00 2015
@@ -24,7 +24,9 @@ import static org.assertj.core.api.Asser
 import java.io.IOException;
 
 import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
 
+import org.apache.james.jmap.model.AuthenticatedProtocolRequest;
 import org.apache.james.jmap.model.ProtocolRequest;
 import org.apache.james.jmap.model.ProtocolResponse;
 import org.junit.Before;
@@ -95,7 +97,7 @@ public class RequestHandlerTest {
         }
 
         @Override
-        public ProtocolResponse process(ProtocolRequest request) {
+        public ProtocolResponse process(AuthenticatedProtocolRequest request) {
             try {
                 TestJmapRequest typedRequest = 
jmapRequestParser.extractJmapRequest(request, TestJmapRequest.class);
                 return jmapResponseWriter.formatMethodResponse(request, 
@@ -109,11 +111,13 @@ public class RequestHandlerTest {
     private RequestHandler testee;
     private JmapRequestParser jmapRequestParser;
     private JmapResponseWriter jmapResponseWriter;
+    private HttpServletRequest fakeHttpServletRequest;
 
     @Before
     public void setup() {
         jmapRequestParser = new JmapRequestParserImpl(ImmutableSet.of(new 
Jdk8Module()));
         jmapResponseWriter = new JmapResponseWriterImpl(ImmutableSet.of(new 
Jdk8Module()));
+        fakeHttpServletRequest = null;
         testee = new RequestHandler(ImmutableSet.of(new 
TestMethod(jmapRequestParser, jmapResponseWriter)));
     }
 
@@ -125,7 +129,7 @@ public class RequestHandlerTest {
                 new ObjectNode(new JsonNodeFactory(false)).textNode("#1")} ;
 
         RequestHandler requestHandler = new RequestHandler(ImmutableSet.of());
-        requestHandler.handle(ProtocolRequest.deserialize(nodes));
+        
requestHandler.handle(AuthenticatedProtocolRequest.decorate(ProtocolRequest.deserialize(nodes),
 fakeHttpServletRequest));
     }
 
     @Test(expected=IllegalStateException.class)
@@ -158,7 +162,7 @@ public class RequestHandlerTest {
         }
 
         @Override
-        public ProtocolResponse process(ProtocolRequest request) {
+        public ProtocolResponse process(AuthenticatedProtocolRequest request) {
             return null;
         }
     }
@@ -173,7 +177,7 @@ public class RequestHandlerTest {
                 parameters,
                 new ObjectNode(new JsonNodeFactory(false)).textNode("#1")} ;
 
-        ProtocolResponse response = 
testee.handle(ProtocolRequest.deserialize(nodes));
+        ProtocolResponse response = 
testee.handle(AuthenticatedProtocolRequest.decorate(ProtocolRequest.deserialize(nodes),
 fakeHttpServletRequest));
 
         
assertThat(response.getResults().findValue("id").asText()).isEqualTo("testId");
         
assertThat(response.getResults().findValue("name").asText()).isEqualTo("testName");



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

Reply via email to