Skip to content

Commit 99fdc53

Browse files
http doc captures binary responses
1 parent 1cfc7a2 commit 99fdc53

5 files changed

Lines changed: 81 additions & 34 deletions

File tree

webtau-http/src/main/java/com/twosigma/webtau/http/Http.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ private Integer defaultExpectedStatusCodeByRequest(HttpValidationResult validati
467467
return 201;
468468
case "PUT":
469469
case "DELETE":
470-
return validationResult.hasContent() ? 200 : 204;
470+
return validationResult.hasResponseContent() ? 200 : 204;
471471
default:
472472
return 200;
473473
}

webtau-http/src/main/java/com/twosigma/webtau/http/HttpDocumentation.java

Lines changed: 60 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,55 +25,95 @@
2525

2626
public class HttpDocumentation {
2727
public void capture(String artifactName) {
28-
Path path = DocumentationArtifactsLocation.resolve(artifactName);
28+
Capture capture = new Capture(artifactName);
29+
capture.capture();
30+
}
31+
32+
private static class Capture {
33+
private final Path path;
34+
private final HttpValidationResult lastValidationResult;
35+
36+
public Capture(String artifactName) {
37+
this.path = DocumentationArtifactsLocation.resolve(artifactName);
2938

30-
HttpValidationResult lastValidationResult = Http.http.getLastValidationResult();
31-
if (lastValidationResult == null) {
32-
throw new IllegalStateException("no http calls were made yet");
39+
this.lastValidationResult = Http.http.getLastValidationResult();
40+
if (this.lastValidationResult == null) {
41+
throw new IllegalStateException("no http calls were made yet");
42+
}
3343
}
3444

35-
String requestHeader = lastValidationResult.getRequestHeader().toString();
36-
if (! requestHeader.isEmpty()) {
37-
FileUtils.writeTextContent(path.resolve("request.header.txt"),
38-
requestHeader);
45+
public void capture() {
46+
captureRequestHeader();
47+
captureRequestBody();
48+
captureResponseBody();
49+
capturePaths();
3950
}
4051

41-
if (lastValidationResult.getRequestType() != null
42-
&& !lastValidationResult.isRequestBinary()
43-
&& lastValidationResult.notNullOrEmptyRequestContent()) {
52+
private void captureRequestHeader() {
53+
String requestHeader = lastValidationResult.getRequestHeader().toString();
54+
if (! requestHeader.isEmpty()) {
55+
FileUtils.writeTextContent(path.resolve("request.header.txt"),
56+
requestHeader);
57+
}
58+
}
59+
60+
private void captureRequestBody() {
61+
if (lastValidationResult.getRequestType() == null
62+
|| lastValidationResult.isRequestBinary()
63+
|| lastValidationResult.nullOrEmptyRequestContent()) {
64+
return;
65+
}
66+
4467
String fileName = "request." + fileExtensionForType(lastValidationResult.getRequestType());
4568
FileUtils.writeTextContent(path.resolve(fileName),
4669
prettyPrintContent(lastValidationResult.getRequestType(),
4770
lastValidationResult.getRequestContent()));
4871
}
4972

50-
if (lastValidationResult.getResponseType() != null
51-
&& lastValidationResult.notNullOrEmptyResponseTextContent()) {
73+
private void captureResponseBody() {
74+
if (lastValidationResult.getResponseType() == null || !lastValidationResult.hasResponseContent()) {
75+
return;
76+
}
77+
5278
String fileName = "response." + fileExtensionForType(lastValidationResult.getResponseType());
53-
FileUtils.writeTextContent(path.resolve(fileName),
54-
prettyPrintContent(lastValidationResult.getResponseType(),
55-
lastValidationResult.getResponseTextContent()));
79+
Path fullPath = path.resolve(fileName);
80+
81+
if (lastValidationResult.getResponse().isBinary()) {
82+
FileUtils.writeBinaryContent(fullPath, lastValidationResult.getResponse().getBinaryContent());
83+
} else {
84+
FileUtils.writeTextContent(fullPath,
85+
prettyPrintContent(lastValidationResult.getResponseType(),
86+
lastValidationResult.getResponseTextContent()));
87+
}
5688
}
5789

58-
if (lastValidationResult.getPassedPaths() != null) {
90+
private void capturePaths() {
91+
if (lastValidationResult.getPassedPaths() == null) {
92+
return;
93+
}
94+
5995
FileUtils.writeTextContent(path.resolve("paths.json"),
6096
JsonUtils.serialize(lastValidationResult.getPassedPaths()));
6197
}
6298
}
6399

64-
private String fileExtensionForType(String type) {
100+
private static String fileExtensionForType(String type) {
101+
if (type.contains("/pdf")) {
102+
return "pdf";
103+
}
104+
65105
return isJson(type) ? "json" : "data";
66106
}
67107

68-
private String prettyPrintContent(String type, String content) {
108+
private static String prettyPrintContent(String type, String content) {
69109
if (isJson(type)) {
70110
return JsonUtils.serializePrettyPrint(JsonUtils.deserialize(content));
71111
}
72112

73113
return content;
74114
}
75115

76-
private boolean isJson(String type) {
116+
private static boolean isJson(String type) {
77117
return type.contains("json");
78118
}
79119
}

webtau-http/src/main/java/com/twosigma/webtau/http/HttpResponse.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ public boolean isText() {
7373
return contentType.startsWith("text/");
7474
}
7575

76+
public boolean isPdf() {
77+
return contentType.contains("/pdf");
78+
}
79+
7680
public boolean isBinary() {
7781
return !isJson() && !isXml() && !isText() && !contentType.isEmpty();
7882
}

webtau-http/src/main/java/com/twosigma/webtau/http/validation/HttpValidationResult.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -106,19 +106,15 @@ public String getRequestContent() {
106106
return requestBody != null ? requestBody.asString() : null;
107107
}
108108

109-
public boolean notNullOrEmptyRequestContent() {
110-
return StringUtils.notNullOrEmpty(getRequestContent());
109+
public boolean nullOrEmptyRequestContent() {
110+
return StringUtils.nullOrEmpty(getRequestContent());
111111
}
112112

113113
public String getResponseTextContent() {
114114
return response.getTextContent();
115115
}
116116

117-
public boolean notNullOrEmptyResponseTextContent() {
118-
return StringUtils.notNullOrEmpty(response.getTextContent());
119-
}
120-
121-
public boolean hasContent() {
117+
public boolean hasResponseContent() {
122118
return response.hasContent();
123119
}
124120

webtau-utils/src/main/java/com/twosigma/webtau/utils/FileUtils.java

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ private FileUtils() {
2929
}
3030

3131
public static void writeTextContent(Path path, String text) {
32-
try {
33-
Path parent = path.toAbsolutePath().getParent();
34-
if (parent != null) {
35-
Files.createDirectories(parent);
36-
}
32+
writeBinaryContent(path, text.getBytes());
33+
}
3734

38-
Files.write(path, text.getBytes());
35+
public static void writeBinaryContent(Path path, byte[] content) {
36+
try {
37+
createDirs(path);
38+
Files.write(path, content);
3939
} catch (IOException e) {
4040
throw new RuntimeException(e);
4141
}
@@ -72,4 +72,11 @@ public static Path existingPathOrThrow(Path... paths) {
7272
new RuntimeException("can't find any of the following files:\n" +
7373
nonNull.stream().map(Path::toString).collect(Collectors.joining("\n"))));
7474
}
75+
76+
private static void createDirs(Path path) throws IOException {
77+
Path parent = path.toAbsolutePath().getParent();
78+
if (parent != null) {
79+
Files.createDirectories(parent);
80+
}
81+
}
7582
}

0 commit comments

Comments
 (0)