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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
