This is an automated email from the ASF dual-hosted git repository.
quantranhong1999 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/master by this push:
new df2fcf24ef [TESTS] Deleted Message Vault: add missing 'restore by
messageId' browse tests
df2fcf24ef is described below
commit df2fcf24efb7c2073e53569f79213735006d7f00
Author: Benoit TELLIER <[email protected]>
AuthorDate: Tue Aug 18 09:30:07 2026 +0700
[TESTS] Deleted Message Vault: add missing 'restore by messageId' browse
tests
---
.../vault/DeletedMessageVaultSearchContract.java | 23 +++++-
.../james/vault/dto/query/QueryTranslatorTest.java | 10 +++
.../routes/DeletedMessagesVaultRoutesTest.java | 90 ++++++++++++++++++++++
3 files changed, 122 insertions(+), 1 deletion(-)
diff --git
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultSearchContract.java
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultSearchContract.java
index e1bc520d32..286f89ec63 100644
---
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultSearchContract.java
+++
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultSearchContract.java
@@ -61,7 +61,7 @@ public interface DeletedMessageVaultSearchContract {
DeletedMessageVault getVault();
interface AllContracts extends SubjectContract, DeletionDateContract,
DeliveryDateContract, RecipientsContract, SenderContract,
- HasAttachmentsContract, OriginMailboxesContract, PerUserContract,
MultipleSearchCriterionsContract, StringByLocaleContract {
+ HasAttachmentsContract, OriginMailboxesContract, MessageIdContract,
PerUserContract, MultipleSearchCriterionsContract, StringByLocaleContract {
}
interface DeliveryDateContract extends DeletedMessageVaultSearchContract {
@@ -246,6 +246,27 @@ public interface DeletedMessageVaultSearchContract {
}
}
+ interface MessageIdContract extends DeletedMessageVaultSearchContract {
+
+ @Test
+ default void shouldReturnMessagesWithMessageIdWhenEquals() {
+ DeletedMessage message1 = storeDefaultMessage();
+ storeDefaultMessage();
+
+
assertThat(search(Query.of(CriterionFactory.messageId().equals(message1.getMessageId().serialize()))))
+ .containsOnly(message1);
+ }
+
+ @Test
+ default void shouldReturnNoMessageWhenMessageIdDoesntEquals() {
+ storeDefaultMessage();
+
+ assertThat(search(Query.of(CriterionFactory.messageId()
+
.equals(InMemoryMessageId.of(MESSAGE_ID_GENERATOR.incrementAndGet()).serialize()))))
+ .isEmpty();
+ }
+ }
+
interface SubjectContract extends DeletedMessageVaultSearchContract {
String APACHE_JAMES_PROJECT = "apache james project";
diff --git
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryTranslatorTest.java
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryTranslatorTest.java
index 6450b33a82..0f6c60993f 100644
---
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryTranslatorTest.java
+++
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryTranslatorTest.java
@@ -205,6 +205,16 @@ class QueryTranslatorTest {
));
}
+ @Test
+ void toDTOShouldConvertQueryWithMessageIdEquals() {
+ Query query = Query.of(
+ CriterionFactory.messageId().equals("42")
+ );
+ assertThat(queryTranslator.toDTO(query)).isEqualTo(QueryDTO.and(
+ new CriterionDTO(FieldName.MESSAGE_ID.getValue(),
Operator.EQUALS.getValue(), "42")
+ ));
+ }
+
@Test
void toDTOShouldConvertFlattenQuery() throws Exception {
Query query = Query.of(
diff --git
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
index 269f9d76da..90e7da58af 100644
---
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
+++
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
@@ -34,6 +34,7 @@ import static
org.apache.james.vault.DeletedMessageFixture.MAILBOX_ID_1;
import static org.apache.james.vault.DeletedMessageFixture.MAILBOX_ID_2;
import static org.apache.james.vault.DeletedMessageFixture.MAILBOX_ID_3;
import static org.apache.james.vault.DeletedMessageFixture.MESSAGE_ID;
+import static org.apache.james.vault.DeletedMessageFixture.MESSAGE_ID_2;
import static org.apache.james.vault.DeletedMessageFixture.SUBJECT;
import static org.apache.james.vault.DeletedMessageFixture.USERNAME;
import static org.apache.james.vault.DeletedMessageFixture.USERNAME_2;
@@ -1441,6 +1442,72 @@ class DeletedMessagesVaultRoutesTest {
}
}
+ @Nested
+ class MessageIdTest {
+
+ @Test
+ void
restoreShouldAppendMessageToMailboxWhenMatchingMessageId() throws Exception {
+ Mono.from(vault.append(DELETED_MESSAGE, new
ByteArrayInputStream(CONTENT))).block();
+
+ String query =
+ "{" +
+ " \"fieldName\": \"messageId\"," +
+ " \"operator\": \"equals\"," +
+ " \"value\": \"" + MESSAGE_ID.serialize() + "\"" +
+ "}";
+
+ String taskId =
+ given()
+ .queryParam("action", "restore")
+ .body(query)
+ .when()
+ .post(BOB_PATH)
+ .jsonPath()
+ .get("taskId");
+
+ given()
+ .basePath(TasksRoutes.BASE)
+ .when()
+ .get(taskId + "/await")
+ .then()
+ .body("status", is("completed"));
+
+ assertThat(restoreMessageContents(USERNAME))
+ .hasSize(1)
+ .hasOnlyOneElementSatisfying(messageIS ->
assertThat(messageIS).hasSameContentAs(new ByteArrayInputStream(CONTENT)));
+ }
+
+ @Test
+ void
restoreShouldNotAppendMessageToMailboxWhenMessageIdDoesntMatch() throws
Exception {
+ Mono.from(vault.append(DELETED_MESSAGE, new
ByteArrayInputStream(CONTENT))).block();
+
+ String query =
+ "{" +
+ " \"fieldName\": \"messageId\"," +
+ " \"operator\": \"equals\"," +
+ " \"value\": \"" + MESSAGE_ID_2.serialize() + "\"" +
+ "}";
+
+ String taskId =
+ given()
+ .queryParam("action", "restore")
+ .body(query)
+ .when()
+ .post(BOB_PATH)
+ .jsonPath()
+ .get("taskId");
+
+ given()
+ .basePath(TasksRoutes.BASE)
+ .when()
+ .get(taskId + "/await")
+ .then()
+ .body("status", is("completed"));
+
+ assertThat(hasAnyMail(USERNAME)).isFalse();
+ }
+ }
+
@Nested
class MultipleCriteriaTest {
@@ -2508,5 +2575,28 @@ class DeletedMessagesVaultRoutesTest {
.body("", hasSize(1))
.body("[0].messageId", is(MESSAGE_ID.serialize()));
}
+
+ @Test
+ void browseMessagesShouldFilterByMessageId() {
+ storeDeletedMessage(DELETED_MESSAGE);
+ storeDeletedMessage(DELETED_MESSAGE_2);
+
+ String messageIdQuery = "{" +
+ "\"combinator\": \"and\"," +
+ "\"criteria\": [{" +
+ " \"fieldName\": \"messageId\"," +
+ " \"operator\": \"equals\"," +
+ " \"value\": \"" + MESSAGE_ID.serialize() + "\"" +
+ "}]}";
+
+ given()
+ .body(messageIdQuery)
+ .when()
+ .post(BOB_MESSAGES_PATH)
+ .then()
+ .statusCode(HttpStatus.OK_200)
+ .body("", hasSize(1))
+ .body("[0].messageId", is(MESSAGE_ID.serialize()));
+ }
}
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]