From 079d9fb36fadbdd7e6939dbd152f5cd01ac3298d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 20:51:50 +0000 Subject: [PATCH 01/11] chore(deps): update gradle to v9 --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aaaabb3cb9..dbc3ce4a04 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME From dd80100e720a1ff3573c27e74b0998d85a10a573 Mon Sep 17 00:00:00 2001 From: James Collett <89016121+JamesCollettCGI@users.noreply.github.com> Date: Thu, 12 Mar 2026 16:37:00 +0000 Subject: [PATCH 02/11] Update 'info.solidsoft.pitest' to version '1.19.0-rc.3' --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9afb5a5e3e..0fd6193f73 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ plugins { id 'com.github.kt3k.coveralls' version '2.12.2' id 'com.github.spacialcircumstances.gradle-cucumber-reporting' version '0.1.25' id 'org.jetbrains.gradle.plugin.idea-ext' version '1.4.1' - id 'info.solidsoft.pitest' version '1.15.0' + id 'info.solidsoft.pitest' version '1.19.0-rc.3' id 'uk.gov.hmcts.java' version '0.12.68' id 'au.com.dius.pact' version '4.6.20' id 'org.jsonschema2pojo' version '1.2.2' From 7437e3ecbcc4edd6cf1c9f7a2e49ecd7f8de9127 Mon Sep 17 00:00:00 2001 From: James Collett <89016121+JamesCollettCGI@users.noreply.github.com> Date: Thu, 12 Mar 2026 16:52:22 +0000 Subject: [PATCH 03/11] Update build.gradle (Replace XmlParser with groovy.xml.XmlParser) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0fd6193f73..99dc243fea 100644 --- a/build.gradle +++ b/build.gradle @@ -623,7 +623,7 @@ jacocoTestReport { def report = file("${buildDir}/reports/jacoco/test/jacocoTestReport.xml") logger.lifecycle("Checking coverage results: ${report}") - def parser = new XmlParser() + def parser = new groovy.xml.XmlParser() parser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); parser.setFeature("http://apache.org/xml/features/disallow-doctype-decl", false) def results = parser.parse(report) From 2bdaa96d9ba4e2894fc0eca500cd9f837cba2370 Mon Sep 17 00:00:00 2001 From: JamesCollettCGI Date: Fri, 13 Mar 2026 11:46:53 +0000 Subject: [PATCH 04/11] Update file suppress.gradle --- gradle/suppress.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/suppress.gradle b/gradle/suppress.gradle index a664a6ad63..38b4bb8995 100644 --- a/gradle/suppress.gradle +++ b/gradle/suppress.gradle @@ -1,4 +1,4 @@ -import groovy.util.slurpersupport.GPathResult +import groovy.xml.slurpersupport.GPathResult import groovy.xml.DOMBuilder import groovy.xml.XmlUtil import org.w3c.dom.Document @@ -114,4 +114,4 @@ task suppressCves() { // If no argument is specified, the default report file is 'dependency-check-report.xml' suppressCves() } -} \ No newline at end of file +} From 576399a817fe725413627f96647ea2136542a846 Mon Sep 17 00:00:00 2001 From: James Collett <89016121+JamesCollettCGI@users.noreply.github.com> Date: Fri, 13 Mar 2026 11:51:48 +0000 Subject: [PATCH 05/11] Update suppress.gradle (2) --- gradle/suppress.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle/suppress.gradle b/gradle/suppress.gradle index 38b4bb8995..c9f1c91f77 100644 --- a/gradle/suppress.gradle +++ b/gradle/suppress.gradle @@ -1,3 +1,4 @@ +import groovy.xml.XmlSlurper import groovy.xml.slurpersupport.GPathResult import groovy.xml.DOMBuilder import groovy.xml.XmlUtil From 17c15b02c7dbc4d6aa611c407cb19afb4b16134f Mon Sep 17 00:00:00 2001 From: JamesCollettCGI Date: Fri, 13 Mar 2026 12:37:57 +0000 Subject: [PATCH 06/11] Updates to build.gradle --- build.gradle | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index 99dc243fea..704eba62c2 100644 --- a/build.gradle +++ b/build.gradle @@ -244,7 +244,7 @@ dependencies { implementation group: 'org.springframework.boot', name: 'spring-boot-starter-jdbc' implementation group: 'org.springframework.boot', name: 'spring-boot-starter-oauth2-resource-server' implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign' - implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-loadbalancer' + implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-loadbalancer', version: '5.0.1' implementation group: 'org.springframework.hateoas', name: 'spring-hateoas' implementation group: 'org.springframework.plugin', name: 'spring-plugin-core' implementation group: 'org.springframework.retry', name: 'spring-retry' @@ -719,11 +719,11 @@ task fortifyScan(type: JavaExec) { idea { module { - // config to allow Intelij to mark test source and resource files correctly to help linting tools - testSourceDirs += project.sourceSets.aat.java.srcDirs - testSourceDirs += project.sourceSets.contractTest.java.srcDirs - testResourceDirs += project.sourceSets.aat.resources.srcDirs - testResourceDirs += project.sourceSets.contractTest.resources.srcDirs + // config to allow InteliJ to mark test source and resource files correctly to help linting tools + testSources.from(project.sourceSets.aat.java.srcDirs) + testSources.from(project.sourceSets.contractTest.java.srcDirs) + testResources.from(project.sourceSets.aat.resources.srcDirs) + testResources.from(project.sourceSets.contractTest.resources.srcDirs) } } From b366ca4726187cc024063a414e92fb6a630b7b26 Mon Sep 17 00:00:00 2001 From: James Collett <89016121+JamesCollettCGI@users.noreply.github.com> Date: Fri, 13 Mar 2026 20:50:40 +0000 Subject: [PATCH 07/11] Update build.gradle (build #44) --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 704eba62c2..35f14aa9e5 100644 --- a/build.gradle +++ b/build.gradle @@ -304,7 +304,7 @@ dependencies { testImplementation group: 'io.rest-assured', name: 'rest-assured', version: '5.5.6' testImplementation group: 'org.assertj', name: 'assertj-vavr', version: '0.5.0' testImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-test' - testImplementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-contract-stub-runner' + testImplementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-contract-stub-runner', version: '5.0.2' testImplementation group: 'org.testcontainers', name: 'testcontainers', version: testContainersVersion testImplementation group: 'org.testcontainers', name: 'postgresql', version: testContainersVersion testImplementation group: 'org.testcontainers', name: 'elasticsearch', version: testContainersVersion From a62c5ab8c9cf49e6f3a5d7bed52e89823b7d9b98 Mon Sep 17 00:00:00 2001 From: JamesCollettCGI Date: Mon, 16 Mar 2026 15:10:44 +0000 Subject: [PATCH 08/11] Add spring-cloud-contract-wiremock:4.3.1 to add AutoConfigureWireMock and WireMockConfigurationCustomizer --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index 35f14aa9e5..ea56fe6e22 100644 --- a/build.gradle +++ b/build.gradle @@ -313,6 +313,7 @@ dependencies { testImplementation group: 'com.github.hmcts', name: 'ccd-test-definitions', version: ccdTestDefinitionVersion testImplementation group: 'com.github.hmcts', name: 'befta-fw', version: beftaFwVersion testImplementation group: 'com.github.hmcts', name: 'fortify-client', version: '1.4.10', classifier: 'all' + testImplementation 'org.springframework.cloud:spring-cloud-contract-wiremock:4.3.1' contractTestImplementation group: 'au.com.dius.pact.provider', name: 'junit5', version: pactProviderVersion contractTestImplementation group: 'au.com.dius.pact.provider', name: 'spring', version: pactProviderVersion From 7a924d948a2614c8afd39c15854941beafcde8cd Mon Sep 17 00:00:00 2001 From: JamesCollettCGI Date: Mon, 16 Mar 2026 15:57:12 +0000 Subject: [PATCH 09/11] Fix various checkstyle issues --- .../ccd/domain/model/common/DisplayContextParameter.java | 4 ++-- .../domain/service/createevent/CreateCaseEventService.java | 2 +- .../search/elasticsearch/ElasticsearchSortService.java | 4 ++-- .../java/uk/gov/hmcts/ccd/domain/types/DocumentValidator.java | 2 +- .../gov/hmcts/ccd/integrations/IdamRepositoryCachingIT.java | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/ccd/domain/model/common/DisplayContextParameter.java b/src/main/java/uk/gov/hmcts/ccd/domain/model/common/DisplayContextParameter.java index 5f687e0c4c..6146ec25dd 100644 --- a/src/main/java/uk/gov/hmcts/ccd/domain/model/common/DisplayContextParameter.java +++ b/src/main/java/uk/gov/hmcts/ccd/domain/model/common/DisplayContextParameter.java @@ -32,8 +32,8 @@ public String getValue() { } public static List getDisplayContextParametersFor(String displayContextParameter) { - List displayContextParameterTypeList = new ArrayList<>(); - List displayContextParameters = new ArrayList<>(); + final List displayContextParameterTypeList = new ArrayList<>(); + final List displayContextParameters = new ArrayList<>(); if (Strings.isNullOrEmpty(displayContextParameter)) { return Collections.emptyList(); diff --git a/src/main/java/uk/gov/hmcts/ccd/domain/service/createevent/CreateCaseEventService.java b/src/main/java/uk/gov/hmcts/ccd/domain/service/createevent/CreateCaseEventService.java index 60877aa99f..7d52cc528f 100644 --- a/src/main/java/uk/gov/hmcts/ccd/domain/service/createevent/CreateCaseEventService.java +++ b/src/main/java/uk/gov/hmcts/ccd/domain/service/createevent/CreateCaseEventService.java @@ -343,7 +343,7 @@ public CreateCaseEventResult createCaseSystemEvent(final String caseReference, Event event) { final CaseDetails caseDetails = delegatingCaseDetailsRepository.findByReference(caseReference) .orElseThrow(() -> - new ResourceNotFoundException(format("Case with reference %s could not be found", caseReference))); + new ResourceNotFoundException(format("Case with reference %s could not be found", caseReference))); final CaseEventDefinition caseEventDefinition = new CaseEventDefinition(); caseEventDefinition.setId("DocumentUpdated"); diff --git a/src/main/java/uk/gov/hmcts/ccd/domain/service/search/elasticsearch/ElasticsearchSortService.java b/src/main/java/uk/gov/hmcts/ccd/domain/service/search/elasticsearch/ElasticsearchSortService.java index 01da197b86..4fd0475de6 100644 --- a/src/main/java/uk/gov/hmcts/ccd/domain/service/search/elasticsearch/ElasticsearchSortService.java +++ b/src/main/java/uk/gov/hmcts/ccd/domain/service/search/elasticsearch/ElasticsearchSortService.java @@ -73,8 +73,8 @@ private ObjectNode buildSortOrderFieldNode(CaseTypeDefinition caseTypeDefinition ObjectNode objectNode = objectMapper.createObjectNode(); CommonField commonField = caseTypeDefinition.getComplexSubfieldDefinitionByPath(sortOrderField.getCaseFieldId()).orElseThrow(() -> - new ServiceException(String.format("Case field '%s' does not exist in configuration for case type '%s'.", - sortOrderField.getCaseFieldId(), caseTypeDefinition.getId())) + new ServiceException(String.format("Case field '%s' does not exist in configuration for case type " + + "'%s'.", sortOrderField.getCaseFieldId(), caseTypeDefinition.getId())) ); FieldTypeDefinition fieldType = commonField.getFieldTypeDefinition(); diff --git a/src/main/java/uk/gov/hmcts/ccd/domain/types/DocumentValidator.java b/src/main/java/uk/gov/hmcts/ccd/domain/types/DocumentValidator.java index 4af5243a48..1783914daf 100644 --- a/src/main/java/uk/gov/hmcts/ccd/domain/types/DocumentValidator.java +++ b/src/main/java/uk/gov/hmcts/ccd/domain/types/DocumentValidator.java @@ -52,7 +52,6 @@ public BaseType getType() { public List validate(final String dataFieldId, final JsonNode dataValue, final CaseFieldDefinition caseFieldDefinition) { - List validationResults; // Empty text should still check against MIN - MIN may or may not be 0 if (isNullOrEmpty(dataValue)) { @@ -87,6 +86,7 @@ public List validate(final String dataFieldId, + " does not match Document Management domain or expected URL path", dataFieldId)); } + List validationResults; if (dataValue.has(DOCUMENT_BINARY_URL)) { final JsonNode documentBinaryUrl = dataValue.get(DOCUMENT_BINARY_URL); validationResults = validateDocumentBinaryURL( diff --git a/src/test/java/uk/gov/hmcts/ccd/integrations/IdamRepositoryCachingIT.java b/src/test/java/uk/gov/hmcts/ccd/integrations/IdamRepositoryCachingIT.java index cf21900329..2c24a8fe75 100644 --- a/src/test/java/uk/gov/hmcts/ccd/integrations/IdamRepositoryCachingIT.java +++ b/src/test/java/uk/gov/hmcts/ccd/integrations/IdamRepositoryCachingIT.java @@ -55,8 +55,8 @@ public void openMocks() { } /** - *

Test cached behaviour of getDataStoreUserAccessToken method. Caching is implemented using Spring - * Cacheable annotation so test is performed on the actual IdamRepository bean with mocked dependencies.

+ * Test cached behaviour of getDataStoreUserAccessToken method. Caching is implemented using Spring + * Cacheable annotation so test is performed on the actual IdamRepository bean with mocked dependencies. * *

As the caching behaviour is controlled by Spring it is not reset between tests. For this reason * all tests have to be in a single method so that state can be controlled.

From a7cd5223da04d4b559456bd66fcabad7c3670461 Mon Sep 17 00:00:00 2001 From: James Collett <89016121+JamesCollettCGI@users.noreply.github.com> Date: Thu, 19 Mar 2026 12:44:25 +0000 Subject: [PATCH 10/11] Try loadbalancer and contract-stub-runner version 4.3.1 --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index ea56fe6e22..a2f1882630 100644 --- a/build.gradle +++ b/build.gradle @@ -244,7 +244,7 @@ dependencies { implementation group: 'org.springframework.boot', name: 'spring-boot-starter-jdbc' implementation group: 'org.springframework.boot', name: 'spring-boot-starter-oauth2-resource-server' implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign' - implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-loadbalancer', version: '5.0.1' + implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-loadbalancer', version: '4.3.1' implementation group: 'org.springframework.hateoas', name: 'spring-hateoas' implementation group: 'org.springframework.plugin', name: 'spring-plugin-core' implementation group: 'org.springframework.retry', name: 'spring-retry' @@ -304,7 +304,7 @@ dependencies { testImplementation group: 'io.rest-assured', name: 'rest-assured', version: '5.5.6' testImplementation group: 'org.assertj', name: 'assertj-vavr', version: '0.5.0' testImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-test' - testImplementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-contract-stub-runner', version: '5.0.2' + testImplementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-contract-stub-runner', version: '4.3.1' testImplementation group: 'org.testcontainers', name: 'testcontainers', version: testContainersVersion testImplementation group: 'org.testcontainers', name: 'postgresql', version: testContainersVersion testImplementation group: 'org.testcontainers', name: 'elasticsearch', version: testContainersVersion From 084ca7dc2f249ecdd724d0fdc10ae2bd3f3b8488 Mon Sep 17 00:00:00 2001 From: JamesCollettCGI Date: Tue, 24 Mar 2026 13:13:05 +0000 Subject: [PATCH 11/11] Update build.gradle (align task smoke with task functional) --- build.gradle | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index a2f1882630..b23456c84d 100644 --- a/build.gradle +++ b/build.gradle @@ -736,7 +736,7 @@ task highLevelDataSetup(type: JavaExec) { jvmArgs = ['--add-opens=java.base/java.lang.reflect=ALL-UNNAMED'] } -task smoke() { +task smoke(type: JavaExec) { description = 'Executes smoke tests against an the CCD Data Store API instance just deployed' dependsOn aatClasses @@ -746,19 +746,15 @@ task smoke() { into "$buildDir/test-results/test" } - doLast { - generateCucumberReports.enabled = true - javaexec { - mainClass = "uk.gov.hmcts.ccd.datastore.befta.DataStoreBeftaMain" - classpath += configurations.cucumberRuntime + sourceSets.aat.runtimeClasspath - args = ['--plugin', "json:${rootDir}/target/cucumber.json", - '--plugin', "junit:${buildDir}/test-results/smoke/cucumber.xml", - '--tags', '@Smoke and not @Ignore', - '--glue', 'uk.gov.hmcts.befta.player', - '--glue', "uk.gov.hmcts.ccd.datastore.befta", 'src/aat/resources/features'] - jvmArgs = [ '--add-opens=java.base/java.lang.reflect=ALL-UNNAMED' ] - } - } + generateCucumberReports.enabled = true + mainClass = "uk.gov.hmcts.ccd.datastore.befta.DataStoreBeftaMain" + classpath += configurations.cucumberRuntime + sourceSets.aat.runtimeClasspath + args = ['--plugin', "json:${rootDir}/target/cucumber.json", + '--plugin', "junit:${buildDir}/test-results/smoke/cucumber.xml", + '--tags', '@Smoke and not @Ignore', + '--glue', 'uk.gov.hmcts.befta.player', + '--glue', "uk.gov.hmcts.ccd.datastore.befta", 'src/aat/resources/features'] + jvmArgs = [ '--add-opens=java.base/java.lang.reflect=ALL-UNNAMED' ] finalizedBy { generateCucumberReports {