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]