Skip to content
This repository was archived by the owner on Nov 4, 2024. It is now read-only.

Commit 4b7cfd6

Browse files
AndreiTrushkovAndrei TrushkovDGordonV1
authored
changed event when updating hearing (#595)
* changed event when updating hearing * implemented correct HearingChannel update * added missing class --------- Co-authored-by: Andrei Trushkov <[email protected]> Co-authored-by: DGordonV1 <[email protected]>
1 parent 5758525 commit 4b7cfd6

File tree

7 files changed

+185
-29
lines changed

7 files changed

+185
-29
lines changed

src/main/java/uk/gov/hmcts/reform/sscs/helper/service/HearingsServiceHelper.java

+25-8
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@
1313
import uk.gov.hmcts.reform.sscs.model.hmc.reference.HmcStatus;
1414
import uk.gov.hmcts.reform.sscs.model.multi.hearing.CaseHearing;
1515
import uk.gov.hmcts.reform.sscs.model.multi.hearing.HearingsGetResponse;
16+
import uk.gov.hmcts.reform.sscs.model.single.hearing.HearingDaySchedule;
1617
import uk.gov.hmcts.reform.sscs.model.single.hearing.HearingGetResponse;
18+
import uk.gov.hmcts.reform.sscs.model.single.hearing.HearingSubChannel;
1719
import uk.gov.hmcts.reform.sscs.model.single.hearing.HmcUpdateResponse;
1820
import uk.gov.hmcts.reform.sscs.reference.data.model.HearingChannel;
1921
import uk.gov.hmcts.reform.sscs.reference.data.model.SessionCategoryMap;
2022

21-
import java.util.ArrayList;
22-
import java.util.Collections;
23-
import java.util.Comparator;
24-
import java.util.Optional;
23+
import java.util.*;
2524
import javax.validation.Valid;
2625

2726
import static java.util.Objects.isNull;
@@ -114,11 +113,29 @@ public static boolean isCaseHearingRequestedOrAwaitingListing(HmcStatus hmcStatu
114113
|| HmcStatus.AWAITING_LISTING == hmcStatus;
115114
}
116115

117-
public static HearingChannel getHearingBookedChannel(HearingGetResponse hearingGetResponse) {
118-
return Optional.ofNullable(hearingGetResponse.getHearingDetails().getHearingChannels())
119-
.orElse(Collections.emptyList()).stream()
120-
.findFirst()
116+
public static HearingChannel getHearingSubChannel(HearingGetResponse hearingGetResponse) {
117+
List<HearingDaySchedule> hearingDaySchedules = hearingGetResponse.getHearingResponse().getHearingSessions();
118+
119+
if (isNull(hearingDaySchedules) || hearingDaySchedules.isEmpty()) {
120+
return null;
121+
}
122+
123+
var attendees = hearingDaySchedules.stream()
124+
.min(Comparator.comparing(HearingDaySchedule::getHearingStartDateTime))
125+
.map(HearingDaySchedule::getAttendees)
121126
.orElse(null);
127+
128+
if (isNull(attendees)) {
129+
return null;
130+
}
131+
132+
var hearingSubChannel = attendees.stream().filter(a -> !"DWP".equals(a.getPartyID()))
133+
.filter(c -> !isNull(c.getHearingSubChannel()))
134+
.map(b -> HearingSubChannel.getHearingSubChannel(b.getHearingSubChannel()))
135+
.findFirst()
136+
.orElse(Optional.empty());
137+
138+
return hearingSubChannel.map(HearingSubChannel::getHearingChannel).orElse(null);
122139
}
123140

124141
public static void checkBenefitIssueCode(SessionCategoryMap sessionCategoryMap) throws ListingException {

src/main/java/uk/gov/hmcts/reform/sscs/model/hmc/message/HearingUpdate.java

-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
@NoArgsConstructor
1818
@AllArgsConstructor
1919
public class HearingUpdate {
20-
2120
private LocalDateTime hearingResponseReceivedDateTime;
2221
private LocalDateTime hearingEventBroadcastDateTime;
2322
@NonNull

src/main/java/uk/gov/hmcts/reform/sscs/model/hmc/reference/HmcStatus.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public enum HmcStatus {
2323
LISTED("Listed", (response, caseData) -> HEARING_BOOKED, HearingStatus.LISTED, "Hearing Listed",
2424
"New hearing %s has been listed and added to case"),
2525
UPDATE_REQUESTED("Update requested", null, null, "", ""),
26-
UPDATE_SUBMITTED("Update submitted", (response, caseData) -> UPDATE_CASE_ONLY, null, "Hearing Updated",
26+
UPDATE_SUBMITTED("Update submitted", (response, caseData) -> HEARING_BOOKED, null, "Hearing Updated",
2727
"The hearing with id %s has been updated and has been updated on the case"),
2828
EXCEPTION("Exception", (response, caseData) -> HANDLING_ERROR, HearingStatus.EXCEPTION, "Hearing Exception",
2929
"An error has occurred when trying to process the hearing with id %s"),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package uk.gov.hmcts.reform.sscs.model.single.hearing;
2+
3+
import lombok.Getter;
4+
import uk.gov.hmcts.reform.sscs.reference.data.model.HearingChannel;
5+
6+
import java.util.List;
7+
import java.util.Optional;
8+
9+
import static java.util.Arrays.stream;
10+
import static uk.gov.hmcts.reform.sscs.reference.data.model.HearingChannel.FACE_TO_FACE;
11+
import static uk.gov.hmcts.reform.sscs.reference.data.model.HearingChannel.NOT_ATTENDING;
12+
import static uk.gov.hmcts.reform.sscs.reference.data.model.HearingChannel.PAPER;
13+
import static uk.gov.hmcts.reform.sscs.reference.data.model.HearingChannel.TELEPHONE;
14+
import static uk.gov.hmcts.reform.sscs.reference.data.model.HearingChannel.VIDEO;
15+
16+
@Getter
17+
public enum HearingSubChannel {
18+
INTER(FACE_TO_FACE, List.of("INTER")),
19+
NA(NOT_ATTENDING, List.of("NA")),
20+
ONPPRS(PAPER, List.of("ONPPRS")),
21+
TEL(TELEPHONE, List.of("TEL", "TELBTM", "TELCVP", "TELOTHER", "TELSKYP")),
22+
VID(VIDEO, List.of("VID", "VIDCVP", "VIDOTHER", "VIDPVL", "VIDSKYPE", "VIDTEAMS", "VIDVHS"));
23+
24+
private final HearingChannel hearingChannel;
25+
private final List<String> subChannels;
26+
27+
HearingSubChannel(HearingChannel hearingChannel, List<String> subChannels) {
28+
this.hearingChannel = hearingChannel;
29+
this.subChannels = subChannels;
30+
}
31+
32+
public static Optional<HearingSubChannel> getHearingSubChannel(String subChannelName) {
33+
return stream(values())
34+
.filter(hearingSubChannel -> hearingSubChannel.getSubChannels().contains(subChannelName))
35+
.findFirst();
36+
}
37+
}

src/main/java/uk/gov/hmcts/reform/sscs/service/hmc/topic/HearingUpdateService.java

+21-18
Original file line numberDiff line numberDiff line change
@@ -53,25 +53,9 @@ public class HearingUpdateService {
5353

5454
public void updateHearing(HearingGetResponse hearingGetResponse, @Valid SscsCaseData sscsCaseData)
5555
throws MessageProcessingException, InvalidMappingException {
56-
5756
Long hearingId = Long.valueOf(hearingGetResponse.getRequestDetails().getHearingRequestId());
58-
59-
List<HearingDaySchedule> hearingSessions = hearingGetResponse.getHearingResponse().getHearingSessions();
60-
61-
if (hearingSessions.size() != EXPECTED_SESSIONS) {
62-
throw new InvalidHearingDataException(
63-
String.format(
64-
"Invalid HearingDaySchedule, should have 1 session but instead has %d sessions, for Case Id %s and Hearing Id %s",
65-
hearingSessions.size(),
66-
sscsCaseData.getCcdCaseId(),
67-
hearingId
68-
));
69-
}
70-
71-
HearingDaySchedule hearingDaySchedule = hearingSessions.get(0);
72-
57+
HearingDaySchedule hearingDaySchedule = getHearingDaySchedule(hearingGetResponse, sscsCaseData, hearingId);
7358
String hearingEpimsId = hearingDaySchedule.getHearingVenueEpimsId();
74-
7559
VenueDetails venueDetails = venueService.getVenueDetailsForActiveVenueByEpimsId(hearingEpimsId);
7660

7761
if (isNull(venueDetails)) {
@@ -102,8 +86,11 @@ public void updateHearing(HearingGetResponse hearingGetResponse, @Valid SscsCase
10286
hearingDetails.setHearingDate(hearingDate);
10387
String hearingTime = hearingStartDateTime.toLocalTime().format(DateTimeFormatter.ofPattern("HH:mm:ss.SSS"));
10488
hearingDetails.setTime(hearingTime);
105-
hearingDetails.setHearingChannel(HearingsServiceHelper.getHearingBookedChannel(hearingGetResponse));
10689

90+
var hearingChannel = HearingsServiceHelper.getHearingSubChannel(hearingGetResponse);
91+
if (!isNull(hearingChannel)) {
92+
hearingDetails.setHearingChannel(hearingChannel);
93+
}
10794
List<String> panelMemberIds = hearingDaySchedule.getPanelMemberIds();
10895

10996
if (isPostHearingsEnabled && nonNull(panelMemberIds)) {
@@ -124,6 +111,22 @@ public void updateHearing(HearingGetResponse hearingGetResponse, @Valid SscsCase
124111
);
125112
}
126113

114+
private static HearingDaySchedule getHearingDaySchedule(HearingGetResponse hearingGetResponse, SscsCaseData sscsCaseData,
115+
Long hearingId) throws InvalidHearingDataException {
116+
List<HearingDaySchedule> hearingSessions = hearingGetResponse.getHearingResponse().getHearingSessions();
117+
118+
if (hearingSessions.size() != EXPECTED_SESSIONS) {
119+
throw new InvalidHearingDataException(
120+
String.format(
121+
"Invalid HearingDaySchedule, should have 1 session but instead has %d sessions, for Case Id %s and Hearing Id %s",
122+
hearingSessions.size(),
123+
sscsCaseData.getCcdCaseId(),
124+
hearingId
125+
));
126+
}
127+
return hearingSessions.get(0);
128+
}
129+
127130
public void setHearingStatus(String hearingId, @Valid SscsCaseData sscsCaseData, HmcStatus hmcStatus) {
128131
HearingStatus hearingStatus = hmcStatus.getHearingStatus();
129132
if (isNull(hearingStatus)) {

src/main/java/uk/gov/hmcts/reform/sscs/service/hmc/topic/ProcessHmcMessageService.java

-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ public void processEventMessage(HmcMessage hmcMessage)
7272
}
7373

7474
hearingUpdateService.setHearingStatus(hearingId, caseData, hmcMessageStatus);
75-
7675
hearingUpdateService.setWorkBasketFields(hearingId, caseData, hmcMessageStatus);
7776

7877
String ccdUpdateDescription = String.format(hmcMessageStatus.getCcdUpdateDescription(), hearingId);

src/test/java/uk/gov/hmcts/reform/sscs/helper/service/HearingsServiceHelperTest.java

+101
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,15 @@
1414
import uk.gov.hmcts.reform.sscs.model.hmc.reference.HmcStatus;
1515
import uk.gov.hmcts.reform.sscs.model.multi.hearing.CaseHearing;
1616
import uk.gov.hmcts.reform.sscs.model.multi.hearing.HearingsGetResponse;
17+
import uk.gov.hmcts.reform.sscs.model.single.hearing.Attendees;
18+
import uk.gov.hmcts.reform.sscs.model.single.hearing.CaseDetails;
19+
import uk.gov.hmcts.reform.sscs.model.single.hearing.HearingDaySchedule;
20+
import uk.gov.hmcts.reform.sscs.model.single.hearing.HearingGetResponse;
21+
import uk.gov.hmcts.reform.sscs.model.single.hearing.HearingResponse;
1722
import uk.gov.hmcts.reform.sscs.model.single.hearing.HmcUpdateResponse;
23+
import uk.gov.hmcts.reform.sscs.model.single.hearing.PartyDetails;
24+
import uk.gov.hmcts.reform.sscs.model.single.hearing.RequestDetails;
25+
import uk.gov.hmcts.reform.sscs.reference.data.model.HearingChannel;
1826

1927
import java.time.LocalDateTime;
2028
import java.util.Collections;
@@ -24,6 +32,7 @@
2432
import static org.hamcrest.CoreMatchers.is;
2533
import static org.hamcrest.MatcherAssert.assertThat;
2634
import static org.junit.jupiter.api.Assertions.assertEquals;
35+
import static org.junit.jupiter.api.Assertions.assertNotNull;
2736
import static org.junit.jupiter.api.Assertions.assertNull;
2837
import static uk.gov.hmcts.reform.sscs.helper.service.HearingsServiceHelper.getHearingId;
2938
import static uk.gov.hmcts.reform.sscs.model.hmc.reference.HmcStatus.CANCELLED;
@@ -246,4 +255,96 @@ void testIsCaseHearingRequestedOrAwaitingListingNonMatching(HmcStatus value) {
246255

247256
assertThat(result).isFalse();
248257
}
258+
259+
@DisplayName("getHearingSubChannel should return correct HearingChannel")
260+
@ParameterizedTest
261+
@CsvSource(value = {
262+
"TEL,TELEPHONE",
263+
"TELBTM,TELEPHONE",
264+
"TELCVP,TELEPHONE",
265+
"TELOTHER,TELEPHONE",
266+
"TELSKYP,TELEPHONE",
267+
"INTER,FACE_TO_FACE",
268+
"NA,NOT_ATTENDING",
269+
"ONPPRS,PAPER",
270+
"VID,VIDEO",
271+
"VIDCVP,VIDEO",
272+
"VIDOTHER,VIDEO",
273+
"VIDPVL,VIDEO",
274+
"VIDSKYPE,VIDEO",
275+
"VIDTEAMS,VIDEO",
276+
"VIDVHS,VIDEO"
277+
})
278+
void testGetHearingSubChannel(String subHearingChannel, HearingChannel hearingChannel) {
279+
Attendees attendees = Attendees.builder()
280+
.hearingSubChannel(subHearingChannel)
281+
.build();
282+
HearingDaySchedule hearingDaySchedule = HearingDaySchedule.builder()
283+
.attendees(List.of(attendees))
284+
.build();
285+
HearingResponse hearingResponse = HearingResponse.builder()
286+
.hearingSessions(List.of(hearingDaySchedule))
287+
.build();
288+
HearingGetResponse hearingGetResponse = HearingGetResponse.builder()
289+
.requestDetails(RequestDetails.builder().build())
290+
.hearingDetails(uk.gov.hmcts.reform.sscs.model.single.hearing.HearingDetails.builder().build())
291+
.caseDetails(CaseDetails.builder().build())
292+
.hearingResponse(hearingResponse)
293+
.partyDetails(List.of(PartyDetails.builder().build()))
294+
.build();
295+
296+
var response = HearingsServiceHelper.getHearingSubChannel(hearingGetResponse);
297+
assertNotNull(response);
298+
assertEquals(hearingChannel, response);
299+
}
300+
301+
@DisplayName("getHearingSubChannel should return null when subHearingChannel is null")
302+
@Test
303+
void testGetHearingSubChannel_whenSubHearingChannelIsNull() {
304+
Attendees attendees = Attendees.builder()
305+
.build();
306+
HearingDaySchedule hearingDaySchedule = HearingDaySchedule.builder()
307+
.attendees(List.of(attendees))
308+
.build();
309+
HearingResponse hearingResponse = HearingResponse.builder()
310+
.hearingSessions(List.of(hearingDaySchedule))
311+
.build();
312+
HearingGetResponse hearingGetResponse = HearingGetResponse.builder()
313+
.requestDetails(RequestDetails.builder().build())
314+
.hearingDetails(uk.gov.hmcts.reform.sscs.model.single.hearing.HearingDetails.builder().build())
315+
.caseDetails(CaseDetails.builder().build())
316+
.hearingResponse(hearingResponse)
317+
.partyDetails(List.of(PartyDetails.builder().build()))
318+
.build();
319+
320+
var response = HearingsServiceHelper.getHearingSubChannel(hearingGetResponse);
321+
assertNull(response);
322+
}
323+
324+
@DisplayName("getHearingSubChannel should return null when subHearingChannel is not mapped to HearingChannel")
325+
@ParameterizedTest
326+
@CsvSource(value = {
327+
"' '", "incorrectChannel"
328+
})
329+
void testGetHearingSubChannel_whenSubHearingChannelIsNotMapped(String subHearingChannel) {
330+
Attendees attendees = Attendees.builder()
331+
.hearingSubChannel(subHearingChannel)
332+
.build();
333+
HearingDaySchedule hearingDaySchedule = HearingDaySchedule.builder()
334+
.attendees(List.of(attendees))
335+
.build();
336+
HearingResponse hearingResponse = HearingResponse.builder()
337+
.hearingSessions(List.of(hearingDaySchedule))
338+
.build();
339+
HearingGetResponse hearingGetResponse = HearingGetResponse.builder()
340+
.requestDetails(RequestDetails.builder().build())
341+
.hearingDetails(uk.gov.hmcts.reform.sscs.model.single.hearing.HearingDetails.builder().build())
342+
.caseDetails(CaseDetails.builder().build())
343+
.hearingResponse(hearingResponse)
344+
.partyDetails(List.of(PartyDetails.builder().build()))
345+
.build();
346+
347+
var response = HearingsServiceHelper.getHearingSubChannel(hearingGetResponse);
348+
assertNull(response);
349+
}
249350
}

0 commit comments

Comments
 (0)