Skip to content

Commit 0e7b835

Browse files
committed
make the Summary Formatter closer to reality. issue #516
1 parent 1ffe66e commit 0e7b835

File tree

2 files changed

+40
-26
lines changed

2 files changed

+40
-26
lines changed

unirest-bdd-tests/src/test/java/BehaviorTests/BodyLogSummaryTest.java

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.junit.jupiter.api.Test;
3232

3333
import static BehaviorTests.TestUtil.rezFile;
34+
import static org.assertj.core.api.Assertions.assertThat;
3435
import static org.junit.jupiter.api.Assertions.*;
3536

3637
class BodyLogSummaryTest extends BddTest {
@@ -45,7 +46,7 @@ void forSimpleGets() {
4546
.asString();
4647

4748
assertEquals("GET http://somewhere/beans?fruit=apple\n" +
48-
"Accept=image/raw\n" +
49+
"Accept: image/raw\n" +
4950
"===================================", log);
5051
}
5152

@@ -60,7 +61,7 @@ void forSimpleBodies() {
6061
.asString();
6162

6263
assertEquals("POST http://somewhere/beans?fruit=apple\n" +
63-
"Accept=image/raw\n" +
64+
"Accept: image/raw\n" +
6465
"===================================\n" +
6566
"this is the body", log);
6667
}
@@ -76,7 +77,7 @@ void forJsonBodies() {
7677
.asString();
7778

7879
assertEquals("POST http://somewhere/beans?fruit=apple\n" +
79-
"Accept=image/raw\n" +
80+
"Accept: image/raw\n" +
8081
"===================================\n" +
8182
"{\"muppet\":\"Gonzo\"}", log);
8283
}
@@ -92,7 +93,7 @@ void forObjectBodies() {
9293
.asString();
9394

9495
assertEquals("POST http://somewhere/beans?fruit=apple\n" +
95-
"Accept=image/raw\n" +
96+
"Accept: image/raw\n" +
9697
"===================================\n" +
9798
"{\"bar\":\"zip\"}", log);
9899
}
@@ -109,36 +110,44 @@ void simpleFormBody() {
109110
.asString();
110111

111112
assertEquals("POST http://somewhere/beans?fruit=apple\n" +
112-
"Accept=image/raw\n" +
113+
"Accept: image/raw\n" +
113114
"===================================\n" +
114115
"album=77&band=Talking+Heads", log);
115116
}
116117

117-
@Test @Disabled
118+
@Test
118119
void multiPart() {
120+
String boundary = "ABC-123-BOUNDARY";
119121
String body = Unirest.post(MockServer.ECHO_RAW)
120122
.header("Accept", "image/raw")
121123
.field("band", "Talking Heads")
122124
.field("album", "77")
123125
.field("file", rezFile("/test.txt"))
126+
.boundary(boundary)
124127
.toSummary()
125128
.asString();
126129

127-
assertEquals("POST http://localhost:4567/raw\n" +
128-
"Accept=image/raw\n" +
129-
"===================================\n" +
130-
"--5798a3ff-ed92-4e9e-a9fe-bd7853cea758\n" +
131-
"Content-Disposition: form-data; name:\"album\"\n" +
132-
"77\n" +
133-
"\n" +
134-
"--0ad6dbf7-c5b6-453e-a28c-4a3a8fab7017\n" +
135-
"Content-Disposition: form-data; name:\"band\"\n" +
136-
"Talking Heads\n" +
137-
"\n" +
138-
"--453a52b3-2811-4bf6-8950-6395efe72ef7\n" +
139-
"Content-Disposition: form-data; name=\"file\"; filename=\"null\"\n" +
140-
"Content-Type: application/octet-stream\n" +
141-
"<BINARY DATA>\n", body);
130+
assertThat(body).isEqualTo(
131+
"POST http://localhost:4567/raw\n" +
132+
"Accept: image/raw\n" +
133+
"Content-Type: multipart/form-data; boundary=ABC-123-BOUNDARY;charset=UTF-8\"\n" +
134+
"===================================\n" +
135+
"--ABC-123-BOUNDARY\n" +
136+
"Content-Disposition: form-data; name:\"album\"\n" +
137+
"Content-Type: application/x-www-form-urlencoded; charset=UTF-8\n" +
138+
"77\n" +
139+
"\n" +
140+
"--ABC-123-BOUNDARY\n" +
141+
"Content-Disposition: form-data; name:\"band\"\n" +
142+
"Content-Type: application/x-www-form-urlencoded; charset=UTF-8\n" +
143+
"Talking Heads\n" +
144+
"\n" +
145+
"--ABC-123-BOUNDARY\n" +
146+
"Content-Disposition: form-data; name=\"file\"; filename=\"test.txt\"\n" +
147+
"Content-Type: application/octet-stream\n" +
148+
"<BINARY DATA>\n"
149+
);
150+
142151
}
143152

144153

unirest/src/main/java/kong/unirest/core/SummaryFormatter.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
package kong.unirest.core;
2727

2828
import java.util.StringJoiner;
29-
import java.util.UUID;
3029
import java.util.function.Function;
3130

3231
class SummaryFormatter implements Function<HttpRequest<?>, String> {
@@ -35,7 +34,13 @@ class SummaryFormatter implements Function<HttpRequest<?>, String> {
3534
public String apply(HttpRequest<?> req) {
3635
StringJoiner sb = new StringJoiner(System.lineSeparator());
3736
sb.add(req.getHttpMethod().name() + " " + req.getUrl());
38-
req.getHeaders().all().forEach(h -> sb.add(h.getName() + "=" + h.getValue()));
37+
req.getHeaders().all().forEach(h -> sb.add(h.getName() + ": " + h.getValue()));
38+
req.getBody().ifPresent(body -> {
39+
if(!req.getHeaders().containsKey("content-type") && body.isMultiPart()){
40+
sb.add(String.format("Content-Type: multipart/form-data; boundary=%s;charset=%s\"", body.getBoundary(), body.getCharset()));
41+
}
42+
});
43+
3944
sb.add("===================================");
4045
addBody(req, sb);
4146
return sb.toString();
@@ -59,14 +64,14 @@ private void addBody(HttpRequest<?> req, StringJoiner sb) {
5964

6065
private String toMultiPartAproximation(Body b, StringJoiner sj) {
6166
b.multiParts().forEach(p -> {
62-
String partid = UUID.randomUUID().toString();
63-
sj.add("--"+partid);
67+
sj.add("--"+b.getBoundary());
6468
if(p.isFile()){
6569
sj.add(String.format("Content-Disposition: form-data; name=\"%s\"; filename=\"%s\"", p.getName(), p.getFileName()));
66-
sj.add("Content-Type: application/octet-stream");
70+
sj.add("Content-Type: " + p.getContentType());
6771
sj.add("<BINARY DATA>");
6872
} else {
6973
sj.add("Content-Disposition: form-data; name:\""+p.getName()+"\"");
74+
sj.add("Content-Type: " + p.getContentType());
7075
sj.add(String.valueOf(p.getValue()));
7176
}
7277
sj.add("");

0 commit comments

Comments
 (0)