Author: matthieu Date: Mon Jan 4 14:12:44 2016 New Revision: 1722878 URL: http://svn.apache.org/viewvc?rev=1722878&view=rev Log: JAMES-1650 Provide messages count (total and unread) in GetMailboxes response. Contributed by Vignon <fvig...@linagora.com>
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=1722878&r1=1722877&r2=1722878&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 4 14:12:44 2016 @@ -30,9 +30,9 @@ import org.apache.james.jmap.model.mailb 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; 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; @@ -98,11 +98,13 @@ public class GetMailboxesMethod<Id exten private Optional<Mailbox> mailboxFromMailboxPath(MailboxPath mailboxPath, MailboxSession mailboxSession) { try { Optional<Role> role = Role.from(mailboxPath.getName()); + MessageManager.MetaData mailboxMetaData = getMailboxMetaData(mailboxPath, mailboxSession); return Optional.ofNullable(Mailbox.builder() .id(getMailboxId(mailboxPath, mailboxSession)) .name(mailboxPath.getName()) .role(role) - .unreadMessages(unreadMessages(mailboxPath, mailboxSession)) + .unreadMessages(mailboxMetaData.getUnseenCount()) + .totalMessages(mailboxMetaData.getMessageCount()) .sortOrder(SortOrder.getSortOrder(role)) .build()); } catch (MailboxException e) { @@ -111,17 +113,16 @@ public class GetMailboxesMethod<Id exten } } - private String getMailboxId(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException, MailboxNotFoundException { + private String getMailboxId(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException { return mailboxMapperFactory.getMailboxMapper(mailboxSession) .findMailboxByPath(mailboxPath) .getMailboxId() .serialize(); } - private long unreadMessages(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException { + private MessageManager.MetaData getMailboxMetaData(MailboxPath mailboxPath, MailboxSession mailboxSession) throws MailboxException { return mailboxManager.getMailbox(mailboxPath, mailboxSession) - .getMetaData(DONT_RESET_RECENT, mailboxSession, FetchGroup.UNSEEN_COUNT) - .getUnseenCount(); + .getMetaData(DONT_RESET_RECENT, mailboxSession, FetchGroup.UNSEEN_COUNT); } } 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=1722878&r1=1722877&r2=1722878&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 4 14:12:44 2016 @@ -34,6 +34,7 @@ import org.apache.james.mailbox.acl.Grou import org.apache.james.mailbox.acl.MailboxACLResolver; import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver; import org.apache.james.mailbox.acl.UnionMailboxACLResolver; +import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.inmemory.InMemoryId; import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory; import org.apache.james.mailbox.model.MailboxPath; @@ -167,4 +168,56 @@ public class GetMailboxesMethodTest { Tuple.tuple("TEMPLATES", 80)); } -} + @Test + public void getMailboxesShouldReturnEmptyMailboxByDefault() throws MailboxException { + MailboxPath mailboxPath = new MailboxPath("#private", USERNAME, "name"); + MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME, LOGGER); + mailboxManager.createMailbox(mailboxPath, mailboxSession); + + GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder() + .build(); + + GetMailboxesResponse getMailboxesResponse = getMailboxesMethod.process(getMailboxesRequest, mailboxSession); + assertThat(getMailboxesResponse.getList()) + .extracting(Mailbox::getTotalMessages, Mailbox::getUnreadMessages) + .containsOnly(Tuple.tuple(0L, 0L)); + } + + @Test + public void getMailboxesShouldReturnCorrectTotalMessagesCount() throws MailboxException { + MailboxPath mailboxPath = new MailboxPath("#private", USERNAME, "name"); + MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME, LOGGER); + mailboxManager.createMailbox(mailboxPath, mailboxSession); + MessageManager messageManager = mailboxManager.getMailbox(mailboxPath, mailboxSession); + messageManager.appendMessage(new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), mailboxSession, false, new Flags()); + messageManager.appendMessage(new ByteArrayInputStream("Subject: test2\r\n\r\ntestmail".getBytes()), new Date(), mailboxSession, false, new Flags()); + + GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder() + .build(); + + GetMailboxesResponse getMailboxesResponse = getMailboxesMethod.process(getMailboxesRequest, mailboxSession); + assertThat(getMailboxesResponse.getList()) + .extracting(Mailbox::getTotalMessages) + .containsExactly(2L); + } + + @Test + public void getMailboxesShouldReturnCorrectUnreadMessagesCount() throws MailboxException { + MailboxPath mailboxPath = new MailboxPath("#private", USERNAME, "name"); + MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME, LOGGER); + mailboxManager.createMailbox(mailboxPath, mailboxSession); + MessageManager messageManager = mailboxManager.getMailbox(mailboxPath, mailboxSession); + Flags defaultUnseenFlag = new Flags(); + Flags readMessageFlag = new Flags(); + readMessageFlag.add(Flags.Flag.SEEN); + messageManager.appendMessage(new ByteArrayInputStream("Subject: test\r\n\r\ntestmail".getBytes()), new Date(), mailboxSession, false, defaultUnseenFlag ); + messageManager.appendMessage(new ByteArrayInputStream("Subject: test2\r\n\r\ntestmail".getBytes()), new Date(), mailboxSession, false, defaultUnseenFlag ); + messageManager.appendMessage(new ByteArrayInputStream("Subject: test3\r\n\r\ntestmail".getBytes()), new Date(), mailboxSession, false, readMessageFlag); + GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder() + .build(); + GetMailboxesResponse getMailboxesResponse = getMailboxesMethod.process(getMailboxesRequest, mailboxSession); + assertThat(getMailboxesResponse.getList()) + .extracting(Mailbox::getUnreadMessages) + .containsExactly(2L); + } +} \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org