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

Reply via email to