You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/09/11 10:01:13 UTC
[james-project] 23/38: JAMES-2813 serialize
EventDeadLettersRedeliverTaskAdditionalInformation
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 <rk...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org