Skip to content

Commit de66a7f

Browse files
committed
added code to test the connectvity
1 parent ef0b3cf commit de66a7f

File tree

6 files changed

+301
-0
lines changed

6 files changed

+301
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package uk.gov.hmcts.cp.config;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
import uk.gov.hmcts.cp.repositories.CourtScheduleRepository;
6+
import uk.gov.hmcts.cp.repositories.CourtScheduleRepositoryImpl;
7+
8+
import java.net.http.HttpClient;
9+
10+
import static org.mockito.Mockito.mock;
11+
12+
@Configuration
13+
public class TestConfig {
14+
15+
}

src/integrationTest/java/uk/gov/hmcts/cp/controllers/CourtScheduleControllerIT.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,15 @@
77
import org.slf4j.Logger;
88
import org.slf4j.LoggerFactory;
99
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.beans.factory.annotation.Qualifier;
1011
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
1112
import org.springframework.boot.test.context.SpringBootTest;
13+
import org.springframework.context.annotation.Import;
1214
import org.springframework.http.MediaType;
1315
import org.springframework.test.context.junit.jupiter.SpringExtension;
1416
import org.springframework.test.web.servlet.MockMvc;
17+
import uk.gov.hmcts.cp.config.TestConfig;
18+
import uk.gov.hmcts.cp.repositories.CourtScheduleRepository;
1519

1620
import java.util.UUID;
1721

@@ -24,12 +28,23 @@
2428
@ExtendWith(SpringExtension.class)
2529
@SpringBootTest
2630
@AutoConfigureMockMvc
31+
@Import(TestConfig.class)
2732
class CourtScheduleControllerIT {
2833
private static final Logger log = LoggerFactory.getLogger(CourtScheduleControllerIT.class);
2934

3035
@Autowired
3136
private MockMvc mockMvc;
3237

38+
@Autowired
39+
@Qualifier("inMemoryCourtScheduleRepositoryImpl")
40+
private CourtScheduleRepository courtScheduleRepository;
41+
42+
/*@BeforeEach
43+
void setUp() {
44+
inMemoryCaseUrnMapper.clearAllMappings();
45+
inMemoryCaseUrnMapper.saveCaseUrnMapping("test-case-urn", "test-case-id");
46+
}
47+
*/
3348
@Test
3449
void shouldReturnOkWhenValidUrnIsProvided() throws Exception {
3550
String caseUrn = "test-case-urn";
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package uk.gov.hmcts.cp.repositories;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
import org.springframework.context.annotation.Primary;
6+
import org.springframework.http.HttpStatus;
7+
import org.springframework.stereotype.Component;
8+
import uk.gov.hmcts.cp.openapi.model.CourtSchedule;
9+
import uk.gov.hmcts.cp.openapi.model.CourtScheduleResponse;
10+
import uk.gov.hmcts.cp.openapi.model.CourtSitting;
11+
import uk.gov.hmcts.cp.openapi.model.Hearing;
12+
13+
import java.net.URI;
14+
import java.net.http.HttpClient;
15+
import java.net.http.HttpRequest;
16+
import java.net.http.HttpResponse;
17+
import java.time.OffsetDateTime;
18+
import java.time.ZoneOffset;
19+
import java.time.temporal.ChronoUnit;
20+
import java.util.List;
21+
import java.util.Map;
22+
import java.util.UUID;
23+
import java.util.concurrent.ConcurrentHashMap;
24+
25+
@Component
26+
@Primary
27+
public class CourtScheduleRepositoryImpl implements CourtScheduleRepository {
28+
private static final Logger LOG = LoggerFactory.getLogger(CourtScheduleRepositoryImpl.class);
29+
30+
private final Map<String, CourtScheduleResponse> courtScheduleResponseMap = new ConcurrentHashMap<>();
31+
32+
33+
public void saveCourtSchedule(final String caseUrn, final CourtScheduleResponse courtScheduleResponse) {
34+
courtScheduleResponseMap.put(caseUrn, courtScheduleResponse);
35+
}
36+
37+
public CourtScheduleResponse getCourtScheduleByCaseId(final String caseUrn) {
38+
if (!courtScheduleResponseMap.containsKey(caseUrn)) {
39+
saveCourtSchedule(caseUrn, createCourtScheduleResponse());
40+
}
41+
return courtScheduleResponseMap.get(caseUrn);
42+
}
43+
44+
public void clearAll() {
45+
courtScheduleResponseMap.clear();
46+
}
47+
48+
private CourtScheduleResponse createCourtScheduleResponse() {
49+
50+
String res = getHearingData();
51+
LOG.info("infunction createCourtScheduleResponse Response Body: {} " + res);
52+
53+
54+
final OffsetDateTime sittingStartTime = OffsetDateTime.now(ZoneOffset.UTC)
55+
.truncatedTo(ChronoUnit.SECONDS);
56+
57+
final Hearing hearing = Hearing.builder()
58+
.hearingId(UUID.randomUUID().toString())
59+
.listNote("Requires interpreter")
60+
.hearingDescription("Sentencing for theft case")
61+
.hearingType("Trial")
62+
.courtSittings(List.of(
63+
CourtSitting.builder()
64+
.courtHouse("Central Criminal Court")
65+
.sittingStart(sittingStartTime)
66+
.sittingEnd(sittingStartTime.plusMinutes(60))
67+
.judiciaryId(UUID.randomUUID().toString())
68+
.build())
69+
).build();
70+
71+
return CourtScheduleResponse.builder()
72+
.courtSchedule(List.of(
73+
CourtSchedule.builder()
74+
.hearings(List.of(hearing)
75+
).build()
76+
)
77+
).build();
78+
}
79+
80+
private String getHearingData(){
81+
HttpResponse<String> response = null;
82+
try {
83+
// Create HttpClient instance
84+
HttpClient client = HttpClient.newHttpClient();
85+
86+
// Build the request
87+
HttpRequest request = HttpRequest.newBuilder()
88+
.uri(new URI("https://steccm64.ingress01.dev.nl.cjscp.org.uk/listing-query-api/query/api/rest/listing/hearings/allocated-and-unallocated?caseId=f552dee6-f092-415b-839c-5e5b5f46635e"))
89+
.GET()
90+
.header("Accept", "application/vnd.listing.search.hearings+json")
91+
.header("CJSCPPUID", "d7c91866-646a-462c-9203-46678e8cddef")
92+
.build();
93+
94+
// Send the request
95+
response = client.send(request, HttpResponse.BodyHandlers.ofString());
96+
97+
// Check response status
98+
if (response.statusCode() != HttpStatus.OK.value()) {
99+
LOG.error("Failed to fetch hearing data. HTTP Status: {}", response.statusCode());
100+
return null;
101+
}
102+
103+
// Print response status and body
104+
LOG.info("Response Code: {} " + response.statusCode());
105+
LOG.info("Response Body: {} " + response.body());
106+
return response.body();
107+
} catch (Exception e) {
108+
LOG.error("Exception occurred while fetching hearing data: {}", e.getMessage(), e);
109+
}
110+
return null;
111+
}
112+
}

src/main/java/uk/gov/hmcts/cp/services/CourtScheduleService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.apache.commons.lang3.StringUtils;
55
import org.slf4j.Logger;
66
import org.slf4j.LoggerFactory;
7+
import org.springframework.beans.factory.annotation.Qualifier;
78
import org.springframework.http.HttpStatus;
89
import org.springframework.stereotype.Service;
910
import org.springframework.web.server.ResponseStatusException;
@@ -18,6 +19,7 @@ public class CourtScheduleService {
1819

1920
private static final Logger LOG = LoggerFactory.getLogger(CourtScheduleService.class);
2021

22+
@Qualifier("courtScheduleRepositoryImpl")
2123
private final CourtScheduleRepository courtScheduleRepository;
2224

2325
public CourtScheduleResponse getCourtScheduleByCaseId(final String caseId) throws ResponseStatusException {
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package uk.gov.hmcts.cp.repositories;
2+
3+
import org.junit.jupiter.api.BeforeEach;
4+
import org.junit.jupiter.api.Test;
5+
import uk.gov.hmcts.cp.openapi.model.CourtScheduleResponse;
6+
7+
import static org.junit.jupiter.api.Assertions.assertEquals;
8+
import static org.junit.jupiter.api.Assertions.assertNotNull;
9+
10+
11+
class CourtScheduleRepositoryImplTest {
12+
13+
private CourtScheduleRepositoryImpl courtScheduleRepository;
14+
15+
@BeforeEach
16+
void setUp() {
17+
courtScheduleRepository = new CourtScheduleRepositoryImpl();
18+
}
19+
20+
@Test
21+
void getCourtScheduleByCaseId_shouldReturnNewResponseIfNotExists() {
22+
String caseUrn = "test-case-urn";
23+
24+
CourtScheduleResponse response = courtScheduleRepository.getCourtScheduleByCaseId(caseUrn);
25+
26+
assertNotNull(response);
27+
assertEquals(1, response.getCourtSchedule().size());
28+
}
29+
30+
@Test
31+
void getCourtScheduleByCaseId_shouldReturnExistingResponseIfExists() {
32+
String caseUrn = "test-case-urn";
33+
CourtScheduleResponse expectedResponse = CourtScheduleResponse.builder().build();
34+
35+
courtScheduleRepository.saveCourtSchedule(caseUrn, expectedResponse);
36+
CourtScheduleResponse actualResponse = courtScheduleRepository.getCourtScheduleByCaseId(caseUrn);
37+
38+
assertNotNull(actualResponse);
39+
assertEquals(expectedResponse, actualResponse);
40+
}
41+
42+
@Test
43+
void saveCourtSchedule_shouldStoreResponse() {
44+
String caseUrn = "test-case-urn";
45+
CourtScheduleResponse response = CourtScheduleResponse.builder().build();
46+
47+
courtScheduleRepository.saveCourtSchedule(caseUrn, response);
48+
CourtScheduleResponse storedResponse = courtScheduleRepository.getCourtScheduleByCaseId(caseUrn);
49+
50+
assertNotNull(storedResponse);
51+
assertEquals(response, storedResponse);
52+
}
53+
}

src/test/resources/hearing.json

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
{
2+
"hearings": [
3+
{
4+
"id": "348a288e-6e0d-479c-bd14-f363580d2181",
5+
"type": {
6+
"id": "4a0e892d-c0c5-3c51-95b8-704d8c781776",
7+
"description": "First hearing"
8+
},
9+
"endDate": "2025-07-21",
10+
"allocated": true,
11+
"judiciary": [],
12+
"startDate": "2025-07-21",
13+
"courtRoomId": "9e4932f7-97b2-3010-b942-ddd2624e4dd8",
14+
"hearingDays": [
15+
{
16+
"endTime": "2025-07-21T15:20:00.000Z",
17+
"sequence": 0,
18+
"startTime": "2025-07-21T15:00:00.000Z",
19+
"courtRoomId": "9e4932f7-97b2-3010-b942-ddd2624e4dd8",
20+
"hearingDate": "2025-07-21",
21+
"courtCentreId": "f8254db1-1683-483e-afb3-b87fde5a0a26",
22+
"durationMinutes": 20
23+
}
24+
],
25+
"listedCases": [
26+
{
27+
"id": "f552dee6-f092-415b-839c-5e5b5f46635e",
28+
"markers": [],
29+
"defendants": [
30+
{
31+
"id": "4e7853ab-67f8-4ebe-9a31-dc1ed271ebb9",
32+
"address": {
33+
"address1": "Add1",
34+
"postcode": "CB3 0GU"
35+
},
36+
"isYouth": false,
37+
"lastName": "Test2",
38+
"offences": [
39+
{
40+
"id": "922cf1fd-9ef1-415d-809f-5a871ec24ec8",
41+
"count": 0,
42+
"startDate": "2025-07-10",
43+
"orderIndex": 1,
44+
"offenceCode": "TH68023A",
45+
"shadowListed": false,
46+
"offenceWording": "Before 10 Jul 2025 at df attempted to rob dfd of dfdf to the value of sds .",
47+
"statementOfOffence": {
48+
"title": "Attempt robbery",
49+
"welshTitle": "Ymgais i ysbeilio (robbery)",
50+
"legislation": "Contrary to section 1(1) of the Criminal Attempts Act 1981.",
51+
"welshLegislation": "Yn groes i adran 1(1) Deddf Ymgeisiau i Droseddu 1981."
52+
},
53+
"restrictFromCourtList": false
54+
}
55+
],
56+
"firstName": "Teat1",
57+
"bailStatus": {
58+
"id": "86009c70-759d-3308-8de4-194886ff9a77",
59+
"code": "A",
60+
"description": "Not applicable"
61+
},
62+
"dateOfBirth": "1984-01-12",
63+
"masterDefendantId": "4e7853ab-67f8-4ebe-9a31-dc1ed271ebb9",
64+
"hearingLanguageNeeds": "ENGLISH",
65+
"restrictFromCourtList": false,
66+
"nationalityDescription": "British",
67+
"courtProceedingsInitiated": "2025-07-21T13:19:54.727Z"
68+
}
69+
],
70+
"shadowListed": false,
71+
"caseIdentifier": {
72+
"authorityId": "31af405e-7b60-4dd8-a244-c24c2d3fa595",
73+
"authorityCode": "TFL",
74+
"caseReference": "CIK2JQKECS"
75+
},
76+
"restrictFromCourtList": false
77+
}
78+
],
79+
"courtCentreId": "f8254db1-1683-483e-afb3-b87fde5a0a26",
80+
"isSlotsBooked": false,
81+
"nonDefaultDays": [
82+
{
83+
"roomId": "9e4932f7-97b2-3010-b942-ddd2624e4dd8",
84+
"duration": 20,
85+
"startTime": "2025-07-21T15:00:00.000Z",
86+
"courtCentreId": "f8254db1-1683-483e-afb3-b87fde5a0a26"
87+
}
88+
],
89+
"nonSittingDays": [],
90+
"hearingLanguage": "ENGLISH",
91+
"estimatedMinutes": 20,
92+
"jurisdictionType": "MAGISTRATES",
93+
"courtApplications": [],
94+
"courtCentreDetails": {
95+
"id": "f8254db1-1683-483e-afb3-b87fde5a0a26",
96+
"defaultDuration": 420,
97+
"defaultStartTime": "10:00:00"
98+
},
99+
"isGroupProceedings": false,
100+
"numberOfGroupCases": 1,
101+
"sendNotificationToParties": false
102+
}
103+
]
104+
}

0 commit comments

Comments
 (0)