This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit fbd7807e75272865ab47bac5b46cd4edf67361ab
Author: Tung Van TRAN <[email protected]>
AuthorDate: Tue Oct 11 17:35:23 2022 +0700

    JAMES-3830 UserQuotaRootResolver support method list all QuotaRoot of 
delegated mailboxes
---
 .../james/mailbox/quota/UserQuotaRootResolver.java |  3 +++
 .../store/quota/DefaultUserQuotaRootResolver.java  | 13 ++++++++++++
 .../quota/DefaultUserQuotaRootResolverTest.java    | 24 +++++++++++++++++++---
 3 files changed, 37 insertions(+), 3 deletions(-)

diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/quota/UserQuotaRootResolver.java
 
b/mailbox/api/src/main/java/org/apache/james/mailbox/quota/UserQuotaRootResolver.java
index e2c1fd8f7c..d3dd310bb0 100644
--- 
a/mailbox/api/src/main/java/org/apache/james/mailbox/quota/UserQuotaRootResolver.java
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/quota/UserQuotaRootResolver.java
@@ -20,11 +20,14 @@ package org.apache.james.mailbox.quota;
 
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.model.QuotaRoot;
+import org.reactivestreams.Publisher;
 
 public interface UserQuotaRootResolver extends QuotaRootResolver {
 
     QuotaRoot forUser(Username username);
 
+    Publisher<QuotaRoot> listAllAccessibleQuotaRoots(Username username);
+
     /**
      * When the username might not point to a user entity, and an extra 
translation step is required
      * for the quota root.
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java
index dc5ebf0676..df23ba4bfb 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java
@@ -29,6 +29,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.SessionProvider;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.Mailbox;
+import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
@@ -127,6 +128,18 @@ public class DefaultUserQuotaRootResolver implements 
UserQuotaRootResolver {
         return Mono.just(getQuotaRoot(mailboxPath));
     }
 
+    @Override
+    public Publisher<QuotaRoot> listAllAccessibleQuotaRoots(Username username) 
{
+        MailboxSession session = sessionProvider.createSystemSession(username);
+
+        Flux<QuotaRoot> quotaRootListFromDelegatedMailboxes = 
factory.getMailboxMapper(session)
+            .findNonPersonalMailboxes(username, MailboxACL.Right.Read)
+            .flatMap(this::getQuotaRootReactive)
+            .distinct();
+
+        return Flux.concat(quotaRootListFromDelegatedMailboxes, 
Flux.just(forUser(username)));
+    }
+
     @Override
     public Publisher<QuotaRoot> getQuotaRootReactive(Mailbox mailbox) {
         return Mono.just(getQuotaRoot(mailbox));
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java
index 596a86ff01..718c83a782 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java
@@ -59,10 +59,13 @@ class DefaultUserQuotaRootResolverTest {
     DefaultUserQuotaRootResolver testee;
     MailboxSessionMapperFactory mockedFactory;
 
+    SessionProvider mockSessionProvider;
+
     @BeforeEach
     void setUp() {
         mockedFactory = mock(MailboxSessionMapperFactory.class);
-        testee = new DefaultUserQuotaRootResolver(mock(SessionProvider.class), 
mockedFactory);
+        mockSessionProvider = mock(SessionProvider.class);
+        testee = new DefaultUserQuotaRootResolver(mockSessionProvider, 
mockedFactory);
     }
 
     @Test
@@ -101,8 +104,8 @@ class DefaultUserQuotaRootResolverTest {
     @Test
     void 
retrieveAssociatedMailboxesShouldThrowWhenQuotaRootContainsSeparator2Times() {
         assertThatThrownBy(() -> testee.retrieveAssociatedMailboxes(
-                    QuotaRoot.quotaRoot("#private&be&nwa", Optional.empty()), 
MAILBOX_SESSION)
-                .collectList().block())
+                QuotaRoot.quotaRoot("#private&be&nwa", Optional.empty()), 
MAILBOX_SESSION)
+            .collectList().block())
             .hasCauseInstanceOf(MailboxException.class);
     }
 
@@ -115,4 +118,19 @@ class DefaultUserQuotaRootResolverTest {
         assertThat(testee.getQuotaRoot(MAILBOX_ID)).isEqualTo(QUOTA_ROOT);
     }
 
+    @Test
+    void 
listAllAccessibleQuotaRootsShouldReturnQuotaRootOfDelegatedMailboxes() {
+        MailboxMapper mockedMapper = mock(MailboxMapper.class);
+        MailboxSession mockSession = mock(MailboxSession.class);
+        
when(mockSessionProvider.createSystemSession(BENWA)).thenReturn(mockSession);
+        
when(mockedFactory.getMailboxMapper(mockSession)).thenReturn(mockedMapper);
+
+        Mailbox delegatedMailbox = new 
Mailbox(MailboxPath.forUser(Username.of("delegated"), "test"),
+            UidValidity.of(11), TestId.of(1));
+        when(mockedMapper.findNonPersonalMailboxes(any(), 
any())).thenReturn(Flux.just(delegatedMailbox));
+
+        
assertThat(Flux.from(testee.listAllAccessibleQuotaRoots(BENWA)).collectList().block())
+            .containsExactlyInAnyOrder(QUOTA_ROOT, 
testee.getQuotaRoot(delegatedMailbox));
+    }
+
 }


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

Reply via email to