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 c27786aad7d4659d3fd8da980f900a9745fb6bb7 Author: Rémi Kowalski <rkowal...@linagora.com> AuthorDate: Tue Sep 3 17:07:09 2019 +0200 JAMES-2813 serialize DeleteMailsFromMailQueueTaskAdditionalInformationDTO --- ...sFromMailQueueTaskAdditionalInformationDTO.java | 91 +++++++++++++++++++++ .../service/DeleteMailsFromMailQueueTaskTest.java | 92 ++++++++++++++++++---- 2 files changed, 166 insertions(+), 17 deletions(-) diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskAdditionalInformationDTO.java b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskAdditionalInformationDTO.java new file mode 100644 index 0000000..53d15af --- /dev/null +++ b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskAdditionalInformationDTO.java @@ -0,0 +1,91 @@ +package org.apache.james.webadmin.service; + +import java.util.Optional; + +import org.apache.james.core.MailAddress; +import org.apache.james.json.DTOModule; +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 DeleteMailsFromMailQueueTaskAdditionalInformationDTO implements AdditionalInformationDTO { + + public static final AdditionalInformationDTOModule<DeleteMailsFromMailQueueTask.AdditionalInformation, DeleteMailsFromMailQueueTaskAdditionalInformationDTO> MODULE = + DTOModule + .forDomainObject(DeleteMailsFromMailQueueTask.AdditionalInformation.class) + .convertToDTO(DeleteMailsFromMailQueueTaskAdditionalInformationDTO.class) + .toDomainObjectConverter(DeleteMailsFromMailQueueTaskAdditionalInformationDTO::fromDTO) + .toDTOConverter(DeleteMailsFromMailQueueTaskAdditionalInformationDTO::toDTO) + .typeName(DeleteMailsFromMailQueueTask.TYPE.asString()) + .withFactory(AdditionalInformationDTOModule::new); + + private static DeleteMailsFromMailQueueTaskAdditionalInformationDTO toDTO(DeleteMailsFromMailQueueTask.AdditionalInformation domainObject, String typeName) { + return new DeleteMailsFromMailQueueTaskAdditionalInformationDTO( + domainObject.getMailQueueName(), + domainObject.getSender(), + domainObject.getName(), + domainObject.getRecipient(), + domainObject.getInitialCount(), + domainObject.getRemainingCount()); + } + + private static DeleteMailsFromMailQueueTask.AdditionalInformation fromDTO(DeleteMailsFromMailQueueTaskAdditionalInformationDTO dto) { + return new DeleteMailsFromMailQueueTask.AdditionalInformation( + dto.getQueue(), + dto.getInitialCount(), + dto.getRemainingCount(), + dto.sender.map(Throwing.<String, MailAddress>function(MailAddress::new).sneakyThrow()), + dto.name, + dto.recipient.map(Throwing.<String, MailAddress>function(MailAddress::new).sneakyThrow())); + } + + + private final String queue; + private final Optional<String> sender; + private final Optional<String> name; + private final Optional<String> recipient; + private final long initialCount; + private final long remainingCount; + + public DeleteMailsFromMailQueueTaskAdditionalInformationDTO(@JsonProperty("queue") String queue, + @JsonProperty("sender") Optional<String> sender, + @JsonProperty("name") Optional<String> name, + @JsonProperty("recipient") Optional<String> recipient, + @JsonProperty("initialCount") long initialCount, + @JsonProperty("remainingCount") long remainingCount + ) { + this.queue = queue; + this.sender = sender; + this.name = name; + this.recipient = recipient; + this.initialCount = initialCount; + this.remainingCount = remainingCount; + } + + + public String getQueue() { + return queue; + } + + public Optional<String> getSender() { + return sender; + } + + public Optional<String> getName() { + return name; + } + + public Optional<String> getRecipient() { + return recipient; + } + + public long getInitialCount() { + return initialCount; + } + + public long getRemainingCount() { + return remainingCount; + } +} \ No newline at end of file diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskTest.java b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskTest.java index 1fad4ac..899c07c 100644 --- a/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskTest.java +++ b/server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskTest.java @@ -17,12 +17,14 @@ 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.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; +import java.io.IOException; import java.util.Optional; import java.util.stream.Stream; @@ -31,28 +33,40 @@ import javax.mail.internet.AddressException; import org.apache.james.core.MailAddress; import org.apache.james.queue.api.MailQueueFactory; import org.apache.james.queue.api.ManageableMailQueue; +import org.apache.james.server.task.json.JsonTaskAdditionalInformationsSerializer; import org.apache.james.server.task.json.JsonTaskSerializer; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import net.javacrumbs.jsonunit.assertj.JsonAssertions; +import com.fasterxml.jackson.core.JsonProcessingException; class DeleteMailsFromMailQueueTaskTest { + + private MailQueueFactory<ManageableMailQueue> mailQueueFactory; + private ManageableMailQueue mockedQueue; + private final static String queueName = "anyQueue"; + private JsonTaskAdditionalInformationsSerializer jsonAdditionalInformationsSerializer = new JsonTaskAdditionalInformationsSerializer(DeleteMailsFromMailQueueTaskAdditionalInformationDTO.MODULE); + + @BeforeEach + private void setUp() { + mailQueueFactory = mock(MailQueueFactory.class); + mockedQueue = mock(ManageableMailQueue.class); + when(mockedQueue.getName()).thenReturn(queueName); + when(mailQueueFactory.getQueue(anyString())).thenAnswer(arg -> Optional.of(mockedQueue)); + } + @ParameterizedTest @MethodSource void taskShouldBeSerializable(Optional<MailAddress> sender, Optional<String> name, Optional<MailAddress> recipient, String serializedJson) throws Exception { - MailQueueFactory<ManageableMailQueue> mailQueueFactory = mock(MailQueueFactory.class); - ManageableMailQueue mockedQueue = mock(ManageableMailQueue.class); - String queueName = "anyQueue"; - when(mockedQueue.getName()).thenReturn(queueName); - when(mailQueueFactory.getQueue(anyString())).thenAnswer(arg -> Optional.of(mockedQueue)); + JsonTaskSerializer testee = new JsonTaskSerializer(DeleteMailsFromMailQueueTaskDTO.MODULE.apply(mailQueueFactory)); ManageableMailQueue queue = mailQueueFactory.getQueue(queueName).get(); DeleteMailsFromMailQueueTask task = new DeleteMailsFromMailQueueTask(queue, sender, name, recipient); - JsonAssertions.assertThatJson(testee.serialize(task)).isEqualTo(serializedJson); + assertThatJson(testee.serialize(task)).isEqualTo(serializedJson); } private static Stream<Arguments> taskShouldBeSerializable() throws Exception { @@ -62,11 +76,6 @@ class DeleteMailsFromMailQueueTaskTest { @ParameterizedTest @MethodSource void taskShouldBeDeserializable(Optional<MailAddress> sender, Optional<String> name, Optional<MailAddress> recipient, String serializedJson) throws Exception { - MailQueueFactory<ManageableMailQueue> mailQueueFactory = mock(MailQueueFactory.class); - ManageableMailQueue mockedQueue = mock(ManageableMailQueue.class); - String queueName = "anyQueue"; - when(mockedQueue.getName()).thenReturn(queueName); - when(mailQueueFactory.getQueue(anyString())).thenAnswer(arg -> Optional.of(mockedQueue)); JsonTaskSerializer testee = new JsonTaskSerializer(DeleteMailsFromMailQueueTaskDTO.MODULE.apply(mailQueueFactory)); ManageableMailQueue queue = mailQueueFactory.getQueue(queueName).get(); @@ -99,15 +108,64 @@ class DeleteMailsFromMailQueueTaskTest { @Test void taskShouldThrowWhenDeserializeAMalformedMailAddress() throws Exception { - MailQueueFactory<ManageableMailQueue> mailQueueFactory = mock(MailQueueFactory.class); - ManageableMailQueue mockedQueue = mock(ManageableMailQueue.class); - String queueName = "anyQueue"; - when(mockedQueue.getName()).thenReturn(queueName); - when(mailQueueFactory.getQueue(anyString())).thenAnswer(arg -> Optional.of(mockedQueue)); JsonTaskSerializer testee = new JsonTaskSerializer(DeleteMailsFromMailQueueTaskDTO.MODULE.apply(mailQueueFactory)); String serializedJson = "{\"type\": \"delete-mails-from-mail-queue\", \"queue\": \"" + queueName + "\", \"sender\": \"a.b.c\"}"; assertThatThrownBy(() -> testee.deserialize(serializedJson)) .isInstanceOf(AddressException.class); } + + private static Stream<Arguments> validAdditionalInformations() throws Exception { + return Stream.of( + Arguments.of(10L, 5L, Optional.of(new MailAddress("a@b.c")), Optional.empty(), Optional.empty(), "{\"queue\": \"anyQueue\", \"sender\": \"a@b.c\", \"initialCount\" : 10, \"remainingCount\":5}"), + Arguments.of(1L, 0L, Optional.empty(), Optional.of("name"), Optional.empty(), "{\"queue\": \"anyQueue\", \"name\": \"name\", \"initialCount\" : 1, \"remainingCount\":0}"), + Arguments.of(6L, 6L, Optional.empty(), Optional.empty(), Optional.of(new MailAddress("d@e.f")), "{\"queue\": \"anyQueue\", \"recipient\": \"d@e.f\", \"initialCount\" : 6, \"remainingCount\":6}") + ); + } + + @ParameterizedTest + @MethodSource + void additionalInformationShouldBeSerializable(long initialCount, + long remainingCount, + Optional<MailAddress> sender, + Optional<String> name, + Optional<MailAddress> recipient, + String serializedAdditionalInformationJson) throws JsonProcessingException { + + ManageableMailQueue queue = mailQueueFactory.getQueue(queueName).get(); + DeleteMailsFromMailQueueTask.AdditionalInformation details = new DeleteMailsFromMailQueueTask.AdditionalInformation(queue.getName(), initialCount, remainingCount, sender, name, recipient); + + assertThatJson(jsonAdditionalInformationsSerializer.serialize(details)).isEqualTo(serializedAdditionalInformationJson); + } + + private static Stream<Arguments> additionalInformationShouldBeSerializable() throws Exception { + return validAdditionalInformations(); + } + + @ParameterizedTest + @MethodSource + void additionalInformationShouldBeDeserializable(long initialCount, + long remainingCount, + Optional<MailAddress> sender, + Optional<String> name, + Optional<MailAddress> recipient, + String serializedAdditionalInformationJson) throws IOException { + DeleteMailsFromMailQueueTask.AdditionalInformation details = new DeleteMailsFromMailQueueTask.AdditionalInformation(queueName, initialCount, remainingCount, sender, name, recipient); + + assertThat(jsonAdditionalInformationsSerializer.deserialize("delete-mails-from-mail-queue", serializedAdditionalInformationJson)) + .isEqualToComparingFieldByField(details); + } + + private static Stream<Arguments> additionalInformationShouldBeDeserializable() throws Exception { + return validAdditionalInformations(); + } + + @Test + void additionalInformationShouldThrowWhenDeserializeAMalformedMailAddress() throws Exception { + + String serializedJson = "{\"queue\": \"anyQueue\", \"sender\": \"a.b.c\", \"initialCount\" : 10, \"remainingCount\":5}"; + assertThatThrownBy(() -> jsonAdditionalInformationsSerializer.deserialize("delete-mails-from-mail-queue", serializedJson)) + .isInstanceOf(AddressException.class); + } + } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org