You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/03/14 02:04:56 UTC

[james-project] 04/07: JAMES-2665 Integration test for "vault" queries

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 549fa5d4cb3228a5a6570576b6aa648ecc89075d
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Mar 6 11:39:14 2019 +0700

    JAMES-2665 Integration test for "vault" queries
---
 .../integration/DeletedMessagesVaultTest.java      | 78 +++++++++++++++++++++-
 .../vault/routes/query/QueryTranslator.java        |  2 +
 2 files changed, 78 insertions(+), 2 deletions(-)

diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
index 4336a08..7ffaf6e 100644
--- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
+++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/DeletedMessagesVaultTest.java
@@ -214,6 +214,72 @@ public abstract class DeletedMessagesVaultTest {
     }
 
     @Test
+    public void postShouldRestoreMatchingMessages() {
+        bartSendMessageToHomerWithSubject("aaaaa");
+        bartSendMessageToHomerWithSubject("bbbbb");
+        WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 2);
+
+        homerDeletesMessages(listMessageIdsForAccount(homerAccessToken));
+
+        WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 0);
+
+        String query = "{" +
+            "  \"combinator\": \"and\"," +
+            "  \"criteria\": [" +
+            "    {" +
+            "      \"fieldName\": \"subject\"," +
+            "      \"operator\": \"equals\"," +
+            "      \"value\": \"aaaaa\"" +
+            "    }" +
+            "  ]" +
+            "}";
+        restoreMessagesFor(HOMER, query);
+
+        WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
+
+        String messageId = listMessageIdsForAccount(homerAccessToken).get(0);
+        given()
+            .header("Authorization", homerAccessToken.serialize())
+            .body("[[\"getMessages\", {\"ids\": [\"" + messageId + "\"]}, \"#0\"]]")
+        .when()
+            .post("/jmap")
+            .then()
+            .statusCode(200)
+            .log().ifValidationFails()
+            .body(ARGUMENTS + ".list.subject", hasItem("aaaaa"));
+    }
+
+    @Test
+    public void postShouldNotRestoreWhenNoMatchingMessages() throws Exception {
+        bartSendMessageToHomerWithSubject("aaaaa");
+        bartSendMessageToHomerWithSubject("bbbbb");
+        WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 2);
+
+        homerDeletesMessages(listMessageIdsForAccount(homerAccessToken));
+
+        WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 0);
+
+        String query = "{" +
+            "  \"combinator\": \"and\"," +
+            "  \"criteria\": [" +
+            "    {" +
+            "      \"fieldName\": \"subject\"," +
+            "      \"operator\": \"equals\"," +
+            "      \"value\": \"ccccc\"" +
+            "    }" +
+            "  ]" +
+            "}";
+        restoreMessagesFor(HOMER, query);
+
+
+        Thread.sleep(Duration.FIVE_SECONDS.getValueInMS());
+
+        // No additional had been restored for Bart as the vault is empty
+        assertThat(listMessageIdsForAccount(homerAccessToken).size())
+            .isEqualTo(0);
+    }
+
+    @Test
     public void imapMovedMessageShouldNotEndUpInTheVault() throws Exception {
         bartSendMessageToHomer();
         WAIT_TWO_MINUTES.until(() -> listMessageIdsForAccount(homerAccessToken).size() == 1);
@@ -365,6 +431,10 @@ public abstract class DeletedMessagesVaultTest {
     }
 
     private void bartSendMessageToHomer() {
+        bartSendMessageToHomerWithSubject(SUBJECT);
+    }
+
+    private void bartSendMessageToHomerWithSubject(String subject) {
         String messageCreationId = "creationId";
         String outboxId = getOutboxId(bartAccessToken);
         String bigEnoughBody = Strings.repeat("123456789\n", 12 * 100);
@@ -376,7 +446,7 @@ public abstract class DeletedMessagesVaultTest {
             "        \"headers\":{\"Disposition-Notification-To\":\"" + BART + "\"}," +
             "        \"from\": { \"name\": \"Bob\", \"email\": \"" + BART + "\"}," +
             "        \"to\": [{ \"name\": \"User\", \"email\": \"" + HOMER + "\"}]," +
-            "        \"subject\": \"" + SUBJECT + "\"," +
+            "        \"subject\": \"" + subject + "\"," +
             "        \"textBody\": \"" + bigEnoughBody + "\"," +
             "        \"htmlBody\": \"Test <b>body</b>, HTML version\"," +
             "        \"mailboxIds\": [\"" + outboxId + "\"] " +
@@ -420,8 +490,12 @@ public abstract class DeletedMessagesVaultTest {
     }
 
     private void restoreMessagesFor(String user) {
+        restoreMessagesFor(user, MATCH_ALL_QUERY);
+    }
+
+    private void restoreMessagesFor(String user, String criteria) {
         String taskId = webAdminApi.with()
-            .body(MATCH_ALL_QUERY)
+            .body(criteria)
             .post("/deletedMessages/user/" + user + "?action=restore")
             .jsonPath()
             .get("taskId");
diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/query/QueryTranslator.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/query/QueryTranslator.java
index 611c2a4..f9ee073 100644
--- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/query/QueryTranslator.java
+++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/query/QueryTranslator.java
@@ -54,6 +54,7 @@ import org.apache.james.vault.search.Query;
 
 import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableTable;
 
@@ -167,6 +168,7 @@ public class QueryTranslator {
     private final ImmutableTable<FieldName, Operator, Function<String, Criterion>> criterionRegistry;
 
     @Inject
+    @VisibleForTesting
     public QueryTranslator(MailboxId.Factory mailboxIdFactory) {
         criterionRegistry = withMailboxIdCriterionParser(mailboxIdFactory);
     }


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