diff --git a/allure-rest-assured/src/main/java/io/qameta/allure/restassured/AllureRestAssured.java b/allure-rest-assured/src/main/java/io/qameta/allure/restassured/AllureRestAssured.java index a4c62a18..58f658c3 100644 --- a/allure-rest-assured/src/main/java/io/qameta/allure/restassured/AllureRestAssured.java +++ b/allure-rest-assured/src/main/java/io/qameta/allure/restassured/AllureRestAssured.java @@ -43,6 +43,8 @@ public class AllureRestAssured implements OrderedFilter { private static final String HIDDEN_PLACEHOLDER = "[ BLACKLISTED ]"; + private static final String REST_ASSURED_NO_PARAMETER_VALUE_CLASS = + "io.restassured.internal.NoParameterValue"; private int maxAllowedPrettifyLength = 1_048_576; @@ -114,7 +116,7 @@ public Response filter(final FilterableRequestSpecification requestSpec, } if (Objects.nonNull(requestSpec.getFormParams())) { - requestAttachmentBuilder.setFormParams(requestSpec.getFormParams()); + requestAttachmentBuilder.setFormParams(normalizeFormParams(requestSpec.getFormParams())); } final HttpRequestAttachment requestAttachment = requestAttachmentBuilder.build(); @@ -155,6 +157,20 @@ private static Map toMapConverter(final Iterable normalizeFormParams(final Map formParams) { + final Map result = new HashMap<>(); + formParams.forEach((key, value) -> { + if (value == null) { + return; + } + if (REST_ASSURED_NO_PARAMETER_VALUE_CLASS.equals(value.getClass().getName())) { + return; + } + result.put(String.valueOf(key), String.valueOf(value)); + }); + return result; + } + @Override public int getOrder() { return Integer.MAX_VALUE; diff --git a/allure-rest-assured/src/test/java/io/qameta/allure/restassured/AllureRestAssuredTest.java b/allure-rest-assured/src/test/java/io/qameta/allure/restassured/AllureRestAssuredTest.java index 8a2d6e29..85bfb941 100644 --- a/allure-rest-assured/src/test/java/io/qameta/allure/restassured/AllureRestAssuredTest.java +++ b/allure-rest-assured/src/test/java/io/qameta/allure/restassured/AllureRestAssuredTest.java @@ -40,6 +40,7 @@ import java.util.Collection; import java.util.List; +import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -249,4 +250,57 @@ protected final AllureResults executeWithStub(ResponseDefinitionBuilder response } }); } + + @Test + void shouldHandleNullFormParams() { + final AllureRestAssured filter = new AllureRestAssured(); + RestAssured.replaceFiltersWith(filter); + + final ResponseDefinitionBuilder responseBuilder = WireMock.aResponse().withStatus(200); + final AllureResults results = executeWithStub(responseBuilder, RestAssured.with().formParam("key", (String) null)); + + assertThat(results.getTestResults()).hasSize(1); + final Attachment requestAttachment = results.getTestResults().stream() + .map(TestResult::getAttachments) + .flatMap(Collection::stream) + .filter(attachment -> "Request".equals(attachment.getName())) + .findAny() + .orElseThrow(() -> new AssertionError("No request attachment found")); + + final byte[] attachmentBody = results.getAttachments().get(requestAttachment.getSource()); + final String attachmentBodyString = new String(attachmentBody, StandardCharsets.UTF_8); + + assertThat(attachmentBodyString).doesNotContain("null"); + } + + @Test + void shouldHandleNoParameterValueFormParams() { + final AllureRestAssured filter = new AllureRestAssured(); + RestAssured.replaceFiltersWith(filter); + + final ResponseDefinitionBuilder responseBuilder = WireMock.aResponse().withStatus(200); + final Map formParams = new HashMap<>(); + formParams.put("key", "value"); + formParams.put("nullKey", null); + final AllureResults results = executeWithStub(responseBuilder, + RestAssured.with().contentType(ContentType.URLENC).formParams(formParams)); + + assertThat(results.getTestResults()).hasSize(1); + final Attachment requestAttachment = results.getTestResults().stream() + .map(TestResult::getAttachments) + .flatMap(Collection::stream) + .filter(attachment -> "Request".equals(attachment.getName())) + .findAny() + .orElseThrow(() -> new AssertionError("No request attachment found")); + + final byte[] attachmentBody = results.getAttachments().get(requestAttachment.getSource()); + final String attachmentBodyString = new String(attachmentBody, StandardCharsets.UTF_8); + + assertThat(attachmentBodyString) + .contains("key") + .contains("value") + .doesNotContain("nullKey:") + .doesNotContain("NoParameterValue"); + + } }