Author: matthieu
Date: Wed Dec 16 15:31:32 2015
New Revision: 1720373
URL: http://svn.apache.org/viewvc?rev=1720373&view=rev
Log:
JAMES-1646 handle sortOrder based on mailbox Role
Added:
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/SortOrder.java
Modified:
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
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/model/mailbox/Mailbox.java
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
Modified:
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java?rev=1720373&r1=1720372&r2=1720373&view=diff
==============================================================================
---
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
(original)
+++
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
Wed Dec 16 15:31:32 2015
@@ -22,15 +22,20 @@ package org.apache.james.jmap.methods;
import static com.jayway.restassured.RestAssured.given;
import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.endsWith;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.startsWith;
import java.io.ByteArrayInputStream;
import java.util.Date;
+import java.util.List;
+import java.util.Map;
import javax.mail.Flags;
+import com.google.common.collect.ImmutableMap;
+import com.jayway.jsonpath.JsonPath;
import org.apache.james.backends.cassandra.EmbeddedCassandra;
import org.apache.james.jmap.JmapAuthentication;
import org.apache.james.jmap.JmapServer;
@@ -167,6 +172,33 @@ public abstract class GetMailboxesMethod
.then()
.statusCode(200)
.content(startsWith("[[\"mailboxes\",{\"accountId\":null,\"state\":null,\"list\":[{\"id\":\""),
-
endsWith("\",\"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\":1,\"totalThreads\":0,\"unreadThreads\":0}],\"notFound\":null},\"#0\"]]"));
+
endsWith("\",\"name\":\"name\",\"parentId\":null,\"role\":null,\"sortOrder\":1000,\"mustBeOnlyMailbox\":false,\"mayReadItems\":false,\"mayAddItems\":false,\"mayRemoveItems\":false,\"mayCreateChild\":false,\"mayRename\":false,\"mayDelete\":false,\"totalMessages\":0,\"unreadMessages\":1,\"totalThreads\":0,\"unreadThreads\":0}],\"notFound\":null},\"#0\"]]"));
}
+
+ @SuppressWarnings("unchecked")
+ @Test
+ public void getMailboxesShouldReturnMailboxesWithSortOrder() throws
Exception {
+ String user = "user";
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, user,
"inbox");
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, user,
"trash");
+
+ String response = given()
+ .accept(ContentType.JSON)
+ .contentType(ContentType.JSON)
+ .header("Authorization", accessToken.serialize())
+ .body("[[\"getMailboxes\", {}, \"#0\"]]")
+ .when()
+ .post("/jmap")
+ .then()
+ .statusCode(200)
+
.content(startsWith("[[\"mailboxes\",{\"accountId\":null,\"state\":null,\"list\":[{\"id\":\""))
+ .extract()
+ .asString();
+ assertThat(JsonPath.parse(response).<List<Map<String,
Object>>>read("$.[0].[1].list[*].['name','sortOrder']"))
+ .hasSize(2)
+ .containsOnly(
+ ImmutableMap.of("name", "trash", "sortOrder", 60),
+ ImmutableMap.of("name", "inbox", "sortOrder", 10));
+ }
+
}
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=1720373&r1=1720372&r2=1720373&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
Wed Dec 16 15:31:32 2015
@@ -27,6 +27,7 @@ import org.apache.james.jmap.model.GetMa
import org.apache.james.jmap.model.GetMailboxesResponse;
import org.apache.james.jmap.model.mailbox.Mailbox;
import org.apache.james.jmap.model.mailbox.Role;
+import org.apache.james.jmap.model.mailbox.SortOrder;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageManager.MetaData.FetchGroup;
@@ -43,12 +44,12 @@ import com.google.common.base.Preconditi
import com.google.common.base.Throwables;
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 static final Method.Request.Name METHOD_NAME =
Method.Request.name("getMailboxes");
private static final Method.Response.Name RESPONSE_NAME =
Method.Response.name("mailboxes");
-
+
private final MailboxManager mailboxManager;
private final MailboxMapperFactory<Id> mailboxMapperFactory;
@@ -96,11 +97,13 @@ public class GetMailboxesMethod<Id exten
private Optional<Mailbox> mailboxFromMailboxPath(MailboxPath mailboxPath,
MailboxSession mailboxSession) {
try {
+ Optional<Role> role = Role.from(mailboxPath.getName());
return Optional.ofNullable(Mailbox.builder()
.id(getMailboxId(mailboxPath, mailboxSession))
.name(mailboxPath.getName())
- .role(Role.from(mailboxPath.getName()))
+ .role(role)
.unreadMessages(unreadMessages(mailboxPath,
mailboxSession))
+ .sortOrder(SortOrder.getSortOrder(role))
.build());
} catch (MailboxException e) {
LOGGER.warn("Cannot find mailbox for :" + mailboxPath.getName(),
e);
Modified:
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/Mailbox.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/Mailbox.java?rev=1720373&r1=1720372&r2=1720373&view=diff
==============================================================================
---
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/Mailbox.java
(original)
+++
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/Mailbox.java
Wed Dec 16 15:31:32 2015
@@ -285,5 +285,13 @@ public class Mailbox {
return Objects.hash(id, name, parentId, role, sortOrder,
mustBeOnlyMailbox, mayReadItems, mayAddItems,
mayRemoveItems, mayCreateChild, mayRename, mayDelete,
totalMessages, unreadMessages, totalThreads, unreadThreads);
}
-
+
+ @Override
+ public String toString() {
+ return com.google.common.base.Objects.toStringHelper(getClass())
+ .add("id", id)
+ .add("name", name)
+ .add("sortOrder", sortOrder)
+ .toString();
+ }
}
Added:
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/SortOrder.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/SortOrder.java?rev=1720373&view=auto
==============================================================================
---
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/SortOrder.java
(added)
+++
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/mailbox/SortOrder.java
Wed Dec 16 15:31:32 2015
@@ -0,0 +1,50 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.jmap.model.mailbox;
+
+import com.google.common.collect.ImmutableMap;
+
+import java.util.Optional;
+
+public class SortOrder {
+
+ private static final int DEFAULT_SORT_ORDER = 1000;
+ private static final ImmutableMap<Role, Integer> defaultSortOrders =
+ ImmutableMap.<Role, Integer>builder()
+ .put(Role.INBOX, 10)
+ .put(Role.ARCHIVE, 20)
+ .put(Role.DRAFTS, 30)
+ .put(Role.OUTBOX, 40)
+ .put(Role.SENT, 50)
+ .put(Role.TRASH, 60)
+ .put(Role.SPAM, 70)
+ .put(Role.TEMPLATES, 80)
+ .build();
+
+ private static Optional<Integer> getDefaultSortOrder(Role role) {
+ return Optional.ofNullable(defaultSortOrders.get(role));
+ }
+
+ public static Integer getSortOrder(Optional<Role> role) {
+ return role
+ .map(SortOrder::getDefaultSortOrder)
+ .map(Optional::get)
+ .orElse(DEFAULT_SORT_ORDER);
+ }
+}
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=1720373&r1=1720372&r2=1720373&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
Wed Dec 16 15:31:32 2015
@@ -39,6 +39,7 @@ import org.apache.james.mailbox.inmemory
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.store.MockAuthenticator;
import org.apache.james.mailbox.store.StoreMailboxManager;
+import org.assertj.core.groups.Tuple;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
@@ -85,13 +86,85 @@ public class GetMailboxesMethodTest {
GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder()
.build();
- Mailbox expectedMailbox = Mailbox.builder()
- .id("1")
- .name(mailboxPath.getName())
- .unreadMessages(2)
+ GetMailboxesResponse getMailboxesResponse =
getMailboxesMethod.process(getMailboxesRequest, mailboxSession);
+ assertThat(getMailboxesResponse.getList())
+ .extracting(Mailbox::getId, Mailbox::getName,
Mailbox::getUnreadMessages)
+ .containsOnly(Tuple.tuple("1", mailboxPath.getName(), 2L));
+ }
+
+ @Test
+ public void getMailboxesShouldReturnInboxWithSortOrder10() throws
Exception {
+ MailboxSession mailboxSession =
mailboxManager.createSystemSession(USERNAME, LOGGER);
+ MailboxPath mailboxPath = new MailboxPath("#private", USERNAME,
"INBOX");
+ mailboxManager.createMailbox(mailboxPath, mailboxSession);
+
+ GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder()
+ .build();
+
+ GetMailboxesResponse getMailboxesResponse =
getMailboxesMethod.process(getMailboxesRequest, mailboxSession);
+ assertThat(getMailboxesResponse.getList())
+ .hasSize(1)
+ .extracting(Mailbox::getSortOrder)
+ .containsOnly(10);
+ }
+
+ @Test
+ public void getMailboxesShouldReturnSortOrder1000OnUnknownFolder() throws
Exception {
+ MailboxSession mailboxSession =
mailboxManager.createSystemSession(USERNAME, LOGGER);
+ MailboxPath mailboxPath = new MailboxPath("#private", USERNAME,
"unknown");
+ mailboxManager.createMailbox(mailboxPath, mailboxSession);
+
+ GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder()
+ .build();
+
+ GetMailboxesResponse getMailboxesResponse =
getMailboxesMethod.process(getMailboxesRequest, mailboxSession);
+ assertThat(getMailboxesResponse.getList())
+ .extracting(Mailbox::getSortOrder)
+ .containsOnly(1000);
+ }
+
+ @Test
+ public void getMailboxesShouldReturnInboxWithSortOrder10OnDifferenceCase()
throws Exception {
+ MailboxSession mailboxSession =
mailboxManager.createSystemSession(USERNAME, LOGGER);
+ MailboxPath mailboxPath = new MailboxPath("#private", USERNAME,
"InBoX");
+ mailboxManager.createMailbox(mailboxPath, mailboxSession);
+
+ GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder()
.build();
GetMailboxesResponse getMailboxesResponse =
getMailboxesMethod.process(getMailboxesRequest, mailboxSession);
-
assertThat(getMailboxesResponse.getList()).containsOnly(expectedMailbox);
+ assertThat(getMailboxesResponse.getList())
+ .extracting(Mailbox::getSortOrder)
+ .containsOnly(10);
}
+
+ @Test
+ public void getMailboxesShouldReturnMailboxesWithSortOrder() throws
Exception {
+ MailboxSession mailboxSession =
mailboxManager.createSystemSession(USERNAME, LOGGER);
+ mailboxManager.createMailbox(new MailboxPath("#private", USERNAME,
"INBOX"), mailboxSession);
+ mailboxManager.createMailbox(new MailboxPath("#private", USERNAME,
"ARCHIVE"), mailboxSession);
+ mailboxManager.createMailbox(new MailboxPath("#private", USERNAME,
"DRAFTS"), mailboxSession);
+ mailboxManager.createMailbox(new MailboxPath("#private", USERNAME,
"OUTBOX"), mailboxSession);
+ mailboxManager.createMailbox(new MailboxPath("#private", USERNAME,
"SENT"), mailboxSession);
+ mailboxManager.createMailbox(new MailboxPath("#private", USERNAME,
"TRASH"), mailboxSession);
+ mailboxManager.createMailbox(new MailboxPath("#private", USERNAME,
"SPAM"), mailboxSession);
+ mailboxManager.createMailbox(new MailboxPath("#private", USERNAME,
"TEMPLATES"), mailboxSession);
+
+ GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder()
+ .build();
+
+ GetMailboxesResponse getMailboxesResponse =
getMailboxesMethod.process(getMailboxesRequest, mailboxSession);
+ assertThat(getMailboxesResponse.getList())
+ .extracting(Mailbox::getName, Mailbox::getSortOrder)
+ .containsExactly(
+ Tuple.tuple("INBOX", 10),
+ Tuple.tuple("ARCHIVE", 20),
+ Tuple.tuple("DRAFTS", 30),
+ Tuple.tuple("OUTBOX", 40),
+ Tuple.tuple("SENT", 50),
+ Tuple.tuple("TRASH", 60),
+ Tuple.tuple("SPAM", 70),
+ Tuple.tuple("TEMPLATES", 80));
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]