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]

Reply via email to