2828import io .restassured .config .RestAssuredConfig ;
2929import io .restassured .http .ContentType ;
3030import io .restassured .specification .RequestSpecification ;
31+
3132import java .nio .charset .StandardCharsets ;
33+
3234import org .junit .jupiter .api .Test ;
3335import org .junit .jupiter .api .extension .ExtensionContext ;
3436import org .junit .jupiter .params .ParameterizedTest ;
@@ -59,6 +61,23 @@ public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
5961 }
6062}
6163
64+ class JsonPrettifyingArgumentsProvider implements ArgumentsProvider {
65+ @ Override
66+ public Stream <? extends Arguments > provideArguments (ExtensionContext context ) {
67+
68+ return Stream .of (
69+ arguments (new AllureRestAssured (), """
70+ {
71+ "name": "12345",
72+ "value": "abcdef"
73+ }""" ),
74+ arguments (new AllureRestAssured ().setMaxAllowedPrettifyLength (5 ), """
75+ {"name":"12345","value":"abcdef"}
76+ """ )
77+ );
78+ }
79+ }
80+
6281class HiddenHeadersArgumentProvider implements ArgumentsProvider {
6382 @ Override
6483 public Stream <? extends Arguments > provideArguments (ExtensionContext context ) {
@@ -174,6 +193,34 @@ void shouldHideHeadersInAttachments(final Map<String, String> headers,
174193 .allSatisfy (at -> expectedValues .forEach (ev -> assertThat (at ).contains (ev )));
175194 }
176195
196+ @ ParameterizedTest
197+ @ ArgumentsSource (JsonPrettifyingArgumentsProvider .class )
198+ void responseJsonPrettified (final AllureRestAssured filter , final String formattedBody ) {
199+ final ResponseDefinitionBuilder responseBuilder = WireMock .aResponse ()
200+ .withHeader ("Content-Type" , "application/json" )
201+ .withBody ("""
202+ {"name":"12345","value":"abcdef"}
203+ """ )
204+ .withStatus (200 );
205+
206+ RestAssured .replaceFiltersWith (filter );
207+
208+ final AllureResults results = executeWithStub (responseBuilder , RestAssured .with ());
209+ final Attachment requestAttachment = results .getTestResults ()
210+ .stream ()
211+ .map (TestResult ::getAttachments )
212+ .flatMap (Collection ::stream )
213+ .filter (attachment -> "HTTP/1.1 200 OK" .equals (attachment .getName ()))
214+ .findAny ()
215+ .orElseThrow (() -> new AssertionError ("No response attachment found" ));
216+
217+ final byte [] attachmentBody = results .getAttachments ().get (requestAttachment .getSource ());
218+ final String attachmentBodyString = new String (attachmentBody , StandardCharsets .UTF_8 );
219+
220+ assertThat (attachmentBodyString )
221+ .contains (formattedBody );
222+ }
223+
177224 protected final AllureResults execute () {
178225 return executeWithStub (WireMock .aResponse ().withBody ("some body" ));
179226 }
@@ -193,8 +240,8 @@ protected final AllureResults executeWithStub(ResponseDefinitionBuilder response
193240 WireMock .stubFor (WireMock .get (WireMock .urlEqualTo ("/hello?Allure=Form" )).willReturn (responseBuilder ));
194241 try {
195242 spec .contentType (ContentType .URLENC )
196- .formParams ("Allure" , "Form" )
197- .get (server .url ("/hello" )).then ().statusCode (statusCode );
243+ .formParams ("Allure" , "Form" )
244+ .get (server .url ("/hello" )).then ().statusCode (statusCode );
198245 } finally {
199246 server .stop ();
200247 RestAssured .replaceFiltersWith (ImmutableList .of ());
0 commit comments