Skip to content

Commit aee641b

Browse files
Florian Ferreirawilkinsona
Florian Ferreira
authored andcommitted
Fix NPE in HttpResponseSnippet when response has custom status
See gh-653
1 parent bb7aecb commit aee641b

File tree

4 files changed

+30
-2
lines changed

4 files changed

+30
-2
lines changed

spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpResponseSnippet.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,15 @@ protected Map<String, Object> createModel(Operation operation) {
5959
HttpStatus status = response.getStatus();
6060
Map<String, Object> model = new HashMap<>();
6161
model.put("responseBody", responseBody(response));
62-
model.put("statusCode", status.value());
63-
model.put("statusReason", status.getReasonPhrase());
6462
model.put("headers", headers(response));
63+
if (status != null) {
64+
model.put("statusCode", status.value());
65+
model.put("statusReason", status.getReasonPhrase());
66+
}
67+
else {
68+
model.put("statusCode", response.getStatusCode());
69+
model.put("statusReason", "Http custom status.");
70+
}
6571
return model;
6672
}
6773

spring-restdocs-core/src/test/java/org/springframework/restdocs/AbstractSnippetTests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ public HttpResponseCondition httpResponse(HttpStatus responseStatus) {
8989
return SnippetConditions.httpResponse(this.templateFormat, responseStatus);
9090
}
9191

92+
public HttpResponseCondition httpResponse(Integer responseStatusCode, String responseStatusReason) {
93+
return SnippetConditions.httpResponse(this.templateFormat, responseStatusCode, responseStatusReason);
94+
}
95+
9296
protected FileSystemResource snippetResource(String name) {
9397
return new FileSystemResource(
9498
"src/test/resources/custom-snippet-templates/" + this.templateFormat.getId() + "/" + name + ".snippet");

spring-restdocs-core/src/test/java/org/springframework/restdocs/http/HttpResponseSnippetTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,9 @@ public void responseWithCustomSnippetAttributes() throws IOException {
9797
assertThat(this.generatedSnippets.httpResponse()).contains("Title for the response");
9898
}
9999

100+
@Test
101+
public void responseWithCustomStatus() throws IOException {
102+
new HttpResponseSnippet().document(this.operationBuilder.response().status(215).build());
103+
assertThat(this.generatedSnippets.httpResponse()).is(httpResponse(215,"Http custom status."));
104+
}
100105
}

spring-restdocs-core/src/test/java/org/springframework/restdocs/test/SnippetConditions.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,13 @@ public static HttpResponseCondition httpResponse(TemplateFormat format, HttpStat
7171
return new HttpResponseCondition(status, new MarkdownCodeBlockCondition<>("http"), 2);
7272
}
7373

74+
public static HttpResponseCondition httpResponse(TemplateFormat format, Integer responseStatusCode, String responseStatusReason) {
75+
if ("adoc".equals(format.getFileExtension())) {
76+
return new HttpResponseCondition(responseStatusCode, responseStatusReason, new AsciidoctorCodeBlockCondition<>("http", "nowrap"), 3);
77+
}
78+
return new HttpResponseCondition(responseStatusCode, responseStatusReason, new MarkdownCodeBlockCondition<>("http"), 2);
79+
}
80+
7481
@SuppressWarnings({ "rawtypes" })
7582
public static CodeBlockCondition<?> codeBlock(TemplateFormat format, String language) {
7683
if ("adoc".equals(format.getFileExtension())) {
@@ -235,6 +242,12 @@ private HttpResponseCondition(HttpStatus status, CodeBlockCondition<?> delegate,
235242
this.content("");
236243
}
237244

245+
private HttpResponseCondition(Integer responseStatusCode, String responseStatusReason, CodeBlockCondition<?> delegate, int headerOffset) {
246+
super(delegate, headerOffset);
247+
this.content("HTTP/1.1 " + responseStatusCode + " " + responseStatusReason);
248+
this.content("");
249+
}
250+
238251
}
239252

240253
/**

0 commit comments

Comments
 (0)