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:39 UTC
[james-project] 11/13: JAMES 3400 Add mailbox delete 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 b8b5eb49dd90231f72dc74618c513f21324f4a54
Author: quanth <hq...@linagora.com>
AuthorDate: Mon Nov 30 18:09:41 2020 +0700
JAMES 3400 Add mailbox delete command
---
.../apache/james/cli/mailbox/MailboxCommand.java | 3 +-
...ilboxCommand.java => MailboxDeleteCommand.java} | 61 +++++++++++++---------
.../org/apache/james/httpclient/MailboxClient.java | 3 ++
.../org/apache/james/cli/MailboxManageTest.java | 56 ++++++++++++++++++++
4 files changed, 97 insertions(+), 26 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 f4cbb1d..801ce38 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
@@ -33,7 +33,8 @@ import picocli.CommandLine;
subcommands = {
MailboxCreateCommand.class,
MailboxExistCommand.class,
- MailboxListCommand.class
+ MailboxListCommand.class,
+ MailboxDeleteCommand.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/MailboxDeleteCommand.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/MailboxDeleteCommand.java
index f4cbb1d..284f7e3 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/MailboxDeleteCommand.java
@@ -19,41 +19,52 @@
package org.apache.james.cli.mailbox;
-import java.io.PrintStream;
import java.util.concurrent.Callable;
import org.apache.james.cli.WebAdminCli;
import org.apache.james.httpclient.MailboxClient;
+import feign.Response;
import picocli.CommandLine;
@CommandLine.Command(
- name = "mailbox",
- description = "Manage Mailboxes",
- subcommands = {
- MailboxCreateCommand.class,
- MailboxExistCommand.class,
- MailboxListCommand.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 = "delete",
+ description = "Delete a mailbox and its children")
+public class MailboxDeleteCommand implements Callable<Integer> {
+
+ public static final int DELETED_CODE = 204;
+ public static final int BAD_REQUEST_CODE = 400;
+ public static final int NOT_FOUND_CODE = 404;
+
+ @CommandLine.ParentCommand MailboxCommand mailboxCommand;
+
+ @CommandLine.Parameters(description = "Username")
+ String userName;
+
+ @CommandLine.Parameters (description = "Mailbox's name to be deleted")
+ String mailboxName;
+
@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.deleteAMailbox(userName, mailboxName);
+ if (rs.status() == DELETED_CODE) {
+ mailboxCommand.out.println("The mailbox now does not exist on the server.");
+ return WebAdminCli.CLI_FINISHED_SUCCEED;
+ } else if (rs.status() == BAD_REQUEST_CODE) {
+ mailboxCommand.err.println(rs.body());
+ return WebAdminCli.CLI_FINISHED_FAILED;
+ } else if (rs.status() == NOT_FOUND_CODE) {
+ mailboxCommand.err.println(rs.body());
+ 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 0fb0e35..f43d303 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
@@ -34,4 +34,7 @@ public interface MailboxClient {
@RequestLine("GET /{usernameToBeUsed}/mailboxes")
Response getMailboxList(@Param("usernameToBeUsed") String userName);
+ @RequestLine("DELETE /{usernameToBeUsed}/mailboxes/{mailboxNameToBeDeleted}")
+ Response deleteAMailbox(@Param("usernameToBeUsed") String userName, @Param("mailboxNameToBeDeleted") String 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 2af4cbd..7a4b9d8 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
@@ -209,4 +209,60 @@ public class MailboxManageTest {
assertThat(outputStreamCaptor.toString()).isEmpty();
}
+ @Test
+ void mailboxDeleteAParentMailboxWithTwoAddedChildrenMailboxShouldDeleteThemAll() 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", "INBOX.1");
+
+ WebAdminCli.executeFluent(new PrintStream(new ByteArrayOutputStream()), new PrintStream(new ByteArrayOutputStream()),
+ "--url", "http://127.0.0.1:" + port.getValue(), "mailbox", "create", "hqtran@linagora.com", "INBOX.2");
+
+ int exitCode = WebAdminCli.executeFluent(new PrintStream(outputStreamCaptor), new PrintStream(errorStreamCaptor),
+ "--url", "http://127.0.0.1:" + port.getValue(), "mailbox", "delete", "hqtran@linagora.com", "INBOX");
+
+ 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().trim()).isEqualTo("The mailbox now does not exist on the server.");
+ }
+
+ @Test
+ void mailboxDeleteWithNonExistingUsernameShouldFail() throws Exception {
+ dataProbe.fluent().addDomain("linagora.com");
+
+ int exitCode = WebAdminCli.executeFluent(new PrintStream(outputStreamCaptor), new PrintStream(errorStreamCaptor),
+ "--url", "http://127.0.0.1:" + port.getValue(), "mailbox", "delete", "hqtran@linagora.com", "INBOX");
+
+ assertThat(exitCode).isEqualTo(1);
+ assertThat(errorStreamCaptor.toString()).contains("User does not exist");
+ }
+
+ @Test
+ void mailboxDeleteWithInvalidMailboxNameShouldFail() 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", "delete", "hqtran@linagora.com", "IN#BOX");
+
+ assertThat(exitCode).isEqualTo(1);
+ assertThat(errorStreamCaptor.toString()).contains("Attempt to delete an invalid mailbox");
+ }
+
+ @Test
+ void mailboxDeleteWithInvalidUsernameShouldFail() 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", "delete", "hqtr@an@linagora.com", "INBOX");
+
+ assertThat(exitCode).isEqualTo(1);
+ assertThat(errorStreamCaptor.toString()).contains("Attempt to delete an invalid mailbox");
+ }
+
}
\ 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