Skip to content

Commit baef9b6

Browse files
http: refactor http render request into step input
1 parent 75a4a5f commit baef9b6

3 files changed

Lines changed: 88 additions & 41 deletions

File tree

webtau-core/src/main/java/org/testingisdocumenting/webtau/reporter/ConsoleStepReporter.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ private void printStepStart(WebTauStep step) {
5656
personaStream(step)),
5757
toAnsiConverter.convert(step.getInProgressMessage()).stream()
5858
).toArray());
59+
60+
printStepInput(step);
5961
}
6062

6163
private void printStepSuccess(WebTauStep step) {
@@ -107,6 +109,14 @@ private String renderTimeTaken(WebTauStep step) {
107109
millisLeft + "ms";
108110
}
109111

112+
private void printStepInput(WebTauStep step) {
113+
if (skipRenderRequestResponse()) {
114+
return;
115+
}
116+
117+
step.getInput().prettyPrint(ConsoleOutputs.asCombinedConsoleOutput());
118+
}
119+
110120
private void printStepOutput(WebTauStep step) {
111121
if (skipRenderRequestResponse()) {
112122
return;

webtau-http/src/main/java/org/testingisdocumenting/webtau/http/Http.java

Lines changed: 4 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525
import static java.nio.charset.StandardCharsets.UTF_8;
2626
import static java.util.stream.Collectors.toList;
2727

28-
import org.testingisdocumenting.webtau.console.ConsoleOutputs;
29-
import org.testingisdocumenting.webtau.console.ansi.Color;
3028
import org.testingisdocumenting.webtau.data.traceable.CheckLevel;
3129
import org.testingisdocumenting.webtau.data.traceable.TraceableValue;
3230
import org.testingisdocumenting.webtau.expectation.ActualPath;
@@ -44,19 +42,13 @@
4442
import org.testingisdocumenting.webtau.http.multipart.MultiPartFile;
4543
import org.testingisdocumenting.webtau.http.multipart.MultiPartFormData;
4644
import org.testingisdocumenting.webtau.http.multipart.MultiPartFormField;
47-
import org.testingisdocumenting.webtau.http.render.DataNodeAnsiPrinter;
4845
import org.testingisdocumenting.webtau.http.request.EmptyRequestBody;
4946
import org.testingisdocumenting.webtau.http.request.HttpApplicationMime;
5047
import org.testingisdocumenting.webtau.http.request.HttpQueryParams;
5148
import org.testingisdocumenting.webtau.http.request.HttpRequestBody;
5249
import org.testingisdocumenting.webtau.http.request.HttpTextMime;
5350
import org.testingisdocumenting.webtau.http.text.TextRequestBody;
54-
import org.testingisdocumenting.webtau.http.validation.HeaderDataNode;
55-
import org.testingisdocumenting.webtau.http.validation.HttpResponseValidator;
56-
import org.testingisdocumenting.webtau.http.validation.HttpResponseValidatorIgnoringReturn;
57-
import org.testingisdocumenting.webtau.http.validation.HttpResponseValidatorWithReturn;
58-
import org.testingisdocumenting.webtau.http.validation.HttpValidationHandlers;
59-
import org.testingisdocumenting.webtau.http.validation.HttpValidationResult;
51+
import org.testingisdocumenting.webtau.http.validation.*;
6052
import org.testingisdocumenting.webtau.persona.Persona;
6153
import org.testingisdocumenting.webtau.reporter.StepReportOptions;
6254
import org.testingisdocumenting.webtau.reporter.WebTauStep;
@@ -904,7 +896,9 @@ private <R> R executeAndValidateHttpCall(String requestMethod,
904896
requestMethod, url, fullUrl, fullHeader, requestBody);
905897

906898
WebTauStep step = createHttpStep(validationResult, httpCall, validator);
899+
step.setInput(new HttpStepInput(validationResult));
907900
step.setOutput(validationResult);
901+
908902
try {
909903
return step.execute(StepReportOptions.REPORT_ALL);
910904
} finally {
@@ -926,8 +920,6 @@ private <R> WebTauStep createHttpStep(HttpValidationResult validationResult,
926920
validationResult.getUrl(), validationResult.getFullUrl(),
927921
validationResult.getRequestHeader(), validationResult.getRequestBody());
928922

929-
renderRequest(validationResult.getRequestBody());
930-
931923
response = httpCall.execute(validationResult.getFullUrl(),
932924
validationResult.getRequestHeader());
933925

@@ -1095,47 +1087,18 @@ private void validateErrorsOnlyStatusCode(HttpValidationResult validationResult)
10951087

10961088
private Integer defaultExpectedStatusCodeByRequest(HttpValidationResult validationResult) {
10971089
switch (validationResult.getRequestMethod()) {
1098-
case "GET":
1099-
return 200;
11001090
case "POST":
11011091
return 201;
11021092
case "PUT":
11031093
case "DELETE":
11041094
case "PATCH":
11051095
return validationResult.hasResponseContent() ? 200 : 204;
1096+
case "GET":
11061097
default:
11071098
return 200;
11081099
}
11091100
}
11101101

1111-
private void renderRequest(HttpRequestBody requestBody) {
1112-
if (skipRenderRequestResponse() || requestBody == null) {
1113-
return;
1114-
}
1115-
1116-
if (requestBody.isEmpty()) {
1117-
ConsoleOutputs.out(Color.YELLOW, "[no request body]");
1118-
} else if (requestBody.isBinary()) {
1119-
ConsoleOutputs.out(Color.YELLOW, "[binary request]");
1120-
} else {
1121-
ConsoleOutputs.out(Color.YELLOW, "request", Color.CYAN, " (", requestBody.type(), "):");
1122-
renderRequestBody(requestBody);
1123-
}
1124-
}
1125-
1126-
private void renderRequestBody(HttpRequestBody requestBody) {
1127-
if (requestBody instanceof JsonRequestBody) {
1128-
DataNode dataNode = DataNodeBuilder.fromValue(new DataNodeId("request"), ((JsonRequestBody) requestBody).getOriginal());
1129-
new DataNodeAnsiPrinter(ConsoleOutputs.asCombinedConsoleOutput()).print(dataNode, getCfg().getConsolePayloadOutputLimit());
1130-
} else {
1131-
ConsoleOutputs.out(requestBody.asString());
1132-
}
1133-
}
1134-
1135-
private boolean skipRenderRequestResponse() {
1136-
return getCfg().getVerbosityLevel() <= WebTauStep.getCurrentStep().getNumberOfParents() + 1;
1137-
}
1138-
11391102
private HttpResponse request(String method, String fullUrl,
11401103
HttpHeader requestHeader,
11411104
HttpRequestBody requestBody) {
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
* Copyright 2021 webtau maintainers
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.testingisdocumenting.webtau.http.validation;
18+
19+
import org.testingisdocumenting.webtau.console.ConsoleOutput;
20+
import org.testingisdocumenting.webtau.console.ansi.Color;
21+
import org.testingisdocumenting.webtau.http.datanode.DataNode;
22+
import org.testingisdocumenting.webtau.http.datanode.DataNodeBuilder;
23+
import org.testingisdocumenting.webtau.http.datanode.DataNodeId;
24+
import org.testingisdocumenting.webtau.http.json.JsonRequestBody;
25+
import org.testingisdocumenting.webtau.http.render.DataNodeAnsiPrinter;
26+
import org.testingisdocumenting.webtau.http.request.HttpRequestBody;
27+
import org.testingisdocumenting.webtau.reporter.WebTauStepInput;
28+
29+
import java.util.Collections;
30+
import java.util.Map;
31+
32+
import static org.testingisdocumenting.webtau.cfg.WebTauConfig.*;
33+
34+
public class HttpStepInput implements WebTauStepInput {
35+
private final HttpValidationResult validationResult;
36+
37+
public HttpStepInput(HttpValidationResult validationResult) {
38+
this.validationResult = validationResult;
39+
}
40+
41+
@Override
42+
public void prettyPrint(ConsoleOutput console) {
43+
renderRequest(console);
44+
}
45+
46+
@Override
47+
public Map<String, ?> toMap() {
48+
return Collections.emptyMap();
49+
}
50+
51+
private void renderRequest(ConsoleOutput console) {
52+
if (validationResult.getRequestBody() == null) {
53+
return;
54+
}
55+
56+
if (validationResult.getRequestBody().isEmpty()) {
57+
console.out(Color.YELLOW, "[no request body]");
58+
} else if (validationResult.getRequestBody().isBinary()) {
59+
console.out(Color.YELLOW, "[binary request]");
60+
} else {
61+
console.out(Color.YELLOW, "request", Color.CYAN, " (", validationResult.getRequestBody().type(), "):");
62+
renderRequestBody(console, validationResult.getRequestBody());
63+
}
64+
}
65+
66+
private void renderRequestBody(ConsoleOutput console, HttpRequestBody requestBody) {
67+
if (requestBody instanceof JsonRequestBody) {
68+
DataNode dataNode = DataNodeBuilder.fromValue(new DataNodeId("request"), ((JsonRequestBody) requestBody).getOriginal());
69+
new DataNodeAnsiPrinter(console).print(dataNode, getCfg().getConsolePayloadOutputLimit());
70+
} else {
71+
console.out(requestBody.asString());
72+
}
73+
}
74+
}

0 commit comments

Comments
 (0)