You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2020/12/18 07:27:38 UTC

[james-project] 10/13: JAMES 3400 Add mailbox list command

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

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

commit bae0c0b640e74f40fcc92d42c45696bff7a0746c
Author: quanth <hq...@linagora.com>
AuthorDate: Mon Nov 30 15:57:59 2020 +0700

    JAMES 3400 Add mailbox list command
---
 .../apache/james/cli/mailbox/MailboxCommand.java   |  3 +-
 ...MailboxCommand.java => MailboxListCommand.java} | 55 +++++++++++++---------
 .../org/apache/james/httpclient/MailboxClient.java |  3 ++
 .../{MailboxClient.java => model/MailboxName.java} | 20 ++++----
 .../org/apache/james/cli/MailboxManageTest.java    | 39 +++++++++++++++
 5 files changed, 87 insertions(+), 33 deletions(-)

diff --git a/server/protocols/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxCommand.java b/server/protocols/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxCommand.java
index 6494db2..f4cbb1d 100644
--- a/server/protocols/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxCommand.java
+++ b/server/protocols/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxCommand.java
@@ -32,7 +32,8 @@ import picocli.CommandLine;
     description = "Manage Mailboxes",
     subcommands = {
         MailboxCreateCommand.class,
-        MailboxExistCommand.class
+        MailboxExistCommand.class,
+        MailboxListCommand.class
     })
 public class MailboxCommand implements Callable<Integer> {
 
diff --git a/server/protocols/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxCommand.java b/server/protocols/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxListCommand.java
similarity index 50%
copy from server/protocols/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxCommand.java
copy to server/protocols/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxListCommand.java
index 6494db2..3924656 100644
--- a/server/protocols/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxCommand.java
+++ b/server/protocols/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxListCommand.java
@@ -19,40 +19,49 @@
 
 package org.apache.james.cli.mailbox;
 
-import java.io.PrintStream;
+import java.util.List;
 import java.util.concurrent.Callable;
 
 import org.apache.james.cli.WebAdminCli;
 import org.apache.james.httpclient.MailboxClient;
+import org.apache.james.httpclient.model.MailboxName;
 
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import feign.Response;
 import picocli.CommandLine;
 
 @CommandLine.Command(
-    name = "mailbox",
-    description = "Manage Mailboxes",
-    subcommands = {
-        MailboxCreateCommand.class,
-        MailboxExistCommand.class
-    })
-public class MailboxCommand implements Callable<Integer> {
-
-    protected final WebAdminCli webAdminCli;
-    protected final PrintStream out;
-    protected final PrintStream err;
-
-    public MailboxCommand(PrintStream out, WebAdminCli webAdminCli, PrintStream err) {
-        this.out = out;
-        this.webAdminCli = webAdminCli;
-        this.err = err;
-    }
+    name = "list",
+    description = "Show all mailboxes of a user")
+public class MailboxListCommand implements Callable<Integer> {
+
+    public static int SUCCEED_CODE = 200;
+    public static int USERNAME_NOT_FOUND_CODE = 404;
+
+    @CommandLine.ParentCommand MailboxCommand mailboxCommand;
+
+    @CommandLine.Parameters(description = "Username to be used")
+    String userName;
 
     @Override
     public Integer call() {
-        return WebAdminCli.CLI_FINISHED_SUCCEED;
-    }
-
-    public MailboxClient fullyQualifiedURL(String partOfUrl) {
-        return webAdminCli.feignClientFactory(err).target(MailboxClient.class, webAdminCli.jamesUrl + partOfUrl);
+        try {
+            MailboxClient mailboxClient = mailboxCommand.fullyQualifiedURL("/users");
+            Response rs = mailboxClient.getMailboxList(userName);
+            if (rs.status() == SUCCEED_CODE) {
+                List<MailboxName> mailboxNameList = new ObjectMapper().readValue(String.valueOf(rs.body()), new TypeReference<List<MailboxName>>(){});
+                mailboxNameList.forEach(mailboxName -> mailboxCommand.out.println(mailboxName.getMailboxName()));
+                return WebAdminCli.CLI_FINISHED_SUCCEED;
+            } else if (rs.status() == USERNAME_NOT_FOUND_CODE) {
+                return WebAdminCli.CLI_FINISHED_FAILED;
+            }
+            return WebAdminCli.CLI_FINISHED_FAILED;
+        } catch (Exception e) {
+            e.printStackTrace(mailboxCommand.err);
+            return WebAdminCli.CLI_FINISHED_FAILED;
+        }
     }
 
 }
\ No newline at end of file
diff --git a/server/protocols/webadmin-cli/src/main/java/org/apache/james/httpclient/MailboxClient.java b/server/protocols/webadmin-cli/src/main/java/org/apache/james/httpclient/MailboxClient.java
index 0e77cf2..0fb0e35 100644
--- a/server/protocols/webadmin-cli/src/main/java/org/apache/james/httpclient/MailboxClient.java
+++ b/server/protocols/webadmin-cli/src/main/java/org/apache/james/httpclient/MailboxClient.java
@@ -31,4 +31,7 @@ public interface MailboxClient {
     @RequestLine("GET /{usernameToBeUsed}/mailboxes/{mailboxNameToBeTested}")
     Response doesExist(@Param("usernameToBeUsed") String userName, @Param("mailboxNameToBeTested") String mailboxName);
 
+    @RequestLine("GET /{usernameToBeUsed}/mailboxes")
+    Response getMailboxList(@Param("usernameToBeUsed") String userName);
+
 }
diff --git a/server/protocols/webadmin-cli/src/main/java/org/apache/james/httpclient/MailboxClient.java b/server/protocols/webadmin-cli/src/main/java/org/apache/james/httpclient/model/MailboxName.java
similarity index 69%
copy from server/protocols/webadmin-cli/src/main/java/org/apache/james/httpclient/MailboxClient.java
copy to server/protocols/webadmin-cli/src/main/java/org/apache/james/httpclient/model/MailboxName.java
index 0e77cf2..bc3ce7e 100644
--- a/server/protocols/webadmin-cli/src/main/java/org/apache/james/httpclient/MailboxClient.java
+++ b/server/protocols/webadmin-cli/src/main/java/org/apache/james/httpclient/model/MailboxName.java
@@ -17,18 +17,20 @@
  * under the License.                                             *
  ******************************************************************/
 
-package org.apache.james.httpclient;
+package org.apache.james.httpclient.model;
 
-import feign.Param;
-import feign.RequestLine;
-import feign.Response;
+import com.fasterxml.jackson.annotation.JsonProperty;
 
-public interface MailboxClient {
+public class MailboxName {
 
-    @RequestLine("PUT /{userNameToBeUsed}/mailboxes/{mailboxNameToBeCreated}")
-    Response createAMailbox(@Param("userNameToBeUsed") String userName, @Param("mailboxNameToBeCreated") String mailboxName);
+    @JsonProperty("mailboxName")
+    private String mailboxName;
 
-    @RequestLine("GET /{usernameToBeUsed}/mailboxes/{mailboxNameToBeTested}")
-    Response doesExist(@Param("usernameToBeUsed") String userName, @Param("mailboxNameToBeTested") String mailboxName);
+    @JsonProperty("mailboxId")
+    private String mailboxId;
+
+    public String getMailboxName() {
+        return mailboxName;
+    }
 
 }
diff --git a/server/protocols/webadmin-cli/src/test/java/org/apache/james/cli/MailboxManageTest.java b/server/protocols/webadmin-cli/src/test/java/org/apache/james/cli/MailboxManageTest.java
index 4e59b84..2af4cbd 100644
--- a/server/protocols/webadmin-cli/src/test/java/org/apache/james/cli/MailboxManageTest.java
+++ b/server/protocols/webadmin-cli/src/test/java/org/apache/james/cli/MailboxManageTest.java
@@ -170,4 +170,43 @@ public class MailboxManageTest {
         assertThat(outputStreamCaptor.toString().trim()).isEqualTo("Either the user name or the mailbox does not exist.");
     }
 
+    @Test
+    void mailboxListWithTwoAddedMailboxesAndExistedUsernameShouldShowMailboxesNameExactly() throws Exception {
+        dataProbe.fluent().addDomain("linagora.com")
+            .addUser("hqtran@linagora.com", "123456");
+
+        WebAdminCli.executeFluent(new PrintStream(new ByteArrayOutputStream()), new PrintStream(new ByteArrayOutputStream()),
+            "--url", "http://127.0.0.1:" + port.getValue(), "mailbox", "create", "hqtran@linagora.com", "INBOX1");
+
+        WebAdminCli.executeFluent(new PrintStream(new ByteArrayOutputStream()), new PrintStream(new ByteArrayOutputStream()),
+            "--url", "http://127.0.0.1:" + port.getValue(), "mailbox", "create", "hqtran@linagora.com", "INBOX2");
+
+        int exitCode = WebAdminCli.executeFluent(new PrintStream(outputStreamCaptor), new PrintStream(errorStreamCaptor),
+            "--url", "http://127.0.0.1:" + port.getValue(), "mailbox", "list", "hqtran@linagora.com");
+
+        assertThat(exitCode).isEqualTo(0);
+        assertThat(outputStreamCaptor.toString()).isEqualTo("INBOX1\nINBOX2\n");
+    }
+
+    @Test
+    void mailboxListWithAValidUserAndNonExistingMailboxesShouldShowNothing() throws Exception {
+        dataProbe.fluent().addDomain("linagora.com")
+            .addUser("hqtran@linagora.com", "123456");
+
+        int exitCode = WebAdminCli.executeFluent(new PrintStream(outputStreamCaptor), new PrintStream(errorStreamCaptor),
+            "--url", "http://127.0.0.1:" + port.getValue(), "mailbox", "list", "hqtran@linagora.com");
+
+        assertThat(exitCode).isEqualTo(0);
+        assertThat(outputStreamCaptor.toString()).isEqualTo("");
+    }
+
+    @Test
+    void mailboxListWithNonExistingUsernameShouldFail() {
+        int exitCode = WebAdminCli.executeFluent(new PrintStream(outputStreamCaptor), new PrintStream(errorStreamCaptor),
+            "--url", "http://127.0.0.1:" + port.getValue(), "mailbox", "list", "hqtran@linagora.com");
+
+        assertThat(exitCode).isEqualTo(1);
+        assertThat(outputStreamCaptor.toString()).isEmpty();
+    }
+
 }
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org