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