Skip to content

Commit db94066

Browse files
VUL-6359 (#1132)
* library updates - checkstyle 12.2.0 - spring-boot 3.4.10 - pact 4.6.19 - poi 5.5.0 - serenity 4.3.3 - pmd 7.19.0 - postgresql 42.7.7 - azure-messaging-servicebus 7.17.17 - openapi 2.8.10 - wiremock 3.13.2 - spring-cloud-contract-wiremock 4.2.3 - * poi 4.1.2 * replaced deprecated annotation * checkstyle * changed how 'null' value is set in contract tests * local testcontainers * local env db config guarded by LOCAL_DB_INTEGRATION * testcontainers 1.21.4 * spring-cloud 2024.0.0 * removed local env db config guarded by LOCAL_DB_INTEGRATION * spring-cloud 2024.0.3 * removed resetting generated child ids * reform logging 8.0.0 * addressed ObjectOptimisticLockingFailureException in should_update_IdamId_when_reinvite_staff_user_true_in_crd --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent e3be0fa commit db94066

File tree

13 files changed

+56
-61
lines changed

13 files changed

+56
-61
lines changed

build.gradle

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@ plugins {
1212
id 'idea'
1313
id 'jacoco'
1414
id 'pmd'
15+
id 'checkstyle'
1516
id 'com.github.ben-manes.versions' version '0.53.0'
1617
id "info.solidsoft.pitest" version '1.15.0'
1718
id 'io.spring.dependency-management' version '1.1.7'
1819
id 'org.sonarqube' version '7.0.0.6105'
19-
id 'org.springframework.boot' version '3.3.7'
20+
id 'org.springframework.boot' version '3.4.10'
2021
id "org.flywaydb.flyway" version '11.14.0'
21-
id 'au.com.dius.pact' version '4.6.17'
22+
id 'au.com.dius.pact' version '4.6.19'
2223
id 'org.owasp.dependencycheck' version '12.1.6'
2324
id 'net.serenity-bdd.serenity-gradle-plugin' version '4.2.34'
2425
}
@@ -29,11 +30,11 @@ def versions = [
2930
commonsLang3 : '3.17.0',
3031
lombok : '1.18.42',
3132
reformHealthStarter: '0.0.5',
32-
reformLogging : '6.1.9',
33+
reformLogging : '8.0.0',
3334
sonarPitest : '0.5',
3435
jackson : '2.18.2',
3536
junitPitest : '1.2.1',
36-
pact_version : '4.6.16',
37+
pact_version : '4.6.19',
3738
launchDarklySdk : '5.10.9',
3839
restAssured : '4.3.3',
3940
log4j : '2.25.2',
@@ -43,11 +44,11 @@ def versions = [
4344
bouncycastle : '1.82',
4445
junit : '5.11.4',
4546
junitPlatform : '1.11.4',
46-
serenity : '4.2.34',
47+
serenity : '4.3.3',
4748
]
4849

4950
ext {
50-
springCloudVersion = '2023.0.6'
51+
springCloudVersion = '2024.0.3'
5152
}
5253

5354
application {
@@ -166,7 +167,12 @@ configurations {
166167
pactTestRuntime.extendsFrom testRuntime
167168
}
168169

170+
checkstyle {
171+
toolVersion = "12.2.0"
172+
}
173+
169174
pmd {
175+
toolVersion = "7.19.0"
170176
ignoreFailures = true
171177
sourceSets = [sourceSets.main, sourceSets.test, sourceSets.integrationTest, sourceSets.functionalTest, sourceSets.smokeTest]
172178
reportsDir = file("$project.buildDir/reports/pmd")
@@ -389,7 +395,7 @@ dependencies {
389395
implementation group: 'com.nimbusds', name: 'nimbus-jose-jwt', version: '10.5'
390396
implementation group: 'org.flywaydb', name: 'flyway-core'
391397
implementation group: 'org.flywaydb', name: 'flyway-database-postgresql'
392-
implementation group: 'org.postgresql', name: 'postgresql'
398+
implementation group: 'org.postgresql', name: 'postgresql', version: '42.7.7'
393399

394400
implementation group: 'com.google.guava', name: 'guava', version: '33.5.0-jre'
395401
implementation group: 'jakarta.el', name: 'jakarta.el-api', version: '6.0.1'
@@ -404,14 +410,14 @@ dependencies {
404410
implementation group: 'org.apache.logging.log4j', name: 'log4j-to-slf4j', version: versions.log4j
405411

406412
implementation group: 'com.azure', name: 'azure-core', version: '1.57.0'
407-
implementation group: 'com.azure', name: 'azure-messaging-servicebus', version: '7.17.15'
413+
implementation group: 'com.azure', name: 'azure-messaging-servicebus', version: '7.17.17'
408414
implementation group: 'com.google.code.gson', name: 'gson', version: '2.13.2'
409415

410416
implementation group: 'io.github.openfeign.form', name: 'feign-form', version: '3.8.0'
411417
implementation group: 'io.github.openfeign.form', name: 'feign-form-spring', version: '3.8.0'
412418
implementation "io.github.openfeign:feign-httpclient:13.6"
413419
implementation "com.github.hmcts.java-logging:logging:${versions.reformLogging}"
414-
implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.6.0'
420+
implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.8.10'
415421

416422
testImplementation group: 'com.github.hmcts', name: 'rd-commons-lib', version: '0.1.3'
417423

@@ -438,7 +444,7 @@ dependencies {
438444
testImplementation group: 'org.testcontainers', name: 'postgresql', version: versions.tc_postgresql
439445
testImplementation group: 'org.testcontainers', name: 'junit-jupiter', version: versions.tc_postgresql
440446
testImplementation group: 'org.testcontainers', name: 'testcontainers', version: versions.tc_postgresql
441-
testImplementation group: 'org.wiremock', name: 'wiremock', version: '3.13.1'
447+
testImplementation group: 'org.wiremock', name: 'wiremock', version: '3.13.2'
442448
testImplementation ("org.mockito:mockito-core:5.20.0") {
443449
exclude group: "net.bytebuddy", module: "byte-buddy"
444450
exclude group: "net.bytebuddy", module: "byte-buddy-agent"
@@ -466,7 +472,7 @@ dependencies {
466472
testImplementation group: 'com.github.mifmif', name: 'generex', version: '1.0.2'
467473
testImplementation 'com.github.hmcts:fortify-client:1.4.10:all'
468474

469-
implementation group: 'org.springframework.cloud', name: 'spring-cloud-contract-wiremock'
475+
implementation group: 'org.springframework.cloud', name: 'spring-cloud-contract-wiremock', version: '4.2.3'
470476

471477
testImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-test'
472478

@@ -494,6 +500,7 @@ dependencies {
494500
integrationTestImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: versions.junit
495501
integrationTestImplementation group: 'org.junit.platform', name: 'junit-platform-commons', version: versions.junitPlatform
496502
integrationTestRuntimeOnly group: 'org.junit.platform', name: 'junit-platform-engine', version: versions.junitPlatform
503+
integrationTestRuntimeOnly group: 'org.jetbrains.kotlin', name: 'kotlin-reflect'
497504

498505
contractTestImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: versions.junit
499506
contractTestRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: versions.junit

src/contractTest/java/uk/gov/hmcts/reform/cwrdapi/CommonDataApiConsumerTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,10 @@ private DslPart createCrdListOfValuesResponse() {
111111
.stringType("category_key","HearingChannel")
112112
.stringType("key","video")
113113
.stringType("value_en","Video")
114-
.stringType("value_cy",null)
115-
.stringType("hint_text_en",null)
116-
.stringType("hint_text_cy",null)
117-
.stringType("parent_category",null)
114+
.nullValue("value_cy")
115+
.nullValue("hint_text_en")
116+
.nullValue("hint_text_cy")
117+
.nullValue("parent_category")
118118
.stringType("active_flag","Y")
119119
)
120120
).build();

src/contractTest/java/uk/gov/hmcts/reform/cwrdapi/JrdUserRequestV1ConsumerTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -219,8 +219,8 @@ private DslPart createJrdFetchProfilesResponse() {
219219

220220
private DslPart createJrdProfileUpdateRequest() {
221221
return newJsonBody(o -> o
222-
.stringType("ccdServiceName", null)
223-
.stringType("object_ids", null)
222+
.nullValue("ccdServiceName")
223+
.nullValue("object_ids")
224224
.minArrayLike("sidam_ids", 1,
225225
PactDslJsonRootValue.stringType("44362987-4b00-f2e7-4ff8-761b87f16bf9"),1)
226226
).build();
@@ -237,7 +237,7 @@ private DslPart createJrdProfileUserRequest() {
237237
private DslPart createJrdProfileForServiceNameRequest() {
238238
return newJsonBody(o -> o
239239
.stringType("ccdServiceName", "CMC")
240-
.stringType("object_ids", null)
240+
.nullValue("object_ids")
241241
.minArrayLike("sidam_ids", 1,
242242
PactDslJsonRootValue.stringType("44362987-4b00-f2e7-4ff8-761b87f16bf9"),1)
243243
).build();

src/contractTest/java/uk/gov/hmcts/reform/cwrdapi/JrdUserRequestV2ConsumerTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,8 @@ private DslPart createJrdProfileSearchRequest() {
227227

228228
private DslPart createJrdProfileUpdateRequest() {
229229
return newJsonBody(o -> o
230-
.stringType("ccdServiceName", null)
231-
.stringType("object_ids", null)
230+
.nullValue("ccdServiceName")
231+
.nullValue("object_ids")
232232
.minArrayLike("sidam_ids", 1,
233233
PactDslJsonRootValue.stringType("44362987-4b00-f2e7-4ff8-761b87f16bf9"),1)
234234
).build();
@@ -237,7 +237,7 @@ private DslPart createJrdProfileUpdateRequest() {
237237
private DslPart createJrdProfileForServiceNameRequest() {
238238
return newJsonBody(o -> o
239239
.stringType("ccdServiceName", "CMC")
240-
.stringType("object_ids", null)
240+
.nullValue("object_ids")
241241
.minArrayLike("sidam_ids", 1,
242242
PactDslJsonRootValue.stringType("44362987-4b00-f2e7-4ff8-761b87f16bf9"),1)
243243
).build();

src/contractTest/java/uk/gov/hmcts/reform/cwrdapi/StaffReferenceDataProviderTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818
import org.mockito.InjectMocks;
1919
import org.mockito.Mock;
2020
import org.mockito.junit.jupiter.MockitoExtension;
21-
import org.springframework.boot.test.mock.mockito.MockBean;
2221
import org.springframework.data.domain.Page;
2322
import org.springframework.data.domain.PageImpl;
23+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
2424
import org.springframework.test.context.junit.jupiter.SpringExtension;
2525
import uk.gov.hmcts.reform.cwrdapi.client.domain.RoleAdditionResponse;
2626
import uk.gov.hmcts.reform.cwrdapi.client.domain.UserProfileResponse;
@@ -119,7 +119,7 @@ public class StaffReferenceDataProviderTest {
119119
@Mock
120120
private CaseWorkerWorkAreaRepository caseWorkerWorkAreaRepository;
121121

122-
@MockBean
122+
@MockitoBean
123123
private LocationReferenceDataFeignClient locationReferenceDataFeignClient;
124124

125125

@@ -142,7 +142,7 @@ public class StaffReferenceDataProviderTest {
142142

143143
@InjectMocks
144144
private StaffRefDataServiceImpl staffRefDataServiceImpl;
145-
@MockBean
145+
@MockitoBean
146146
private UserProfileFeignClient userProfileFeignClient;
147147
@Mock
148148
StaffProfileCreateUpdateUtil staffProfileCreateUpdateUtil;

src/integrationTest/java/uk/gov/hmcts/reform/cwrdapi/service/ValidationServiceFacadeImplTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
import org.springframework.beans.factory.annotation.Autowired;
99
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
1010
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
11-
import org.springframework.boot.test.mock.mockito.MockBean;
1211
import org.springframework.test.context.ContextConfiguration;
1312
import org.springframework.test.context.TestPropertySource;
13+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
1414
import uk.gov.hmcts.reform.cwrdapi.CaseWorkerRefApiApplication;
1515
import uk.gov.hmcts.reform.cwrdapi.client.domain.CaseWorkerDomain;
1616
import uk.gov.hmcts.reform.cwrdapi.client.domain.CaseWorkerProfile;
@@ -51,7 +51,7 @@ class ValidationServiceFacadeImplTest {
5151
@Autowired
5252
ExceptionCaseWorkerRepository exceptionCaseWorkerRepository;
5353

54-
@MockBean
54+
@MockitoBean
5555
JwtGrantedAuthoritiesConverter jwtGrantedAuthoritiesConverter;
5656

5757
StaffAuditRepository staffAuditRepository = mock(StaffAuditRepository.class);

src/integrationTest/java/uk/gov/hmcts/reform/cwrdapi/util/AuthorizationEnabledIntegrationTest.java

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,16 @@
1111
import net.serenitybdd.annotations.WithTag;
1212
import net.serenitybdd.annotations.WithTags;
1313
import org.flywaydb.core.Flyway;
14-
import org.junit.jupiter.api.AfterEach;
1514
import org.junit.jupiter.api.BeforeEach;
1615
import org.junit.jupiter.api.extension.RegisterExtension;
1716
import org.springframework.beans.factory.annotation.Autowired;
1817
import org.springframework.beans.factory.annotation.Value;
19-
import org.springframework.boot.test.mock.mockito.MockBean;
2018
import org.springframework.context.annotation.Configuration;
2119
import org.springframework.http.HttpStatus;
2220
import org.springframework.security.oauth2.jwt.JwtDecoder;
2321
import org.springframework.test.context.ContextConfiguration;
2422
import org.springframework.test.context.TestPropertySource;
23+
import org.springframework.test.context.bean.override.mockito.MockitoBean;
2524
import uk.gov.hmcts.reform.authorisation.generators.AuthTokenGenerator;
2625
import uk.gov.hmcts.reform.cwrdapi.client.domain.AttributeResponse;
2726
import uk.gov.hmcts.reform.cwrdapi.client.domain.RoleAdditionResponse;
@@ -63,13 +62,13 @@
6362
@ContextConfiguration(classes = {TestConfig.class, RestTemplateConfiguration.class})
6463
public abstract class AuthorizationEnabledIntegrationTest extends SpringBootIntegrationTest {
6564

66-
@MockBean
65+
@MockitoBean
6766
protected FeatureToggleServiceImpl featureToggleServiceImpl;
6867

69-
@MockBean
68+
@MockitoBean
7069
protected TopicPublisher topicPublisher;
7170

72-
@MockBean
71+
@MockitoBean
7372
LDClient ldClient;
7473

7574
@Autowired
@@ -97,7 +96,7 @@ public abstract class AuthorizationEnabledIntegrationTest extends SpringBootInte
9796
@Value("${oidc.expiration}")
9897
private long expiration;
9998

100-
@MockBean
99+
@MockitoBean
101100
AuthTokenGenerator authTokenGenerator;
102101

103102
@Autowired
@@ -109,8 +108,8 @@ public abstract class AuthorizationEnabledIntegrationTest extends SpringBootInte
109108
@Autowired
110109
Flyway flyway;
111110

112-
@MockBean
113-
protected static JwtDecoder jwtDecoder;
111+
@MockitoBean
112+
protected JwtDecoder jwtDecoder;
114113

115114
@BeforeEach
116115
public void setUpClient() {
@@ -248,12 +247,6 @@ public void userProfilePostUserWireMock() {
248247
+ "}")));
249248
}
250249

251-
@AfterEach
252-
public void cleanupTestData() {
253-
JwtDecoderMockBuilder.resetJwtDecoder();
254-
}
255-
256-
257250
//removed UUID mock here and put in Test config,hence use this only for insert integration testing
258251
//for update use insert response UUID in test or other mock methods
259252
public void userProfileCreateUserWireMock(HttpStatus status) {
@@ -318,4 +311,3 @@ public boolean applyGlobally() {
318311
}
319312
}
320313
}
321-

src/integrationTest/java/uk/gov/hmcts/reform/cwrdapi/util/CaseWorkerReferenceDataClient.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.springframework.http.MediaType;
2525
import org.springframework.http.ResponseEntity;
2626
import org.springframework.security.oauth2.jwt.Jwt;
27+
import org.springframework.security.oauth2.jwt.JwtDecoder;
2728
import org.springframework.util.MultiValueMap;
2829
import org.springframework.web.client.HttpStatusCodeException;
2930
import org.springframework.web.client.RestClientResponseException;
@@ -90,6 +91,8 @@ public class CaseWorkerReferenceDataClient {
9091
private long expiration;
9192
@Autowired
9293
Environment environment;
94+
@Autowired
95+
private JwtDecoder jwtDecoder;
9396
static String bearerToken;
9497
@Value("${idam.s2s-authorised.services}")
9598
private String serviceName;
@@ -504,7 +507,7 @@ public String getAndReturnBearerToken(String userId, String role) {
504507

505508
public synchronized void mockJwtToken(String role, String userId, String bearerToken) {
506509
String[] bearerTokenArray = bearerToken.split(" ");
507-
when(JwtDecoderMockBuilder.getJwtDecoder().decode(anyString())).thenReturn(decode(bearerTokenArray[1]));
510+
when(jwtDecoder.decode(anyString())).thenReturn(decode(bearerTokenArray[1]));
508511
}
509512

510513
private Jwt createJwt(String token, JWT parsedJwt) {
@@ -778,7 +781,6 @@ public CaseWorkerProfile generateCaseWorkerProfile(String caseWorkerId,
778781
List<CaseWorkerSkill> cwSkills = new ArrayList<>();
779782
CaseWorkerSkill caseWorkerSkill = new CaseWorkerSkill();
780783
cwSkills.add(caseWorkerSkill);
781-
caseWorkerSkill.setCaseWorkerSkillId(1L);
782784
caseWorkerSkill.setCaseWorkerId(caseWorkerId);
783785
caseWorkerSkill.setSkillId(1L);
784786
caseWorkerSkill.setSkill(skill);

src/integrationTest/java/uk/gov/hmcts/reform/cwrdapi/util/JwtDecoderMockBuilder.java

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/integrationTest/java/uk/gov/hmcts/reform/cwrdapi/util/JwtTokenUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public static String decodeJwtToken(String jwtToken) {
7171

7272
/**
7373
* Fetch userId and role from the token body.TokenBody is in json format and it fetches key 'sub'
74-
* to get comma separated value containing userId and role
74+
* to get comma separated value containing userId and role.
7575
*
7676
* @param tokenBody tokenBody in string format
7777
* @return List containing userId and role

0 commit comments

Comments
 (0)