@VisibleForTesting Optional<MailboxId> getParentIdFromMailboxPath(MailboxPath mailboxPath, Optional<List<MailboxMetaData>> userMailboxesMetadata, MailboxSession mailboxSession) throws MailboxException { List<MailboxPath> levels = mailboxPath.getHierarchyLevels(mailboxSession.getPathDelimiter()); if (levels.size() <= 1) { return Optional.empty(); } MailboxPath parent = levels.get(levels.size() - 2); return userMailboxesMetadata.map(list -> retrieveParentFromMetadata(parent, list)) .orElse(retrieveParentFromBackend(mailboxSession, parent)); }
private Stream<MailboxPath> listAncestors(MailboxSession mailboxSession, MailboxPath mailboxPath) { return mailboxPath.getHierarchyLevels(mailboxSession.getPathDelimiter()) .stream() .filter(hierarchyMailboxPath -> !hierarchyMailboxPath.equals(mailboxPath)); }
@Test public void getHierarchyLevelsShouldReturnPathWhenEmptyName() { assertThat(MailboxPath.forUser("user", "") .getHierarchyLevels('.')) .containsExactly( MailboxPath.forUser("user", "")); }
@Test public void getHierarchyLevelsShouldReturnPathWhenOneLevel() { assertThat(MailboxPath.forUser("user", "inbox") .getHierarchyLevels('.')) .containsExactly( MailboxPath.forUser("user", "inbox")); }
@Test public void getHierarchyLevelsShouldReturnPathWhenNullName() { assertThat(MailboxPath.forUser("user", null) .getHierarchyLevels('.')) .containsExactly( MailboxPath.forUser("user", null)); }
for (MailboxPath mailbox : sanitizedMailboxPath.getHierarchyLevels(getDelimiter())) { locker.executeWithLock(mailboxSession, mailbox, (LockAwareExecution<Void>) () -> { if (!mailboxExists(mailbox, mailboxSession)) {
@Test public void getHierarchyLevelsShouldBeOrdered() { assertThat(MailboxPath.forUser("user", "inbox.folder.subfolder") .getHierarchyLevels('.')) .containsExactly( MailboxPath.forUser("user", "inbox"), MailboxPath.forUser("user", "inbox.folder"), MailboxPath.forUser("user", "inbox.folder.subfolder")); }