diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0cfd2375..8f537bc9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,7 +18,7 @@ jobs: name: "Build" runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: "Set up JDK" uses: actions/setup-java@v5 diff --git a/.github/workflows/dependency-submission.yml b/.github/workflows/dependency-submission.yml index 9cb40816..748dfe67 100644 --- a/.github/workflows/dependency-submission.yml +++ b/.github/workflows/dependency-submission.yml @@ -14,9 +14,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout sources - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Generate and submit dependency graph - uses: gradle/actions/dependency-submission@v4 + uses: gradle/actions/dependency-submission@v5 env: DEPENDENCY_GRAPH_EXCLUDE_PROJECTS: ':allure-java-commons-test' DEPENDENCY_GRAPH_INCLUDE_CONFIGURATIONS: 'runtimeClasspath' diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 97d4d7fb..2295deb9 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -11,7 +11,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: "Set up JDK" uses: actions/setup-java@v5 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6b08eb0e..7d5ace55 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,7 +26,7 @@ jobs: - name: "Check next version" run: | expr "${{ github.event.inputs.nextVersion }}" : '[[:digit:]][[:digit:]]*\.[[:digit:]][[:digit:]]*$' - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: token: ${{ secrets.QAMETA_CI }} diff --git a/allure-awaitility/build.gradle.kts b/allure-awaitility/build.gradle.kts index e7afac93..3c9ed6c7 100644 --- a/allure-awaitility/build.gradle.kts +++ b/allure-awaitility/build.gradle.kts @@ -2,7 +2,7 @@ description = "Allure Awaitlity Integration" val agent: Configuration by configurations.creating -val awaitilityVersion = "4.2.1" +val awaitilityVersion = "4.3.0" dependencies { agent("org.aspectj:aspectjweaver") diff --git a/allure-grpc/build.gradle.kts b/allure-grpc/build.gradle.kts index 7eab5267..2f3cc642 100644 --- a/allure-grpc/build.gradle.kts +++ b/allure-grpc/build.gradle.kts @@ -8,8 +8,8 @@ description = "Allure gRPC Integration" val agent: Configuration by configurations.creating -val grpcVersion = "1.76.0" -val protobufVersion = "4.32.1" +val grpcVersion = "1.77.0" +val protobufVersion = "4.33.2" val jacksonVersion = "2.17.2" dependencies { diff --git a/allure-jooq/build.gradle.kts b/allure-jooq/build.gradle.kts index 22d515ba..5cbce74a 100644 --- a/allure-jooq/build.gradle.kts +++ b/allure-jooq/build.gradle.kts @@ -5,13 +5,13 @@ val jooqVersion = "3.19.10" dependencies { api(project(":allure-java-commons")) compileOnly("org.jooq:jooq:${jooqVersion}") - testImplementation("io.zonky.test:embedded-postgres:2.0.7") + testImplementation("io.zonky.test:embedded-postgres:2.2.0") testImplementation("org.assertj:assertj-core") testImplementation("org.jooq:jooq:${jooqVersion}") testImplementation("org.junit.jupiter:junit-jupiter-api") testImplementation("org.mockito:mockito-core") testImplementation("org.slf4j:slf4j-simple") - testImplementation(platform("io.zonky.test.postgres:embedded-postgres-binaries-bom:16.2.0")) + testImplementation(platform("io.zonky.test.postgres:embedded-postgres-binaries-bom:18.1.0")) testImplementation(project(":allure-assertj")) testImplementation(project(":allure-java-commons-test")) testImplementation(project(":allure-junit-platform")) diff --git a/allure-rest-assured/build.gradle.kts b/allure-rest-assured/build.gradle.kts index d454c364..4834fa00 100644 --- a/allure-rest-assured/build.gradle.kts +++ b/allure-rest-assured/build.gradle.kts @@ -1,6 +1,6 @@ description = "Allure Rest-Assured Integration" -val restAssuredVersion = "5.5.0" +val restAssuredVersion = "5.5.6" dependencies { api(project(":allure-attachments")) 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 9e166c30..07f0d5e6 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 @@ -35,7 +35,6 @@ import java.util.TreeSet; import static io.qameta.allure.attachment.http.HttpRequestAttachment.Builder.create; -import static io.qameta.allure.attachment.http.HttpResponseAttachment.Builder.create; import static java.util.Optional.ofNullable; /** @@ -45,11 +44,18 @@ public class AllureRestAssured implements OrderedFilter { private static final String HIDDEN_PLACEHOLDER = "[ BLACKLISTED ]"; + private int maxAllowedPrettifyLength = 1_048_576; + private String requestTemplatePath = "http-request.ftl"; private String responseTemplatePath = "http-response.ftl"; private String requestAttachmentName = "Request"; private String responseAttachmentName; + public AllureRestAssured setMaxAllowedPrettifyLength(final int maxAllowedPrettifyLength) { + this.maxAllowedPrettifyLength = maxAllowedPrettifyLength; + return this; + } + public AllureRestAssured setRequestTemplate(final String templatePath) { this.requestTemplatePath = templatePath; return this; @@ -123,10 +129,15 @@ public Response filter(final FilterableRequestSpecification requestSpec, final String attachmentName = ofNullable(responseAttachmentName) .orElse(response.getStatusLine()); - final HttpResponseAttachment responseAttachment = create(attachmentName) + final String responseAsString = response.getBody().asString(); + final String body = responseAsString.length() > maxAllowedPrettifyLength + ? responseAsString + : prettifier.getPrettifiedBodyIfPossible(response, response.getBody()); + + final HttpResponseAttachment responseAttachment = HttpResponseAttachment.Builder.create(attachmentName) .setResponseCode(response.getStatusCode()) .setHeaders(toMapConverter(response.getHeaders(), hiddenHeaders)) - .setBody(prettifier.getPrettifiedBodyIfPossible(response, response.getBody())) + .setBody(body) .build(); new DefaultAttachmentProcessor().addAttachment( 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 61e2b4e8..4b3b2092 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 @@ -28,7 +28,9 @@ import io.restassured.config.RestAssuredConfig; import io.restassured.http.ContentType; import io.restassured.specification.RequestSpecification; + import java.nio.charset.StandardCharsets; + import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.params.ParameterizedTest; @@ -59,6 +61,23 @@ public Stream provideArguments(ExtensionContext context) { } } +class JsonPrettifyingArgumentsProvider implements ArgumentsProvider { + @Override + public Stream provideArguments(ExtensionContext context) { + + return Stream.of( + arguments(new AllureRestAssured(), """ + { + "name": "12345", + "value": "abcdef" + }"""), + arguments(new AllureRestAssured().setMaxAllowedPrettifyLength(5), """ + {"name":"12345","value":"abcdef"} + """) + ); + } +} + class HiddenHeadersArgumentProvider implements ArgumentsProvider { @Override public Stream provideArguments(ExtensionContext context) { @@ -174,6 +193,34 @@ void shouldHideHeadersInAttachments(final Map headers, .allSatisfy(at -> expectedValues.forEach(ev -> assertThat(at).contains(ev))); } + @ParameterizedTest + @ArgumentsSource(JsonPrettifyingArgumentsProvider.class) + void responseJsonPrettified(final AllureRestAssured filter, final String formattedBody) { + final ResponseDefinitionBuilder responseBuilder = WireMock.aResponse() + .withHeader("Content-Type", "application/json") + .withBody(""" + {"name":"12345","value":"abcdef"} + """) + .withStatus(200); + + RestAssured.replaceFiltersWith(filter); + + final AllureResults results = executeWithStub(responseBuilder, RestAssured.with()); + final Attachment requestAttachment = results.getTestResults() + .stream() + .map(TestResult::getAttachments) + .flatMap(Collection::stream) + .filter(attachment -> "HTTP/1.1 200 OK".equals(attachment.getName())) + .findAny() + .orElseThrow(() -> new AssertionError("No response attachment found")); + + final byte[] attachmentBody = results.getAttachments().get(requestAttachment.getSource()); + final String attachmentBodyString = new String(attachmentBody, StandardCharsets.UTF_8); + + assertThat(attachmentBodyString) + .contains(formattedBody); + } + protected final AllureResults execute() { return executeWithStub(WireMock.aResponse().withBody("some body")); } @@ -193,8 +240,8 @@ protected final AllureResults executeWithStub(ResponseDefinitionBuilder response WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/hello?Allure=Form")).willReturn(responseBuilder)); try { spec.contentType(ContentType.URLENC) - .formParams("Allure", "Form") - .get(server.url("/hello")).then().statusCode(statusCode); + .formParams("Allure", "Form") + .get(server.url("/hello")).then().statusCode(statusCode); } finally { server.stop(); RestAssured.replaceFiltersWith(ImmutableList.of()); diff --git a/allure-scalatest/build.gradle.kts b/allure-scalatest/build.gradle.kts index 188e8d80..a5ecc550 100644 --- a/allure-scalatest/build.gradle.kts +++ b/allure-scalatest/build.gradle.kts @@ -2,7 +2,7 @@ description = "Allure ScalaTest Integration" plugins { scala - id("com.github.prokod.gradle-crossbuild") version "0.16.0" + id("com.github.prokod.gradle-crossbuild") version "0.17.0" } val scala212 = "2.12" @@ -84,14 +84,14 @@ signing { dependencies { api(project(":allure-java-commons")) compileOnly("org.scalatest:scalatest_$scala213:3.2.19") - compileOnly("org.scala-lang.modules:scala-collection-compat_$scala213:2.12.0") + compileOnly("org.scala-lang.modules:scala-collection-compat_$scala213:2.14.0") testAnnotationProcessor(project(":allure-descriptions-javadoc")) testImplementation("io.github.glytching:junit-extensions") testImplementation("org.assertj:assertj-core") testImplementation("org.junit.jupiter:junit-jupiter-api") testImplementation("org.junit.jupiter:junit-jupiter-params") testImplementation("org.scalatest:scalatest_$scala213:3.2.19") - testImplementation("org.scala-lang.modules:scala-collection-compat_$scala213:2.12.0") + testImplementation("org.scala-lang.modules:scala-collection-compat_$scala213:2.14.0") testImplementation("org.slf4j:slf4j-simple") testImplementation(project(":allure-assertj")) testImplementation(project(":allure-java-commons-test")) diff --git a/build.gradle.kts b/build.gradle.kts index 525bbe6c..b1b3f9ca 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -145,19 +145,19 @@ configure(libs) { apply(plugin = "java-library") val orgSlf4jVersion = "2.0.17" - val assertJVersion = "1.9.22.1" + val assertJVersion = "1.9.25" dependencyManagement { imports { - mavenBom("com.fasterxml.jackson:jackson-bom:2.17.2") + mavenBom("com.fasterxml.jackson:jackson-bom:2.20.1") mavenBom("org.junit:junit-bom:5.10.3") } dependencies { - dependency("com.github.spotbugs:spotbugs:4.9.3") + dependency("com.github.spotbugs:spotbugs:4.9.8") dependency("com.github.tomakehurst:wiremock:3.0.1") dependency("com.google.inject:guice:7.0.0") - dependency("com.google.testing.compile:compile-testing:0.21.0") - dependency("com.puppycrawl.tools:checkstyle:11.0.1") + dependency("com.google.testing.compile:compile-testing:0.23.0") + dependency("com.puppycrawl.tools:checkstyle:12.2.0") dependency("com.squareup.retrofit2:retrofit:3.0.0") dependency("commons-io:commons-io:2.20.0") dependency("io.github.benas:random-beans:3.9.0") @@ -171,7 +171,7 @@ configure(libs) { dependency("org.freemarker:freemarker:2.3.33") dependency("org.grpcmock:grpcmock-junit5:0.8.0") dependency("org.hamcrest:hamcrest:3.0") - dependency("org.jboss.resteasy:resteasy-client:6.2.9.Final") + dependency("org.jboss.resteasy:resteasy-client:7.0.1.Final") dependency("org.mock-server:mockserver-netty:5.15.0") dependency("org.mockito:mockito-core:5.12.0") dependency("org.slf4j:slf4j-api:${orgSlf4jVersion}") diff --git a/gradle.properties b/gradle.properties index 4c932d12..e8de60e4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -version=2.31.0 +version=2.32.0 org.gradle.daemon=true org.gradle.parallel=true diff --git a/settings.gradle.kts b/settings.gradle.kts index 20eaaa8e..5dfda565 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -48,15 +48,14 @@ pluginManagement { plugins { id("com.diffplug.spotless") version "6.25.0" id("io.github.goooler.shadow") version "8.1.8" - id("com.gradle.enterprise") version "3.17.5" id("io.github.gradle-nexus.publish-plugin") version "2.0.0" - id("io.qameta.allure-adapter") version "2.11.2" - id("io.qameta.allure-aggregate-report") version "2.11.2" - id("io.qameta.allure-download") version "2.12.0" - id("io.qameta.allure-report") version "2.11.2" - id("io.spring.dependency-management") version "1.1.6" - id("com.google.protobuf") version "0.9.4" - id("com.github.spotbugs") version "6.0.19" + id("io.qameta.allure-adapter") version "3.0.1" + id("io.qameta.allure-aggregate-report") version "3.0.1" + id("io.qameta.allure-download") version "3.0.1" + id("io.qameta.allure-report") version "3.0.1" + id("io.spring.dependency-management") version "1.1.7" + id("com.google.protobuf") version "0.9.5" + id("com.github.spotbugs") version "6.4.7" kotlin("jvm") version "2.0.0" } }