diff --git a/CHANGELOG.md b/CHANGELOG.md index 23d57b4..f145a4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm ### Breaking changes ### New features & improvements +- Add `bodyRaw()` extraction function for API Tests to extract entire response body ([#238](https://github.com/personio/datadog-synthetic-test-support/pull/238)) ### Bug fixes diff --git a/src/main/kotlin/com/personio/synthetics/builder/parsing/ParsingOptionsBuilder.kt b/src/main/kotlin/com/personio/synthetics/builder/parsing/ParsingOptionsBuilder.kt index a2f1710..ddcb651 100644 --- a/src/main/kotlin/com/personio/synthetics/builder/parsing/ParsingOptionsBuilder.kt +++ b/src/main/kotlin/com/personio/synthetics/builder/parsing/ParsingOptionsBuilder.kt @@ -67,6 +67,22 @@ class ParsingOptionsBuilder { .secure(secure) } + /** + * Extracts the entire response body + * @param secure set to true to disallow the extracted value to be read from DataDog UI + * By default secure is set to false allowing the extracted value to be available for reading in Datadog UI + */ + fun bodyRaw(secure: Boolean = false) { + parsingOptions = + SyntheticsParsingOptions() + .parser( + SyntheticsVariableParser() + .type(SyntheticsGlobalVariableParserType.RAW), + ) + .type(SyntheticsGlobalVariableParseTestOptionsType.HTTP_BODY) + .secure(secure) + } + /** * Extracts the value from a response header * @param name Header name diff --git a/src/test/kotlin/com/personio/synthetics/builder/parsing/ParsingOptionsBuilderTest.kt b/src/test/kotlin/com/personio/synthetics/builder/parsing/ParsingOptionsBuilderTest.kt index b991064..646437d 100644 --- a/src/test/kotlin/com/personio/synthetics/builder/parsing/ParsingOptionsBuilderTest.kt +++ b/src/test/kotlin/com/personio/synthetics/builder/parsing/ParsingOptionsBuilderTest.kt @@ -79,6 +79,25 @@ class ParsingOptionsBuilderTest { ) } + @ParameterizedTest + @ValueSource(booleans = [true, false]) + fun `bodyRaw returns parsing options with RAW parser type and HTTP_BODY type`(secure: Boolean) { + parsingOptionsBuilder.variable(TEST_STEP_NAME) + parsingOptionsBuilder.bodyRaw(secure) + + assertEquals( + SyntheticsParsingOptions() + .name(TEST_STEP_NAME) + .parser( + SyntheticsVariableParser() + .type(SyntheticsGlobalVariableParserType.RAW), + ) + .type(SyntheticsGlobalVariableParseTestOptionsType.HTTP_BODY) + .secure(secure), + parsingOptionsBuilder.build(), + ) + } + @ParameterizedTest @ValueSource(booleans = [true, false]) fun `header returns parsing options with RAW parser type and HTTP_HEADER type`(secure: Boolean) { diff --git a/src/test/kotlin/com/personio/synthetics/e2e/E2EMultiStepApiTest.kt b/src/test/kotlin/com/personio/synthetics/e2e/E2EMultiStepApiTest.kt index 26a324a..b857a24 100644 --- a/src/test/kotlin/com/personio/synthetics/e2e/E2EMultiStepApiTest.kt +++ b/src/test/kotlin/com/personio/synthetics/e2e/E2EMultiStepApiTest.kt @@ -87,6 +87,9 @@ class E2EMultiStepApiTest { extract("COOKIE_VARIABLE") { headerRegex("set-cookie", "(?<=cookie_name\\=)[^;]+(?=;)") } + extract("RAW_RESPONSE_BODY") { + bodyRaw() + } } } }