Skip to content

Commit 77a84f4

Browse files
ManishParyanisouravroy2021github-actions[bot]
authored
Feature/rdcc 3506 (#194)
* upgrade from Junit4 to Junit5 * upgrade from Junit4 to Junit5 * upgrade from Junit4 to Junit5 * upgrade from Junit4 to Junit5 * upgrade from Junit4 to Junit5 * WIP: junit4 to juni5 migration * junit4 to 5 migration * modified refresh api test cases * added space * fixed integration issue Co-authored-by: Sourav Roy <sourav.roy@hmcts.net> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent f63bf54 commit 77a84f4

File tree

56 files changed

+1577
-428
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+1577
-428
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# rd-judicial-api
2-
Judicial reference data service
2+
Judicial reference data service

build.gradle

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ plugins {
99
id 'jacoco'
1010
id 'pmd'
1111
id 'com.github.ben-manes.versions' version '0.27.0'
12-
id "info.solidsoft.pitest" version '1.5.2'
12+
id "info.solidsoft.pitest" version '1.7.0'
1313
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
1414
id 'org.sonarqube' version '3.1.1'
1515
id 'org.springframework.boot' version '2.4.12'
@@ -26,8 +26,8 @@ apply plugin: 'idea'
2626

2727
def versions = [
2828
lombok : '1.18.20',
29-
gradlePitest : '1.3.0',
30-
pitest : '1.5.1',
29+
gradlePitest : '1.5.1',
30+
pitest : '1.7.0',
3131
reformHealthStarter: '0.0.5',
3232
reformLogging : '5.1.7',
3333
reformS2sClient : '4.0.0',
@@ -220,6 +220,7 @@ jacocoTestReport {
220220
}
221221

222222
pitest {
223+
junit5PluginVersion = '0.15'
223224
targetClasses = ['uk.gov.hmcts.reform.judicialapi.*']
224225
testSourceSets = [sourceSets.integrationTest, sourceSets.test]
225226
excludedClasses = [
@@ -447,3 +448,11 @@ bootJar {
447448
// this setting only applies when running via gradle bootRun -- see web.config for the
448449
// java flag that configures the deployed applications
449450
applicationDefaultJvmArgs = ["-Dfile.encoding=UTF-8"]
451+
452+
tasks.withType(Test) {
453+
useJUnitPlatform()
454+
455+
testLogging {
456+
exceptionFormat = 'full'
457+
}
458+
}

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip
Lines changed: 20 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,28 @@
11
package uk.gov.hmcts.reform.judicialapi;
22

3-
4-
import io.restassured.RestAssured;
5-
import io.restassured.parsing.Parser;
63
import lombok.extern.slf4j.Slf4j;
4+
import net.serenitybdd.rest.SerenityRest;
75
import org.springframework.beans.factory.annotation.Autowired;
86
import org.springframework.beans.factory.annotation.Value;
97
import org.springframework.context.annotation.ComponentScan;
108
import org.springframework.test.context.ContextConfiguration;
11-
import org.springframework.test.context.TestContext;
12-
import org.springframework.test.context.TestExecutionListeners;
139
import org.springframework.test.context.TestPropertySource;
14-
import org.springframework.test.context.support.AbstractTestExecutionListener;
15-
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
1610
import uk.gov.hmcts.reform.judicialapi.client.JudicialApiClient;
1711
import uk.gov.hmcts.reform.judicialapi.client.S2sClient;
1812
import uk.gov.hmcts.reform.judicialapi.config.Oauth2;
1913
import uk.gov.hmcts.reform.judicialapi.config.TestConfigProperties;
2014
import uk.gov.hmcts.reform.judicialapi.idam.IdamOpenIdClient;
2115

2216

23-
import static java.util.Objects.isNull;
17+
import javax.annotation.PostConstruct;
18+
2419
import static org.apache.commons.lang.RandomStringUtils.randomAlphanumeric;
2520

2621
@ContextConfiguration(classes = {TestConfigProperties.class, Oauth2.class})
2722
@ComponentScan("uk.gov.hmcts.reform.judicialapi")
2823
@TestPropertySource("classpath:application-functional.yaml")
2924
@Slf4j
30-
@TestExecutionListeners(listeners = {
31-
AuthorizationFunctionalTest.class,
32-
DependencyInjectionTestExecutionListener.class})
33-
public class AuthorizationFunctionalTest extends AbstractTestExecutionListener {
25+
public class AuthorizationFunctionalTest {
3426

3527
@Value("${s2s-url}")
3628
protected String s2sUrl;
@@ -51,7 +43,6 @@ public class AuthorizationFunctionalTest extends AbstractTestExecutionListener {
5143
@Autowired
5244
protected TestConfigProperties configProperties;
5345

54-
5546
protected static String s2sToken;
5647

5748
public static final String EMAIL = "EMAIL";
@@ -60,35 +51,30 @@ public class AuthorizationFunctionalTest extends AbstractTestExecutionListener {
6051
public static final String ROLE_JRD_ADMIN = "jrd-admin";
6152
public static final String ROLE_JRD_SYSTEM_USER = "jrd-system-user";
6253

54+
@Autowired
55+
protected TestConfigProperties testConfigProperties;
6356

64-
@Override
65-
public void beforeTestClass(TestContext testContext) {
66-
testContext.getApplicationContext()
67-
.getAutowireCapableBeanFactory()
68-
.autowireBean(this);
69-
70-
RestAssured.useRelaxedHTTPSValidation();
71-
RestAssured.defaultParser = Parser.JSON;
72-
73-
log.info("Configured S2S secret: " + s2sSecret.substring(0, 2) + "************" + s2sSecret.substring(14));
74-
log.info("Configured S2S microservice: " + s2sName);
75-
log.info("Configured S2S URL: " + s2sUrl);
57+
@PostConstruct
58+
public void beforeTestClass() {
59+
SerenityRest.useRelaxedHTTPSValidation();
7660

77-
idamOpenIdClient = new IdamOpenIdClient(configProperties);
61+
if (null == s2sToken) {
62+
log.info(":::: Generating S2S Token");
63+
s2sToken = new S2sClient(
64+
testConfigProperties.getS2sUrl(),
65+
testConfigProperties.getS2sName(),
66+
testConfigProperties.getS2sSecret())
67+
.signIntoS2S();
68+
}
7869

79-
//Single S2S & Sidam call
80-
s2sToken = isNull(s2sToken) ? new S2sClient(s2sUrl, s2sName, s2sSecret).signIntoS2S() : s2sToken;
70+
if (null == idamOpenIdClient) {
71+
idamOpenIdClient = new IdamOpenIdClient(testConfigProperties);
72+
}
8173

8274
judicialApiClient = new JudicialApiClient(jrdApiUrl, s2sToken, idamOpenIdClient);
8375
}
8476

8577
public static String generateRandomEmail() {
8678
return String.format(EMAIL_TEMPLATE, randomAlphanumeric(10)).toLowerCase();
8779
}
88-
89-
public static String getS2sToken() {
90-
return s2sToken;
91-
}
92-
93-
9480
}

src/functionalTest/java/uk/gov/hmcts/reform/judicialapi/JudicialUsersFunctionalTest.java

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,71 +3,78 @@
33
import lombok.extern.slf4j.Slf4j;
44
import net.thucydides.core.annotations.WithTag;
55
import net.thucydides.core.annotations.WithTags;
6-
import org.junit.Test;
7-
import org.junit.runner.RunWith;
6+
import org.junit.jupiter.api.Test;
7+
import org.junit.jupiter.api.extension.ExtendWith;
8+
import org.springframework.boot.test.context.SpringBootTest;
89
import uk.gov.hmcts.reform.judicialapi.controller.advice.ErrorResponse;
910
import uk.gov.hmcts.reform.judicialapi.controller.request.UserRequest;
1011
import uk.gov.hmcts.reform.judicialapi.controller.request.UserSearchRequest;
11-
import uk.gov.hmcts.reform.judicialapi.util.CustomSerenityRunner;
12-
import uk.gov.hmcts.reform.judicialapi.util.FeatureConditionEvaluation;
12+
import uk.gov.hmcts.reform.judicialapi.util.FeatureToggleConditionExtension;
1313
import uk.gov.hmcts.reform.judicialapi.util.ToggleEnable;
14+
import uk.gov.hmcts.reform.judicialapi.util.serenity5.SerenityTest;
1415

1516
import java.util.ArrayList;
1617
import java.util.UUID;
1718

18-
import static org.assertj.core.api.Assertions.assertThat;
19+
import static org.junit.jupiter.api.Assertions.assertEquals;
20+
import static org.junit.jupiter.api.Assertions.assertNotNull;
21+
1922
import static org.springframework.http.HttpStatus.FORBIDDEN;
2023
import static org.springframework.http.HttpStatus.NOT_FOUND;
24+
import static uk.gov.hmcts.reform.judicialapi.util.FeatureToggleConditionExtension.getToggledOffMessage;
2125

22-
@RunWith(CustomSerenityRunner.class)
26+
@SerenityTest
27+
@SpringBootTest
2328
@WithTags({@WithTag("testType:Functional")})
2429
@Slf4j
25-
public class JudicialUsersFunctionalTest extends AuthorizationFunctionalTest {
30+
class JudicialUsersFunctionalTest extends AuthorizationFunctionalTest {
2631

2732
public static final String FETCH_USERS = "JrdUsersController.fetchUsers";
2833
public static final String USERS_SEARCH = "JrdUsersController.searchUsers";
2934

3035
@Test
36+
@ExtendWith(FeatureToggleConditionExtension.class)
3137
@ToggleEnable(mapKey = FETCH_USERS, withFeature = true)
32-
public void shouldReturnDataNotFoundWhenUserProfilesDoNotExistForGivenUserId() {
38+
void shouldReturnDataNotFoundWhenUserProfilesDoNotExistForGivenUserId() {
3339
ErrorResponse errorResponse = (ErrorResponse)
3440
judicialApiClient.fetchUserProfiles(getDummyUserRequest(), 10, 0, NOT_FOUND,
3541
ROLE_JRD_SYSTEM_USER);
3642

37-
assertThat(errorResponse).isNotNull();
43+
assertNotNull(errorResponse);
3844
}
3945

4046
@Test
47+
@ExtendWith(FeatureToggleConditionExtension.class)
4148
@ToggleEnable(mapKey = FETCH_USERS, withFeature = true)
42-
public void shouldThrowForbiddenExceptionForNonCompliantRole() {
49+
void shouldThrowForbiddenExceptionForNonCompliantRole() {
4350
ErrorResponse errorResponse = (ErrorResponse)
4451
judicialApiClient.fetchUserProfiles(getDummyUserRequest(), 10, 0, FORBIDDEN,
4552
"prd-admin");
4653

47-
assertThat(errorResponse).isNotNull();
54+
assertNotNull(errorResponse);
4855
}
4956

5057
@Test
58+
@ExtendWith(FeatureToggleConditionExtension.class)
5159
@ToggleEnable(mapKey = FETCH_USERS, withFeature = false)
52-
public void shouldGet403WhenApiToggledOff() {
53-
String exceptionMessage = CustomSerenityRunner.getFeatureFlagName().concat(" ")
54-
.concat(FeatureConditionEvaluation.FORBIDDEN_EXCEPTION_LD);
60+
void shouldGet403WhenApiToggledOff() {
5561

5662
ErrorResponse errorResponse = (ErrorResponse)
5763
judicialApiClient.fetchUserProfiles(getDummyUserRequest(), 10, 0, FORBIDDEN,
5864
ROLE_JRD_SYSTEM_USER);
5965

60-
assertThat(errorResponse).isNotNull();
61-
assertThat(errorResponse.getErrorMessage()).isEqualTo(exceptionMessage);
66+
assertNotNull(errorResponse);
67+
assertEquals(getToggledOffMessage(), errorResponse.getErrorMessage());
6268
}
6369

6470
@Test
71+
@ExtendWith(FeatureToggleConditionExtension.class)
6572
@ToggleEnable(mapKey = USERS_SEARCH, withFeature = false)
66-
public void shouldGet403WhenUserSearchApiToggledOff() {
73+
void shouldGet403WhenUserSearchApiToggledOff() {
6774
var errorResponse = (ErrorResponse)
6875
judicialApiClient.userSearch(getUserSearchRequest(null, null, "test"),
6976
ROLE_JRD_SYSTEM_USER, FORBIDDEN);
70-
assertThat(errorResponse).isNotNull();
77+
assertNotNull(errorResponse);
7178
}
7279

7380
private UserRequest getDummyUserRequest() {

src/functionalTest/java/uk/gov/hmcts/reform/judicialapi/config/TestConfigProperties.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@ public class TestConfigProperties {
3434
@Value("${idam.auth.clientId}")
3535
public String clientId;
3636

37+
@Value("${targetInstance}")
38+
protected String targetInstance;
39+
40+
@Value("${s2s-url}")
41+
protected String s2sUrl;
42+
43+
@Value("${s2s-name}")
44+
protected String s2sName;
45+
46+
@Value("${s2s-secret}")
47+
protected String s2sSecret;
48+
3749
@Bean
3850
public ObjectMapper defaultObjectMapper() {
3951
return new ObjectMapper()
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package uk.gov.hmcts.reform.judicialapi.util;
2+
3+
import com.launchdarkly.sdk.server.LDClient;
4+
import org.jetbrains.annotations.NotNull;
5+
import org.junit.jupiter.api.extension.ConditionEvaluationResult;
6+
import org.junit.jupiter.api.extension.ExecutionCondition;
7+
import org.junit.jupiter.api.extension.ExtensionContext;
8+
import org.springframework.test.util.ReflectionTestUtils;
9+
import uk.gov.hmcts.reform.judicialapi.service.impl.FeatureToggleServiceImpl;
10+
11+
import java.lang.reflect.AnnotatedElement;
12+
import java.util.Optional;
13+
14+
import static java.lang.System.getenv;
15+
import static org.apache.commons.lang3.BooleanUtils.isNotTrue;
16+
import static org.junit.platform.commons.util.AnnotationUtils.findAnnotation;
17+
18+
public class FeatureToggleConditionExtension implements ExecutionCondition {
19+
20+
private static FeatureToggleServiceImpl featureToggleService;
21+
22+
private static boolean isInitialized = false;
23+
24+
private static String flagName;
25+
26+
@Override
27+
@SuppressWarnings("checkstyle:Indentation")
28+
public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) {
29+
30+
if (isNotTrue(isInitialized)) {
31+
initialize();
32+
}
33+
34+
final Optional<AnnotatedElement> element = context.getElement();
35+
36+
return element.map(annotatedElement -> {
37+
Optional<ToggleEnable> toggleEnable = findAnnotation(element, ToggleEnable.class);
38+
39+
return toggleEnable.map(toggle -> {
40+
featureToggleService.mapServiceToFlag();
41+
flagName = featureToggleService.getLaunchDarklyMap().get(toggle.mapKey());
42+
43+
final boolean isFlagEnabled =
44+
featureToggleService
45+
.isFlagEnabled(flagName);
46+
47+
ConditionEvaluationResult evaluationResult = null;
48+
49+
if (isFlagEnabled) {
50+
if (isNotTrue(toggle.withFeature())) {
51+
evaluationResult = disabled();
52+
} else {
53+
evaluationResult = enabled();
54+
}
55+
} else {
56+
if (isNotTrue(toggle.withFeature()) || toggle.withFeature()) {
57+
evaluationResult = disabled();
58+
}
59+
}
60+
return evaluationResult;
61+
}).orElse(enabled());
62+
}
63+
).orElse(enabled());
64+
}
65+
66+
@NotNull
67+
public static String getToggledOffMessage() {
68+
return flagName.concat(" ")
69+
.concat(FeatureConditionEvaluation.FORBIDDEN_EXCEPTION_LD);
70+
}
71+
72+
private ConditionEvaluationResult disabled() {
73+
return ConditionEvaluationResult.disabled(getToggledOffMessage());
74+
}
75+
76+
private ConditionEvaluationResult enabled() {
77+
return ConditionEvaluationResult.enabled("Feature toggled ON");
78+
}
79+
80+
@SuppressWarnings("checkstyle:CommentsIndentation")
81+
private static void initialize() {
82+
LDClient ldClient = new LDClient(getenv("LD_SDK_KEY"));
83+
featureToggleService = new FeatureToggleServiceImpl(ldClient, "rd");
84+
String executionEnvironment = getenv("execution_environment");
85+
ReflectionTestUtils.setField(featureToggleService, "environment", executionEnvironment);
86+
isInitialized = true;
87+
}
88+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package uk.gov.hmcts.reform.judicialapi.util.serenity5;
2+
3+
import org.junit.jupiter.api.extension.ExtendWith;
4+
import uk.gov.hmcts.reform.judicialapi.util.serenity5.extension.SerenityReportExtension;
5+
6+
import java.lang.annotation.Documented;
7+
import java.lang.annotation.ElementType;
8+
import java.lang.annotation.Inherited;
9+
import java.lang.annotation.Retention;
10+
import java.lang.annotation.RetentionPolicy;
11+
import java.lang.annotation.Target;
12+
13+
@Target(ElementType.TYPE)
14+
@Retention(RetentionPolicy.RUNTIME)
15+
@Documented
16+
@Inherited
17+
@SerenityTestWithoutReporting
18+
@ExtendWith(SerenityReportExtension.class)
19+
public @interface SerenityTest {
20+
}

0 commit comments

Comments
 (0)