From af7ad026b8c7e2345d65f90454933278d442e0fc Mon Sep 17 00:00:00 2001 From: Sashir Estela <sashirestela@yahoo.com> Date: Sun, 7 Apr 2024 18:54:22 +0000 Subject: [PATCH 1/4] Convert collections to bytearray in Multipart --- .../cleverclient/support/HttpMultipart.java | 24 +++++++- .../sashirestela/cleverclient/http/ITest.java | 16 ++++++ .../support/HttpMultipartTest.java | 57 +++++++++++++++++++ src/test/resources/loremipsum.txt | 1 + 4 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 src/test/java/io/github/sashirestela/cleverclient/support/HttpMultipartTest.java create mode 100644 src/test/resources/loremipsum.txt diff --git a/src/main/java/io/github/sashirestela/cleverclient/support/HttpMultipart.java b/src/main/java/io/github/sashirestela/cleverclient/support/HttpMultipart.java index add7c35..0678188 100644 --- a/src/main/java/io/github/sashirestela/cleverclient/support/HttpMultipart.java +++ b/src/main/java/io/github/sashirestela/cleverclient/support/HttpMultipart.java @@ -8,6 +8,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -49,15 +50,32 @@ public static List<byte[]> toByteArrays(Map<String, Object> data) { byteArrays.add(toBytes(NL)); } else { var fieldValue = entry.getValue(); - byteArrays.add(toBytes(FIELD_NAME + DQ + fieldName + DQ + NL)); - byteArrays.add(toBytes(NL)); - byteArrays.add(toBytes(fieldValue + NL)); + var isFirst = true; + if (fieldValue instanceof Collection) { + for (Object item : (Collection<?>) fieldValue) { + addIndividualField(byteArrays, fieldName + "[]", item, isFirst); + isFirst = false; + } + } else { + addIndividualField(byteArrays, fieldName, fieldValue, isFirst); + } } } byteArrays.add(toBytes(DASH + Constant.BOUNDARY_VALUE + DASH + NL)); return byteArrays; } + private static void addIndividualField(List<byte[]> byteArrays, String fieldName, Object fieldValue, + boolean isFirst) { + if (!isFirst) { + byteArrays.add(toBytes(DASH + Constant.BOUNDARY_VALUE + NL)); + byteArrays.add(toBytes(DISPOSITION)); + } + byteArrays.add(toBytes(FIELD_NAME + DQ + fieldName + DQ + NL)); + byteArrays.add(toBytes(NL)); + byteArrays.add(toBytes(fieldValue + NL)); + } + private static byte[] toBytes(String text) { return text.getBytes(StandardCharsets.UTF_8); } diff --git a/src/test/java/io/github/sashirestela/cleverclient/http/ITest.java b/src/test/java/io/github/sashirestela/cleverclient/http/ITest.java index d054a2c..d234f49 100644 --- a/src/test/java/io/github/sashirestela/cleverclient/http/ITest.java +++ b/src/test/java/io/github/sashirestela/cleverclient/http/ITest.java @@ -171,4 +171,20 @@ static class Generic<T> { } + @Getter + @AllArgsConstructor + static class MultipartClass { + + private java.nio.file.Path file; + + private int id; + + private String text; + + private List<String> group; + + private Integer[] numbers; + + } + } diff --git a/src/test/java/io/github/sashirestela/cleverclient/support/HttpMultipartTest.java b/src/test/java/io/github/sashirestela/cleverclient/support/HttpMultipartTest.java new file mode 100644 index 0000000..e9a0158 --- /dev/null +++ b/src/test/java/io/github/sashirestela/cleverclient/support/HttpMultipartTest.java @@ -0,0 +1,57 @@ +package io.github.sashirestela.cleverclient.support; + +import io.github.sashirestela.cleverclient.http.ITest; +import io.github.sashirestela.cleverclient.util.JsonUtil; +import org.junit.jupiter.api.Test; + +import java.nio.file.Paths; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class HttpMultipartTest { + + @Test + void testToByteArrays() { + String[] expectedData = { + "Content-Disposition: form-data", + "; name=\"file\"; filename=\"/projects/cleverclient/src/test/resources/loremipsum.txt\"\r\n", + "Content-Type: text/plain\r\n", + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", + "Content-Disposition: form-data", + "; name=\"id\"\r\n", + "101\r\n", + "Content-Disposition: form-data", + "; name=\"text\"\r\n", + "Testing\r\n", + "Content-Disposition: form-data", + "; name=\"group[]\"\r\n", + "one\r\n", + "Content-Disposition: form-data", + "; name=\"group[]\"\r\n", + "two\r\n", + "Content-Disposition: form-data", + "; name=\"numbers[]\"\r\n", + "13\r\n", + "Content-Disposition: form-data", + "; name=\"numbers[]\"\r\n", + "25\r\n", + "Content-Disposition: form-data", + "; name=\"numbers[]\"\r\n", + "37\r\n" + }; + var object = new ITest.MultipartClass(Paths.get("src/test/resources/loremipsum.txt"), 101, "Testing", + List.of("one", "two"), new Integer[] { 13, 25, 37 }); + var objectMap = JsonUtil.objectToMap(object); + var bytesList = HttpMultipart.toByteArrays(objectMap); + var i = 0; + for (byte[] bytes : bytesList) { + var currentData = new String(bytes); + if (!currentData.startsWith("--") && !currentData.startsWith("\r\n") && !currentData.isEmpty()) { + assertEquals(expectedData[i], currentData); + i++; + } + } + } + +} diff --git a/src/test/resources/loremipsum.txt b/src/test/resources/loremipsum.txt new file mode 100644 index 0000000..120ef61 --- /dev/null +++ b/src/test/resources/loremipsum.txt @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. \ No newline at end of file From 0fa61f584641d807f7c5b2f26dc3090537bbe383 Mon Sep 17 00:00:00 2001 From: Sashir Estela <sashirestela@yahoo.com> Date: Sun, 7 Apr 2024 18:55:25 +0000 Subject: [PATCH 2/4] Deploy release 1.4.1 --- pom.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index c01f6af..c90fd40 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ <groupId>io.github.sashirestela</groupId> <artifactId>cleverclient</artifactId> - <version>1.4.0</version> + <version>1.4.1</version> <packaging>jar</packaging> <name>cleverclient</name> @@ -52,19 +52,19 @@ <maven.compiler.release>11</maven.compiler.release> <!-- Dependencies Versions --> <slf4j.version>2.0.12</slf4j.version> - <lombok.version>1.18.30</lombok.version> - <jackson.version>2.16.1</jackson.version> + <lombok.version>1.18.32</lombok.version> + <jackson.version>2.17.0</jackson.version> <junit.version>5.10.2</junit.version> - <mockito.version>5.10.0</mockito.version> + <mockito.version>5.11.0</mockito.version> <!-- Plugins Versions --> - <compiler.version>3.12.1</compiler.version> + <compiler.version>3.13.0</compiler.version> <enforcer.version>3.4.1</enforcer.version> <surefire.version>3.2.5</surefire.version> <exec.version>3.2.0</exec.version> - <jacoco.version>0.8.11</jacoco.version> + <jacoco.version>0.8.12</jacoco.version> <helper.version>3.5.0</helper.version> <versions.version>2.16.2</versions.version> - <source.version>3.3.0</source.version> + <source.version>3.3.1</source.version> <javadoc.version>3.6.3</javadoc.version> <gpg.version>3.1.0</gpg.version> <sonatype.version>1.6.13</sonatype.version> From 887f27c37f4003b79c4782d481a417b184ed356e Mon Sep 17 00:00:00 2001 From: Sashir Estela <sashirestela@yahoo.com> Date: Sun, 7 Apr 2024 18:57:15 +0000 Subject: [PATCH 3/4] Fix link in Readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 971c8e0..6fc5813 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ var newPost = postService.createPost(new Post( System.out.println(newPost); ``` -## 🛠️ Installation +## ⚙ Installation You can install CleverClient by adding the following dependency to your Maven project: From 5314ad4316d9847a23c181109efbcacd35f77426 Mon Sep 17 00:00:00 2001 From: Sashir Estela <sashirestela@yahoo.com> Date: Sun, 7 Apr 2024 19:08:57 +0000 Subject: [PATCH 4/4] Fixing Sonar issues --- .../cleverclient/support/HttpMultipartTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/io/github/sashirestela/cleverclient/support/HttpMultipartTest.java b/src/test/java/io/github/sashirestela/cleverclient/support/HttpMultipartTest.java index e9a0158..817e7b9 100644 --- a/src/test/java/io/github/sashirestela/cleverclient/support/HttpMultipartTest.java +++ b/src/test/java/io/github/sashirestela/cleverclient/support/HttpMultipartTest.java @@ -9,13 +9,12 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -public class HttpMultipartTest { +class HttpMultipartTest { @Test void testToByteArrays() { String[] expectedData = { "Content-Disposition: form-data", - "; name=\"file\"; filename=\"/projects/cleverclient/src/test/resources/loremipsum.txt\"\r\n", "Content-Type: text/plain\r\n", "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", "Content-Disposition: form-data", @@ -47,7 +46,8 @@ void testToByteArrays() { var i = 0; for (byte[] bytes : bytesList) { var currentData = new String(bytes); - if (!currentData.startsWith("--") && !currentData.startsWith("\r\n") && !currentData.isEmpty()) { + if (!currentData.startsWith("--") && !currentData.startsWith("\r\n") + && !currentData.contains("filename=")) { assertEquals(expectedData[i], currentData); i++; }