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