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/12/19 10:38:36 UTC

[james-project] 02/14: JAMES-3012 Move DeletedMessageVaultTest to webadmin-integration-tests

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 dcfc52235e2d76ea2c2068bc33d4756f1b9c7461
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Fri Dec 13 10:49:29 2019 +0700

    JAMES-3012 Move DeletedMessageVaultTest to webadmin-integration-tests
---
 .../pom.xml                                        |  11 --
 .../CassandraDeletedMessageVaultTest.java          |  54 ----------
 .../memory-jmap-draft-integration-testing/pom.xml  |  11 --
 .../pom.xml                                        |  11 --
 .../rabbitmq/RabbitMQDeletedMessagesVaultTest.java |  54 ----------
 server/protocols/webadmin-integration-test/pom.xml |  17 +++
 .../vault/DeletedMessageVaultIntegrationTest.java} | 118 ++++++++++++---------
 .../vault/DeletedMessagesVaultRequests.java        |  83 +++++++++++++++
 .../webadmin/integration/vault/ExportRequest.java} |  64 ++++++-----
 9 files changed, 205 insertions(+), 218 deletions(-)

diff --git a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml
index ee1a549..be5be85 100644
--- a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml
+++ b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/pom.xml
@@ -88,11 +88,6 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>backup</artifactId>
-            <type>test-jar</type>
-        </dependency>
-        <dependency>
-            <groupId>${james.groupId}</groupId>
             <artifactId>blob-export-guice</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
@@ -169,12 +164,6 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-mailbox-plugin-deleted-messages-vault-guice</artifactId>
-            <scope>test</scope>
-            <type>test-jar</type>
-        </dependency>
-        <dependency>
-            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-testing</artifactId>
             <scope>test</scope>
         </dependency>
diff --git a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java b/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java
deleted file mode 100644
index 49f93e7..0000000
--- a/server/protocols/jmap-draft-integration-testing/cassandra-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/cassandra/CassandraDeletedMessageVaultTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.jmap.cassandra;
-
-import java.io.IOException;
-import java.time.Clock;
-
-import org.apache.james.CassandraJmapTestRule;
-import org.apache.james.DockerCassandraRule;
-import org.apache.james.GuiceJamesServer;
-import org.apache.james.filesystem.api.FileSystem;
-import org.apache.james.jmap.draft.methods.integration.DeletedMessagesVaultTest;
-import org.apache.james.modules.vault.TestDeleteMessageVaultPreDeletionHookModule;
-import org.apache.james.webadmin.WebAdminConfiguration;
-import org.junit.Rule;
-
-public class CassandraDeletedMessageVaultTest extends DeletedMessagesVaultTest {
-    @Rule
-    public DockerCassandraRule cassandra = new DockerCassandraRule();
-
-    @Rule
-    public CassandraJmapTestRule rule = CassandraJmapTestRule.defaultTestRule();
-    
-    @Override
-    protected GuiceJamesServer createJmapServer(FileSystem fileSystem, Clock clock) throws IOException {
-        return rule.jmapServer(cassandra.getModule(),
-            new TestDeleteMessageVaultPreDeletionHookModule(),
-            binder -> binder.bind(WebAdminConfiguration.class).toInstance(WebAdminConfiguration.TEST_CONFIGURATION),
-            binder -> binder.bind(FileSystem.class).toInstance(fileSystem),
-            binder -> binder.bind(Clock.class).toInstance(clock));
-    }
-
-    @Override
-    protected void awaitSearchUpToDate() {
-        rule.await();
-    }
-}
diff --git a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/pom.xml b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/pom.xml
index fd5b6ea..67e79f1 100644
--- a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/pom.xml
+++ b/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/pom.xml
@@ -70,11 +70,6 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>backup</artifactId>
-            <type>test-jar</type>
-        </dependency>
-        <dependency>
-            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-dnsservice-test</artifactId>
         </dependency>
         <dependency>
@@ -91,12 +86,6 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-mailbox-plugin-deleted-messages-vault-guice</artifactId>
-            <version>${project.version}</version>
-            <type>test-jar</type>
-        </dependency>
-        <dependency>
-            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-jmap-draft-integration-testing</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
index edf56b3..6dea7f9 100644
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
+++ b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
@@ -53,11 +53,6 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>backup</artifactId>
-            <type>test-jar</type>
-        </dependency>
-        <dependency>
-            <groupId>${james.groupId}</groupId>
             <artifactId>blob-objectstorage</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
@@ -124,12 +119,6 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
-            <artifactId>james-server-mailbox-plugin-deleted-messages-vault-guice</artifactId>
-            <scope>test</scope>
-            <type>test-jar</type>
-        </dependency>
-        <dependency>
-            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-testing</artifactId>
             <scope>test</scope>
         </dependency>
diff --git a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQDeletedMessagesVaultTest.java b/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQDeletedMessagesVaultTest.java
deleted file mode 100644
index 176b309..0000000
--- a/server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQDeletedMessagesVaultTest.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.jmap.rabbitmq;
-
-import java.io.IOException;
-import java.time.Clock;
-
-import org.apache.james.CassandraRabbitMQAwsS3JmapTestRule;
-import org.apache.james.DockerCassandraRule;
-import org.apache.james.GuiceJamesServer;
-import org.apache.james.filesystem.api.FileSystem;
-import org.apache.james.jmap.draft.methods.integration.DeletedMessagesVaultTest;
-import org.apache.james.modules.vault.TestDeleteMessageVaultPreDeletionHookModule;
-import org.apache.james.webadmin.WebAdminConfiguration;
-import org.junit.Rule;
-
-public class RabbitMQDeletedMessagesVaultTest extends DeletedMessagesVaultTest {
-    @Rule
-    public DockerCassandraRule cassandra = new DockerCassandraRule();
-
-    @Rule
-    public CassandraRabbitMQAwsS3JmapTestRule rule = CassandraRabbitMQAwsS3JmapTestRule.defaultTestRule();
-
-    @Override
-    protected GuiceJamesServer createJmapServer(FileSystem fileSystem, Clock clock) throws IOException {
-        return rule.jmapServer(cassandra.getModule(),
-            new TestDeleteMessageVaultPreDeletionHookModule(),
-            binder -> binder.bind(WebAdminConfiguration.class).toInstance(WebAdminConfiguration.TEST_CONFIGURATION),
-            binder -> binder.bind(FileSystem.class).toInstance(fileSystem),
-            binder -> binder.bind(Clock.class).toInstance(clock));
-    }
-
-    @Override
-    protected void awaitSearchUpToDate() {
-        rule.await();
-    }
-}
diff --git a/server/protocols/webadmin-integration-test/pom.xml b/server/protocols/webadmin-integration-test/pom.xml
index 7e58acb..9ef15ce 100644
--- a/server/protocols/webadmin-integration-test/pom.xml
+++ b/server/protocols/webadmin-integration-test/pom.xml
@@ -70,6 +70,12 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>backup</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>blob-objectstorage</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
@@ -111,6 +117,17 @@
         </dependency>
         <dependency>
             <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-mailbox-plugin-deleted-messages-vault-guice</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-testing</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${james.groupId}</groupId>
             <artifactId>james-server-webadmin-core</artifactId>
             <type>test-jar</type>
             <scope>test</scope>
diff --git a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/DeletedMessagesVaultTest.java b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/vault/DeletedMessageVaultIntegrationTest.java
similarity index 91%
rename from server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/DeletedMessagesVaultTest.java
rename to server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/vault/DeletedMessageVaultIntegrationTest.java
index 6e43cd8..07755af 100644
--- a/server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/DeletedMessagesVaultTest.java
+++ b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/vault/DeletedMessageVaultIntegrationTest.java
@@ -17,30 +17,29 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.draft.methods.integration;
+package org.apache.james.webadmin.integration.vault;
 
 import static io.restassured.RestAssured.given;
 import static io.restassured.RestAssured.with;
 import static io.restassured.config.ParamConfig.UpdateStrategy.REPLACE;
-import static org.apache.james.jmap.DeletedMessagesVaultRequests.deleteFromVault;
-import static org.apache.james.jmap.DeletedMessagesVaultRequests.exportVaultContent;
-import static org.apache.james.jmap.DeletedMessagesVaultRequests.purgeVault;
-import static org.apache.james.jmap.DeletedMessagesVaultRequests.restoreMessagesForUserWithQuery;
 import static org.apache.james.jmap.HttpJmapAuthentication.authenticateJamesUser;
+import static org.apache.james.jmap.JMAPTestingConstants.ARGUMENTS;
+import static org.apache.james.jmap.JMAPTestingConstants.DOMAIN;
+import static org.apache.james.jmap.JMAPTestingConstants.LOCALHOST_IP;
+import static org.apache.james.jmap.JMAPTestingConstants.calmlyAwait;
+import static org.apache.james.jmap.JMAPTestingConstants.jmapRequestSpecBuilder;
 import static org.apache.james.jmap.JmapCommonRequests.deleteMessages;
 import static org.apache.james.jmap.JmapCommonRequests.getAllMailboxesIds;
 import static org.apache.james.jmap.JmapCommonRequests.getLastMessageId;
 import static org.apache.james.jmap.JmapCommonRequests.getOutboxId;
 import static org.apache.james.jmap.JmapCommonRequests.listMessageIdsForAccount;
 import static org.apache.james.jmap.JmapURIBuilder.baseUri;
-import static org.apache.james.jmap.TestingConstants.ARGUMENTS;
-import static org.apache.james.jmap.TestingConstants.DOMAIN;
-import static org.apache.james.jmap.TestingConstants.LOCALHOST_IP;
-import static org.apache.james.jmap.TestingConstants.calmlyAwait;
-import static org.apache.james.jmap.TestingConstants.jmapRequestSpecBuilder;
-import static org.apache.james.linshare.LinshareFixture.MATCH_ALL_QUERY;
 import static org.apache.james.mailbox.backup.ZipAssert.EntryChecks.hasName;
 import static org.apache.james.mailbox.backup.ZipAssert.assertThatZip;
+import static org.apache.james.webadmin.integration.vault.DeletedMessagesVaultRequests.deleteFromVault;
+import static org.apache.james.webadmin.integration.vault.DeletedMessagesVaultRequests.exportVaultContent;
+import static org.apache.james.webadmin.integration.vault.DeletedMessagesVaultRequests.purgeVault;
+import static org.apache.james.webadmin.integration.vault.DeletedMessagesVaultRequests.restoreMessagesForUserWithQuery;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.hamcrest.Matchers.hasItem;
 
@@ -50,28 +49,29 @@ import java.time.Clock;
 import java.time.ZonedDateTime;
 import java.util.List;
 
+import org.apache.james.CassandraRabbitMQAwsS3JmapTestRule;
+import org.apache.james.DockerCassandraRule;
 import org.apache.james.GuiceJamesServer;
 import org.apache.james.core.Username;
 import org.apache.james.filesystem.api.FileSystem;
-import org.apache.james.jmap.ExportRequest;
-import org.apache.james.jmap.api.access.AccessToken;
-import org.apache.james.jmap.categories.BasicFeature;
+import org.apache.james.jmap.AccessToken;
+import org.apache.james.jmap.draft.JmapGuiceProbe;
 import org.apache.james.mailbox.DefaultMailboxes;
 import org.apache.james.mailbox.Role;
 import org.apache.james.mailbox.backup.ZipAssert;
-import org.apache.james.mailbox.backup.ZipAssert.EntryChecks;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.probe.MailboxProbe;
 import org.apache.james.modules.MailboxProbeImpl;
 import org.apache.james.modules.protocols.ImapGuiceProbe;
+import org.apache.james.modules.vault.TestDeleteMessageVaultPreDeletionHookModule;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.server.core.JamesServerResourceLoader;
 import org.apache.james.server.core.filesystem.FileSystemImpl;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.IMAPMessageReader;
-import org.apache.james.jmap.draft.JmapGuiceProbe;
 import org.apache.james.utils.UpdatableTickingClock;
 import org.apache.james.utils.WebAdminGuiceProbe;
+import org.apache.james.webadmin.WebAdminConfiguration;
 import org.apache.james.webadmin.WebAdminUtils;
 import org.awaitility.Duration;
 import org.awaitility.core.ConditionFactory;
@@ -79,7 +79,6 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.experimental.categories.Category;
 import org.junit.rules.TemporaryFolder;
 
 import com.google.common.base.Strings;
@@ -90,7 +89,8 @@ import io.restassured.config.ParamConfig;
 import io.restassured.parsing.Parser;
 import io.restassured.specification.RequestSpecification;
 
-public abstract class DeletedMessagesVaultTest {
+public class DeletedMessageVaultIntegrationTest {
+
     private static final ZonedDateTime NOW = ZonedDateTime.now();
     private static final ZonedDateTime TWO_MONTH_AFTER_ONE_YEAR_EXPIRATION = NOW.plusYears(1).plusMonths(2);
     private static final String FIRST_SUBJECT = "first subject";
@@ -103,6 +103,10 @@ public abstract class DeletedMessagesVaultTest {
     private static final ConditionFactory WAIT_TWO_MINUTES = calmlyAwait.atMost(Duration.TWO_MINUTES);
     private static final String SUBJECT = "This mail will be restored from the vault!!";
     private static final String MAILBOX_NAME = "toBeDeleted";
+    private static final String MATCH_ALL_QUERY = "{" +
+        "\"combinator\": \"and\"," +
+        "\"criteria\": []" +
+        "}";
     private static final ExportRequest EXPORT_ALL_HOMER_MESSAGES_TO_BART = ExportRequest
         .userExportFrom(HOMER)
         .exportTo(BART)
@@ -111,13 +115,11 @@ public abstract class DeletedMessagesVaultTest {
         .userExportFrom(JACK)
         .exportTo(HOMER)
         .query(MATCH_ALL_QUERY);
-
-    private MailboxId otherMailboxId;
-
-    protected abstract GuiceJamesServer createJmapServer(FileSystem fileSystem, Clock clock) throws IOException;
-
-    protected abstract void awaitSearchUpToDate();
-
+    
+    @Rule
+    public DockerCassandraRule cassandra = new DockerCassandraRule();
+    @Rule
+    public CassandraRabbitMQAwsS3JmapTestRule rule = CassandraRabbitMQAwsS3JmapTestRule.defaultTestRule();
     @Rule
     public IMAPMessageReader imapMessageReader = new IMAPMessageReader();
     @Rule
@@ -129,6 +131,7 @@ public abstract class DeletedMessagesVaultTest {
     private GuiceJamesServer jmapServer;
     private RequestSpecification webAdminApi;
     private UpdatableTickingClock clock;
+    private MailboxId otherMailboxId;
     private FileSystem fileSystem;
 
     @Before
@@ -151,21 +154,35 @@ public abstract class DeletedMessagesVaultTest {
         dataProbe.addUser(JACK, PASSWORD);
         mailboxProbe.createMailbox("#private", HOMER, DefaultMailboxes.INBOX);
         otherMailboxId = mailboxProbe.createMailbox("#private", HOMER, MAILBOX_NAME);
-        homerAccessToken = authenticateJamesUser(baseUri(jmapServer), Username.of(HOMER), PASSWORD);
-        bartAccessToken = authenticateJamesUser(baseUri(jmapServer), Username.of(BART), BOB_PASSWORD);
-        jackAccessToken = authenticateJamesUser(baseUri(jmapServer), Username.of(JACK), PASSWORD);
+        int jmapPort = jmapServer.getProbe(JmapGuiceProbe.class)
+            .getJmapPort();
+        homerAccessToken = authenticateJamesUser(baseUri(jmapPort), Username.of(HOMER), PASSWORD);
+        bartAccessToken = authenticateJamesUser(baseUri(jmapPort), Username.of(BART), BOB_PASSWORD);
+        jackAccessToken = authenticateJamesUser(baseUri(jmapPort), Username.of(JACK), PASSWORD);
 
         webAdminApi = WebAdminUtils.spec(jmapServer.getProbe(WebAdminGuiceProbe.class).getWebAdminPort())
             .config(WebAdminUtils.defaultConfig()
                 .paramConfig(new ParamConfig(REPLACE, REPLACE, REPLACE)));
     }
+    
+    private GuiceJamesServer createJmapServer(FileSystem fileSystem, Clock clock) throws IOException {
+        return rule.jmapServer(cassandra.getModule(),
+            new TestDeleteMessageVaultPreDeletionHookModule(),
+            binder -> binder.bind(WebAdminConfiguration.class).toInstance(WebAdminConfiguration.TEST_CONFIGURATION),
+            binder -> binder.bind(FileSystem.class).toInstance(fileSystem),
+            binder -> binder.bind(Clock.class).toInstance(clock));
+    }
 
+    private void awaitSearchUpToDate() {
+        rule.await();
+    }
+    
     @After
     public void tearDown() throws Exception {
         jmapServer.stop();
     }
 
-    @Category(BasicFeature.class)
+    
     @Test
     public void vaultEndpointShouldRestoreJmapDeletedEmail() {
         bartSendMessageToHomer();
@@ -179,7 +196,7 @@ public abstract class DeletedMessagesVaultTest {
 
         String messageId = listMessageIdsForAccount(homerAccessToken).get(0);
         given()
-            .header("Authorization", homerAccessToken.serialize())
+            .header("Authorization", homerAccessToken.asString())
             .body("[[\"getMessages\", {\"ids\": [\"" + messageId + "\"]}, \"#0\"]]")
         .when()
             .post("/jmap")
@@ -188,8 +205,7 @@ public abstract class DeletedMessagesVaultTest {
             .log().ifValidationFails()
             .body(ARGUMENTS + ".list.subject", hasItem(SUBJECT));
     }
-
-    @Category(BasicFeature.class)
+    
     @Test
     public void vaultEndpointShouldRestoreImapDeletedEmail() throws Exception {
         bartSendMessageToHomer();
@@ -208,7 +224,7 @@ public abstract class DeletedMessagesVaultTest {
 
         String messageId = listMessageIdsForAccount(homerAccessToken).get(0);
         given()
-            .header("Authorization", homerAccessToken.serialize())
+            .header("Authorization", homerAccessToken.asString())
             .body("[[\"getMessages\", {\"ids\": [\"" + messageId + "\"]}, \"#0\"]]")
         .when()
             .post("/jmap")
@@ -218,7 +234,7 @@ public abstract class DeletedMessagesVaultTest {
             .body(ARGUMENTS + ".list.subject", hasItem(SUBJECT));
     }
 
-    @Category(BasicFeature.class)
+    
     @Test
     public void vaultEndpointShouldRestoreImapDeletedMailbox() throws Exception {
         bartSendMessageToHomer();
@@ -239,7 +255,7 @@ public abstract class DeletedMessagesVaultTest {
 
         String messageId = listMessageIdsForAccount(homerAccessToken).get(0);
         given()
-            .header("Authorization", homerAccessToken.serialize())
+            .header("Authorization", homerAccessToken.asString())
             .body("[[\"getMessages\", {\"ids\": [\"" + messageId + "\"]}, \"#0\"]]")
         .when()
             .post("/jmap")
@@ -289,7 +305,7 @@ public abstract class DeletedMessagesVaultTest {
 
         String messageId = listMessageIdsForAccount(homerAccessToken).get(0);
         given()
-            .header("Authorization", homerAccessToken.serialize())
+            .header("Authorization", homerAccessToken.asString())
             .body("[[\"getMessages\", {\"ids\": [\"" + messageId + "\"]}, \"#0\"]]")
         .when()
             .post("/jmap")
@@ -452,7 +468,7 @@ public abstract class DeletedMessagesVaultTest {
 
         String newMessageId = listMessageIdsForAccount(homerAccessToken).get(0);
         given()
-            .header("Authorization", homerAccessToken.serialize())
+            .header("Authorization", homerAccessToken.asString())
             .body("[[\"getMessages\", {\"ids\": [\"" + newMessageId + "\"]}, \"#0\"]]")
         .when()
             .post("/jmap")
@@ -462,7 +478,7 @@ public abstract class DeletedMessagesVaultTest {
             .body(ARGUMENTS + ".list.subject", hasItem(SUBJECT));
     }
 
-    @Category(BasicFeature.class)
+    
     @Test
     public void vaultExportShouldExportZipContainsVaultMessagesToShareeWhenJmapDeleteMessage() throws Exception {
         bartSendMessageToHomer();
@@ -476,11 +492,11 @@ public abstract class DeletedMessagesVaultTest {
 
         try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocation))) {
             zipAssert.hasEntriesSize(1)
-                .allSatisfies(entry -> EntryChecks.hasName(messageIdOfHomer + ".eml"));
+                .allSatisfies(entry -> hasName(messageIdOfHomer + ".eml"));
         }
     }
 
-    @Category(BasicFeature.class)
+    
     @Test
     public void vaultExportShouldExportZipContainsVaultMessagesToShareeWhenImapDeleteMessage() throws Exception {
         bartSendMessageToHomer();
@@ -499,11 +515,11 @@ public abstract class DeletedMessagesVaultTest {
 
         try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocation))) {
             zipAssert.hasEntriesSize(1)
-                .allSatisfies(entry -> EntryChecks.hasName(messageIdOfHomer + ".eml"));
+                .allSatisfies(entry -> hasName(messageIdOfHomer + ".eml"));
         }
     }
 
-    @Category(BasicFeature.class)
+    
     @Test
     public void vaultExportShouldExportZipContainsVaultMessagesToShareeWhenImapDeletedMailbox() throws Exception {
         bartSendMessageToHomer();
@@ -524,7 +540,7 @@ public abstract class DeletedMessagesVaultTest {
 
         try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocation))) {
             zipAssert.hasEntriesSize(1)
-                .allSatisfies(entry -> EntryChecks.hasName(messageIdOfHomer + ".eml"));
+                .allSatisfies(entry -> hasName(messageIdOfHomer + ".eml"));
         }
     }
 
@@ -645,7 +661,7 @@ public abstract class DeletedMessagesVaultTest {
         String fileLocation = exportAndGetFileLocationFromLastMail(EXPORT_ALL_HOMER_MESSAGES_TO_BART, bartAccessToken);
         try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocation))) {
             zipAssert.hasEntriesSize(1)
-                .allSatisfies(entry -> EntryChecks.hasName(messageIdOfNotExpiredMessage + ".eml"));
+                .allSatisfies(entry -> hasName(messageIdOfNotExpiredMessage + ".eml"));
         }
     }
 
@@ -732,7 +748,7 @@ public abstract class DeletedMessagesVaultTest {
         String fileLocation = exportAndGetFileLocationFromLastMail(EXPORT_ALL_HOMER_MESSAGES_TO_BART, bartAccessToken);
         try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocation))) {
             zipAssert.hasEntriesSize(1)
-                .allSatisfies(entry -> EntryChecks.hasName(messageIdOfHomer + ".eml"));
+                .allSatisfies(entry -> hasName(messageIdOfHomer + ".eml"));
         }
     }
 
@@ -797,7 +813,7 @@ public abstract class DeletedMessagesVaultTest {
         String fileLocationOfBartMessages = exportAndGetFileLocationFromLastMail(EXPORT_ALL_JACK_MESSAGES_TO_HOMER, homerAccessToken);
         try (ZipAssert zipAssert = assertThatZip(new FileInputStream(fileLocationOfBartMessages))) {
             zipAssert.hasEntriesSize(1)
-                .allSatisfies(entry -> EntryChecks.hasName(jackInboxMessageId + ".eml"));
+                .allSatisfies(entry -> hasName(jackInboxMessageId + ".eml"));
         }
     }
 
@@ -813,7 +829,7 @@ public abstract class DeletedMessagesVaultTest {
 
     private String exportedFileLocationFromMailHeader(String messageId, AccessToken accessToken) {
         return with()
-                .header("Authorization", accessToken.serialize())
+                .header("Authorization", accessToken.asString())
                 .body("[[\"getMessages\", {\"ids\": [\"" + messageId + "\"]}, \"#0\"]]")
                 .post("/jmap")
             .jsonPath()
@@ -823,7 +839,7 @@ public abstract class DeletedMessagesVaultTest {
 
     private void homerSharesHisMailboxWithBart() {
         with()
-            .header("Authorization", homerAccessToken.serialize())
+            .header("Authorization", homerAccessToken.asString())
             .body("[" +
                 "  [ \"setMailboxes\"," +
                 "    {" +
@@ -866,7 +882,7 @@ public abstract class DeletedMessagesVaultTest {
             "]";
 
         with()
-            .header("Authorization", bartAccessToken.serialize())
+            .header("Authorization", bartAccessToken.asString())
             .body(requestBody)
             .post("/jmap")
         .then()
@@ -898,7 +914,7 @@ public abstract class DeletedMessagesVaultTest {
             "]";
 
         with()
-            .header("Authorization", bartAccessToken.serialize())
+            .header("Authorization", bartAccessToken.asString())
             .body(requestBody)
             .post("/jmap")
         .then()
@@ -941,7 +957,7 @@ public abstract class DeletedMessagesVaultTest {
             "]";
 
         given()
-            .header("Authorization", homerAccessToken.serialize())
+            .header("Authorization", homerAccessToken.asString())
             .body(updateRequestBody)
             .when()
             .post("/jmap");
diff --git a/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/vault/DeletedMessagesVaultRequests.java b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/vault/DeletedMessagesVaultRequests.java
new file mode 100644
index 0000000..ee38992
--- /dev/null
+++ b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/vault/DeletedMessagesVaultRequests.java
@@ -0,0 +1,83 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.webadmin.integration.vault;
+
+import static org.hamcrest.Matchers.is;
+
+import io.restassured.specification.RequestSpecification;
+
+class DeletedMessagesVaultRequests {
+
+    static void exportVaultContent(RequestSpecification webAdminApi, ExportRequest exportRequest) {
+        String taskId =
+            webAdminApi.with()
+                .queryParam("action", "export")
+                .queryParam("exportTo", exportRequest.getSharee())
+                .body(exportRequest.getMatchingQuery())
+                .post("/deletedMessages/users/" + exportRequest.getUserExportFrom())
+            .jsonPath()
+                .get("taskId");
+
+        webAdminApi.with()
+            .get("/tasks/" + taskId + "/await")
+        .then()
+            .body("status", is("completed"));
+    }
+
+    static void restoreMessagesForUserWithQuery(RequestSpecification webAdminApi, String user, String criteria) {
+        String taskId = webAdminApi.with()
+            .body(criteria)
+            .post("/deletedMessages/users/" + user + "?action=restore")
+        .jsonPath()
+            .get("taskId");
+
+        webAdminApi.given()
+            .get("/tasks/" + taskId + "/await")
+        .then()
+            .body("status", is("completed"));
+    }
+
+    static void purgeVault(RequestSpecification webAdminApi) {
+        String taskId =
+            webAdminApi.with()
+                .queryParam("scope", "expired")
+                .delete("/deletedMessages")
+            .jsonPath()
+                .get("taskId");
+
+        webAdminApi.with()
+            .get("/tasks/" + taskId + "/await")
+        .then()
+            .body("status", is("completed"));
+    }
+
+    static void deleteFromVault(RequestSpecification webAdminApi, String user, String messageId) {
+        String taskId =
+            webAdminApi.with()
+                .delete("/deletedMessages/users/" + user + "/messages/" + messageId)
+            .jsonPath()
+                .get("taskId");
+
+        webAdminApi.with()
+            .get("/tasks/" + taskId + "/await")
+        .then()
+            .body("status", is("completed"));
+    }
+}
diff --git a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryDeletedMessagesVaultTest.java b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/vault/ExportRequest.java
similarity index 50%
rename from server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryDeletedMessagesVaultTest.java
rename to server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/vault/ExportRequest.java
index 1af2008..418ca2c 100644
--- a/server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryDeletedMessagesVaultTest.java
+++ b/server/protocols/webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/vault/ExportRequest.java
@@ -17,34 +17,46 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.jmap.memory;
-
-import java.io.IOException;
-import java.time.Clock;
-
-import org.apache.james.GuiceJamesServer;
-import org.apache.james.MemoryJmapTestRule;
-import org.apache.james.filesystem.api.FileSystem;
-import org.apache.james.jmap.draft.methods.integration.DeletedMessagesVaultTest;
-import org.apache.james.modules.vault.TestDeleteMessageVaultPreDeletionHookModule;
-import org.apache.james.webadmin.WebAdminConfiguration;
-import org.junit.Rule;
-
-public class MemoryDeletedMessagesVaultTest extends DeletedMessagesVaultTest {
-    @Rule
-    public MemoryJmapTestRule memoryJmap = new MemoryJmapTestRule();
-
-    @Override
-    protected GuiceJamesServer createJmapServer(FileSystem fileSystem, Clock clock) throws IOException {
-        return memoryJmap.jmapServer(
-            new TestDeleteMessageVaultPreDeletionHookModule(),
-            binder -> binder.bind(WebAdminConfiguration.class).toInstance(WebAdminConfiguration.TEST_CONFIGURATION),
-            binder -> binder.bind(FileSystem.class).toInstance(fileSystem),
-            binder -> binder.bind(Clock.class).toInstance(clock));
+package org.apache.james.webadmin.integration.vault;
+
+class ExportRequest {
+
+    public static class Builder {
+
+        @FunctionalInterface
+        public interface RequireSharee {
+            RequireMatchingQuery exportTo(String sharee);
+        }
+
+        @FunctionalInterface
+        public interface RequireMatchingQuery {
+            ExportRequest query(String query);
+        }
+    }
+
+    static Builder.RequireSharee userExportFrom(String userExportFrom) {
+        return sharee -> query -> new ExportRequest(userExportFrom, sharee, query);
     }
 
-    @Override
-    protected void awaitSearchUpToDate() {
+    private final String userExportFrom;
+    private final String sharee;
+    private final String matchingQuery;
+
+    private ExportRequest(String userExportFrom, String sharee, String matchingQuery) {
+        this.userExportFrom = userExportFrom;
+        this.sharee = sharee;
+        this.matchingQuery = matchingQuery;
+    }
+
+    String getUserExportFrom() {
+        return userExportFrom;
+    }
+
+    String getSharee() {
+        return sharee;
+    }
 
+    String getMatchingQuery() {
+        return matchingQuery;
     }
 }


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