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