diff --git a/allure-httpclient/src/main/java/io/qameta/allure/httpclient/AllureHttpClientResponse.java b/allure-httpclient/src/main/java/io/qameta/allure/httpclient/AllureHttpClientResponse.java index c9d23862f..2f5cc47ed 100644 --- a/allure-httpclient/src/main/java/io/qameta/allure/httpclient/AllureHttpClientResponse.java +++ b/allure-httpclient/src/main/java/io/qameta/allure/httpclient/AllureHttpClientResponse.java @@ -51,10 +51,14 @@ public void process(final HttpResponse response, Stream.of(response.getAllHeaders()) .forEach(header -> builder.setHeader(header.getName(), header.getValue())); - final LoggableEntity loggableEntity = new LoggableEntity(response.getEntity()); - response.setEntity(loggableEntity); + if (response.getEntity() != null) { + final LoggableEntity loggableEntity = new LoggableEntity(response.getEntity()); + response.setEntity(loggableEntity); - builder.setBody(loggableEntity.getBody()); + builder.setBody(loggableEntity.getBody()); + } else { + builder.setBody("No body present"); + } final HttpResponseAttachment responseAttachment = builder.build(); processor.addAttachment(responseAttachment, renderer); diff --git a/allure-httpclient/src/test/java/io/qameta/allure/httpclient/AllureHttpClientTest.java b/allure-httpclient/src/test/java/io/qameta/allure/httpclient/AllureHttpClientTest.java index 33a3dc2e2..f8dd370af 100644 --- a/allure-httpclient/src/test/java/io/qameta/allure/httpclient/AllureHttpClientTest.java +++ b/allure-httpclient/src/test/java/io/qameta/allure/httpclient/AllureHttpClientTest.java @@ -46,6 +46,10 @@ void setUp() { stubFor(get(urlEqualTo("/hello")) .willReturn(aResponse() .withBody(BODY_STRING))); + + stubFor(get(urlEqualTo("/empty")) + .willReturn(aResponse() + .withStatus(304))); } @AfterEach @@ -110,4 +114,30 @@ void shouldCreateResponseAttachment() throws Exception { .extracting("responseCode") .containsExactly(200); } + + @Test + void shouldCreateResponseAttachmentWithEmptyBody() throws Exception { + final AttachmentRenderer renderer = mock(AttachmentRenderer.class); + final AttachmentProcessor processor = mock(AttachmentProcessor.class); + + final HttpClientBuilder builder = HttpClientBuilder.create() + .addInterceptorLast(new AllureHttpClientResponse(renderer, processor)); + + try (CloseableHttpClient httpClient = builder.build()) { + final HttpGet httpGet = new HttpGet(String.format("http://localhost:%d/empty", server.port())); + try (CloseableHttpResponse response = httpClient.execute(httpGet)) { + assertThat(response.getEntity()) + .isEqualTo(null); + } + } + + final ArgumentCaptor captor = ArgumentCaptor.forClass(AttachmentData.class); + verify(processor, times(1)) + .addAttachment(captor.capture(), eq(renderer)); + + assertThat(captor.getAllValues()) + .hasSize(1) + .extracting("body") + .containsExactly("No body present"); + } }