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 dbe820e499f8e525049aa147876ed23ab2330212 Author: Rémi Kowalski <rkowal...@linagora.com> AuthorDate: Wed Sep 4 11:36:54 2019 +0200 JAMES-2813 serialize EventDeadLettersRedeliverTaskAdditionalInformation --- ...tersRedeliveryTaskAdditionalInformationDTO.java | 74 ++++++++++++++++++++++ .../service/EventDeadLettersRedeliverTaskTest.java | 62 ++++++++++++++++++ 2 files changed, 136 insertions(+) diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliveryTaskAdditionalInformationDTO.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliveryTaskAdditionalInformationDTO.java new file mode 100644 index 0000000..d1ed9f5 --- /dev/null +++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliveryTaskAdditionalInformationDTO.java @@ -0,0 +1,74 @@ +package org.apache.james.webadmin.service; + +import java.util.Optional; + +import org.apache.james.json.DTOModule; +import org.apache.james.mailbox.events.EventDeadLetters; +import org.apache.james.mailbox.events.Group; +import org.apache.james.server.task.json.dto.AdditionalInformationDTO; +import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.github.fge.lambdas.Throwing; + +public class EventDeadLettersRedeliveryTaskAdditionalInformationDTO implements AdditionalInformationDTO { + + public static final AdditionalInformationDTOModule<EventDeadLettersRedeliverTask.AdditionalInformation, EventDeadLettersRedeliveryTaskAdditionalInformationDTO> MODULE = + DTOModule + .forDomainObject(EventDeadLettersRedeliverTask.AdditionalInformation.class) + .convertToDTO(EventDeadLettersRedeliveryTaskAdditionalInformationDTO.class) + .toDomainObjectConverter(EventDeadLettersRedeliveryTaskAdditionalInformationDTO::fromDTO) + .toDTOConverter(EventDeadLettersRedeliveryTaskAdditionalInformationDTO::toDTO) + .typeName(EventDeadLettersRedeliverTask.TYPE.asString()) + .withFactory(AdditionalInformationDTOModule::new); + + private static EventDeadLettersRedeliveryTaskAdditionalInformationDTO toDTO(EventDeadLettersRedeliverTask.AdditionalInformation domainObject, String typeName) { + return new EventDeadLettersRedeliveryTaskAdditionalInformationDTO( + domainObject.getSuccessfulRedeliveriesCount(), + domainObject.getFailedRedeliveriesCount(), + domainObject.getGroup(), + domainObject.getInsertionId()); + } + + private static EventDeadLettersRedeliverTask.AdditionalInformation fromDTO(EventDeadLettersRedeliveryTaskAdditionalInformationDTO dto) { + return new EventDeadLettersRedeliverTask.AdditionalInformation( + dto.successfulRedeliveriesCount, + dto.failedRedeliveriesCount, + dto.group.map(Throwing.function(Group::deserialize).sneakyThrow()), + dto.insertionId.map(EventDeadLetters.InsertionId::of)); + } + + + private final long successfulRedeliveriesCount; + private final long failedRedeliveriesCount; + private final Optional<String> group; + private final Optional<String> insertionId; + + public EventDeadLettersRedeliveryTaskAdditionalInformationDTO(@JsonProperty("successfulRedeliveriesCount") long successfulRedeliveriesCount, + @JsonProperty("failedRedeliveriesCount") long failedRedeliveriesCount, + @JsonProperty("group") Optional<String> group, + @JsonProperty("insertionId") Optional<String> insertionId + ) { + this.successfulRedeliveriesCount = successfulRedeliveriesCount; + this.failedRedeliveriesCount = failedRedeliveriesCount; + this.group = group; + this.insertionId = insertionId; + } + + + public long getSuccessfulRedeliveriesCount() { + return successfulRedeliveriesCount; + } + + public long getFailedRedeliveriesCount() { + return failedRedeliveriesCount; + } + + public Optional<String> getGroup() { + return group; + } + + public Optional<String> getInsertionId() { + return insertionId; + } +} \ No newline at end of file diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverTaskTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverTaskTest.java index f3382a3..a3dd8ba 100644 --- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverTaskTest.java +++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverTaskTest.java @@ -19,12 +19,18 @@ package org.apache.james.webadmin.service; +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.util.Optional; +import org.apache.james.mailbox.events.EventDeadLetters; +import org.apache.james.mailbox.events.Group; +import org.apache.james.server.task.json.JsonTaskAdditionalInformationsSerializer; import org.apache.james.server.task.json.JsonTaskSerializer; +import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import com.fasterxml.jackson.core.JsonProcessingException; @@ -32,11 +38,29 @@ import net.javacrumbs.jsonunit.assertj.JsonAssertions; class EventDeadLettersRedeliverTaskTest { private static final String SERIALIZED = "{\"type\":\"eventDeadLettersRedeliverTask\"}"; + private static final String SERIALIZED_TASK_ADDITIONAL_INFORMATION = "{\"successfulRedeliveriesCount\":10,\"failedRedeliveriesCount\":4,\"group\":\"org.apache.james.mailbox.events.GenericGroup-foo\",\"insertionId\":\"53db3dd9-80eb-476f-b25a-722ad364905a\"}"; + private static final String SERIALIZED_TASK_ADDITIONAL_INFORMATION_EMPTY_FIELDS = "{\"successfulRedeliveriesCount\":10,\"failedRedeliveriesCount\":4}"; private static final EventDeadLettersRedeliverService SERVICE = mock(EventDeadLettersRedeliverService.class); private static final EventRetriever EVENT_RETRIEVER = mock(EventRetriever.class); private static final EventDeadLettersRedeliverTask TASK = new EventDeadLettersRedeliverTask(SERVICE, EVENT_RETRIEVER); private static final JsonTaskSerializer TESTEE = new JsonTaskSerializer(EventDeadLettersRedeliverTaskDTO.MODULE.apply(SERVICE, EVENT_RETRIEVER)); + private JsonTaskAdditionalInformationsSerializer jsonAdditionalInformationSerializer = new JsonTaskAdditionalInformationsSerializer( + EventDeadLettersRedeliveryTaskAdditionalInformationDTO.MODULE); + + private static final long SUCCESSFUL_REDELIVERY_COUNT = 10L; + private static final long FAILED_REDELIVERY_COUNT = 4L; + private static Optional<Group> SOME_GROUP; + + private static final Optional<EventDeadLetters.InsertionId> SOME_INSERTION_ID = Optional.of(EventDeadLetters.InsertionId.of("53db3dd9-80eb-476f-b25a-722ad364905a")); + private static final Optional<Group> NO_GROUP = Optional.empty(); + private static final Optional<EventDeadLetters.InsertionId> NO_INSERTION_ID = Optional.empty(); + + @BeforeAll + static void setUp() throws Exception { + SOME_GROUP = Optional.of(Group.deserialize("org.apache.james.mailbox.events.GenericGroup-foo")); + } + @Test void taskShouldBeSerializable() throws JsonProcessingException { JsonAssertions.assertThatJson(TESTEE.serialize(TASK)) @@ -48,4 +72,42 @@ class EventDeadLettersRedeliverTaskTest { assertThat(TESTEE.deserialize(SERIALIZED)) .isEqualToComparingFieldByFieldRecursively(TASK); } + + @Test + void additionalInformationShouldBeSerializable() throws JsonProcessingException { + EventDeadLettersRedeliverTask.AdditionalInformation details = new EventDeadLettersRedeliverTask.AdditionalInformation(SUCCESSFUL_REDELIVERY_COUNT, + FAILED_REDELIVERY_COUNT, + SOME_GROUP, + SOME_INSERTION_ID); + assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(SERIALIZED_TASK_ADDITIONAL_INFORMATION); + } + + @Test + void additionalInformationShouldBeDeserializable() throws IOException { + EventDeadLettersRedeliverTask.AdditionalInformation details = new EventDeadLettersRedeliverTask.AdditionalInformation(SUCCESSFUL_REDELIVERY_COUNT, + FAILED_REDELIVERY_COUNT, + SOME_GROUP, + SOME_INSERTION_ID); + assertThat(jsonAdditionalInformationSerializer.deserialize("eventDeadLettersRedeliverTask", SERIALIZED_TASK_ADDITIONAL_INFORMATION)) + .isEqualToComparingFieldByField(details); + } + + @Test + void additionalInformationShouldBeSerializableWithEmptyFields() throws JsonProcessingException { + EventDeadLettersRedeliverTask.AdditionalInformation details = new EventDeadLettersRedeliverTask.AdditionalInformation(SUCCESSFUL_REDELIVERY_COUNT, + FAILED_REDELIVERY_COUNT, + NO_GROUP, + NO_INSERTION_ID); + assertThatJson(jsonAdditionalInformationSerializer.serialize(details)).isEqualTo(SERIALIZED_TASK_ADDITIONAL_INFORMATION_EMPTY_FIELDS); + } + + @Test + void additionalInformationShouldBeDeserializableWithEmptyFields() throws IOException { + EventDeadLettersRedeliverTask.AdditionalInformation details = new EventDeadLettersRedeliverTask.AdditionalInformation(SUCCESSFUL_REDELIVERY_COUNT, + FAILED_REDELIVERY_COUNT, + NO_GROUP, + NO_INSERTION_ID); + assertThat(jsonAdditionalInformationSerializer.deserialize("eventDeadLettersRedeliverTask", SERIALIZED_TASK_ADDITIONAL_INFORMATION_EMPTY_FIELDS)) + .isEqualToComparingFieldByField(details); + } } \ 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