This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 88998acae48a8199f1b1b64af707b0971433d57f
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Thu Dec 19 10:43:04 2019 +0700

    JAMES-2813 Adopt JsonSerializationVerifier for all vault tasks
    
    This requires customization of the equality check
---
 .../apache/james/JsonSerializationVerifier.java    | 38 +++++++---
 ...edMessagesVaultExportTaskSerializationTest.java | 80 ++++++++--------------
 ...dMessagesVaultRestoreTaskSerializationTest.java | 65 ++++++------------
 3 files changed, 82 insertions(+), 101 deletions(-)

diff --git a/json/src/test/java/org/apache/james/JsonSerializationVerifier.java 
b/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
index 7de4bfd..09cf2a8 100644
--- a/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
+++ b/json/src/test/java/org/apache/james/JsonSerializationVerifier.java
@@ -24,6 +24,8 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Optional;
+import java.util.function.BiConsumer;
 
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.james.json.DTO;
@@ -34,29 +36,42 @@ import com.github.fge.lambdas.Throwing;
 import com.google.common.collect.ImmutableList;
 
 public class JsonSerializationVerifier<T, U extends DTO> {
-
     @FunctionalInterface
     public interface RequireJson<T, U extends DTO> {
         JsonSerializationVerifier<T, U> json(String json);
     }
 
+    @FunctionalInterface
+    public interface EqualityTester<T> extends BiConsumer<T, T> {
+
+    }
+
     public static <T, U extends DTO> JsonSerializationVerifier<T, U> 
dtoModule(DTOModule<T, U> dtoModule) {
         return new JsonSerializationVerifier<>(JsonGenericSerializer
             .forModules(dtoModule)
             .withoutNestedType(),
-            ImmutableList.of());
+            ImmutableList.of(),
+            Optional.empty());
     }
 
     public static <T, U extends DTO> JsonSerializationVerifier<T, U> 
serializer(JsonGenericSerializer<T, U> serializer) {
-        return new JsonSerializationVerifier<>(serializer, ImmutableList.of());
+        return new JsonSerializationVerifier<>(serializer, ImmutableList.of(), 
Optional.empty());
+    }
+
+    private static <T> EqualityTester<T> defaultEqualityTester() {
+        return (a, b) -> assertThat(a)
+            .describedAs("Deserialization test [" + b + "]")
+            .isEqualToComparingFieldByFieldRecursively(b);
     }
 
     private final List<Pair<String, T>> testValues;
     private final JsonGenericSerializer<T, U> serializer;
+    private final Optional<EqualityTester<T>> equalityTester;
 
-    private JsonSerializationVerifier( JsonGenericSerializer<T, U> serializer, 
List<Pair<String, T>> testValues) {
+    private JsonSerializationVerifier(JsonGenericSerializer<T, U> serializer, 
List<Pair<String, T>> testValues, Optional<EqualityTester<T>> equalityTester) {
         this.testValues = testValues;
         this.serializer = serializer;
+        this.equalityTester = equalityTester;
     }
 
     public RequireJson<T, U> bean(T bean) {
@@ -65,7 +80,15 @@ public class JsonSerializationVerifier<T, U extends DTO> {
             ImmutableList.<Pair<String, T>>builder()
                 .addAll(testValues)
                 .add(Pair.of(json, bean))
-                .build());
+                .build(),
+            equalityTester);
+    }
+
+    public JsonSerializationVerifier<T, U> equalityTester(EqualityTester<T> 
equalityTester) {
+        return new JsonSerializationVerifier<>(
+            serializer,
+            testValues,
+            Optional.of(equalityTester));
     }
 
     public JsonSerializationVerifier<T, U> testCase(T bean, String json) {
@@ -81,8 +104,7 @@ public class JsonSerializationVerifier<T, U extends DTO> {
             .describedAs("Serialization test [" + testValue.getRight() + "]")
             .isEqualTo(testValue.getLeft());
 
-        assertThat(serializer.deserialize(testValue.getLeft()))
-            .describedAs("Deserialization test [" + testValue.getRight() + "]")
-            .isEqualToComparingFieldByFieldRecursively(testValue.getRight());
+        equalityTester.orElse(defaultEqualityTester())
+            .accept(serializer.deserialize(testValue.getLeft()), 
testValue.getRight());
     }
 }
diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java
index bee616e..0699822 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java
@@ -18,22 +18,19 @@
  ****************************************************************/
 package org.apache.james.webadmin.vault.routes;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatCode;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
 
 import javax.mail.internet.AddressException;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.core.MailAddress;
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.model.TestId;
 import 
org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
-import org.apache.james.server.task.json.JsonTaskSerializer;
-import org.apache.james.task.Task;
 import org.apache.james.vault.dto.query.QueryTranslator;
 import org.apache.james.vault.search.CriterionFactory;
 import org.apache.james.vault.search.Query;
@@ -41,31 +38,24 @@ import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-
 class DeletedMessagesVaultExportTaskSerializationTest {
-
     private static final Instant TIMESTAMP = 
Instant.parse("2018-11-13T12:00:55Z");
-
-    private ExportService exportService;
-    private final TestId.Factory mailboxIdFactory = new TestId.Factory();
-    private final QueryTranslator queryTranslator = new 
QueryTranslator(mailboxIdFactory);
-
-    private JsonTaskSerializer taskSerializer;
-
-    private static final String username = "james";
-    private static final Username USERNAME_EXPORT_FROM = Username.of(username);
+    private static final String USERNAME = "james";
+    private static final Username USERNAME_EXPORT_FROM = Username.of(USERNAME);
     private static final Query QUERY = 
Query.of(CriterionFactory.hasAttachment(true));
-    private static MailAddress exportTo;
-    private static DeletedMessagesVaultExportTask.AdditionalInformation 
details;
-
-    private static final String serializedDeleteMessagesVaultExportTask = 
"{\"type\":\"deleted-messages-export\"," +
+    private static final String SERIALIZED_DELETE_MESSAGES_VAULT_EXPORT_TASK = 
"{\"type\":\"deleted-messages-export\"," +
         "\"userExportFrom\":\"james\"," +
         
"\"exportQuery\":{\"combinator\":\"and\",\"criteria\":[{\"fieldName\":\"hasAttachment\",\"operator\":\"equals\",\"value\":\"true\"}]},"
 +
         "\"exportTo\":\"ja...@apache.org\"}\n";
     private static final String SERIALIZED_ADDITIONAL_INFORMATION_TASK = 
"{\"type\":\"deleted-messages-export\", 
\"exportTo\":\"ja...@apache.org\",\"userExportFrom\":\"james\",\"totalExportedMessages\":42,
 \"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private static MailAddress exportTo;
+    private static DeletedMessagesVaultExportTask.AdditionalInformation 
details;
 
-    private static final JsonTaskAdditionalInformationSerializer 
JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER = 
JsonTaskAdditionalInformationSerializer.of(DeletedMessagesVaultExportTaskAdditionalInformationDTO.MODULE);
+    private final TestId.Factory mailboxIdFactory = new TestId.Factory();
+    private final QueryTranslator queryTranslator = new 
QueryTranslator(mailboxIdFactory);
+    private ExportService exportService;
+    private DeletedMessagesVaultExportTaskDTO.Factory factory;
+    private 
JsonSerializationVerifier.EqualityTester<DeletedMessagesVaultExportTask> 
equalityTester;
 
     @BeforeAll
     static void init() throws AddressException {
@@ -76,45 +66,35 @@ class DeletedMessagesVaultExportTaskSerializationTest {
     @BeforeEach
     void setUp() {
         exportService = mock(ExportService.class);
-        DeletedMessagesVaultExportTaskDTO.Factory factory = new 
DeletedMessagesVaultExportTaskDTO.Factory(exportService, queryTranslator);
-        taskSerializer = 
JsonTaskSerializer.of(DeletedMessagesVaultExportTaskDTO.module(factory));
-    }
-
-    @Test
-    void deleteMessagesVaultExportTaskShouldBeSerializable() throws 
JsonProcessingException {
-        DeletedMessagesVaultExportTask task = new 
DeletedMessagesVaultExportTask(exportService, USERNAME_EXPORT_FROM, QUERY, 
exportTo);
-
-        assertThatJson(taskSerializer.serialize(task))
-            .isEqualTo(serializedDeleteMessagesVaultExportTask);
-    }
-
-    @Test
-    void deleteMessagesVaultExportTaskShouldBeDeserializable() throws 
IOException {
-        DeletedMessagesVaultExportTask task = new 
DeletedMessagesVaultExportTask(exportService, USERNAME_EXPORT_FROM, QUERY, 
exportTo);
-
-        Task deserializedTask = 
taskSerializer.deserialize(serializedDeleteMessagesVaultExportTask);
-        assertThat(deserializedTask)
-            .isEqualToComparingOnlyGivenFields(task, "userExportFrom", 
"exportTo");
-
-        DeletedMessagesVaultExportTask deserializedExportTask = 
(DeletedMessagesVaultExportTask) deserializedTask;
-        
assertThat(queryTranslator.toDTO(deserializedExportTask.exportQuery)).isEqualTo(queryTranslator.toDTO(QUERY));
+        factory = new DeletedMessagesVaultExportTaskDTO.Factory(exportService, 
queryTranslator);
+        equalityTester = (a, b) -> {
+            assertThat(a).isEqualToComparingOnlyGivenFields(b, 
"userExportFrom", "exportTo");
+            
assertThat(queryTranslator.toDTO(a.exportQuery)).isEqualTo(queryTranslator.toDTO(b.exportQuery));
+        };
     }
 
     @Test
-    void additionalInformationShouldBeSerializable() throws 
JsonProcessingException {
-        
assertThatJson(JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.serialize(details)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION_TASK);
+    void deleteMessagesVaultExportTaskShouldBeSerializable() throws Exception {
+        
JsonSerializationVerifier.dtoModule(DeletedMessagesVaultExportTaskDTO.module(factory))
+            .equalityTester(equalityTester)
+            .bean(new DeletedMessagesVaultExportTask(exportService, 
USERNAME_EXPORT_FROM, QUERY, exportTo))
+            .json(SERIALIZED_DELETE_MESSAGES_VAULT_EXPORT_TASK)
+            .verify();
     }
 
     @Test
-    void additionalInformationShouldBeDeserializable() throws IOException {
-        
assertThat(JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.deserialize(SERIALIZED_ADDITIONAL_INFORMATION_TASK))
-            .isEqualToComparingFieldByField(details);
+    void additionalInformationShouldBeSerializable() throws Exception {
+        
JsonSerializationVerifier.dtoModule(DeletedMessagesVaultExportTaskAdditionalInformationDTO.MODULE)
+            .bean(details)
+            .json(SERIALIZED_ADDITIONAL_INFORMATION_TASK)
+            .verify();
     }
 
     @Test
-    void additionalInformationWithInvalidMailAddressShouldThrow() throws 
IOException {
+    void additionalInformationWithInvalidMailAddressShouldThrow() {
         String invalidSerializedAdditionalInformationTask = 
"{\"type\":\"deleted-messages-export\",\"exportTo\":\"invalid\",\"userExportFrom\":\"james\",\"totalExportedMessages\":42}";;
-        assertThatCode(() -> 
JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.deserialize(invalidSerializedAdditionalInformationTask))
+        assertThatCode(() -> 
JsonTaskAdditionalInformationSerializer.of(DeletedMessagesVaultExportTaskAdditionalInformationDTO.MODULE)
+                .deserialize(invalidSerializedAdditionalInformationTask))
             .hasCauseInstanceOf(AddressException.class);
     }
 }
\ No newline at end of file
diff --git 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java
 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java
index 42e6f20..e243190 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java
@@ -18,84 +18,63 @@
  ****************************************************************/
 package org.apache.james.webadmin.vault.routes;
 
-import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
-import java.io.IOException;
 import java.time.Instant;
 
+import org.apache.james.JsonSerializationVerifier;
 import org.apache.james.core.Username;
 import org.apache.james.mailbox.model.TestId;
-import 
org.apache.james.server.task.json.JsonTaskAdditionalInformationSerializer;
-import org.apache.james.server.task.json.JsonTaskSerializer;
-import org.apache.james.task.Task;
 import org.apache.james.vault.dto.query.QueryTranslator;
 import org.apache.james.vault.search.CriterionFactory;
 import org.apache.james.vault.search.Query;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-
 class DeletedMessagesVaultRestoreTaskSerializationTest {
-
     private static final Instant TIMESTAMP = 
Instant.parse("2018-11-13T12:00:55Z");
-
-    private RestoreService exportService;
-    private final TestId.Factory mailboxIdFactory = new TestId.Factory();
-    private final QueryTranslator queryTranslator = new 
QueryTranslator(mailboxIdFactory);
-
-    private JsonTaskSerializer taskSerializer;
-
     private static final String USERNAME = "james";
     private static final Username USERNAME_TO_RESTORE = Username.of(USERNAME);
     private static final Query QUERY = 
Query.of(CriterionFactory.hasAttachment(true));
     private static final DeletedMessagesVaultRestoreTask.AdditionalInformation 
DETAILS = new 
DeletedMessagesVaultRestoreTask.AdditionalInformation(USERNAME_TO_RESTORE,42, 
10, TIMESTAMP);
-
     private static final String SERIALIZED_DELETE_MESSAGES_VAULT_RESTORE_TASK 
= "{\"type\":\"deleted-messages-restore\"," +
         "\"userToRestore\":\"james\"," +
         
"\"query\":{\"combinator\":\"and\",\"criteria\":[{\"fieldName\":\"hasAttachment\",\"operator\":\"equals\",\"value\":\"true\"}]}"
 +
         "}";
     private static final String SERIALIZED_ADDITIONAL_INFORMATION_TASK = 
"{\"type\":\"deleted-messages-restore\", 
\"user\":\"james\",\"successfulRestoreCount\":42,\"errorRestoreCount\":10, 
\"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
-    private static final JsonTaskAdditionalInformationSerializer 
JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER = 
JsonTaskAdditionalInformationSerializer.of(DeletedMessagesVaultRestoreTaskAdditionalInformationDTO.MODULE);
+    private final TestId.Factory mailboxIdFactory = new TestId.Factory();
+    private final QueryTranslator queryTranslator = new 
QueryTranslator(mailboxIdFactory);
+    private RestoreService exportService;
+    private 
JsonSerializationVerifier.EqualityTester<DeletedMessagesVaultRestoreTask> 
equalityTester;
+    private DeletedMessagesVaultRestoreTaskDTO.Factory factory;
 
     @BeforeEach
     void setUp() {
         exportService = mock(RestoreService.class);
-        DeletedMessagesVaultRestoreTaskDTO.Factory factory = new 
DeletedMessagesVaultRestoreTaskDTO.Factory(exportService, queryTranslator);
-        taskSerializer = 
JsonTaskSerializer.of(DeletedMessagesVaultRestoreTaskDTO.module(factory));
-    }
-
-    @Test
-    void deleteMessagesVaultRestoreTaskShouldBeSerializable() throws 
JsonProcessingException {
-        DeletedMessagesVaultRestoreTask task = new 
DeletedMessagesVaultRestoreTask(exportService, USERNAME_TO_RESTORE, QUERY);
-
-        assertThatJson(taskSerializer.serialize(task))
-            .isEqualTo(SERIALIZED_DELETE_MESSAGES_VAULT_RESTORE_TASK);
+        factory = new 
DeletedMessagesVaultRestoreTaskDTO.Factory(exportService, queryTranslator);
+        equalityTester = (a, b) -> {
+            assertThat(a).isEqualToComparingOnlyGivenFields(b, 
"userToRestore");
+            
assertThat(queryTranslator.toDTO(a.query)).isEqualTo(queryTranslator.toDTO(b.query));
+        };
     }
 
     @Test
-    void deleteMessagesVaultRestoreTaskShouldBeDeserializable() throws 
IOException {
+    void deleteMessagesVaultRestoreTaskShouldBeSerializable() throws Exception 
{
         DeletedMessagesVaultRestoreTask task = new 
DeletedMessagesVaultRestoreTask(exportService, USERNAME_TO_RESTORE, QUERY);
-
-        Task deserializedTask = 
taskSerializer.deserialize(SERIALIZED_DELETE_MESSAGES_VAULT_RESTORE_TASK);
-        assertThat(deserializedTask)
-            .isEqualToComparingOnlyGivenFields(task, "userToRestore");
-
-        DeletedMessagesVaultRestoreTask deserializedRestoreTask = 
(DeletedMessagesVaultRestoreTask) deserializedTask;
-        
assertThat(queryTranslator.toDTO(deserializedRestoreTask.query)).isEqualTo(queryTranslator.toDTO(QUERY));
-    }
-
-    @Test
-    void additionalInformationShouldBeSerializable() throws 
JsonProcessingException {
-        
assertThatJson(JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.serialize(DETAILS)).isEqualTo(SERIALIZED_ADDITIONAL_INFORMATION_TASK);
+        
JsonSerializationVerifier.dtoModule(DeletedMessagesVaultRestoreTaskDTO.module(factory))
+            .equalityTester(equalityTester)
+            .bean(task)
+            .json(SERIALIZED_DELETE_MESSAGES_VAULT_RESTORE_TASK)
+            .verify();
     }
 
     @Test
-    void additonalInformationShouldBeDeserializable() throws IOException {
-        
assertThat(JSON_TASK_ADDITIONAL_INFORMATION_SERIALIZER.deserialize(SERIALIZED_ADDITIONAL_INFORMATION_TASK))
-            .isEqualToComparingFieldByField(DETAILS);
+    void additionalInformationShouldBeSerializable() throws Exception {
+        
JsonSerializationVerifier.dtoModule(DeletedMessagesVaultRestoreTaskAdditionalInformationDTO.MODULE)
+            .bean(DETAILS)
+            .json(SERIALIZED_ADDITIONAL_INFORMATION_TASK)
+            .verify();
     }
 }
\ No newline at end of file


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

Reply via email to