diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpResponseSnippet.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpResponseSnippet.java index 8ad1654e..7e4a9c11 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpResponseSnippet.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/http/HttpResponseSnippet.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2018 the original author or authors. + * Copyright 2014-2019 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -56,12 +56,18 @@ public class HttpResponseSnippet extends TemplatedSnippet { @Override protected Map createModel(Operation operation) { OperationResponse response = operation.getResponse(); - HttpStatus status = response.getStatus(); Map model = new HashMap<>(); model.put("responseBody", responseBody(response)); - model.put("statusCode", status.value()); - model.put("statusReason", status.getReasonPhrase()); model.put("headers", headers(response)); + HttpStatus status = response.getStatus(); + if (status != null) { + model.put("statusCode", status.value()); + model.put("statusReason", status.getReasonPhrase()); + } + else { + model.put("statusCode", response.getStatusCode()); + model.put("statusReason", ""); + } return model; } diff --git a/spring-restdocs-core/src/test/java/org/springframework/restdocs/AbstractSnippetTests.java b/spring-restdocs-core/src/test/java/org/springframework/restdocs/AbstractSnippetTests.java index f04afe0b..0dabb13f 100644 --- a/spring-restdocs-core/src/test/java/org/springframework/restdocs/AbstractSnippetTests.java +++ b/spring-restdocs-core/src/test/java/org/springframework/restdocs/AbstractSnippetTests.java @@ -89,6 +89,10 @@ public abstract class AbstractSnippetTests { return SnippetConditions.httpResponse(this.templateFormat, responseStatus); } + public HttpResponseCondition httpResponse(int responseStatusCode) { + return SnippetConditions.httpResponse(this.templateFormat, responseStatusCode, ""); + } + protected FileSystemResource snippetResource(String name) { return new FileSystemResource( "src/test/resources/custom-snippet-templates/" + this.templateFormat.getId() + "/" + name + ".snippet"); diff --git a/spring-restdocs-core/src/test/java/org/springframework/restdocs/http/HttpResponseSnippetTests.java b/spring-restdocs-core/src/test/java/org/springframework/restdocs/http/HttpResponseSnippetTests.java index bf701b43..30287183 100644 --- a/spring-restdocs-core/src/test/java/org/springframework/restdocs/http/HttpResponseSnippetTests.java +++ b/spring-restdocs-core/src/test/java/org/springframework/restdocs/http/HttpResponseSnippetTests.java @@ -97,4 +97,10 @@ public class HttpResponseSnippetTests extends AbstractSnippetTests { assertThat(this.generatedSnippets.httpResponse()).contains("Title for the response"); } + @Test + public void responseWithCustomStatus() throws IOException { + new HttpResponseSnippet().document(this.operationBuilder.response().status(215).build()); + assertThat(this.generatedSnippets.httpResponse()).is(httpResponse(215)); + } + } diff --git a/spring-restdocs-core/src/test/java/org/springframework/restdocs/test/SnippetConditions.java b/spring-restdocs-core/src/test/java/org/springframework/restdocs/test/SnippetConditions.java index 657b3e57..de574f19 100644 --- a/spring-restdocs-core/src/test/java/org/springframework/restdocs/test/SnippetConditions.java +++ b/spring-restdocs-core/src/test/java/org/springframework/restdocs/test/SnippetConditions.java @@ -71,6 +71,16 @@ public final class SnippetConditions { return new HttpResponseCondition(status, new MarkdownCodeBlockCondition<>("http"), 2); } + public static HttpResponseCondition httpResponse(TemplateFormat format, Integer responseStatusCode, + String responseStatusReason) { + if ("adoc".equals(format.getFileExtension())) { + return new HttpResponseCondition(responseStatusCode, responseStatusReason, + new AsciidoctorCodeBlockCondition<>("http", "nowrap"), 3); + } + return new HttpResponseCondition(responseStatusCode, responseStatusReason, + new MarkdownCodeBlockCondition<>("http"), 2); + } + @SuppressWarnings({ "rawtypes" }) public static CodeBlockCondition codeBlock(TemplateFormat format, String language) { if ("adoc".equals(format.getFileExtension())) { @@ -235,6 +245,13 @@ public final class SnippetConditions { this.content(""); } + private HttpResponseCondition(int responseStatusCode, String responseStatusReason, + CodeBlockCondition delegate, int headerOffset) { + super(delegate, headerOffset); + this.content("HTTP/1.1 " + responseStatusCode + " " + responseStatusReason); + this.content(""); + } + } /**