From dbbbd1f5b9f2dc1e80d352fcd24f46065e381b9f Mon Sep 17 00:00:00 2001 From: LTurkingtonHMCTS <95024266+LTurkingtonHMCTS@users.noreply.github.com> Date: Fri, 24 Nov 2023 11:18:26 +0000 Subject: [PATCH 1/5] CIV-11159 Update Hearing Notices (#3538) * CIV-11159 Update Hearing Notices --------- Co-authored-by: Hemanth Potipati Co-authored-by: Douglas Rice Co-authored-by: mounikahmcts <43175082+mounikahmcts@users.noreply.github.com> --- .../templates/CV-UNS-HNO-ENG-01200.docx | Bin 48232 -> 42130 bytes .../templates/CV-UNS-HNO-ENG-01201.docx | Bin 0 -> 41682 bytes .../templates/CV-UNS-HNO-ENG-01202.docx | Bin 0 -> 41391 bytes .../templates/CV-UNS-HNO-ENG-01203.docx | Bin 0 -> 37914 bytes .../templates/CV-UNS-HNO-ENG-01204.docx | Bin 0 -> 37304 bytes .../service/docmosis/DocmosisTemplates.java | 4 + .../hearing/HearingFormGenerator.java | 38 ++- .../hearing/HearingFormGeneratorTest.java | 230 +++++++++++++++++- 8 files changed, 262 insertions(+), 10 deletions(-) create mode 100644 docker/docmosis/templates/CV-UNS-HNO-ENG-01201.docx create mode 100644 docker/docmosis/templates/CV-UNS-HNO-ENG-01202.docx create mode 100644 docker/docmosis/templates/CV-UNS-HNO-ENG-01203.docx create mode 100644 docker/docmosis/templates/CV-UNS-HNO-ENG-01204.docx diff --git a/docker/docmosis/templates/CV-UNS-HNO-ENG-01200.docx b/docker/docmosis/templates/CV-UNS-HNO-ENG-01200.docx index 56e1165f73de818f00e7fa5d335e2ed592b8d6d8..864bb9ebb62dadc12833c88f6ff0b71192026784 100644 GIT binary patch delta 15976 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 I{`2<#1Lx6;BLDyZ delta 22220 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%0D%Z#dvce}vM!C%9FfVTG-JI7` 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 diff --git a/docker/docmosis/templates/CV-UNS-HNO-ENG-01201.docx b/docker/docmosis/templates/CV-UNS-HNO-ENG-01201.docx new file mode 100644 index 0000000000000000000000000000000000000000..78cc5d54741bde1c712375a5a4c5cbc28e301572 GIT binary patch literal 41682 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 literal 0 HcmV?d00001 diff --git a/docker/docmosis/templates/CV-UNS-HNO-ENG-01202.docx b/docker/docmosis/templates/CV-UNS-HNO-ENG-01202.docx new file mode 100644 index 0000000000000000000000000000000000000000..0409b5c1e6f8382dd2121f5473384b2517e9a687 GIT binary patch literal 41391 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%0D4k3f^vg0v7KUf~?GDaI_cBsGlqOw4?O!CnqrSX0 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 literal 0 HcmV?d00001 diff --git a/docker/docmosis/templates/CV-UNS-HNO-ENG-01203.docx b/docker/docmosis/templates/CV-UNS-HNO-ENG-01203.docx new file mode 100644 index 0000000000000000000000000000000000000000..45d3ad6dff5a737e382e2f2a7e60e265800031d4 GIT binary patch literal 37914 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 private final DocumentManagementService documentManagementService; private final DocumentGeneratorService documentGeneratorService; private final AssignCategoryId assignCategoryId; + private final FeatureToggleService featureToggleService; private final LocationRefDataService locationRefDataService; private final CourtLocationUtils courtLocationUtils; @@ -121,15 +128,28 @@ private boolean checkReference(CaseData caseData) { } private DocmosisTemplates getTemplate(CaseData caseData) { - switch (caseData.getHearingNoticeList()) { - case SMALL_CLAIMS: - return HEARING_SMALL_CLAIMS; - case FAST_TRACK_TRIAL: - return HEARING_FAST_TRACK; - case HEARING_OF_APPLICATION: - return HEARING_APPLICATION; - default: - return HEARING_OTHER; + if (!featureToggleService.isAutomatedHearingNoticeEnabled()) { + switch (caseData.getHearingNoticeList()) { + case SMALL_CLAIMS: + return HEARING_SMALL_CLAIMS; + case FAST_TRACK_TRIAL: + return HEARING_FAST_TRACK; + case HEARING_OF_APPLICATION: + return HEARING_APPLICATION; + default: + return HEARING_OTHER; + } + } else { + switch (caseData.getHearingNoticeList()) { + case SMALL_CLAIMS: + return HEARING_SMALL_CLAIMS_AHN; + case FAST_TRACK_TRIAL: + return HEARING_FAST_TRACK_AHN; + case HEARING_OF_APPLICATION: + return HEARING_APPLICATION_AHN; + default: + return HEARING_OTHER_AHN; + } } } } diff --git a/src/test/java/uk/gov/hmcts/reform/civil/service/docmosis/hearing/HearingFormGeneratorTest.java b/src/test/java/uk/gov/hmcts/reform/civil/service/docmosis/hearing/HearingFormGeneratorTest.java index 7bdb3603865..d817d478715 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/service/docmosis/hearing/HearingFormGeneratorTest.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/service/docmosis/hearing/HearingFormGeneratorTest.java @@ -22,6 +22,7 @@ import uk.gov.hmcts.reform.civil.referencedata.model.LocationRefData; import uk.gov.hmcts.reform.civil.sampledata.CaseDataBuilder; import uk.gov.hmcts.reform.civil.sampledata.CaseDocumentBuilder; +import uk.gov.hmcts.reform.civil.service.FeatureToggleService; import uk.gov.hmcts.reform.civil.service.docmosis.DocumentGeneratorService; import uk.gov.hmcts.reform.civil.documentmanagement.UnsecuredDocumentManagementService; import uk.gov.hmcts.reform.civil.utils.AssignCategoryId; @@ -38,6 +39,13 @@ import static uk.gov.hmcts.reform.civil.documentmanagement.model.DocumentType.DEFAULT_JUDGMENT; import static uk.gov.hmcts.reform.civil.documentmanagement.model.DocumentType.HEARING_FORM; import static uk.gov.hmcts.reform.civil.service.docmosis.DocmosisTemplates.HEARING_APPLICATION; +import static uk.gov.hmcts.reform.civil.service.docmosis.DocmosisTemplates.HEARING_APPLICATION_AHN; +import static uk.gov.hmcts.reform.civil.service.docmosis.DocmosisTemplates.HEARING_FAST_TRACK; +import static uk.gov.hmcts.reform.civil.service.docmosis.DocmosisTemplates.HEARING_FAST_TRACK_AHN; +import static uk.gov.hmcts.reform.civil.service.docmosis.DocmosisTemplates.HEARING_OTHER; +import static uk.gov.hmcts.reform.civil.service.docmosis.DocmosisTemplates.HEARING_OTHER_AHN; +import static uk.gov.hmcts.reform.civil.service.docmosis.DocmosisTemplates.HEARING_SMALL_CLAIMS; +import static uk.gov.hmcts.reform.civil.service.docmosis.DocmosisTemplates.HEARING_SMALL_CLAIMS_AHN; @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { @@ -51,6 +59,13 @@ public class HearingFormGeneratorTest { private static final byte[] bytes = {1, 2, 3, 4, 5, 6}; private static final String fileName_application = String.format( HEARING_APPLICATION.getDocumentTitle(), REFERENCE_NUMBER); + private static final String fileName_small_claim = String.format( + HEARING_SMALL_CLAIMS.getDocumentTitle(), REFERENCE_NUMBER); + private static final String fileName_fast_track = String.format( + HEARING_FAST_TRACK.getDocumentTitle(), REFERENCE_NUMBER); + private static final String fileName_other_claim = String.format( + HEARING_OTHER.getDocumentTitle(), REFERENCE_NUMBER); + private static final CaseDocument CASE_DOCUMENT = CaseDocumentBuilder.builder() .documentName(fileName_application) .documentType(DEFAULT_JUDGMENT) @@ -63,14 +78,17 @@ public class HearingFormGeneratorTest { @MockBean private AssignCategoryId assignCategoryId; @MockBean + FeatureToggleService featureToggleService; + @MockBean private LocationRefDataService locationRefDataService; @MockBean private CourtLocationUtils courtLocationUtils; + @Autowired private HearingFormGenerator generator; @Test - void shouldHearingFormGeneratorOneForm_whenValidDataIsProvided() { + void shouldHearingFormGeneratorOneForm_whenValidDataIsProvided_hearing_application() { when(documentGeneratorService.generateDocmosisDocument(any(MappableObject.class), eq(HEARING_APPLICATION))) .thenReturn(new DocmosisDocument(HEARING_APPLICATION.getDocumentTitle(), bytes)); when(documentManagementService @@ -78,6 +96,126 @@ void shouldHearingFormGeneratorOneForm_whenValidDataIsProvided() { .thenReturn(CASE_DOCUMENT); when(courtLocationUtils.findPreferredLocationData(any(), any())).thenReturn(LocationRefData.builder().build()); + when(featureToggleService.isAutomatedHearingNoticeEnabled()).thenReturn(false); + + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged() + .listingOrRelisting(ListingOrRelisting.LISTING) + .totalClaimAmount(new BigDecimal(2000)) + .build().toBuilder() + .hearingLocation(DynamicList.builder().value(DynamicListElement.builder().label("County Court").build()) + .build()) + .hearingTimeHourMinute("0800") + .channel(HearingChannel.IN_PERSON) + .hearingDuration(HearingDuration.DAY_1) + .hearingNoticeList(HearingNoticeList.HEARING_OF_APPLICATION).build(); + List caseDocuments = generator.generate(caseData, BEARER_TOKEN); + + assertThat(caseDocuments.size()).isEqualTo(1); + + verify(documentManagementService) + .uploadDocument(BEARER_TOKEN, new PDF(fileName_application, bytes, HEARING_FORM)); + } + + @Test + void shouldHearingFormGeneratorOneForm_whenValidDataIsProvided_hearing_small_claims() { + when(documentGeneratorService.generateDocmosisDocument(any(MappableObject.class), eq(HEARING_SMALL_CLAIMS))) + .thenReturn(new DocmosisDocument(HEARING_SMALL_CLAIMS.getDocumentTitle(), bytes)); + + when(documentManagementService + .uploadDocument(BEARER_TOKEN, new PDF(fileName_small_claim, bytes, HEARING_FORM))) + .thenReturn(CASE_DOCUMENT); + when(courtLocationUtils.findPreferredLocationData(any(), any())).thenReturn(LocationRefData.builder().build()); + when(featureToggleService.isAutomatedHearingNoticeEnabled()).thenReturn(false); + + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged() + .listingOrRelisting(ListingOrRelisting.LISTING) + .totalClaimAmount(new BigDecimal(2000)) + .build().toBuilder() + .hearingLocation(DynamicList.builder().value(DynamicListElement.builder().label("County Court").build()) + .build()) + .hearingTimeHourMinute("0800") + .channel(HearingChannel.IN_PERSON) + .hearingDuration(HearingDuration.DAY_1) + .hearingNoticeList(HearingNoticeList.SMALL_CLAIMS).build(); + List caseDocuments = generator.generate(caseData, BEARER_TOKEN); + + assertThat(caseDocuments.size()).isEqualTo(1); + + verify(documentManagementService) + .uploadDocument(BEARER_TOKEN, new PDF(fileName_small_claim, bytes, HEARING_FORM)); + } + + @Test + void shouldHearingFormGeneratorOneForm_whenValidDataIsProvided_hearing_fast_track() { + when(documentGeneratorService.generateDocmosisDocument(any(MappableObject.class), eq(HEARING_FAST_TRACK))) + .thenReturn(new DocmosisDocument(HEARING_FAST_TRACK.getDocumentTitle(), bytes)); + + when(documentManagementService + .uploadDocument(BEARER_TOKEN, new PDF(fileName_fast_track, bytes, HEARING_FORM))) + .thenReturn(CASE_DOCUMENT); + when(courtLocationUtils.findPreferredLocationData(any(), any())).thenReturn(LocationRefData.builder().build()); + when(featureToggleService.isAutomatedHearingNoticeEnabled()).thenReturn(false); + + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged() + .listingOrRelisting(ListingOrRelisting.LISTING) + .totalClaimAmount(new BigDecimal(2000)) + .build().toBuilder() + .hearingLocation(DynamicList.builder().value(DynamicListElement.builder().label("County Court").build()) + .build()) + .hearingTimeHourMinute("0800") + .channel(HearingChannel.IN_PERSON) + .hearingDuration(HearingDuration.DAY_1) + .hearingNoticeList(HearingNoticeList.FAST_TRACK_TRIAL).build(); + List caseDocuments = generator.generate(caseData, BEARER_TOKEN); + + assertThat(caseDocuments.size()).isEqualTo(1); + + verify(documentManagementService) + .uploadDocument(BEARER_TOKEN, new PDF(fileName_fast_track, bytes, HEARING_FORM)); + } + + @Test + void shouldHearingFormGeneratorOneForm_whenValidDataIsProvided_hearing_oher() { + when(documentGeneratorService.generateDocmosisDocument(any(MappableObject.class), eq(HEARING_OTHER))) + .thenReturn(new DocmosisDocument(HEARING_OTHER.getDocumentTitle(), bytes)); + + when(documentManagementService + .uploadDocument(BEARER_TOKEN, new PDF(fileName_other_claim, bytes, HEARING_FORM))) + .thenReturn(CASE_DOCUMENT); + when(courtLocationUtils.findPreferredLocationData(any(), any())).thenReturn(LocationRefData.builder().build()); + + when(featureToggleService.isAutomatedHearingNoticeEnabled()).thenReturn(false); + + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged() + .listingOrRelisting(ListingOrRelisting.LISTING) + .totalClaimAmount(new BigDecimal(2000)) + .build().toBuilder() + .hearingLocation(DynamicList.builder().value(DynamicListElement.builder().label("County Court").build()) + .build()) + .hearingTimeHourMinute("0800") + .channel(HearingChannel.IN_PERSON) + .hearingDuration(HearingDuration.DAY_1) + .hearingNoticeList(HearingNoticeList.OTHER).build(); + List caseDocuments = generator.generate(caseData, BEARER_TOKEN); + + assertThat(caseDocuments.size()).isEqualTo(1); + + verify(documentManagementService) + .uploadDocument(BEARER_TOKEN, new PDF(fileName_other_claim, bytes, HEARING_FORM)); + } + + @Test + void shouldHearingFormGeneratorOneForm_whenValidDataIsProvided_hearing_application_ahn() { + when(documentGeneratorService.generateDocmosisDocument(any(MappableObject.class), eq(HEARING_APPLICATION_AHN))) + .thenReturn(new DocmosisDocument(HEARING_APPLICATION_AHN.getDocumentTitle(), bytes)); + + when(documentManagementService + .uploadDocument(BEARER_TOKEN, new PDF(fileName_application, bytes, HEARING_FORM))) + .thenReturn(CASE_DOCUMENT); + when(courtLocationUtils.findPreferredLocationData(any(), any())).thenReturn(LocationRefData.builder().build()); + + when(featureToggleService.isAutomatedHearingNoticeEnabled()).thenReturn(true); + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged() .listingOrRelisting(ListingOrRelisting.LISTING) .totalClaimAmount(new BigDecimal(2000)) @@ -95,4 +233,94 @@ void shouldHearingFormGeneratorOneForm_whenValidDataIsProvided() { verify(documentManagementService) .uploadDocument(BEARER_TOKEN, new PDF(fileName_application, bytes, HEARING_FORM)); } + + @Test + void shouldHearingFormGeneratorOneForm_whenValidDataIsProvided_hearing_small_claims_ahn() { + when(documentGeneratorService.generateDocmosisDocument(any(MappableObject.class), eq(HEARING_SMALL_CLAIMS_AHN))) + .thenReturn(new DocmosisDocument(HEARING_SMALL_CLAIMS_AHN.getDocumentTitle(), bytes)); + + when(documentManagementService + .uploadDocument(BEARER_TOKEN, new PDF(fileName_small_claim, bytes, HEARING_FORM))) + .thenReturn(CASE_DOCUMENT); + when(courtLocationUtils.findPreferredLocationData(any(), any())).thenReturn(LocationRefData.builder().build()); + + when(featureToggleService.isAutomatedHearingNoticeEnabled()).thenReturn(true); + + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged() + .listingOrRelisting(ListingOrRelisting.LISTING) + .totalClaimAmount(new BigDecimal(2000)) + .build().toBuilder() + .hearingLocation(DynamicList.builder().value(DynamicListElement.builder().label("County Court").build()) + .build()) + .hearingTimeHourMinute("0800") + .channel(HearingChannel.IN_PERSON) + .hearingDuration(HearingDuration.DAY_1) + .hearingNoticeList(HearingNoticeList.SMALL_CLAIMS).build(); + List caseDocuments = generator.generate(caseData, BEARER_TOKEN); + + assertThat(caseDocuments.size()).isEqualTo(1); + + verify(documentManagementService) + .uploadDocument(BEARER_TOKEN, new PDF(fileName_small_claim, bytes, HEARING_FORM)); + } + + @Test + void shouldHearingFormGeneratorOneForm_whenValidDataIsProvided_hearing_fast_track_ahn() { + when(documentGeneratorService.generateDocmosisDocument(any(MappableObject.class), eq(HEARING_FAST_TRACK_AHN))) + .thenReturn(new DocmosisDocument(HEARING_FAST_TRACK_AHN.getDocumentTitle(), bytes)); + + when(documentManagementService + .uploadDocument(BEARER_TOKEN, new PDF(fileName_fast_track, bytes, HEARING_FORM))) + .thenReturn(CASE_DOCUMENT); + when(courtLocationUtils.findPreferredLocationData(any(), any())).thenReturn(LocationRefData.builder().build()); + + when(featureToggleService.isAutomatedHearingNoticeEnabled()).thenReturn(true); + + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged() + .listingOrRelisting(ListingOrRelisting.LISTING) + .totalClaimAmount(new BigDecimal(2000)) + .build().toBuilder() + .hearingLocation(DynamicList.builder().value(DynamicListElement.builder().label("County Court").build()) + .build()) + .hearingTimeHourMinute("0800") + .channel(HearingChannel.IN_PERSON) + .hearingDuration(HearingDuration.DAY_1) + .hearingNoticeList(HearingNoticeList.FAST_TRACK_TRIAL).build(); + List caseDocuments = generator.generate(caseData, BEARER_TOKEN); + + assertThat(caseDocuments.size()).isEqualTo(1); + + verify(documentManagementService) + .uploadDocument(BEARER_TOKEN, new PDF(fileName_fast_track, bytes, HEARING_FORM)); + } + + @Test + void shouldHearingFormGeneratorOneForm_whenValidDataIsProvided_hearing_other_ahn() { + when(documentGeneratorService.generateDocmosisDocument(any(MappableObject.class), eq(HEARING_OTHER_AHN))) + .thenReturn(new DocmosisDocument(HEARING_OTHER_AHN.getDocumentTitle(), bytes)); + + when(documentManagementService + .uploadDocument(BEARER_TOKEN, new PDF(fileName_other_claim, bytes, HEARING_FORM))) + .thenReturn(CASE_DOCUMENT); + when(courtLocationUtils.findPreferredLocationData(any(), any())).thenReturn(LocationRefData.builder().build()); + + when(featureToggleService.isAutomatedHearingNoticeEnabled()).thenReturn(true); + + CaseData caseData = CaseDataBuilder.builder().atStateNotificationAcknowledged() + .listingOrRelisting(ListingOrRelisting.LISTING) + .totalClaimAmount(new BigDecimal(2000)) + .build().toBuilder() + .hearingLocation(DynamicList.builder().value(DynamicListElement.builder().label("County Court").build()) + .build()) + .hearingTimeHourMinute("0800") + .channel(HearingChannel.IN_PERSON) + .hearingDuration(HearingDuration.DAY_1) + .hearingNoticeList(HearingNoticeList.OTHER).build(); + List caseDocuments = generator.generate(caseData, BEARER_TOKEN); + + assertThat(caseDocuments.size()).isEqualTo(1); + + verify(documentManagementService) + .uploadDocument(BEARER_TOKEN, new PDF(fileName_other_claim, bytes, HEARING_FORM)); + } } From e991d219912dbe1a26f97cb8dc64d8ef4caaaaa1 Mon Sep 17 00:00:00 2001 From: hmcts-version1-ignacio <107860328+hmcts-version1-ignacio@users.noreply.github.com> Date: Fri, 24 Nov 2023 12:17:45 +0000 Subject: [PATCH 2/5] CIV-8155 Enter flight details screen (#3520) * CIV-11150 Add new handler * CIV-11150 Add new handler * CIV-11150 Fix sonar issues * CIV-11150 Add new test and new changes * CIV-11150 Add new test and new changes * CIV-11150 Fix sonar issue * CIV-11150 Add claimType modifyer * CIV-8155 enter flight delay details list and validations * CIV-8155 Add tests * CIV-8155 Add flightDelay object * CIV-8155 Fix imports * CIV-8155 Fix imports * CIV-8155 Fix tests * CIV-8155 Add airlines * CIV-8155 Add airlines and locations * CIV-8155 Fix airline locations and add tests * CIV-8155 Fix sonar issues * CIV-8155 Fix sonar issues * CIV-8155 Fix tests * CIV-8155 Add csv file read * CIV-8155 update dropdown and locations functionality * CIV-8155 change type for flightCourtLocation variable * CIV-8155 changes in the variables stored in caseData * CIV-8155 update tests * CIV-8155 update tests * CIV-8155 update tests * CIV-8155 update tests * CIV-8155 update tests * Fixing PR build issues Fixing PR build issues * CIV-8155 update tests * CIV-8155 update tests * CIV-8155 update tests * CIV-8155 fix sonar issues * CIV-8155 refactoring * CIV-8155 refactoring test * CIV-8155 add temporary suppression * CIV-8155 remove suppression --------- Co-authored-by: Azam <106387766+Azam-Hmcts@users.noreply.github.com> Co-authored-by: ShwetaTandel-hmcts --- build.gradle | 4 + .../user/CreateClaimSpecCallbackHandler.java | 82 ++++++++++- .../reform/civil/model/AirlineEpimsId.java | 14 ++ .../hmcts/reform/civil/model/CaseData.java | 1 + .../civil/model/FlightDelayDetails.java | 23 ++++ .../civil/service/AirlineEpimsDataLoader.java | 44 ++++++ .../civil/service/AirlineEpimsService.java | 22 +++ .../airline_ePimsID_csv/airline_ePimsID.csv | 100 ++++++++++++++ .../CreateClaimSpecCallbackHandlerTest.java | 130 +++++++++++++++++- .../civil/sampledata/CaseDataBuilder.java | 9 ++ .../service/AirlineEpimsDataLoaderTest.java | 27 ++++ .../service/AirlineEpimsServiceTest.java | 64 +++++++++ 12 files changed, 518 insertions(+), 2 deletions(-) create mode 100644 src/main/java/uk/gov/hmcts/reform/civil/model/AirlineEpimsId.java create mode 100644 src/main/java/uk/gov/hmcts/reform/civil/model/FlightDelayDetails.java create mode 100644 src/main/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsDataLoader.java create mode 100644 src/main/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsService.java create mode 100644 src/main/resources/airline_ePimsID_csv/airline_ePimsID.csv create mode 100644 src/test/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsDataLoaderTest.java create mode 100644 src/test/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsServiceTest.java diff --git a/build.gradle b/build.gradle index 4cf7766b450..c8f9c7a8400 100644 --- a/build.gradle +++ b/build.gradle @@ -496,6 +496,10 @@ dependencies { integrationTestImplementation sourceSets.main.runtimeClasspath integrationTestImplementation sourceSets.test.runtimeClasspath + // https://mvnrepository.com/artifact/com.opencsv/opencsv + implementation group: 'com.opencsv', name: 'opencsv', version: '5.8', { + exclude group: 'commons-collections', module: 'commons-collections' + } } mainClassName = 'uk.gov.hmcts.reform.civil.Application' diff --git a/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/CreateClaimSpecCallbackHandler.java b/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/CreateClaimSpecCallbackHandler.java index 7b1929169e4..43e1f27e4f0 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/CreateClaimSpecCallbackHandler.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/handler/callback/user/CreateClaimSpecCallbackHandler.java @@ -11,6 +11,7 @@ import uk.gov.hmcts.reform.ccd.client.model.SubmittedCallbackResponse; import uk.gov.hmcts.reform.ccd.model.OrganisationPolicy; import uk.gov.hmcts.reform.civil.callback.Callback; +import uk.gov.hmcts.reform.civil.callback.CallbackException; import uk.gov.hmcts.reform.civil.callback.CallbackHandler; import uk.gov.hmcts.reform.civil.callback.CallbackParams; import uk.gov.hmcts.reform.civil.callback.CaseEvent; @@ -20,12 +21,15 @@ import uk.gov.hmcts.reform.civil.enums.ClaimType; import uk.gov.hmcts.reform.civil.enums.YesOrNo; import uk.gov.hmcts.reform.civil.model.Address; +import uk.gov.hmcts.reform.civil.service.AirlineEpimsDataLoader; +import uk.gov.hmcts.reform.civil.model.AirlineEpimsId; import uk.gov.hmcts.reform.civil.model.BusinessProcess; import uk.gov.hmcts.reform.civil.model.CaseData; import uk.gov.hmcts.reform.civil.model.CaseManagementCategory; import uk.gov.hmcts.reform.civil.model.CaseManagementCategoryElement; import uk.gov.hmcts.reform.civil.model.ClaimAmountBreakup; import uk.gov.hmcts.reform.civil.model.CorrectEmail; +import uk.gov.hmcts.reform.civil.model.FlightDelayDetails; import uk.gov.hmcts.reform.civil.model.IdamUserDetails; import uk.gov.hmcts.reform.civil.model.Party; import uk.gov.hmcts.reform.civil.model.PaymentDetails; @@ -37,8 +41,11 @@ import uk.gov.hmcts.reform.civil.model.common.Element; import uk.gov.hmcts.reform.civil.model.defaultjudgment.CaseLocationCivil; import uk.gov.hmcts.reform.civil.prd.model.Organisation; +import uk.gov.hmcts.reform.civil.referencedata.LocationRefDataService; +import uk.gov.hmcts.reform.civil.referencedata.model.LocationRefData; import uk.gov.hmcts.reform.civil.repositories.ReferenceNumberRepository; import uk.gov.hmcts.reform.civil.repositories.SpecReferenceNumberRepository; +import uk.gov.hmcts.reform.civil.service.AirlineEpimsService; import uk.gov.hmcts.reform.civil.service.ExitSurveyContentService; import uk.gov.hmcts.reform.civil.service.FeatureToggleService; import uk.gov.hmcts.reform.civil.service.FeesService; @@ -156,6 +163,10 @@ public class CreateClaimSpecCallbackHandler extends CallbackHandler implements P + "to : OCMCNton@justice.gov.uk. The Certificate of Service form can be found here:" + "%n%n"; + private static final String ERROR_MESSAGE_SCHEDULED_DATE_OF_FLIGHT_MUST_BE_TODAY_OR_IN_THE_PAST = "Scheduled date of flight must be today or in the past"; + + private static final String LOCATION_NOT_FOUND_MESSAGE = "Location not found for ePIMS_ID: %s"; + private final ClaimUrlsConfiguration claimUrlsConfiguration; private final ExitSurveyContentService exitSurveyContentService; private final ReferenceNumberRepository referenceNumberRepository; @@ -176,7 +187,10 @@ public class CreateClaimSpecCallbackHandler extends CallbackHandler implements P private final StateFlowEngine stateFlowEngine; private final CaseFlagsInitialiser caseFlagInitialiser; private final ToggleConfiguration toggleConfiguration; + private final LocationRefDataService locationRefDataService; private final String caseDocLocation = "/cases/case-details/%s#CaseDocuments"; + private final AirlineEpimsDataLoader airlineEpimsDataLoader; + private final AirlineEpimsService airlineEpimsService; @Value("${court-location.specified-claim.region-id}") private String regionId; @@ -232,6 +246,8 @@ protected Map callbacks() { .put(callbackKey(MID, "validate-spec-defendant-legal-rep-email"), this::validateSpecRespondentRepEmail) .put(callbackKey(MID, "validate-spec-defendant2-legal-rep-email"), this::validateSpecRespondent2RepEmail) .put(callbackKey(MID, "is-flight-delay-claim"), this::isFlightDelayClaim) + .put(callbackKey(MID, "get-airline-list"), this::getAirlineList) + .put(callbackKey(MID, "validate-date-of-flight"), this::validateDateOfFlight) .build(); } @@ -523,7 +539,6 @@ private CallbackResponse submitClaim(CallbackParams callbackParams) { populateWithPartyIds(dataBuilder); } - List errors = new ArrayList<>(); if (caseData.getSdtRequestIdFromSdt() != null) { // assign StdRequestId, to ensure duplicate requests from SDT/bulk claims are not processed List> stdRequestIdList = new ArrayList<>(); @@ -540,6 +555,7 @@ private CallbackResponse submitClaim(CallbackParams callbackParams) { .build()).build()); } + List errors = new ArrayList<>(); if (getMultiPartyScenario(caseData) == ONE_V_TWO_ONE_LEGAL_REP && caseData.getSpecRespondentCorrespondenceAddressdetails() != null) { // to keep with heading tab @@ -550,6 +566,19 @@ private CallbackResponse submitClaim(CallbackParams callbackParams) { caseData.getSpecRespondentCorrespondenceAddressdetails()); } + if ((toggleService.isSdoR2Enabled() && callbackParams.getCaseData().getFlightDelayDetails() != null)) { + FlightDelayDetails flightDelayDetails = callbackParams.getCaseData().getFlightDelayDetails(); + String selectedAirlineCode = flightDelayDetails.getAirlineList().getValue().getCode(); + + dataBuilder.flightDelayDetails(FlightDelayDetails.builder() + .airlineList(DynamicList.builder().value(flightDelayDetails.getAirlineList().getValue()).build()) + .nameOfAirline(flightDelayDetails.getNameOfAirline()) + .flightNumber(flightDelayDetails.getFlightNumber()) + .scheduledDate(flightDelayDetails.getScheduledDate()) + .flightCourtLocation(getAirlineCaseLocation(selectedAirlineCode, callbackParams)) + .build()); + } + return AboutToStartOrSubmitCallbackResponse.builder() .errors(errors) .data(dataBuilder.build().toMap(objectMapper)) @@ -917,6 +946,36 @@ private CallbackResponse isFlightDelayClaim(CallbackParams callbackParams) { .build(); } + private CallbackResponse getAirlineList(CallbackParams callbackParams) { + CaseData.CaseDataBuilder caseDataBuilder = callbackParams.getCaseData().toBuilder(); + List airlineEpimsIDList = new ArrayList<>(airlineEpimsDataLoader.getAirlineEpimsIDList()); + DynamicList airlineList = DynamicList + .fromList(airlineEpimsIDList.stream() + .map(AirlineEpimsId::getAirline).toList(), Object::toString, Object::toString, null, false); + DynamicList dropdownAirlineList = DynamicList.builder() + .listItems(airlineList.getListItems()).build(); + + FlightDelayDetails flightDelayDetails = FlightDelayDetails.builder().airlineList(dropdownAirlineList).build(); + caseDataBuilder.flightDelayDetails(flightDelayDetails); + return AboutToStartOrSubmitCallbackResponse.builder() + .data(caseDataBuilder.build().toMap(objectMapper)) + .build(); + } + + private CallbackResponse validateDateOfFlight(CallbackParams callbackParams) { + CaseData.CaseDataBuilder caseDataBuilder = callbackParams.getCaseData().toBuilder(); + List errors = new ArrayList<>(); + LocalDate today = LocalDate.now(); + LocalDate scheduledDate = callbackParams.getCaseData().getFlightDelayDetails().getScheduledDate(); + if (scheduledDate.isAfter(today)) { + errors.add(ERROR_MESSAGE_SCHEDULED_DATE_OF_FLIGHT_MUST_BE_TODAY_OR_IN_THE_PAST); + } + return AboutToStartOrSubmitCallbackResponse.builder() + .data(caseDataBuilder.build().toMap(objectMapper)) + .errors(errors) + .build(); + } + private CallbackResponse setRespondent2SameLegalRepToNo(CallbackParams callbackParams) { CaseData.CaseDataBuilder caseDataBuilder = callbackParams.getCaseData().toBuilder(); @@ -943,4 +1002,25 @@ private boolean areRespondentsRepresentedAndRegistered(CaseData caseData) { || caseData.getRespondent2Represented() == NO || caseData.getRespondent2OrgRegistered() == NO); } + + private CaseLocationCivil getAirlineCaseLocation(String airline, CallbackParams callbackParams) { + if (airline.equals("OTHER")) { + return null; + } + String locationEpimmsId = airlineEpimsService.getEpimsIdForAirline(airline); + List locations = fetchLocationData(callbackParams); + var matchedLocations = locations.stream().filter(loc -> loc.getEpimmsId().equals(locationEpimmsId)).toList(); + if (matchedLocations.isEmpty()) { + throw new CallbackException(String.format(LOCATION_NOT_FOUND_MESSAGE, locationEpimmsId)); + } else { + return CaseLocationCivil.builder() + .region(matchedLocations.get(0).getRegionId()) + .baseLocation(matchedLocations.get(0).getEpimmsId()).build(); + } + } + + private List fetchLocationData(CallbackParams callbackParams) { + String authToken = callbackParams.getParams().get(BEARER_TOKEN).toString(); + return locationRefDataService.getCourtLocationsForDefaultJudgments(authToken); + } } diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/AirlineEpimsId.java b/src/main/java/uk/gov/hmcts/reform/civil/model/AirlineEpimsId.java new file mode 100644 index 00000000000..d03bb5bdc02 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/AirlineEpimsId.java @@ -0,0 +1,14 @@ +package uk.gov.hmcts.reform.civil.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Value; + +@Value +@Builder +@AllArgsConstructor +public class AirlineEpimsId { + + String airline; + String epimsID; +} diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/CaseData.java b/src/main/java/uk/gov/hmcts/reform/civil/model/CaseData.java index 7eaee138a62..caa3f46a47b 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/model/CaseData.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/CaseData.java @@ -638,6 +638,7 @@ public boolean hasNoOngoingBusinessProcess() { //SDO-R2 private YesOrNo isFlightDelayClaim; + private FlightDelayDetails flightDelayDetails; /** * There are several fields that can hold the I2P of applicant1 depending diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/FlightDelayDetails.java b/src/main/java/uk/gov/hmcts/reform/civil/model/FlightDelayDetails.java new file mode 100644 index 00000000000..514f0f0ab52 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/FlightDelayDetails.java @@ -0,0 +1,23 @@ +package uk.gov.hmcts.reform.civil.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import uk.gov.hmcts.reform.civil.model.common.DynamicList; +import uk.gov.hmcts.reform.civil.model.defaultjudgment.CaseLocationCivil; + +import java.time.LocalDate; + +@Data +@Builder(toBuilder = true) +@NoArgsConstructor +@AllArgsConstructor +public class FlightDelayDetails { + + private DynamicList airlineList; + private String nameOfAirline; + private String flightNumber; + private LocalDate scheduledDate; + private CaseLocationCivil flightCourtLocation; +} diff --git a/src/main/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsDataLoader.java b/src/main/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsDataLoader.java new file mode 100644 index 00000000000..718c4755838 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsDataLoader.java @@ -0,0 +1,44 @@ +package uk.gov.hmcts.reform.civil.service; + +import com.google.common.collect.ImmutableList; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; +import com.opencsv.CSVReader; +import com.opencsv.exceptions.CsvException; +import uk.gov.hmcts.reform.civil.model.AirlineEpimsId; + +@Service +@Slf4j +public class AirlineEpimsDataLoader { + + private static final String CSV_FILE_PATH = "airline_ePimsID_csv/airline_ePimsID.csv"; + private final List airlineEpimsIDList = new ArrayList<>(); + + @PostConstruct + protected void init() { + InputStream inputStream = getClass().getClassLoader().getResourceAsStream(CSV_FILE_PATH); + try (CSVReader reader = new CSVReader(new InputStreamReader(inputStream))) { + + List linesList = reader.readAll(); + linesList.forEach(line -> { + AirlineEpimsId airlineEpimsID = AirlineEpimsId.builder() + .airline(line[0]) + .epimsID(line[1]) + .build(); + airlineEpimsIDList.add(airlineEpimsID); + }); + } catch (IOException | CsvException e) { + log.error("Error occurred while loading the airline_ePimsID.csv file: " + CSV_FILE_PATH + e); + } + } + + public List getAirlineEpimsIDList() { + return ImmutableList.copyOf(airlineEpimsIDList); + } +} diff --git a/src/main/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsService.java b/src/main/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsService.java new file mode 100644 index 00000000000..00e47a34789 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsService.java @@ -0,0 +1,22 @@ +package uk.gov.hmcts.reform.civil.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.civil.model.AirlineEpimsId; +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class AirlineEpimsService { + + private final AirlineEpimsDataLoader airlineEpimsDataLoader; + + public String getEpimsIdForAirline(String airline) { + AirlineEpimsId airlineEpimsID = airlineEpimsDataLoader.getAirlineEpimsIDList() + .stream().filter(item -> item.getAirline().equals(airline)).findFirst().orElse(null); + + return Optional.ofNullable(airlineEpimsID) + .map(AirlineEpimsId::getEpimsID) + .orElseThrow(() -> new IllegalStateException("Unable to find epims ID for airline: " + airline)); + } +} diff --git a/src/main/resources/airline_ePimsID_csv/airline_ePimsID.csv b/src/main/resources/airline_ePimsID_csv/airline_ePimsID.csv new file mode 100644 index 00000000000..49d7c177ec2 --- /dev/null +++ b/src/main/resources/airline_ePimsID_csv/airline_ePimsID.csv @@ -0,0 +1,100 @@ +Aegean,298828 +Aer Lingus,621184 +Aeroflot,298828 +Aeromexico,621184 +Air Algerie,268374 +Air Baltic,317442 +Air Canada,298828 +Air China,36791 +Air Europa,20262 +Air France,298828 +Air India,36791 +Air Malta,298828 +Air Moldova,365554 +Air New Zealand,268374 +Air Portugal,701411 +Air Transat,20262 +All Nippon Airways,268374 +American Airlines,621184 +Aurigny,317442 +Austrian Airways,621184 +Avianca,365554 +Azerbaijan Airlines,268374 +BA/Cityflyer,621184 +Biman Bangladesh,345663 +Blue Air,345663 +Brussels,621184 +Bulgaria Air,298828 +Cathay Pacific,268374 +China Airlines,20262 +China Eastern,20262 +China Southern,621184 +Condor,701411 +Croatia Airlines,298828 +Delta,268374 +Eastern,317442 +Easyjet,365554 +Egyptair,268374 +El Al,20262 +Emirates,701411 +Etihad,345663 +Eurowings,621184 +Eva Air,20262 +Finnair,345663 +Garuda,621184 +Gulf Air,36791 +Iberia/Express,621184 +Icelandair,20262 +Iran Air,268374 +ITA,298828 +Japan Airlines,20262 +Jet2.com,701411 +JetBlue,317442 +Kenya Airways,298828 +KLM,298828 +Korean,20262 +Kuwait Airways,621184 +LATAM/JJ,298828 +Loganair,701411 +LOT,20262 +Lufthansa,621184 +Luxair,20262 +Malaysian,268374 +Middle East,20262 +Norse,317442 +Norweigan,317442 +Oman,701411 +Pakistan,36791 +Pegasus,365554 +Phillipine Airlines,317442 +Play,345663 +Qatar,345663 +Quantas,268374 +Royal Air Maroc,20262 +Royal Brunei,268374 +Royal Jordanian,36791 +Ryanair,345663 +SAS,298828 +SAS,621184 +Saudi Arabian Airlines,20262 +Saudia,20262 +Singapore Airlines,36791 +Sky Express,298828 +Smartwings,365554 +South African Airways,268374 +Sri Lankan,36791 +Swiss International,621184 +Thai Airways,20262 +TUI / Thomson ,365554 +Tunisair,268374 +Turkish,36791 +Ukraine International,36791 +United,621184 +Vietnam Airlines,20262 +Virgin,317442 +Vistara,268374 +Vueling,345663 +WestJet,317442 +Wideroe,298828 +WizzAir,345663 +OTHER, diff --git a/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/CreateClaimSpecCallbackHandlerTest.java b/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/CreateClaimSpecCallbackHandlerTest.java index 40c83a10559..a8f216dcd76 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/CreateClaimSpecCallbackHandlerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/handler/callback/user/CreateClaimSpecCallbackHandlerTest.java @@ -29,6 +29,13 @@ import uk.gov.hmcts.reform.civil.enums.YesOrNo; import uk.gov.hmcts.reform.civil.handler.callback.BaseCallbackHandlerTest; import uk.gov.hmcts.reform.civil.helpers.CaseDetailsConverter; +import uk.gov.hmcts.reform.civil.model.AirlineEpimsId; +import uk.gov.hmcts.reform.civil.service.AirlineEpimsDataLoader; +import uk.gov.hmcts.reform.civil.model.FlightDelayDetails; +import uk.gov.hmcts.reform.civil.referencedata.LocationRefDataService; +import uk.gov.hmcts.reform.civil.referencedata.model.LocationRefData; +import uk.gov.hmcts.reform.civil.sampledata.LocationRefSampleDataBuilder; +import uk.gov.hmcts.reform.civil.service.AirlineEpimsService; import uk.gov.hmcts.reform.civil.service.FeatureToggleService; import uk.gov.hmcts.reform.civil.model.Address; import uk.gov.hmcts.reform.civil.model.CaseData; @@ -207,6 +214,15 @@ class CreateClaimSpecCallbackHandlerTest extends BaseCallbackHandlerTest { @MockBean private ToggleConfiguration toggleConfiguration; + @MockBean + protected LocationRefDataService locationRefDataService; + + @MockBean + private AirlineEpimsDataLoader airlineEpimsDataLoader; + + @MockBean + private AirlineEpimsService airlineEpimsService; + @Nested class AboutToStartCallback { @@ -1623,7 +1639,7 @@ void shouldReturnErrors_whenRequiredAddressIsYesAndNotValid() { } @Nested - class IsFlightDelayClaimMidCallback { + class FlightDelayDetailsMidCallbacks { @ParameterizedTest @ValueSource(booleans = {true, false}) void shouldSetIsFlightDelayClaim_whenPopulatedAndSdoR2Enabled(Boolean toggleStat) { @@ -1661,6 +1677,61 @@ void shouldSetIsFlightDelayClaim_whenPopulatedAndSdoR2Disabled() { assertThat(response.getData()).doesNotHaveToString("isFlightDelayClaim"); assertThat(response.getData()).doesNotHaveToString("claimType"); } + + @Test + void shouldGetAirlineList_whenRequired() { + // Given + List airlineEpimsIDList = new ArrayList<>(); + airlineEpimsIDList.add(AirlineEpimsId.builder().airline("BA/Cityflyer").epimsID("111000").build()); + airlineEpimsIDList.add(AirlineEpimsId.builder().airline("OTHER").epimsID("111111").build()); + + given(airlineEpimsDataLoader.getAirlineEpimsIDList()) + .willReturn(airlineEpimsIDList); + + CaseData caseData = CaseData.builder().build(); + CallbackParams params = callbackParamsOf(caseData, MID, "get-airline-list"); + + // When + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + + // Then + assertThat(response.getData()).extracting("flightDelayDetails").extracting("airlineList") + .extracting("list_items").asList().extracting("label") + .contains("BA/Cityflyer"); + + assertThat(response.getData()).extracting("flightDelayDetails").extracting("airlineList") + .extracting("list_items").asList().extracting("label") + .contains("OTHER"); + } + + @Test + void shouldReturnErrorWhenDateOfFlightIsInTheFuture() { + // Given + CaseData caseData = CaseData.builder() + .flightDelayDetails(FlightDelayDetails.builder().scheduledDate(now().plusDays(1)).build()).build(); + + CallbackParams params = callbackParamsOf(caseData, MID, "validate-date-of-flight"); + // When + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + + // Then + assertThat(response.getErrors()).contains("Scheduled date of flight must be today or in the past"); + } + + @ParameterizedTest + @ValueSource(ints = {0, 1}) + void shouldNotReturnErrorWhenDateOfFlightIsTodayOrInThePast(Integer days) { + // Given + CaseData caseData = CaseData.builder() + .flightDelayDetails(FlightDelayDetails.builder().scheduledDate(now().minusDays(days)).build()).build(); + + CallbackParams params = callbackParamsOf(caseData, MID, "validate-date-of-flight"); + // When + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + + // Then + assertThat(response.getErrors()).isEmpty(); + } } @Nested @@ -2099,6 +2170,63 @@ void shouldMoveStatementOfTruthToCorrectFieldAndResetUIField_whenInvoked() { .doesNotHaveToString("role"); } } + + @Nested + class GetAirlineCourtLocation extends LocationRefSampleDataBuilder { + + @BeforeEach + void mockAirlineEpimsData() { + given(airlineEpimsService.getEpimsIdForAirline("GULF_AIR")) + .willReturn("36791"); + + List locations = new ArrayList<>(); + locations.add(LocationRefData.builder().regionId("Site Name").epimmsId("36791") + .build()); + given(locationRefDataService.getCourtLocationsForDefaultJudgments(any())) + .willReturn(locations); + + when(toggleService.isSdoR2Enabled()).thenReturn(true); + } + + @Test + void shouldReturnExpectedCourtLocation_whenAirlineExists() { + // Given + CaseData caseData = CaseDataBuilder.builder().atStateClaimDraft() + .flightDelay(FlightDelayDetails.builder() + .airlineList( + DynamicList.builder() + .value(DynamicListElement.builder().code("GULF_AIR").label("Gulf Air") + .build()).build()).build()).build(); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + + // When + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + + // Then + assertThat(response.getData()).extracting("flightDelayDetails").extracting("flightCourtLocation").extracting("region").isEqualTo("Site Name"); + } + + @Test + void shouldReturnExpectedCourtLocation_whenOtherAirlineSelected() { + // Given + CaseData caseData = CaseDataBuilder.builder().atStateClaimDraft() + .flightDelay(FlightDelayDetails.builder() + .airlineList( + DynamicList.builder() + .value(DynamicListElement.builder().code("OTHER").label("OTHER") + .build()).build()).build()).build(); + CallbackParams params = callbackParamsOf(caseData, ABOUT_TO_SUBMIT); + + given(locationRefDataService.getCourtLocationsForDefaultJudgments(any())) + .willReturn(getSampleCourLocationsRefObject()); + + // When + var response = (AboutToStartOrSubmitCallbackResponse) handler.handle(params); + + // Then + assertThat(response.getData()).extracting("flightDelayDetails").extracting("flightCourtLocation").isNull(); + } + } } @Nested diff --git a/src/test/java/uk/gov/hmcts/reform/civil/sampledata/CaseDataBuilder.java b/src/test/java/uk/gov/hmcts/reform/civil/sampledata/CaseDataBuilder.java index bc230fb1382..5e445820d77 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/sampledata/CaseDataBuilder.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/sampledata/CaseDataBuilder.java @@ -37,6 +37,7 @@ import uk.gov.hmcts.reform.civil.enums.sdo.TrialHearingTimeEstimateDJ; import uk.gov.hmcts.reform.civil.handler.callback.user.spec.show.ResponseOneVOneShowTag; import uk.gov.hmcts.reform.civil.enums.sdo.DateToShowToggle; +import uk.gov.hmcts.reform.civil.model.FlightDelayDetails; import uk.gov.hmcts.reform.civil.model.UpdateDetailsForm; import uk.gov.hmcts.reform.civil.model.Address; import uk.gov.hmcts.reform.civil.model.Bundle; @@ -504,6 +505,7 @@ public class CaseDataBuilder { private DynamicList transferCourtLocationList; private String reasonForTransfer; + private FlightDelayDetails flightDelayDetails; public CaseDataBuilder sameRateInterestSelection(SameRateInterestSelection sameRateInterestSelection) { this.sameRateInterestSelection = sameRateInterestSelection; @@ -5190,6 +5192,11 @@ public CaseDataBuilder reasonForTransfer(String reasonForTransfer) { return this; } + public CaseDataBuilder flightDelay(FlightDelayDetails flightDelayDetails) { + this.flightDelayDetails = flightDelayDetails; + return this; + } + public CaseData buildMakePaymentsCaseData() { Organisation orgId = Organisation.builder() .organisationID("OrgId").build(); @@ -6545,6 +6552,7 @@ public CaseData build() { .drawDirectionsOrderRequired(drawDirectionsOrderRequired) .transferCourtLocationList(transferCourtLocationList) .reasonForTransfer(reasonForTransfer) + .applicant1LRIndividuals(applicant1LRIndividuals) .respondent1LRIndividuals(respondent1LRIndividuals) .respondent2LRIndividuals(respondent2LRIndividuals) @@ -6552,6 +6560,7 @@ public CaseData build() { .applicant2OrgIndividuals(applicant2OrgIndividuals) .respondent1OrgIndividuals(respondent1OrgIndividuals) .respondent2OrgIndividuals(respondent2OrgIndividuals) + .flightDelayDetails(flightDelayDetails) .build(); } } diff --git a/src/test/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsDataLoaderTest.java b/src/test/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsDataLoaderTest.java new file mode 100644 index 00000000000..7b8b2e07427 --- /dev/null +++ b/src/test/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsDataLoaderTest.java @@ -0,0 +1,27 @@ +package uk.gov.hmcts.reform.civil.service; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.BeforeEach; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@SpringBootTest(classes = {AirlineEpimsDataLoader.class}) +class AirlineEpimsDataLoaderTest { + + private AirlineEpimsDataLoader airlineEpimsDataLoader; + + @BeforeEach + public void setUp() { + airlineEpimsDataLoader = new AirlineEpimsDataLoader(); + airlineEpimsDataLoader.init(); + } + + @Test + void shouldGetAnAirlineEpimsList() { + String airline = airlineEpimsDataLoader.getAirlineEpimsIDList().get(0).getAirline(); + String epimsID = airlineEpimsDataLoader.getAirlineEpimsIDList().get(0).getEpimsID(); + assertEquals("Aegean", airline); + assertEquals("298828", epimsID); + } +} diff --git a/src/test/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsServiceTest.java b/src/test/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsServiceTest.java new file mode 100644 index 00000000000..ccbfcd2b902 --- /dev/null +++ b/src/test/java/uk/gov/hmcts/reform/civil/service/AirlineEpimsServiceTest.java @@ -0,0 +1,64 @@ +package uk.gov.hmcts.reform.civil.service; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import uk.gov.hmcts.reform.civil.model.AirlineEpimsId; +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.mockito.BDDMockito.given; + +@SpringBootTest(classes = {AirlineEpimsService.class}) +class AirlineEpimsServiceTest { + + @MockBean + private AirlineEpimsDataLoader airlineEpimsDataLoader; + + private AirlineEpimsService airlineEpimsService; + + @BeforeEach + void setup() { + List airlineEpimsIDList = new ArrayList<>(); + airlineEpimsIDList.add(AirlineEpimsId.builder().airline("Gulf Air").epimsID("36791").build()); + airlineEpimsIDList.add(AirlineEpimsId.builder().airline("NoLocationAirline").build()); + + given(airlineEpimsDataLoader.getAirlineEpimsIDList()) + .willReturn(airlineEpimsIDList); + } + + @Test + void getEpimsIdForAirline_shouldReturnCorrespondingEpimsIdForAirline() { + // Given + airlineEpimsService = new AirlineEpimsService(airlineEpimsDataLoader); + + // When + String result = airlineEpimsService.getEpimsIdForAirline("Gulf Air"); + + // Then + assertThat(result).isEqualTo("36791"); + } + + @Test + void getEpimsIdForAirline_givenInvalidAirline_shouldThrowException() { + // Given + airlineEpimsService = new AirlineEpimsService(airlineEpimsDataLoader); + + // Then + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy(() -> airlineEpimsService.getEpimsIdForAirline("INVALID_AIRLINE")); + } + + @Test + void getEpimsIdForAirline_givenNoLocationAirline_shouldThrowException() { + // Given + airlineEpimsService = new AirlineEpimsService(airlineEpimsDataLoader); + + // Then + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy(() -> airlineEpimsService.getEpimsIdForAirline("NoLocationAirline")); + } +} From 4cfb11d83addd987fc282226cb5874959d731a7e Mon Sep 17 00:00:00 2001 From: sampankumar Date: Fri, 24 Nov 2023 15:36:14 +0000 Subject: [PATCH 3/5] CIV-0000 add service auth (#3495) * Adding S2S token for service request update url * Adding S2S token for service request update url * Adding S2S token for service request update url * Adding S2S token for service request update url * Adding S2S token for service request update url * Adding S2S token for service request update url * Adding S2S token for service request update url * Adding S2S token for service request update url * Bumping chart version/ fixing aliases * Update Jenkinsfile_CNP * Pointing to a branch * CIV-0000 - Add service Auth for payment * Bumping chart version/ fixing aliases * Bumping chart version/ fixing aliases * Fixing unit tests * Fixing unit tests * Fixing unit tests * Fixing unit tests * Fixing unit tests * Fixing unit tests * Bumping chart version/ fixing aliases * Adding service-request-update-claim-issued * Update Jenkinsfile_CNP * converting to List * Checkstyle error * converting to List * converting to List * Fixing Sonar failures * Fixing Sonar failures --------- Co-authored-by: hmcts-jenkins-a-to-c <62422075+hmcts-jenkins-a-to-c[bot]@users.noreply.github.com> Co-authored-by: sankhajuria Co-authored-by: mfallonhmcts <114912573+mfallonhmcts@users.noreply.github.com> --- build.gradle | 2 +- charts/civil-service/Chart.yaml | 2 +- charts/civil-service/values.yaml | 1 + .../controllers/BaseIntegrationTest.java | 9 ++ ...ceRequestUpdateCallbackControllerTest.java | 32 ++++++ ...dateClaimIssuedCallbackControllerTest.java | 32 +++++- ...erviceRequestUpdateCallbackController.java | 14 ++- ...stUpdateClaimIssuedCallbackController.java | 13 ++- .../civil/service/AuthorisationService.java | 65 ++++++++++++ src/main/resources/application.yaml | 2 + .../service/AuthorisationServiceTest.java | 99 +++++++++++++++++++ 11 files changed, 264 insertions(+), 7 deletions(-) create mode 100644 src/main/java/uk/gov/hmcts/reform/civil/service/AuthorisationService.java create mode 100644 src/test/java/uk/gov/hmcts/reform/civil/service/AuthorisationServiceTest.java diff --git a/build.gradle b/build.gradle index c8f9c7a8400..2d2f22d5414 100644 --- a/build.gradle +++ b/build.gradle @@ -396,7 +396,7 @@ dependencies { implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign' implementation group: 'org.springframework.cloud', name: 'spring-cloud-openfeign-core' implementation group: 'uk.gov.hmcts.reform', name: 'properties-volume-spring-boot-starter', version: '0.1.0' - implementation group: 'uk.gov.hmcts.reform', name: 'service-auth-provider-client', version: '4.0.0' + implementation group: 'uk.gov.hmcts.reform', name: 'service-auth-provider-client', version: '4.0.3' implementation group: 'io.github.openfeign', name: 'feign-httpclient', version: '12.4' implementation group: 'org.springframework.retry', name: 'spring-retry' diff --git a/charts/civil-service/Chart.yaml b/charts/civil-service/Chart.yaml index dbf0c702042..bc3f1ae9b6c 100644 --- a/charts/civil-service/Chart.yaml +++ b/charts/civil-service/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: A Helm chart for civil-service App name: civil-service home: https://github.com/hmcts/civil-service -version: 0.0.52 +version: 0.0.53 maintainers: - name: HMCTS Civil team diff --git a/charts/civil-service/values.yaml b/charts/civil-service/values.yaml index 54a997ceadd..fc9b9e0d99f 100644 --- a/charts/civil-service/values.yaml +++ b/charts/civil-service/values.yaml @@ -74,6 +74,7 @@ java: ASYNC_HANDLER_CORE_POOL_SIZE: 7 ASYNC_HANDLER_MAX_POOL_SIZE: 42 ASYNC_HANDLER_QUEUE_CAPACITY: 10 + CIVIL_S2S_AUTHORISED_SERVICES: payment_app,ccd_data,civil_service,civil-citizen-ui keyVaults: civil: diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/civil/controllers/BaseIntegrationTest.java b/src/integrationTest/java/uk/gov/hmcts/reform/civil/controllers/BaseIntegrationTest.java index 139b311e778..a844c3a91fc 100644 --- a/src/integrationTest/java/uk/gov/hmcts/reform/civil/controllers/BaseIntegrationTest.java +++ b/src/integrationTest/java/uk/gov/hmcts/reform/civil/controllers/BaseIntegrationTest.java @@ -22,8 +22,10 @@ import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import uk.gov.hmcts.reform.authorisation.ServiceAuthorisationApi; import uk.gov.hmcts.reform.civil.Application; import uk.gov.hmcts.reform.civil.TestIdamConfiguration; +import uk.gov.hmcts.reform.civil.service.AuthorisationService; import uk.gov.hmcts.reform.civil.service.UserService; import uk.gov.hmcts.reform.idam.client.models.UserInfo; @@ -61,6 +63,9 @@ public abstract class BaseIntegrationTest { .roles(of("caseworker-civil-solicitor")) .build(); + private static final String s2sToken = "s2s AuthToken"; + @MockBean + private ServiceAuthorisationApi serviceAuthorisationApi; @MockBean protected UserService userService; @MockBean @@ -69,6 +74,8 @@ public abstract class BaseIntegrationTest { protected SecurityContext securityContext; @MockBean protected JwtDecoder jwtDecoder; + @MockBean + public AuthorisationService authorisationService; @Autowired protected ObjectMapper objectMapper; @@ -78,11 +85,13 @@ public abstract class BaseIntegrationTest { @BeforeEach public void setUpBase() { + when(authorisationService.isServiceAuthorized(any())).thenReturn(true); when(userService.getAccessToken(any(), any())).thenReturn("arbitrary access token"); when(userService.getUserInfo(anyString())).thenReturn(USER_INFO); when(securityContext.getAuthentication()).thenReturn(authentication); SecurityContextHolder.setContext(securityContext); setSecurityAuthorities(authentication); + when(serviceAuthorisationApi.getServiceName(any())).thenReturn("payment_app"); when(jwtDecoder.decode(anyString())).thenReturn(getJwt()); } diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateCallbackControllerTest.java b/src/integrationTest/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateCallbackControllerTest.java index 32dc02b549e..6db03a393c0 100644 --- a/src/integrationTest/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateCallbackControllerTest.java +++ b/src/integrationTest/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateCallbackControllerTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; @@ -22,6 +23,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; class ServiceRequestUpdateCallbackControllerTest extends BaseIntegrationTest { @@ -31,6 +33,7 @@ class ServiceRequestUpdateCallbackControllerTest extends BaseIntegrationTest { private static final String PAID = "Paid"; private static final String REFERENCE = "reference"; private static final String ACCOUNT_NUMBER = "123445555"; + private static final String s2sToken = "s2s AuthToken"; @MockBean CoreCaseDataApi coreCaseDataApi; @@ -40,6 +43,7 @@ class ServiceRequestUpdateCallbackControllerTest extends BaseIntegrationTest { @BeforeEach void bareMinimumToMakeAPositiveRequest() { + when(authorisationService.isServiceAuthorized(any())).thenReturn(true); CaseData caseData = CaseData.builder().businessProcess(BusinessProcess.builder().processInstanceId("instance").camundaEvent("camunda event").build()).build(); CaseDetails caseDetails = CaseDetails.builder().build(); caseDetails.setData(caseData.toMap(objectMapper)); @@ -51,6 +55,30 @@ void bareMinimumToMakeAPositiveRequest() { given(coreCaseDataApi.submitEventForCaseWorker(any(), any(), any(), any(), any(), any(), anyBoolean(), any())).willReturn(caseDetails); } + @Test + public void whenValidPaymentCallbackIsReceivedReturnSuccess() throws Exception { + doPut(buildServiceDto(), PAYMENT_CALLBACK_URL, "") + .andExpect(status().isOk()); + } + + @Test + public void whenPaymentCallbackIsReceivedWithoutServiceAuthorisationReturn400() throws Exception { + mockMvc.perform( + MockMvcRequestBuilders.put(PAYMENT_CALLBACK_URL, "") + .contentType(MediaType.APPLICATION_JSON) + .content(toJson(buildServiceDto()))).andExpect(status().is4xxClientError()); + } + + @Test + public void whenPaymentCallbackIsReceivedWithServiceAuthorisationButreturnsfalseReturn400() throws Exception { + when(authorisationService.isServiceAuthorized(any())).thenReturn(false); + mockMvc.perform( + MockMvcRequestBuilders.put(PAYMENT_CALLBACK_URL, "") + .header("ServiceAuthorization", s2sToken) + .contentType(MediaType.APPLICATION_JSON) + .content(toJson(buildServiceDto()))).andExpect(status().is5xxServerError()); + } + @Test public void whenInvalidTypeOfRequestMade_ReturnMethodNotAllowed() throws Exception { @@ -96,6 +124,8 @@ private ServiceRequestUpdateDto buildServiceDto() { protected ResultActions doPut(T content, String urlTemplate, Object... uriVars) { return mockMvc.perform( MockMvcRequestBuilders.put(urlTemplate, uriVars) + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .header("ServiceAuthorization", "s2s AuthToken") .contentType(MediaType.APPLICATION_JSON) .content(toJson(content))); } @@ -104,6 +134,8 @@ protected ResultActions doPut(T content, String urlTemplate, Object... uriVa protected ResultActions doPost(T content, String urlTemplate, Object... uriVars) { return mockMvc.perform( MockMvcRequestBuilders.post(urlTemplate, uriVars) + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .header("ServiceAuthorization", "s2s AuthToken") .contentType(MediaType.APPLICATION_JSON) .content(toJson(content))); } diff --git a/src/integrationTest/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateClaimIssuedCallbackControllerTest.java b/src/integrationTest/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateClaimIssuedCallbackControllerTest.java index 673f90234a5..b64ef4426bb 100644 --- a/src/integrationTest/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateClaimIssuedCallbackControllerTest.java +++ b/src/integrationTest/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateClaimIssuedCallbackControllerTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; @@ -22,6 +23,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; class ServiceRequestUpdateClaimIssuedCallbackControllerTest extends BaseIntegrationTest { @@ -31,7 +33,6 @@ class ServiceRequestUpdateClaimIssuedCallbackControllerTest extends BaseIntegrat private static final String PAID = "Paid"; private static final String REFERENCE = "reference"; private static final String ACCOUNT_NUMBER = "123445555"; - @MockBean CoreCaseDataApi coreCaseDataApi; @@ -40,6 +41,7 @@ class ServiceRequestUpdateClaimIssuedCallbackControllerTest extends BaseIntegrat @BeforeEach void bareMinimumToMakeAPositiveRequest() { + when(authorisationService.isServiceAuthorized(any())).thenReturn(true); CaseData caseData = CaseData.builder().businessProcess(BusinessProcess.builder().processInstanceId("instance").camundaEvent("camunda event").build()).build(); CaseDetails caseDetails = CaseDetails.builder().build(); @@ -77,6 +79,30 @@ public void whenServiceRequestUpdateRequestButUnexpectedErrorOccurs_thenHttp5xx( .andExpect(status().is5xxServerError()); } + @Test + public void whenValidPaymentCallbackIsReceivedReturnSuccess() throws Exception { + doPut(buildServiceDto(), PAYMENT_CALLBACK_URL, "") + .andExpect(status().isOk()); + } + + @Test + public void whenPaymentCallbackIsReceivedWithoutServiceAuthorisationReturn400() throws Exception { + mockMvc.perform( + MockMvcRequestBuilders.put(PAYMENT_CALLBACK_URL, "") + .contentType(MediaType.APPLICATION_JSON) + .content(toJson(buildServiceDto()))).andExpect(status().is4xxClientError()); + } + + @Test + public void whenPaymentCallbackIsReceivedWithServiceAuthorisationButreturnsfalseReturn400() throws Exception { + when(authorisationService.isServiceAuthorized(any())).thenReturn(false); + + doPut(buildServiceDto(), PAYMENT_CALLBACK_URL, "") + // Then: the result status must be an HTTP-4xx + .andExpect(status().is5xxServerError()); + + } + private ServiceRequestUpdateDto buildServiceDto() { return ServiceRequestUpdateDto.builder() .ccdCaseNumber(CCD_CASE_NUMBER) @@ -94,6 +120,8 @@ private ServiceRequestUpdateDto buildServiceDto() { protected ResultActions doPut(T content, String urlTemplate, Object... uriVars) { return mockMvc.perform( MockMvcRequestBuilders.put(urlTemplate, uriVars) + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .header("ServiceAuthorization", "s2s AuthToken") .contentType(MediaType.APPLICATION_JSON) .content(toJson(content))); } @@ -102,6 +130,8 @@ protected ResultActions doPut(T content, String urlTemplate, Object... uriVa protected ResultActions doPost(T content, String urlTemplate, Object... uriVars) { return mockMvc.perform( MockMvcRequestBuilders.post(urlTemplate, uriVars) + .header(HttpHeaders.AUTHORIZATION, BEARER_TOKEN) + .header("ServiceAuthorization", "s2s AuthToken") .contentType(MediaType.APPLICATION_JSON) .content(toJson(content))); } diff --git a/src/main/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateCallbackController.java b/src/main/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateCallbackController.java index 02faefda690..9c6bae36e15 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateCallbackController.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateCallbackController.java @@ -7,10 +7,12 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RestController; import uk.gov.hmcts.reform.civil.enums.FeeType; import uk.gov.hmcts.reform.civil.exceptions.InternalServerErrorException; import uk.gov.hmcts.reform.civil.model.ServiceRequestUpdateDto; +import uk.gov.hmcts.reform.civil.service.AuthorisationService; import uk.gov.hmcts.reform.civil.service.PaymentRequestUpdateCallbackService; import static javax.ws.rs.core.MediaType.APPLICATION_JSON; @@ -22,6 +24,8 @@ public class ServiceRequestUpdateCallbackController { private final PaymentRequestUpdateCallbackService requestUpdateCallbackService; + private final AuthorisationService authorisationService; + @PutMapping(path = "/service-request-update", consumes = APPLICATION_JSON, produces = APPLICATION_JSON) @Operation(summary = "Ways to pay will call this API and send the status of payment with other details") @ApiResponses(value = { @@ -29,9 +33,15 @@ public class ServiceRequestUpdateCallbackController { @ApiResponse(responseCode = "400", description = "Bad Request"), @ApiResponse(responseCode = "500", description = "Internal Server Error") }) - public void serviceRequestUpdate(@RequestBody ServiceRequestUpdateDto serviceRequestUpdateDto) { + public void serviceRequestUpdate( + @RequestHeader("ServiceAuthorization") String s2sToken, + @RequestBody ServiceRequestUpdateDto serviceRequestUpdateDto) { try { - requestUpdateCallbackService.processCallback(serviceRequestUpdateDto, FeeType.HEARING.name()); + if (authorisationService.isServiceAuthorized(s2sToken)) { + requestUpdateCallbackService.processCallback(serviceRequestUpdateDto, FeeType.HEARING.name()); + } else { + throw (new RuntimeException("Invalid Client")); + } } catch (Exception ex) { log.error( "Payment callback is unsuccessful for the CaseID: {}", diff --git a/src/main/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateClaimIssuedCallbackController.java b/src/main/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateClaimIssuedCallbackController.java index 9627d311f54..8230424a778 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateClaimIssuedCallbackController.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/controllers/fees/ServiceRequestUpdateClaimIssuedCallbackController.java @@ -7,10 +7,12 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RestController; import uk.gov.hmcts.reform.civil.enums.FeeType; import uk.gov.hmcts.reform.civil.exceptions.InternalServerErrorException; import uk.gov.hmcts.reform.civil.model.ServiceRequestUpdateDto; +import uk.gov.hmcts.reform.civil.service.AuthorisationService; import uk.gov.hmcts.reform.civil.service.PaymentRequestUpdateCallbackService; import static javax.ws.rs.core.MediaType.APPLICATION_JSON; @@ -22,14 +24,21 @@ public class ServiceRequestUpdateClaimIssuedCallbackController { private final PaymentRequestUpdateCallbackService requestUpdateCallbackService; + private final AuthorisationService authorisationService; + @PutMapping(path = "/service-request-update-claim-issued", consumes = APPLICATION_JSON, produces = APPLICATION_JSON) @Operation(summary = "Ways to pay will call this API and send the status of payment with other details") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "Callback processed."), @ApiResponse(responseCode = "400", description = "Bad Request")}) - public void serviceRequestUpdate(@RequestBody ServiceRequestUpdateDto serviceRequestUpdateDto) { + public void serviceRequestUpdate(@RequestHeader("ServiceAuthorization") String s2sToken, + @RequestBody ServiceRequestUpdateDto serviceRequestUpdateDto) { try { - requestUpdateCallbackService.processCallback(serviceRequestUpdateDto, FeeType.CLAIMISSUED.name()); + if (authorisationService.isServiceAuthorized(s2sToken)) { + requestUpdateCallbackService.processCallback(serviceRequestUpdateDto, FeeType.CLAIMISSUED.name()); + } else { + throw (new RuntimeException("Invalid Client")); + } } catch (Exception ex) { log.error( "Payment callback is unsuccessful for the CaseID: {}", diff --git a/src/main/java/uk/gov/hmcts/reform/civil/service/AuthorisationService.java b/src/main/java/uk/gov/hmcts/reform/civil/service/AuthorisationService.java new file mode 100644 index 00000000000..b50f8c1f597 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/civil/service/AuthorisationService.java @@ -0,0 +1,65 @@ +package uk.gov.hmcts.reform.civil.service; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.authorisation.ServiceAuthorisationApi; +import uk.gov.hmcts.reform.idam.client.IdamClient; +import uk.gov.hmcts.reform.idam.client.models.UserInfo; + +import java.util.List; + +@Service +@Slf4j +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class AuthorisationService { + + private final ServiceAuthorisationApi serviceAuthorisationApi; + + @Value("${civil.authorised-services}") + private List s2sAuthorisedServices; + + private final IdamClient idamClient; + + private UserInfo userInfo; + + public Boolean authoriseService(String serviceAuthHeader) { + String callingService; + try { + String bearerJwt = serviceAuthHeader.startsWith("Bearer ") ? serviceAuthHeader : "Bearer " + serviceAuthHeader; + callingService = serviceAuthorisationApi.getServiceName(bearerJwt); + log.info("Calling Service... {}", callingService); + return (callingService != null && s2sAuthorisedServices.contains(callingService)); + } catch (Exception ex) { + //do nothing + log.error("S2S token is not authorised" + ex); + } + return false; + } + + public Boolean authoriseUser(String authorisation) { + try { + userInfo = idamClient.getUserInfo(authorisation); + return (null != userInfo); + } catch (Exception ex) { + //do nothing + log.error("User token is invalid"); + } + return false; + } + + public UserInfo getUserInfo() { + return this.userInfo; + } + + public boolean isServiceAndUserAuthorized(String authorisation, String s2sToken) { + return Boolean.TRUE.equals(authoriseUser(authorisation)) + && Boolean.TRUE.equals(authoriseService(s2sToken)); + } + + public boolean isServiceAuthorized(String s2sToken) { + return Boolean.TRUE.equals(authoriseService(s2sToken)); + } +} diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index 29ac16b639e..15754b2d272 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -129,6 +129,7 @@ idam: s2s-auth: microservice: civil_service + document_management: userRoles: "caseworker-civil,caseworker-civil-solicitor" secured: ${DOCUMENT_MANAGEMENT_SECURED:true} @@ -158,6 +159,7 @@ civil: test-user: username: ${TEST_USERNAME:test@example.com} password: ${TEST_PASSWORD:Password12!} + authorised-services: ${CIVIL_S2S_AUTHORISED_SERVICES:payment_app,ccd_data,civil_service,civil-citizen-ui} core_case_data: api: diff --git a/src/test/java/uk/gov/hmcts/reform/civil/service/AuthorisationServiceTest.java b/src/test/java/uk/gov/hmcts/reform/civil/service/AuthorisationServiceTest.java new file mode 100644 index 00000000000..1a7680539bf --- /dev/null +++ b/src/test/java/uk/gov/hmcts/reform/civil/service/AuthorisationServiceTest.java @@ -0,0 +1,99 @@ +package uk.gov.hmcts.reform.civil.service; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.util.ReflectionTestUtils; +import uk.gov.hmcts.reform.authorisation.ServiceAuthorisationApi; +import uk.gov.hmcts.reform.idam.client.IdamClient; +import uk.gov.hmcts.reform.idam.client.models.UserInfo; + +import java.util.Arrays; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +public class AuthorisationServiceTest { + + @InjectMocks + AuthorisationService authorisationService; + + @Mock + ServiceAuthorisationApi serviceAuthorisationApi; + + @Mock + IdamClient idamClient; + + @BeforeEach + public void setup() { + ReflectionTestUtils.setField(authorisationService, "s2sAuthorisedServices", Arrays.asList("payment_app")); + } + + @Test + public void authoriseWhenTheServiceIsCalledFromPayment() { + + when(serviceAuthorisationApi.getServiceName(any())).thenReturn("payment_app"); + assertTrue(authorisationService.authoriseService("Bearer abcasda")); + + } + + @Test + public void authoriseWhenTheServiceAuthHeaderIsNull() { + assertFalse(authorisationService.authoriseService(null)); + } + + @Test + public void doNotAuthoriseWhenTheServiceIsCalledFromUnknownApi() { + when(serviceAuthorisationApi.getServiceName(any())).thenReturn("unknown_api"); + assertFalse(authorisationService.authoriseService("Bearer abc")); + + } + + @Test + public void throwUnAuthorisedExceptionWhenS2sTokenIsMalformed() { + assertFalse(authorisationService.authoriseService("Bearer malformed")); + } + + @Test + public void authoriseUserTheServiceIsCalledWithValidToken() { + when(idamClient.getUserInfo(any())).thenReturn(UserInfo.builder().uid(UUID.randomUUID().toString()).build()); + assertTrue(authorisationService.authoriseUser("Bearer abcasda")); + } + + @Test + public void authoriseUserTheServiceIsCalledWithNullToken() { + assertFalse(authorisationService.authoriseUser(null)); + } + + @Test + public void doNotAuthoriseUserWhenCalledWithInvalidToken() { + assertFalse(authorisationService.authoriseUser("Bearer malformed")); + } + + @Test + public void checkIsAuthorizedForUserAndServiceReturnTrue() { + when(idamClient.getUserInfo(any())).thenReturn(UserInfo.builder().uid(UUID.randomUUID().toString()).build()); + when(serviceAuthorisationApi.getServiceName(any())).thenReturn("payment_app"); + assertTrue(authorisationService.isServiceAndUserAuthorized("Bearer abcasda", "s2s token")); + } + + @Test + public void checkIsAuthorizedForUserAndServiceReturnFalse() { + when(idamClient.getUserInfo(any())).thenReturn(UserInfo.builder().uid(UUID.randomUUID().toString()).build()); + when(serviceAuthorisationApi.getServiceName(any())).thenReturn("unknown_api"); + assertFalse(authorisationService.isServiceAndUserAuthorized("Bearer abcasda", "s2s token")); + } + + @Test + public void checkIsAuthorizedForServiceReturnFalse() { + when(serviceAuthorisationApi.getServiceName(any())).thenReturn("unknown_api"); + assertFalse(authorisationService.isServiceAuthorized("s2s token")); + } +} From b4793002eae804806931906e8ddf1af7bc4b34c3 Mon Sep 17 00:00:00 2001 From: neeta-hmcts <115545612+neeta-hmcts@users.noreply.github.com> Date: Fri, 24 Nov 2023 17:36:33 +0000 Subject: [PATCH 4/5] added new field for LIP Claimant formalise payment decision. (#3418) Co-authored-by: dharmendra kumar Co-authored-by: Raja Mani Co-authored-by: ElifDenizEsea <61947470+ElifDenizEsea@users.noreply.github.com> Co-authored-by: jarekPierchala <118526007+jarekPierchala@users.noreply.github.com> --- .../reform/civil/model/citizenui/ChooseHowToProceed.java | 6 ++++++ .../reform/civil/model/citizenui/ClaimantLiPResponse.java | 1 + 2 files changed, 7 insertions(+) create mode 100644 src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/ChooseHowToProceed.java diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/ChooseHowToProceed.java b/src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/ChooseHowToProceed.java new file mode 100644 index 00000000000..c163aec3d5e --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/ChooseHowToProceed.java @@ -0,0 +1,6 @@ +package uk.gov.hmcts.reform.civil.model.citizenui; + +public enum ChooseHowToProceed { + SIGN_A_SETTLEMENT_AGREEMENT, + REQUEST_A_CCJ, +} diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/ClaimantLiPResponse.java b/src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/ClaimantLiPResponse.java index 782131ceb90..63d103d80b8 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/ClaimantLiPResponse.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/ClaimantLiPResponse.java @@ -16,6 +16,7 @@ public class ClaimantLiPResponse { private DQExtraDetailsLip applicant1DQExtraDetails; private HearingSupportLip applicant1DQHearingSupportLip; private YesOrNo applicant1SignedSettlementAgreement; + private ChooseHowToProceed applicant1ChoosesHowToProceed; @JsonIgnore public boolean hasApplicant1SignedSettlementAgreement() { From df5307fbe96ba011f02a75494806c6d930857bd4 Mon Sep 17 00:00:00 2001 From: ElifDenizEsea <61947470+ElifDenizEsea@users.noreply.github.com> Date: Mon, 27 Nov 2023 10:02:40 +0000 Subject: [PATCH 5/5] CIV-11647 Claimant list matcher (#3617) * CIV-11647 Claimant list matcher * CIV-11647 Claimant list matcher * CIV-11647 Old matcher copied to new one * CIV-11647 Old matcher copied to new one * CIV-11647 Old matcher copied to new one --------- Co-authored-by: jarekPierchala <118526007+jarekPierchala@users.noreply.github.com> --- build.gradle | 2 +- ... => CcdDashboardClaimantClaimMatcher.java} | 2 +- .../CcdDashboardDefendantClaimMatcher.java | 297 ++++++++++++++++++ .../citizenui/DashboardClaimInfoService.java | 36 ++- .../CcdClaimStatusDashboardFactoryTest.java | 54 ++-- 5 files changed, 353 insertions(+), 38 deletions(-) rename src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/{CcdDashboardClaimMatcher.java => CcdDashboardClaimantClaimMatcher.java} (99%) create mode 100644 src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/CcdDashboardDefendantClaimMatcher.java diff --git a/build.gradle b/build.gradle index 2d2f22d5414..ca6ca6fb433 100644 --- a/build.gradle +++ b/build.gradle @@ -315,7 +315,7 @@ sonarqube { property "sonar.projectKey", "civil-service" property "sonar.coverage.jacoco.xmlReportPaths", "${jacocoTestReport.reports.xml.destination.path}" property "sonar.coverage.exclusions", "**/model/**, **/config/**/*Configuration.java, **/testingsupport/**, **/*ExternalTaskListener.java, **/*BaseExternalTaskHandler.java, **/stereotypes/**, **/*Exception.java, **/EventHistoryMapper*.java, **/model/hearingvalues/**, **/enums/hearing/**, **/fees/client/**, **/enums/sdo/**, **/service/PaymentsService.java, **/RetriggerCases*.java" - property "sonar.cpd.exclusions", "**/*DocumentManagementService.java, **/*Spec*.java" + property "sonar.cpd.exclusions", "**/*DocumentManagementService.java, **/*Spec*.java, **/*CcdDashboardClaimantClaimMatcher.java" property "sonar.exclusions", "**/hmc/model/**, **/model/hearingvalues/**" property "sonar.host.url", "https://sonar.reform.hmcts.net/" } diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/CcdDashboardClaimMatcher.java b/src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/CcdDashboardClaimantClaimMatcher.java similarity index 99% rename from src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/CcdDashboardClaimMatcher.java rename to src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/CcdDashboardClaimantClaimMatcher.java index fe45e29d735..0b6bb762b99 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/CcdDashboardClaimMatcher.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/CcdDashboardClaimantClaimMatcher.java @@ -18,7 +18,7 @@ @Slf4j @AllArgsConstructor -public class CcdDashboardClaimMatcher implements Claim { +public class CcdDashboardClaimantClaimMatcher implements Claim { private static final LocalTime FOUR_PM = LocalTime.of(16, 1, 0); private CaseData caseData; diff --git a/src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/CcdDashboardDefendantClaimMatcher.java b/src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/CcdDashboardDefendantClaimMatcher.java new file mode 100644 index 00000000000..03a1ebab9d1 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/civil/model/citizenui/CcdDashboardDefendantClaimMatcher.java @@ -0,0 +1,297 @@ +package uk.gov.hmcts.reform.civil.model.citizenui; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import uk.gov.hmcts.reform.civil.enums.CaseState; +import uk.gov.hmcts.reform.civil.enums.RespondentResponsePartAdmissionPaymentTimeLRspec; +import uk.gov.hmcts.reform.civil.enums.RespondentResponseTypeSpec; +import uk.gov.hmcts.reform.civil.enums.YesOrNo; +import uk.gov.hmcts.reform.civil.model.CaseData; +import uk.gov.hmcts.reform.civil.model.sdo.FastTrackHearingTime; +import uk.gov.hmcts.reform.civil.model.sdo.SmallClaimsHearing; +import uk.gov.hmcts.reform.civil.service.FeatureToggleService; + +import java.time.LocalDate; +import java.time.LocalTime; +import java.util.Objects; +import java.util.Optional; + +@Slf4j +@AllArgsConstructor +public class CcdDashboardDefendantClaimMatcher implements Claim { + + private static final LocalTime FOUR_PM = LocalTime.of(16, 1, 0); + private CaseData caseData; + private FeatureToggleService featureToggleService; + + @Override + public boolean hasResponsePending() { + return caseData.getRespondent1ResponseDate() == null && !isPaperResponse(); + } + + @Override + public boolean hasResponsePendingOverdue() { + return caseData.getRespondent1ResponseDeadline() != null + && caseData.getRespondent1ResponseDeadline().isBefore(LocalDate.now().atTime(FOUR_PM)) + && caseData.hasBreathingSpace(); + } + + @Override + public boolean hasResponseDueToday() { + return caseData.getRespondent1ResponseDeadline() != null + && caseData.getRespondent1ResponseDeadline().toLocalDate().isEqual(LocalDate.now()) + && caseData.getRespondent1ResponseDeadline().isBefore(LocalDate.now().atTime(FOUR_PM)); + } + + @Override + public boolean hasResponseFullAdmit() { + return caseData.getRespondent1ClaimResponseTypeForSpec() != null + && caseData.getRespondent1ClaimResponseTypeForSpec() == RespondentResponseTypeSpec.FULL_ADMISSION; + } + + @Override + public boolean defendantRespondedWithFullAdmitAndPayImmediately() { + return hasResponseFullAdmit() + && isPayImmediately(); + } + + @Override + public boolean defendantRespondedWithFullAdmitAndPayBySetDate() { + return hasResponseFullAdmit() + && caseData.isPayBySetDate() + && (Objects.isNull(caseData.getApplicant1AcceptFullAdmitPaymentPlanSpec())); + } + + @Override + public boolean defendantRespondedWithFullAdmitAndPayByInstallments() { + return hasResponseFullAdmit() + && caseData.isPayByInstallment() + && (Objects.isNull(caseData.getApplicant1AcceptFullAdmitPaymentPlanSpec())); + } + + @Override + public boolean hasResponseDeadlineBeenExtended() { + return caseData.getRespondent1TimeExtensionDate() != null; + } + + @Override + public boolean isEligibleForCCJ() { + return caseData.getRespondent1ResponseDeadline() != null + && caseData.getRespondent1ResponseDeadline().isBefore(LocalDate.now().atTime(FOUR_PM)) + && caseData.getPaymentTypeSelection() == null; + } + + @Override + public boolean claimantConfirmedDefendantPaid() { + return caseData.getRespondent1CourtOrderPayment() != null && caseData.respondent1PaidInFull(); + } + + @Override + public boolean isSettled() { + return !caseData.isRespondentResponseFullDefence() + && (caseData.respondent1PaidInFull() + || caseData.isResponseAcceptedByClaimant()) + && Objects.isNull(caseData.getCcjPaymentDetails()) + && !caseData.hasApplicantRejectedRepaymentPlan() + || caseData.isPartAdmitClaimSettled(); + } + + @Override + public boolean isSentToCourt() { + return false; + } + + @Override + public boolean claimantRequestedCountyCourtJudgement() { + return caseData.getApplicant1DQ() != null && caseData.getApplicant1DQ().getApplicant1DQRequestedCourt() != null + && !hasSdoBeenDrawn(); + } + + @Override + public boolean isWaitingForClaimantToRespond() { + return RespondentResponseTypeSpec.FULL_DEFENCE == caseData.getRespondent1ClaimResponseTypeForSpec() + && caseData.getApplicant1ResponseDate() == null; + } + + @Override + public boolean isProceedOffline() { + return false; + } + + @Override + public boolean isPaperResponse() { + if (!featureToggleService.isLipVLipEnabled()) { + return false; + } + + return Objects.nonNull(caseData.getTakenOfflineDate()) && Objects.nonNull(caseData.getCcdState()) + && caseData.getCcdState().equals(CaseState.PROCEEDS_IN_HERITAGE_SYSTEM); + } + + @Override + public boolean hasChangeRequestFromDefendant() { + return false; + } + + @Override + public boolean hasChangeRequestedFromClaimant() { + return false; + } + + @Override + public boolean isPassedToCountyCourtBusinessCentre() { + return false; + } + + @Override + public boolean hasClaimantAskedToSignSettlementAgreement() { + return false; + } + + @Override + public boolean hasClaimantAcceptedPartialAdmissionAmount() { + return hasDefendantStatedTheyPaid() && caseData.isResponseAcceptedByClaimant(); + } + + @Override + public boolean haveBothPartiesSignedSettlementAgreement() { + return false; + } + + @Override + public boolean hasCCJByRedetermination() { + return caseData.hasApplicantAcceptedRepaymentPlan(); + } + + @Override + public boolean hasDefendantStatedTheyPaid() { + return defendantRespondedWithPartAdmit() + && isPayImmediately() && !caseData.getApplicant1ResponseDeadlinePassed() + && !(caseData.hasApplicantRejectedRepaymentPlan() || caseData.isPartAdmitClaimNotSettled()); + } + + private boolean isPayImmediately() { + return RespondentResponsePartAdmissionPaymentTimeLRspec.IMMEDIATELY == caseData.getDefenceAdmitPartPaymentTimeRouteRequired(); + } + + @Override + public boolean defendantRespondedWithPartAdmit() { + return RespondentResponseTypeSpec.PART_ADMISSION == caseData.getRespondent1ClaimResponseTypeForSpec() + && !caseData.getApplicant1ResponseDeadlinePassed() + && !(caseData.hasApplicantRejectedRepaymentPlan() || caseData.isPartAdmitClaimNotSettled()); + } + + @Override + public boolean isHearingFormGenerated() { + return !caseData.getHearingDocuments().isEmpty(); + } + + @Override + public boolean hasSdoBeenDrawn() { + return caseData.getSDODocument().isPresent(); + } + + @Override + public boolean isBeforeHearing() { + return isBeforeSmallClaimHearing() || (isBeforeFastTrackHearing() || noHearingScheduled()); + } + + private boolean noHearingScheduled() { + return caseData.getSmallClaimsHearing() == null && caseData.getFastTrackHearingTime() == null; + } + + private boolean isBeforeSmallClaimHearing() { + return Optional.ofNullable(caseData.getSmallClaimsHearing()) + .map(SmallClaimsHearing::getDateFrom) + .map(hearingFromDate -> hearingFromDate.isAfter(LocalDate.now())) + .orElse(false); + } + + private boolean isBeforeFastTrackHearing() { + return Optional.ofNullable(caseData.getFastTrackHearingTime()) + .map(FastTrackHearingTime::getDateFrom) + .map(hearingFromDate -> hearingFromDate.isAfter(LocalDate.now())) + .orElse(false); + } + + @Override + public boolean isMoreDetailsRequired() { + return hasSdoBeenDrawn() && isBeforeHearing() && featureToggleService.isCaseProgressionEnabled(); + } + + @Override + public boolean isMediationSuccessful() { + return !hasSdoBeenDrawn() + && Objects.nonNull(caseData.getMediation()) + && Objects.nonNull(caseData.getMediation().getMediationSuccessful()) + && Objects.nonNull(caseData.getMediation().getMediationSuccessful().getMediationAgreement()); + } + + @Override + public boolean isMediationUnsuccessful() { + return !hasSdoBeenDrawn() + && Objects.nonNull(caseData.getMediation()) + && Objects.nonNull(caseData.getMediation().getUnsuccessfulMediationReason()) + && !caseData.getMediation().getUnsuccessfulMediationReason().isEmpty(); + } + + @Override + public boolean isMediationPending() { + return Objects.nonNull(caseData.getCcdState()) + && caseData.getCcdState().equals(CaseState.IN_MEDIATION) + && Objects.nonNull(caseData.getMediation()) + && Objects.nonNull(caseData.getMediation().getMediationSuccessful()) + && Objects.isNull(caseData.getMediation().getMediationSuccessful().getMediationAgreement()); + } + + @Override + public boolean isCourtReviewing() { + return (!hasSdoBeenDrawn() + && caseData.isRespondentResponseFullDefence() + && caseData.getCcdState().equals(CaseState.JUDICIAL_REFERRAL)) + || (caseData.hasApplicantRejectedRepaymentPlan()); + } + + @Override + public boolean hasClaimEnded() { + return (Objects.nonNull(caseData.getApplicant1ProceedsWithClaimSpec()) + && caseData.getApplicant1ProceedsWithClaimSpec().equals(YesOrNo.NO) + && caseData.isRespondentResponseFullDefence()) + || caseData.getApplicant1ResponseDeadlinePassed(); + } + + @Override + public boolean isClaimRejectedAndOfferSettleOutOfCourt() { + return false; + } + + @Override + public boolean claimantAcceptedOfferOutOfCourt() { + return false; + } + + @Override + public boolean hasClaimantRejectOffer() { + return false; + } + + @Override + public boolean isPartialAdmissionRejected() { + return CaseState.JUDICIAL_REFERRAL.equals(caseData.getCcdState()) + && caseData.isPartAdmitClaimSpec(); + } + + @Override + public boolean isSDOOrderCreated() { + return caseData.getHearingDate() == null + && CaseState.CASE_PROGRESSION.equals(caseData.getCcdState()); + } + + @Override + public boolean isClaimantDefaultJudgement() { + return caseData.getRespondent1ResponseDeadline() != null + && caseData.getRespondent1ResponseDeadline().isBefore(LocalDate.now().atTime(FOUR_PM)) + && caseData.getPaymentTypeSelection() != null; + } + +} diff --git a/src/main/java/uk/gov/hmcts/reform/civil/service/citizenui/DashboardClaimInfoService.java b/src/main/java/uk/gov/hmcts/reform/civil/service/citizenui/DashboardClaimInfoService.java index 058ab6c0eb8..80c31e0759f 100644 --- a/src/main/java/uk/gov/hmcts/reform/civil/service/citizenui/DashboardClaimInfoService.java +++ b/src/main/java/uk/gov/hmcts/reform/civil/service/citizenui/DashboardClaimInfoService.java @@ -7,8 +7,10 @@ import uk.gov.hmcts.reform.ccd.client.model.SearchResult; import uk.gov.hmcts.reform.civil.helpers.CaseDetailsConverter; import uk.gov.hmcts.reform.civil.model.CaseData; -import uk.gov.hmcts.reform.civil.model.citizenui.CcdDashboardClaimMatcher; +import uk.gov.hmcts.reform.civil.model.citizenui.CcdDashboardClaimantClaimMatcher; +import uk.gov.hmcts.reform.civil.model.citizenui.CcdDashboardDefendantClaimMatcher; import uk.gov.hmcts.reform.civil.model.citizenui.DashboardClaimInfo; +import uk.gov.hmcts.reform.civil.model.citizenui.DashboardClaimStatus; import uk.gov.hmcts.reform.civil.model.citizenui.DashboardClaimStatusFactory; import uk.gov.hmcts.reform.civil.model.citizenui.DashboardResponse; import uk.gov.hmcts.reform.civil.service.CoreCaseDataService; @@ -54,7 +56,7 @@ public DashboardResponse getDashboardDefendantResponse(String authorisation, Str var ccdData = coreCaseDataService.getCCDClaimsForLipDefendant(authorisation, startIndex); int totalPages = getTotalPagesToBeListed(ccdData.getTotal() + ocmcClaims.size()); List currentPageItems = currentPage <= totalPages - ? getDashboardItemsForCurrentPage(ocmcClaims, currentPage, ccdData) : + ? getDashboardItemsForCurrentPage(ocmcClaims, currentPage, ccdData, false) : Collections.emptyList(); return DashboardResponse.builder().totalPages(totalPages).claims(currentPageItems).build(); } @@ -71,7 +73,7 @@ public DashboardResponse getDashboardClaimantResponse(String authorisation, Stri int totalPages = getTotalPagesToBeListed(getCcdClaimsCount(ccdData) + ocmcClaims.size()); List currentPageItems = currentPage <= totalPages - ? getDashboardItemsForCurrentPage(ocmcClaims, currentPage, ccdData) : + ? getDashboardItemsForCurrentPage(ocmcClaims, currentPage, ccdData, true) : Collections.emptyList(); return DashboardResponse.builder().totalPages(totalPages).claims(currentPageItems).build(); } @@ -84,7 +86,8 @@ private List getClaimsForClaimant(String authorisation, Stri private List getDashboardItemsForCurrentPage(List ocmcClaims, int currentPage, - SearchResult ccdClaims) { + SearchResult ccdClaims, + boolean isClaimant) { int startIndex = (currentPage - 1) * CASES_PER_PAGE; int endIndex = startIndex + CASES_PER_PAGE; @@ -96,7 +99,7 @@ private List getDashboardItemsForCurrentPage(List ccdClaimsCount) { int remainingRecords = CASES_PER_PAGE - ccdData.size(); @@ -114,16 +117,19 @@ private List sortOcmcCases(List ocmcCase .collect(Collectors.toList()); } - private List translateSearchResultToDashboardItems(SearchResult claims) { + private List translateSearchResultToDashboardItems(SearchResult claims, boolean isClaimant) { if (claims == null) { return Collections.emptyList(); } - return claims.getCases().stream().map(caseDetails -> translateCaseDataToDashboardClaimInfo(caseDetails)) + return claims.getCases().stream().map(caseDetails -> translateCaseDataToDashboardClaimInfo( + caseDetails, + isClaimant + )) .collect(Collectors.toList()); } - private DashboardClaimInfo translateCaseDataToDashboardClaimInfo(CaseDetails caseDetails) { + private DashboardClaimInfo translateCaseDataToDashboardClaimInfo(CaseDetails caseDetails, boolean isClaimant) { CaseData caseData = caseDetailsConverter.toCaseData(caseDetails); DashboardClaimInfo item = DashboardClaimInfo.builder().claimId(String.valueOf(caseData.getCcdCaseReference())) .createdDate(submittedDateToCreatedDate(caseData)) @@ -133,7 +139,7 @@ private DashboardClaimInfo translateCaseDataToDashboardClaimInfo(CaseDetails cas .claimAmount(nonNull(caseData.getTotalClaimAmount()) ? caseData.getTotalClaimAmount() : null) .admittedAmount(caseData.getPartAdmitPaidValuePounds()) .responseDeadlineTime(caseData.getRespondent1ResponseDeadline()) - .status(dashboardClaimStatusFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher(caseData, featureToggleService))) + .status(getStatus(isClaimant, caseData)) .build(); if (caseData.getRespondent1ResponseDeadline() != null) { item.setResponseDeadline(caseData.getRespondent1ResponseDeadline().toLocalDate()); @@ -170,4 +176,16 @@ private int getCcdClaimsCount(final SearchResult ccdClaims) { return Optional.ofNullable(ccdClaims).map(SearchResult::getTotal).orElse(0); } + + private DashboardClaimStatus getStatus(boolean isClaimant, CaseData caseData) { + return isClaimant + ? dashboardClaimStatusFactory.getDashboardClaimStatus(new CcdDashboardClaimantClaimMatcher( + caseData, + featureToggleService + )) + : dashboardClaimStatusFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( + caseData, + featureToggleService + )); + } } diff --git a/src/test/java/uk/gov/hmcts/reform/civil/model/citizenui/CcdClaimStatusDashboardFactoryTest.java b/src/test/java/uk/gov/hmcts/reform/civil/model/citizenui/CcdClaimStatusDashboardFactoryTest.java index 50208255a98..3b77acb3d44 100644 --- a/src/test/java/uk/gov/hmcts/reform/civil/model/citizenui/CcdClaimStatusDashboardFactoryTest.java +++ b/src/test/java/uk/gov/hmcts/reform/civil/model/citizenui/CcdClaimStatusDashboardFactoryTest.java @@ -56,7 +56,7 @@ void given_hasResponsePending_whenGetStatus_thenReturnNoResponse() { .respondent1ResponseDeadline(LocalDate.now().plusDays(10).atTime(16, 0, 0)) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.NO_RESPONSE); } @@ -68,7 +68,7 @@ void given_isEligibleForCCJ_whenGetStatus_thenReturnEligibleForCCJStatus() { .respondent1ResponseDeadline(LocalDateTime.of(2022, 2, 2, 16, 0)) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.ELIGIBLE_FOR_CCJ); } @@ -81,7 +81,7 @@ void given_isEligibleForCCJ_whenGetStatus_thenReturnDefaultJudgementStatus() { .paymentTypeSelection(DJPaymentTypeSelection.IMMEDIATELY) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.DEFAULT_JUDGEMENT); } @@ -92,7 +92,7 @@ void given_hasResponseDueToday_whenGetStatus_thenReturnResponseDueNow() { .respondent1ResponseDeadline(LocalDate.now().atTime(10, 0, 0)) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.RESPONSE_DUE_NOW); } @@ -104,7 +104,7 @@ void given_moreTimeRequested_whenGetStatus_thenReturnMoreTimeRequested() { .respondent1TimeExtensionDate(LocalDateTime.now().plusDays(30)) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.MORE_TIME_REQUESTED); } @@ -113,7 +113,7 @@ void given_moreTimeRequested_whenGetStatus_thenReturnMoreTimeRequested() { void given_responseAdmitPayImmediately_whenGetStatus_thenReturnAdmitPayImmediately() { CaseData claim = getClaimWithFullAdmitResponse(RespondentResponsePartAdmissionPaymentTimeLRspec.IMMEDIATELY); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.ADMIT_PAY_IMMEDIATELY); } @@ -122,7 +122,7 @@ void given_responseAdmitPayImmediately_whenGetStatus_thenReturnAdmitPayImmediate void given_responseAdmitPayBySetDate_whenGetStatus_thenReturnAdmitPayBySetDate() { CaseData claim = getClaimWithFullAdmitResponse(RespondentResponsePartAdmissionPaymentTimeLRspec.BY_SET_DATE); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.ADMIT_PAY_BY_SET_DATE); } @@ -131,7 +131,7 @@ void given_responseAdmitPayBySetDate_whenGetStatus_thenReturnAdmitPayBySetDate() void given_responseAdmitPayByInstallments_whenGetStatus_thenReturnAdmitPayByInstallments() { CaseData claim = getClaimWithFullAdmitResponse(RespondentResponsePartAdmissionPaymentTimeLRspec.SUGGESTION_OF_REPAYMENT_PLAN); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.ADMIT_PAY_INSTALLMENTS); } @@ -145,7 +145,7 @@ void given_claimantConfirmedDefendantPaid_whenGetStatus_thenReturnClaimantAccept .respondent1ClaimResponsePaymentAdmissionForSpec(RespondentResponseTypeSpecPaidStatus.PAID_FULL_OR_MORE_THAN_CLAIMED_AMOUNT) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.CLAIMANT_ACCEPTED_STATES_PAID); } @@ -158,7 +158,7 @@ void given_defendantPayedInFull_whenGetStatus_thenReturnSettled() { .respondent1ClaimResponsePaymentAdmissionForSpec(RespondentResponseTypeSpecPaidStatus.PAID_FULL_OR_MORE_THAN_CLAIMED_AMOUNT) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.SETTLED); } @@ -171,7 +171,7 @@ void given_claimantAcceptedDefendantResponse_whenGetStatus_thenReturnSettled() { .applicant1AcceptAdmitAmountPaidSpec(YesOrNo.YES) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.SETTLED); } @@ -184,7 +184,7 @@ void given_claimantRequestedCountyCourtJudgement_whenGetStatus_thenReturnRequest .applicant1DQ(Applicant1DQ.builder().applicant1DQRequestedCourt(RequestedCourt.builder().build()).build()) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.REQUESTED_COUNTRY_COURT_JUDGEMENT); } @@ -198,7 +198,7 @@ void given_claimantAcceptedAdmission_whenGetStatus_thenReturnRelevantStatus() { .defenceAdmitPartPaymentTimeRouteRequired(RespondentResponsePartAdmissionPaymentTimeLRspec.IMMEDIATELY) .applicant1AcceptPartAdmitPaymentPlanSpec(YesOrNo.YES) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.CLAIMANT_ACCEPTED_ADMISSION_OF_AMOUNT); } @@ -210,7 +210,7 @@ void given_defendantRespondedWithPartAdmit_whenGetStatus_thenReturnRelevantStatu .respondent1ResponseDate(LocalDateTime.now()) .respondent1ClaimResponseTypeForSpec(RespondentResponseTypeSpec.PART_ADMISSION) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.DEFENDANT_PART_ADMIT); } @@ -223,7 +223,7 @@ void given_hearingNoticeDocumentIssued_whenGetStatus_thenReturnHearingFormGenera .documentName("testDoc") .build()).build())) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.HEARING_FORM_GENERATED); } @@ -244,7 +244,7 @@ void given_hearingDateForSmallClaimIsAfterToday_and_SDOBeenDrawn_whenGetStatus_m .systemGeneratedCaseDocuments(List.of(document)) .build(); given(featureToggleService.isCaseProgressionEnabled()).willReturn(true); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.MORE_DETAILS_REQUIRED); } @@ -265,7 +265,7 @@ void given_hearingDateForFastTrackClaimIsAfterToday_and_SDOBeenDrawn_whenGetStat .systemGeneratedCaseDocuments(List.of(document)) .build(); given(featureToggleService.isCaseProgressionEnabled()).willReturn(true); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.MORE_DETAILS_REQUIRED); } @@ -280,7 +280,7 @@ void given_mediation_whenGetSatus_mediationSuccessful() { .build()) .build()) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.MEDIATION_SUCCESSFUL); } @@ -293,7 +293,7 @@ void given_mediation_whenGetStatus_mediationUnsuccessful() { .unsuccessfulMediationReason("this is a reason") .build()) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.MEDIATION_UNSUCCESSFUL); } @@ -308,7 +308,7 @@ void given_mediation_whenGetStatus_mediationPending() { .build()) .build()) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.IN_MEDIATION); } @@ -321,7 +321,7 @@ void given_court_whenGetStatus_courtReview() { .respondent1ClaimResponseTypeForSpec(RespondentResponseTypeSpec.FULL_DEFENCE) .applicant1ResponseDate(LocalDateTime.now()) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.WAITING_COURT_REVIEW); } @@ -334,7 +334,7 @@ void given_respondentFullDefenceAndApplicantNotProceedsWithClaim_whenGetStatus_c .respondent1ClaimResponseTypeForSpec(RespondentResponseTypeSpec.FULL_DEFENCE) .applicant1ResponseDate(LocalDateTime.now()) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.CLAIM_ENDED); } @@ -347,7 +347,7 @@ void given_applicantRejectPartialAdmit_whenGetStatus_rejectOffer() { .applicant1AcceptPartAdmitPaymentPlanSpec(YesOrNo.NO) .ccdState(CaseState.JUDICIAL_REFERRAL) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.CLAIMANT_REJECT_PARTIAL_ADMISSION); } @@ -376,7 +376,7 @@ void given_SDOBeenDrawn_whenGetStatus_sdoOrderCreatedRequired() { .ccdState(CaseState.CASE_PROGRESSION) .build(); DashboardClaimStatus status = - ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.SDO_ORDER_CREATED); } @@ -388,7 +388,7 @@ void given_claimantNotRespondedWithInDeadLine_whenGetStatus_claimEnded() { .applicant1ResponseDeadline(LocalDateTime.now().minusDays(1)) .build(); DashboardClaimStatus status = - ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.CLAIM_ENDED); } @@ -401,7 +401,7 @@ void given_claimantRejectsDefendantsPaymentPlan() { .applicant1AcceptPartAdmitPaymentPlanSpec(YesOrNo.NO) .ccdState(CaseState.PROCEEDS_IN_HERITAGE_SYSTEM) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.WAITING_COURT_REVIEW); } @@ -418,7 +418,7 @@ void givenClaimStatusInProcessHeritageSystem_WhenGetStatus_thenReturnResponseByP .ccdState(CaseState.PROCEEDS_IN_HERITAGE_SYSTEM) .build(); - DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardClaimMatcher( + DashboardClaimStatus status = ccdClaimStatusDashboardFactory.getDashboardClaimStatus(new CcdDashboardDefendantClaimMatcher( claim, featureToggleService)); assertThat(status).isEqualTo(DashboardClaimStatus.RESPONSE_BY_POST);