diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/AdditionalDocumentType.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/AdditionalDocumentType.java index f267bd93a3..308c1fced9 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/AdditionalDocumentType.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/AdditionalDocumentType.java @@ -4,13 +4,24 @@ import lombok.Getter; import uk.gov.hmcts.ccd.sdk.api.HasLabel; +import java.util.Arrays; + @AllArgsConstructor @Getter public enum AdditionalDocumentType implements HasLabel { WITNESS_STATEMENT("Witness statement"), RENT_STATEMENT("Rent statement"), + + // England specific types TENANCY_AGREEMENT("Tenancy agreement"), + + // Wales specific types + OCCUPATION_LICENCE("Occupation contract or licence"), + ENERGY_PERFORMANCE_CERTIFICATE("Energy performance certificate"), + GAS_SAFETY_CERTIFICATE("Gas safety certificate"), + EICR_REPORT("Electrical Installation Condition Report (EICR)"), + CERTIFICATE_OF_SERVICE("Certificate of service"), CORRESPONDENCE_FROM_DEFENDANT("Correspondence from defendant"), CORRESPONDENCE_FROM_CLAIMANT("Correspondence from claimant"), @@ -24,4 +35,19 @@ public enum AdditionalDocumentType implements HasLabel { private final String label; + public static AdditionalDocumentType getValueFromLabel(String label) { + return Arrays.stream(values()).filter(v -> v.getLabel().equals(label)).findFirst() + .orElseThrow(() -> new IllegalArgumentException("No AdditionalDocumentType with label: " + label)); + } + + public static boolean isEnglandSpecific(AdditionalDocumentType val) { + return val == TENANCY_AGREEMENT; + } + + public static boolean isWalesSpecific(AdditionalDocumentType val) { + return val == OCCUPATION_LICENCE + || val == ENERGY_PERFORMANCE_CERTIFICATE + || val == GAS_SAFETY_CERTIFICATE + || val == EICR_REPORT; + } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/AdditionalDocuments.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/AdditionalDocuments.java new file mode 100644 index 0000000000..bc40baef9b --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/AdditionalDocuments.java @@ -0,0 +1,34 @@ +package uk.gov.hmcts.reform.pcs.ccd.domain; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import uk.gov.hmcts.ccd.sdk.api.CCD; +import uk.gov.hmcts.ccd.sdk.type.Document; +import uk.gov.hmcts.ccd.sdk.type.DynamicList; +import uk.gov.hmcts.ccd.sdk.type.FieldType; +import uk.gov.hmcts.reform.pcs.ccd.accesscontrol.CitizenAccess; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AdditionalDocuments { + + @CCD( + label = "Type of document", + access = {CitizenAccess.class} + ) + private DynamicList documentTypeList; + + @CCD(label = "Document", access = {CitizenAccess.class}) + private Document document; + + @CCD(label = "Short description", + typeOverride = FieldType.TextArea, + access = {CitizenAccess.class} + ) + private String description; +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/DocumentType.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/DocumentType.java index 74cf314e5b..b79dd38e56 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/DocumentType.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/DocumentType.java @@ -9,7 +9,10 @@ public enum DocumentType implements HasLabel { RENT_STATEMENT("Rent statement"), - OCCUPATION_LICENCE("Occupation licence"), + OCCUPATION_LICENCE("Occupation contract or licence"), + ENERGY_PERFORMANCE_CERTIFICATE("Energy performance certificate"), + GAS_SAFETY_CERTIFICATE("Gas safety certificate"), + EICR_REPORT("Electrical Installation Condition Report (EICR)"), TENANCY_LICENCE("Tenancy licence"), NOTICE_SERVED("Notice served"), WITNESS_STATEMENT("Witness statement"), diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/PCSCase.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/PCSCase.java index 6211387250..4188996523 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/PCSCase.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/PCSCase.java @@ -427,12 +427,19 @@ public class PCSCase { ) private VerticalYesNo wantToUploadDocuments; + @Deprecated(since = "05-19-2026", forRemoval = true) @CCD( label = "Add document", hint = "Upload a document to the system" ) private List> additionalDocuments; + @CCD( + label = "Add document", + hint = "Upload a document to the system" + ) + private List> additionalDocs; + @CCD( label = "Are you planning to make an application at the same time as your claim?", hint = "After you’ve submitted your claim, there will be instructions on how to make an application" @@ -547,6 +554,7 @@ public class PCSCase { private ComponentLauncher caseFileView; @CCD(searchable = false) + private String formattedDefendantNames; private String formattedPropertyAddress; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/ResumePossessionClaimConfigurer.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/ResumePossessionClaimConfigurer.java index 929352f1d2..518185a6fc 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/ResumePossessionClaimConfigurer.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/ResumePossessionClaimConfigurer.java @@ -1,6 +1,5 @@ package uk.gov.hmcts.reform.pcs.ccd.event; -import com.github.kagkarlsson.scheduler.SchedulerClient; import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; import uk.gov.hmcts.reform.pcs.ccd.common.PageBuilder; @@ -61,11 +60,6 @@ import uk.gov.hmcts.reform.pcs.ccd.page.resumepossessionclaim.wales.ProhibitedConductWales; import uk.gov.hmcts.reform.pcs.ccd.page.resumepossessionclaim.wales.ReasonsForPossessionWales; import uk.gov.hmcts.reform.pcs.ccd.page.resumepossessionclaim.wales.SecureContractGroundsForPossessionWalesPage; -import uk.gov.hmcts.reform.pcs.ccd.service.DraftCaseDataService; -import uk.gov.hmcts.reform.pcs.ccd.util.AddressFormatter; -import uk.gov.hmcts.reform.pcs.ccd.util.MoneyFormatter; -import uk.gov.hmcts.reform.pcs.feesandpay.service.FeeService; -import uk.gov.hmcts.reform.pcs.reference.service.OrganisationService; @Component @AllArgsConstructor @@ -91,17 +85,13 @@ public class ResumePossessionClaimConfigurer implements PageConfigurer { private final SuspensionOfRightToBuyOrderReason suspensionOfRightToBuyOrderReason; private final StatementOfExpressTerms statementOfExpressTerms; private final DemotionOfTenancyOrderReason demotionOfTenancyOrderReason; - private final OrganisationService organisationService; private final ClaimantInformationPage claimantInformationPage; private final ExemptLandlord exemptLandlord; private final ProhibitedConductWales prohibitedConductWalesPage; - private final SchedulerClient schedulerClient; - private final DraftCaseDataService draftCaseDataService; private final OccupationLicenceDetailsWalesPage occupationLicenceDetailsWalesPage; private final GroundsForPossessionWalesPage groundsForPossessionWales; private final SecureContractGroundsForPossessionWalesPage secureContractGroundsForPossessionWales; private final ReasonsForPossessionWales reasonsForPossessionWales; - private final AddressFormatter addressFormatter; private final RentArrearsGroundsForPossessionPage rentArrearsGroundsForPossessionPage; private final RentArrearsGroundForPossessionAdditionalGrounds rentArrearsGroundForPossessionAdditionalGrounds; private final AssuredNoArrearsGroundsForPossessionPage noRentArrearsGroundsForPossessionOptions; @@ -109,11 +99,10 @@ public class ResumePossessionClaimConfigurer implements PageConfigurer { private final WalesCheckingNotice walesCheckingNotice; private final ASBQuestionsWales asbQuestionsWales; private final UnderlesseeOrMortgageeDetailsPage underlesseeOrMortgageeDetailsPage; - private final FeeService feeService; - private final MoneyFormatter moneyFormatter; private final RentDetailsPage rentDetailsPage; private final RentArrears rentArrears; private final PreActionProtocol preActionProtocol; + private final WantToUploadDocuments wantToUploadDocuments; @Override public void configurePages(PageBuilder pageBuilder) { @@ -169,7 +158,7 @@ public void configurePages(PageBuilder pageBuilder) { .add(new UnderlesseeOrMortgageeEntitledToClaimRelief()) .add(underlesseeOrMortgageeDetailsPage) //TO DO will be routed later on correctly using tech debt ticket - .add(new WantToUploadDocuments()) + .add(wantToUploadDocuments) .add(uploadAdditionalDocumentsDetails) .add(new GeneralApplication()) .add(new LanguageUsed()) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/UploadAdditionalDocumentsDetails.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/UploadAdditionalDocumentsDetails.java index a8de7647ea..4bacf6c6b7 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/UploadAdditionalDocumentsDetails.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/UploadAdditionalDocumentsDetails.java @@ -7,7 +7,7 @@ import uk.gov.hmcts.ccd.sdk.type.ListValue; import uk.gov.hmcts.reform.pcs.ccd.common.CcdPageConfiguration; import uk.gov.hmcts.reform.pcs.ccd.common.PageBuilder; -import uk.gov.hmcts.reform.pcs.ccd.domain.AdditionalDocument; +import uk.gov.hmcts.reform.pcs.ccd.domain.AdditionalDocuments; import uk.gov.hmcts.reform.pcs.ccd.domain.PCSCase; import uk.gov.hmcts.reform.pcs.ccd.domain.State; import uk.gov.hmcts.reform.pcs.ccd.page.CommonPageContent; @@ -46,8 +46,7 @@ public void addTo(PageBuilder pageBuilder) {

Give your document a name that explains what it is.

""" ) - - .mandatory(PCSCase::getAdditionalDocuments) + .mandatory(PCSCase::getAdditionalDocs) .label("uploadAdditionalDocuments-saveAndReturn", CommonPageContent.SAVE_AND_RETURN); } @@ -55,7 +54,7 @@ private AboutToStartOrSubmitResponse midEvent(CaseDetails detailsBefore) { PCSCase caseData = details.getData(); - List errors = validateDocumentDescription(caseData.getAdditionalDocuments(), DESCRIPTION_LABEL); + List errors = validateDocumentDescription(caseData.getAdditionalDocs(), DESCRIPTION_LABEL); return AboutToStartOrSubmitResponse.builder() .errorMessageOverride(StringUtils.joinIfNotEmpty("\n", errors)) @@ -64,7 +63,7 @@ private AboutToStartOrSubmitResponse midEvent(CaseDetails validateDocumentDescription( - List> additionalDocs, + List> additionalDocs, String sectionLabel) { List validationErrors = new ArrayList<>(); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/WantToUploadDocuments.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/WantToUploadDocuments.java index c74532d46e..246f2bf9cc 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/WantToUploadDocuments.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/WantToUploadDocuments.java @@ -1,19 +1,76 @@ package uk.gov.hmcts.reform.pcs.ccd.page.resumepossessionclaim; +import org.springframework.stereotype.Component; +import uk.gov.hmcts.ccd.sdk.api.CaseDetails; +import uk.gov.hmcts.ccd.sdk.api.callback.AboutToStartOrSubmitResponse; +import uk.gov.hmcts.ccd.sdk.type.DynamicList; +import uk.gov.hmcts.ccd.sdk.type.DynamicListElement; +import uk.gov.hmcts.ccd.sdk.type.ListValue; import uk.gov.hmcts.reform.pcs.ccd.common.CcdPageConfiguration; import uk.gov.hmcts.reform.pcs.ccd.common.PageBuilder; +import uk.gov.hmcts.reform.pcs.ccd.domain.AdditionalDocumentType; +import uk.gov.hmcts.reform.pcs.ccd.domain.AdditionalDocuments; import uk.gov.hmcts.reform.pcs.ccd.domain.PCSCase; +import uk.gov.hmcts.reform.pcs.ccd.domain.State; +import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.page.CommonPageContent; +import uk.gov.hmcts.reform.pcs.postcodecourt.model.LegislativeCountry; +import java.util.ArrayList; +import java.util.UUID; + +@Component public class WantToUploadDocuments implements CcdPageConfiguration { @Override public void addTo(PageBuilder pageBuilder) { pageBuilder - .page("wantToUploadDocuments") + .page("wantToUploadDocuments", this::midEvent) .pageLabel("Upload additional documents") .label("wantToUploadDocuments-separator", "---") .mandatory(PCSCase::getWantToUploadDocuments) .label("wantToUploadDocuments-saveAndReturn", CommonPageContent.SAVE_AND_RETURN); } + + private AboutToStartOrSubmitResponse midEvent(CaseDetails details, + CaseDetails detailsBefore) { + PCSCase caseData = details.getData(); + + if (caseData.getWantToUploadDocuments().equals(VerticalYesNo.YES)) { + AdditionalDocuments additionalDocuments = new AdditionalDocuments(); + LegislativeCountry legislativeCountry = caseData.getLegislativeCountry(); + + additionalDocuments.setDocumentTypeList(createAdditionalDocumentList(legislativeCountry)); + caseData.setAdditionalDocs(new ArrayList<>()); + caseData.getAdditionalDocs().add(ListValue.builder() + .value(additionalDocuments) + .build()); + } + + return AboutToStartOrSubmitResponse.builder() + .data(caseData) + .build(); + } + + private DynamicList createAdditionalDocumentList(LegislativeCountry legislativeCountry) { + + DynamicList documentTypeList = new DynamicList(null, new ArrayList<>()); + + for (AdditionalDocumentType dt : AdditionalDocumentType.values()) { + if (canAddDocumentType(dt, legislativeCountry)) { + DynamicListElement element = new DynamicListElement(UUID.randomUUID(), dt.getLabel()); + documentTypeList.getListItems().add(element); + } + } + + return documentTypeList; + } + + private boolean canAddDocumentType(AdditionalDocumentType dt, LegislativeCountry country) { + if (country.equals(LegislativeCountry.ENGLAND)) { + return AdditionalDocumentType.isEnglandSpecific(dt) || !AdditionalDocumentType.isWalesSpecific(dt); + } else { + return AdditionalDocumentType.isWalesSpecific(dt) || !AdditionalDocumentType.isEnglandSpecific(dt); + } + } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/document/DocumentService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/document/DocumentService.java index 0cdf399950..f90b7c6f20 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/document/DocumentService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/document/DocumentService.java @@ -9,8 +9,8 @@ import org.springframework.util.CollectionUtils; import uk.gov.hmcts.ccd.sdk.type.Document; import uk.gov.hmcts.ccd.sdk.type.ListValue; -import uk.gov.hmcts.reform.pcs.ccd.domain.AdditionalDocument; import uk.gov.hmcts.reform.pcs.ccd.domain.AdditionalDocumentType; +import uk.gov.hmcts.reform.pcs.ccd.domain.AdditionalDocuments; import uk.gov.hmcts.reform.pcs.ccd.domain.CaseFileCategory; import uk.gov.hmcts.reform.pcs.ccd.domain.DocumentType; import uk.gov.hmcts.reform.pcs.ccd.domain.NoticeServedDetails; @@ -42,6 +42,8 @@ public class DocumentService { private final DocumentRepository documentRepository; + private static final String CLAIMANT_1 = "Claimant 1"; + public List createAllDocuments(PCSCase pcsCase) { List allDocuments = getPcsCaseDocuments(pcsCase); @@ -59,7 +61,7 @@ public List createAllDocuments(EnforcementOrder enforcementOrder private List getPcsCaseDocuments(PCSCase pcsCase) { List allDocuments = new ArrayList<>(); - allDocuments.addAll(mapAdditionalDocumentsWithType(pcsCase.getAdditionalDocuments())); + allDocuments.addAll(mapAdditionalDocumentsWithType(pcsCase.getAdditionalDocs())); allDocuments.addAll(mapDocumentsWithType( Optional.ofNullable(pcsCase.getRentArrears()) @@ -69,7 +71,7 @@ private List getPcsCaseDocuments(PCSCase pcsCase) { allDocuments.addAll(mapDocumentsWithType( Optional.ofNullable(pcsCase.getTenancyLicenceDetails()) .map(TenancyLicenceDetails::getTenancyLicenceDocuments) - .orElse(null), DocumentType.TENANCY_LICENCE)); + .orElse(null), DocumentType.TENANCY_AGREEMENT)); allDocuments.addAll(mapDocumentsWithType( Optional.ofNullable(pcsCase.getOccupationLicenceDetailsWales()) @@ -79,7 +81,7 @@ private List getPcsCaseDocuments(PCSCase pcsCase) { allDocuments.addAll(mapDocumentsWithType( Optional.ofNullable(pcsCase.getNoticeServedDetails()) .map(NoticeServedDetails::getNoticeDocuments) - .orElse(null), DocumentType.NOTICE_FOR_SERVICE_OUT_OF_JURISDICTION)); + .orElse(null), DocumentType.POSSESSION_NOTICE)); return allDocuments; } @@ -109,7 +111,7 @@ private List mapDocumentsWithType( } private List mapAdditionalDocumentsWithType( - List> documents) { + List> documents) { if (CollectionUtils.isEmpty(documents)) { return Collections.emptyList(); @@ -118,7 +120,8 @@ private List mapAdditionalDocumentsWithType( return ListValueUtils.unwrapListItems(documents).stream() .map(doc -> DocumentHolder.builder() .document(doc.getDocument()) - .type(mapAdditionalDocumentTypeToDocumentType(doc.getDocumentType())) + .type(mapAdditionalDocumentTypeToDocumentType( + AdditionalDocumentType.getValueFromLabel(doc.getDocumentTypeList().getValueLabel()))) .description(doc.getDescription()) .build()) .toList(); @@ -150,7 +153,7 @@ private List createDocumentEntities( return documents.stream() .map(holder -> DocumentEntity.builder() .url(holder.getDocument().getUrl()) - .fileName(holder.getDocument().getFilename()) + .fileName(getFilename(holder.getDocument().getFilename())) .displayFileName(holder.getDocument().getFilename()) .binaryUrl(holder.getDocument().getBinaryUrl()) .categoryId(mapDocumentTypeToCategory(holder.getType()) @@ -162,10 +165,25 @@ private List createDocumentEntities( .toList(); } + private String getFilename(String uploadedFilename) { + String fileExtension = ""; + String fileName = uploadedFilename; + int lastDot = uploadedFilename.lastIndexOf('.'); + if (lastDot >= 0 && lastDot < uploadedFilename.length() - 1) { + fileExtension = uploadedFilename.substring(lastDot + 1); + fileName = uploadedFilename.substring(0, lastDot); + } + return fileName + " - " + CLAIMANT_1 + fileExtension; + } + private DocumentType mapAdditionalDocumentTypeToDocumentType(AdditionalDocumentType additionalType) { return switch (additionalType) { case WITNESS_STATEMENT -> DocumentType.WITNESS_STATEMENT; case RENT_STATEMENT -> DocumentType.RENT_STATEMENT; + case OCCUPATION_LICENCE -> DocumentType.OCCUPATION_LICENCE; + case ENERGY_PERFORMANCE_CERTIFICATE -> DocumentType.ENERGY_PERFORMANCE_CERTIFICATE; + case GAS_SAFETY_CERTIFICATE -> DocumentType.GAS_SAFETY_CERTIFICATE; + case EICR_REPORT -> DocumentType.EICR_REPORT; case TENANCY_AGREEMENT -> DocumentType.TENANCY_AGREEMENT; case CERTIFICATE_OF_SERVICE -> DocumentType.CERTIFICATE_OF_SERVICE; case CORRESPONDENCE_FROM_DEFENDANT -> DocumentType.CORRESPONDENCE_FROM_DEFENDANT; @@ -222,6 +240,9 @@ private Optional mapDocumentTypeToCategory(DocumentType docume TENANCY_AGREEMENT, TENANCY_LICENCE, OCCUPATION_LICENCE, + ENERGY_PERFORMANCE_CERTIFICATE, + GAS_SAFETY_CERTIFICATE, + EICR_REPORT, POSSESSION_NOTICE -> Optional.of(CaseFileCategory.PROPERTY_DOCUMENTS); case WITNESS_STATEMENT, diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/ResumePossessionClaimConfigurerTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/ResumePossessionClaimConfigurerTest.java index 75f04b303d..f8997d7ac9 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/ResumePossessionClaimConfigurerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/ResumePossessionClaimConfigurerTest.java @@ -1,6 +1,5 @@ package uk.gov.hmcts.reform.pcs.ccd.event; -import com.github.kagkarlsson.scheduler.SchedulerClient; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.ArgumentCaptor; @@ -67,11 +66,6 @@ import uk.gov.hmcts.reform.pcs.ccd.page.resumepossessionclaim.wales.ProhibitedConductWales; import uk.gov.hmcts.reform.pcs.ccd.page.resumepossessionclaim.wales.ReasonsForPossessionWales; import uk.gov.hmcts.reform.pcs.ccd.page.resumepossessionclaim.wales.SecureContractGroundsForPossessionWalesPage; -import uk.gov.hmcts.reform.pcs.ccd.service.DraftCaseDataService; -import uk.gov.hmcts.reform.pcs.ccd.util.AddressFormatter; -import uk.gov.hmcts.reform.pcs.ccd.util.MoneyFormatter; -import uk.gov.hmcts.reform.pcs.feesandpay.service.FeeService; -import uk.gov.hmcts.reform.pcs.reference.service.OrganisationService; import java.util.concurrent.atomic.AtomicInteger; @@ -84,7 +78,7 @@ import static uk.gov.hmcts.reform.pcs.ccd.page.enforcetheorder.PageConfigurerHelper.verifyAndCount; @ExtendWith(MockitoExtension.class) -public class ResumePossessionClaimConfigurerTest { +class ResumePossessionClaimConfigurerTest { @InjectMocks private ResumePossessionClaimConfigurer underTest; @@ -130,18 +124,12 @@ public class ResumePossessionClaimConfigurerTest { @Mock private DemotionOfTenancyOrderReason demotionOfTenancyOrderReason; @Mock - private OrganisationService organisationService; - @Mock private ClaimantInformationPage claimantInformationPage; @Mock private ExemptLandlord exemptLandlord; @Mock private ProhibitedConductWales prohibitedConductWalesPage; @Mock - private SchedulerClient schedulerClient; - @Mock - private DraftCaseDataService draftCaseDataService; - @Mock private OccupationLicenceDetailsWalesPage occupationLicenceDetailsWalesPage; @Mock private GroundsForPossessionWalesPage groundsForPossessionWales; @@ -150,8 +138,6 @@ public class ResumePossessionClaimConfigurerTest { @Mock private ReasonsForPossessionWales reasonsForPossessionWales; @Mock - private AddressFormatter addressFormatter; - @Mock private RentArrearsGroundsForPossessionPage rentArrearsGroundsForPossessionPage; @Mock private RentArrearsGroundForPossessionAdditionalGrounds rentArrearsGroundForPossessionAdditionalGrounds; @@ -166,15 +152,13 @@ public class ResumePossessionClaimConfigurerTest { @Mock private UnderlesseeOrMortgageeDetailsPage underlesseeOrMortgageeDetailsPage; @Mock - private FeeService feeService; - @Mock - private MoneyFormatter moneyFormatter; - @Mock private RentDetailsPage rentDetailsPage; @Mock private RentArrears rentArrears; @Mock private PreActionProtocol preActionProtocol; + @Mock + private WantToUploadDocuments wantToUploadDocuments; @Test @SuppressWarnings("squid:S5961") @@ -220,7 +204,7 @@ void shouldConfigurePagesInCorrectOrder() { verifyAndCount(inOrder, pageBuilder, rentArrearsGroundsForPossessionReasons, verificationCount); verifyAndCount(inOrder, pageBuilder, noRentArrearsGroundsForPossessionOptions, verificationCount); verifyAndCount(inOrder, pageBuilder, noRentArrearsGroundsForPossessionReason, verificationCount); - verifyAndCount(inOrder, pageBuilder, PreActionProtocol.class, verificationCount); + verifyAndCount(inOrder, pageBuilder, preActionProtocol, verificationCount); verifyAndCount(inOrder, pageBuilder, mediationAndSettlement, verificationCount); verifyAndCount(inOrder, pageBuilder, checkingNotice, verificationCount); verifyAndCount(inOrder, pageBuilder, walesCheckingNotice, verificationCount); @@ -242,7 +226,7 @@ void shouldConfigurePagesInCorrectOrder() { verifyAndCount(inOrder, pageBuilder, additionalReasonsForPossession, verificationCount); verifyAndCount(inOrder, pageBuilder, UnderlesseeOrMortgageeEntitledToClaimRelief.class, verificationCount); verifyAndCount(inOrder, pageBuilder, underlesseeOrMortgageeDetailsPage, verificationCount); - verifyAndCount(inOrder, pageBuilder, WantToUploadDocuments.class, verificationCount); + verifyAndCount(inOrder, pageBuilder, wantToUploadDocuments, verificationCount); verifyAndCount(inOrder, pageBuilder, uploadAdditionalDocumentsDetails, verificationCount); verifyAndCount(inOrder, pageBuilder, GeneralApplication.class, verificationCount); verifyAndCount(inOrder, pageBuilder, LanguageUsed.class, verificationCount); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/UploadAdditionalDocumentsDetailsTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/UploadAdditionalDocumentsDetailsTest.java index 68fa58ecd1..413d6f600a 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/UploadAdditionalDocumentsDetailsTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/UploadAdditionalDocumentsDetailsTest.java @@ -1,12 +1,12 @@ package uk.gov.hmcts.reform.pcs.ccd.page.resumepossessionclaim; -import org.junit.Test; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; import uk.gov.hmcts.ccd.sdk.api.callback.AboutToStartOrSubmitResponse; import uk.gov.hmcts.ccd.sdk.type.ListValue; -import uk.gov.hmcts.reform.pcs.ccd.domain.AdditionalDocument; +import uk.gov.hmcts.reform.pcs.ccd.domain.AdditionalDocuments; import uk.gov.hmcts.reform.pcs.ccd.domain.PCSCase; import uk.gov.hmcts.reform.pcs.ccd.domain.State; import uk.gov.hmcts.reform.pcs.ccd.page.BasePageTest; @@ -29,13 +29,13 @@ void setUp() { @Test void shouldNotReturnErrorsWhenDescriptionIsCorrectLength() { // Given - AdditionalDocument doc = AdditionalDocument.builder() - .description("Valid description") - .build(); + AdditionalDocuments doc = AdditionalDocuments.builder() + .description("Valid description") + .build(); PCSCase caseData = PCSCase.builder() - .additionalDocuments(List.of(ListValue.builder().value(doc).build())) - .build(); + .additionalDocs(List.of(ListValue.builder().value(doc).build())) + .build(); // When AboutToStartOrSubmitResponse response = callMidEventHandler(caseData); @@ -49,13 +49,13 @@ void shouldNotReturnErrorsWhenDescriptionIsCorrectLength() { void shouldReturnValidationErrorsWhenDescriptionTooLong() { // Given String longDescription = "a".repeat(61); - AdditionalDocument doc = AdditionalDocument.builder() - .description(longDescription) - .build(); + AdditionalDocuments doc = AdditionalDocuments.builder() + .description(longDescription) + .build(); PCSCase caseData = PCSCase.builder() - .additionalDocuments(List.of(ListValue.builder().value(doc).build())) - .build(); + .additionalDocs(List.of(ListValue.builder().value(doc).build())) + .build(); // When AboutToStartOrSubmitResponse response = callMidEventHandler(caseData); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/WantToUploadDocumentsTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/WantToUploadDocumentsTest.java new file mode 100644 index 0000000000..800fe3a988 --- /dev/null +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/resumepossessionclaim/WantToUploadDocumentsTest.java @@ -0,0 +1,154 @@ +package uk.gov.hmcts.reform.pcs.ccd.page.resumepossessionclaim; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.junit.jupiter.MockitoExtension; +import uk.gov.hmcts.ccd.sdk.api.callback.AboutToStartOrSubmitResponse; +import uk.gov.hmcts.ccd.sdk.type.DynamicList; +import uk.gov.hmcts.ccd.sdk.type.DynamicListElement; +import uk.gov.hmcts.reform.pcs.ccd.domain.AdditionalDocumentType; +import uk.gov.hmcts.reform.pcs.ccd.domain.PCSCase; +import uk.gov.hmcts.reform.pcs.ccd.domain.State; +import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; +import uk.gov.hmcts.reform.pcs.ccd.page.BasePageTest; +import uk.gov.hmcts.reform.pcs.postcodecourt.model.LegislativeCountry; + +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.params.provider.Arguments.arguments; + +@ExtendWith(MockitoExtension.class) +class WantToUploadDocumentsTest extends BasePageTest { + + @BeforeEach + void setUp() { + setPageUnderTest(new WantToUploadDocuments()); + } + + @ParameterizedTest(name = "England: {0} should {1}") + @MethodSource("englandDocumentScenarios") + void shouldFilterDocumentsForEngland(AdditionalDocumentType docType, String expectation, boolean shouldInclude) { + // Given + PCSCase caseData = PCSCase.builder() + .legislativeCountry(LegislativeCountry.ENGLAND) + .wantToUploadDocuments(VerticalYesNo.YES) + .build(); + + // When + AboutToStartOrSubmitResponse response = callMidEventHandler(caseData); + + // Then + DynamicList documentTypeList = + response.getData().getAdditionalDocs().getFirst().getValue().getDocumentTypeList(); + List labels = extractLabels(documentTypeList); + + if (shouldInclude) { + assertThat(labels).contains(docType.getLabel()); + } else { + assertThat(labels).doesNotContain(docType.getLabel()); + } + + assertThat(documentTypeList.getListItems()).hasSize(13); + } + + @ParameterizedTest(name = "Wales: {0} should {1}") + @MethodSource("walesDocumentScenarios") + void shouldFilterDocumentsForWales(AdditionalDocumentType docType, String expectation, boolean shouldInclude) { + // Given + PCSCase caseData = PCSCase.builder() + .legislativeCountry(LegislativeCountry.WALES) + .wantToUploadDocuments(VerticalYesNo.YES) + .build(); + + // When + AboutToStartOrSubmitResponse response = callMidEventHandler(caseData); + + // Then + DynamicList documentTypeList = + response.getData().getAdditionalDocs().getFirst().getValue().getDocumentTypeList(); + List labels = extractLabels(documentTypeList); + + if (shouldInclude) { + assertThat(labels).contains(docType.getLabel()); + } else { + assertThat(labels).doesNotContain(docType.getLabel()); + } + + assertThat(documentTypeList.getListItems()).hasSize(16); + } + + @Test + void shouldNotSetAdditionalDocumentsIfUserSelectsNo() { + // Given + PCSCase caseData = PCSCase.builder() + .legislativeCountry(LegislativeCountry.WALES) + .wantToUploadDocuments(VerticalYesNo.NO) + .build(); + + // When + AboutToStartOrSubmitResponse response = callMidEventHandler(caseData); + + // Then + assertThat(response.getData().getAdditionalDocs()).isNull(); + } + + private static Stream englandDocumentScenarios() { + return Stream.of( + // England-specific documents + arguments(AdditionalDocumentType.TENANCY_AGREEMENT, "be included", true), + + // Wales-only documents should be excluded + arguments(AdditionalDocumentType.OCCUPATION_LICENCE, "be excluded", false), + arguments(AdditionalDocumentType.ENERGY_PERFORMANCE_CERTIFICATE, "be excluded", false), + arguments(AdditionalDocumentType.GAS_SAFETY_CERTIFICATE, "be excluded", false), + arguments(AdditionalDocumentType.EICR_REPORT, "be excluded", false), + + // Common documents + arguments(AdditionalDocumentType.WITNESS_STATEMENT, "be included", true), + arguments(AdditionalDocumentType.RENT_STATEMENT, "be included", true), + arguments(AdditionalDocumentType.CERTIFICATE_OF_SERVICE, "be included", true), + arguments(AdditionalDocumentType.CORRESPONDENCE_FROM_DEFENDANT, "be included", true), + arguments(AdditionalDocumentType.CORRESPONDENCE_FROM_CLAIMANT, "be included", true), + arguments(AdditionalDocumentType.POSSESSION_NOTICE, "be included", true), + arguments(AdditionalDocumentType.LEGAL_AID_CERTIFICATE, "be included", true), + arguments(AdditionalDocumentType.OTHER, "be included", true) + ); + } + + private static Stream walesDocumentScenarios() { + return Stream.of( + // Wales-specific documents + arguments(AdditionalDocumentType.OCCUPATION_LICENCE, "be included", true), + arguments(AdditionalDocumentType.ENERGY_PERFORMANCE_CERTIFICATE, "be included", true), + arguments(AdditionalDocumentType.GAS_SAFETY_CERTIFICATE, "be included", true), + arguments(AdditionalDocumentType.EICR_REPORT, "be included", true), + + // England-only documents should be excluded + arguments(AdditionalDocumentType.TENANCY_AGREEMENT, "be excluded", false), + + // Common documents + arguments(AdditionalDocumentType.WITNESS_STATEMENT, "be included", true), + arguments(AdditionalDocumentType.RENT_STATEMENT, "be included", true), + arguments(AdditionalDocumentType.CERTIFICATE_OF_SERVICE, "be included", true), + arguments(AdditionalDocumentType.CORRESPONDENCE_FROM_DEFENDANT, "be included", true), + arguments(AdditionalDocumentType.CORRESPONDENCE_FROM_CLAIMANT, "be included", true), + arguments(AdditionalDocumentType.POSSESSION_NOTICE, "be included", true), + arguments(AdditionalDocumentType.LEGAL_AID_CERTIFICATE, "be included", true), + arguments(AdditionalDocumentType.OTHER, "be included", true) + ); + } + + // Helper method to extract labels from DynamicList + private List extractLabels(DynamicList documentTypeList) { + return documentTypeList.getListItems().stream() + .map(DynamicListElement::getLabel) + .collect(Collectors.toList()); + } +} \ No newline at end of file diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/document/DocumentServiceTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/document/DocumentServiceTest.java index e653f04ca6..ad680047cc 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/document/DocumentServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/document/DocumentServiceTest.java @@ -12,9 +12,11 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import uk.gov.hmcts.ccd.sdk.type.Document; +import uk.gov.hmcts.ccd.sdk.type.DynamicList; +import uk.gov.hmcts.ccd.sdk.type.DynamicListElement; import uk.gov.hmcts.ccd.sdk.type.ListValue; -import uk.gov.hmcts.reform.pcs.ccd.domain.AdditionalDocument; import uk.gov.hmcts.reform.pcs.ccd.domain.AdditionalDocumentType; +import uk.gov.hmcts.reform.pcs.ccd.domain.AdditionalDocuments; import uk.gov.hmcts.reform.pcs.ccd.domain.CaseFileCategory; import uk.gov.hmcts.reform.pcs.ccd.domain.DocumentType; import uk.gov.hmcts.reform.pcs.ccd.domain.NoticeServedDetails; @@ -32,8 +34,8 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.respondpossessionclaim.DefendantResponseEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.DocumentRepository; -import uk.gov.hmcts.reform.pcs.ccd.service.document.DocumentService; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -68,34 +70,44 @@ void shouldSaveTwoAdditionalDocumentTypes() { // Given PCSCase pcsCase = mock(PCSCase.class); - AdditionalDocument additionalDocument1 = AdditionalDocument.builder() - .document(Document.builder() - .url("url-WITNESS_STATEMENT") - .filename("file-WITNESS_STATEMENT") - .binaryUrl("bin-WITNESS_STATEMENT") - .categoryId("cat-WITNESS_STATEMENT") - .build()) - .documentType(AdditionalDocumentType.WITNESS_STATEMENT) - .build(); + DynamicList documentTypeList1 = new DynamicList( + new DynamicListElement(UUID.randomUUID(), "Witness statement"), + new ArrayList<>() + ); - AdditionalDocument additionalDocument2 = AdditionalDocument.builder() - .document(Document.builder() - .url("url-RENT_STATEMENT") - .filename("file-RENT_STATEMENT") - .binaryUrl("bin-RENT_STATEMENT") - .categoryId("cat-RENT_STATEMENT") - .build()) - .documentType(AdditionalDocumentType.RENT_STATEMENT) - .build(); + AdditionalDocuments additionalDocument1 = AdditionalDocuments.builder() + .document(Document.builder() + .url("url-WITNESS_STATEMENT") + .filename("file-WITNESS_STATEMENT") + .binaryUrl("bin-WITNESS_STATEMENT") + .categoryId("cat-WITNESS_STATEMENT") + .build()) + .documentTypeList(documentTypeList1) + .build(); - ListValue lv1 = ListValue.builder() - .id("1").value(additionalDocument1).build(); - ListValue lv2 = ListValue.builder() - .id("2").value(additionalDocument2).build(); + DynamicList documentTypeList2 = new DynamicList( + new DynamicListElement(UUID.randomUUID(), "Rent statement"), + new ArrayList<>() + ); - List> additionalDocuments = List.of(lv1, lv2); + AdditionalDocuments additionalDocument2 = AdditionalDocuments.builder() + .document(Document.builder() + .url("url-RENT_STATEMENT") + .filename("file-RENT_STATEMENT") + .binaryUrl("bin-RENT_STATEMENT") + .categoryId("cat-RENT_STATEMENT") + .build()) + .documentTypeList(documentTypeList2) + .build(); + + ListValue lv1 = ListValue.builder() + .id("1").value(additionalDocument1).build(); + ListValue lv2 = ListValue.builder() + .id("2").value(additionalDocument2).build(); - when(pcsCase.getAdditionalDocuments()).thenReturn(additionalDocuments); + List> additionalDocuments = List.of(lv1, lv2); + + when(pcsCase.getAdditionalDocs()).thenReturn(additionalDocuments); // When underTest.createAllDocuments(pcsCase); @@ -108,7 +120,7 @@ void shouldSaveTwoAdditionalDocumentTypes() { assertThat(capturedEntities) .extracting(DocumentEntity::getFileName) - .containsExactlyInAnyOrder("file-WITNESS_STATEMENT", "file-RENT_STATEMENT"); + .containsExactlyInAnyOrder("file-WITNESS_STATEMENT - Claimant 1", "file-RENT_STATEMENT - Claimant 1"); assertThat(capturedEntities) .extracting(DocumentEntity::getType) @@ -121,16 +133,24 @@ void shouldMapAllAdditionalDocumentTypes(AdditionalDocumentType additionalDocume // Given PCSCase pcsCase = mock(PCSCase.class); - AdditionalDocument additionalDocument1 = AdditionalDocument.builder() - .document(Document.builder().build()) - .documentType(additionalDocumentType) - .build(); - - List> additionalDocuments = List.of( - ListValue.builder().value(additionalDocument1).build() + DynamicList documentTypeList = new DynamicList( + new DynamicListElement(UUID.randomUUID(), additionalDocumentType.getLabel()), + new ArrayList<>() ); - when(pcsCase.getAdditionalDocuments()).thenReturn(additionalDocuments); + AdditionalDocuments additionalDocument = AdditionalDocuments.builder() + .document(Document.builder() + .filename("userEnteredDetails.pdf") + .uploadTimestamp(LocalDateTime.now()) + .url("someUrl") + .binaryUrl("someUrl") + .categoryId("uploaded-category").build()) + .documentTypeList(documentTypeList) + .build(); + + when(pcsCase.getAdditionalDocs()).thenReturn(List.of( + ListValue.builder().value(additionalDocument).build() + )); // When underTest.createAllDocuments(pcsCase); @@ -153,13 +173,20 @@ void shouldMapAdditionalDocumentsToCaseFileCategories(AdditionalDocumentType add // Given PCSCase pcsCase = mock(PCSCase.class); - AdditionalDocument additionalDocument = AdditionalDocument.builder() - .document(Document.builder().categoryId("uploaded-category").build()) - .documentType(additionalDocumentType) - .build(); + DynamicList documentTypeList = new DynamicList( + new DynamicListElement(UUID.randomUUID(), additionalDocumentType.getLabel()), + new ArrayList<>() + ); + + AdditionalDocuments additionalDocument = AdditionalDocuments.builder() + .document(Document.builder() + .filename("filename.txt") + .categoryId("uploaded-category").build()) + .documentTypeList(documentTypeList) + .build(); - when(pcsCase.getAdditionalDocuments()).thenReturn(List.of( - ListValue.builder().value(additionalDocument).build() + when(pcsCase.getAdditionalDocs()).thenReturn(List.of( + ListValue.builder().value(additionalDocument).build() )); // When @@ -200,7 +227,7 @@ void shouldSaveRentStatementDocuments() { assertThat(entities).hasSize(1); DocumentEntity entity = entities.getFirst(); assertThat(entity.getType()).isEqualTo(DocumentType.RENT_STATEMENT); - assertThat(entity.getFileName()).isEqualTo("file1"); + assertThat(entity.getFileName()).isEqualTo("file1 - Claimant 1"); assertThat(entity.getCategoryId()).isEqualTo(CaseFileCategory.PROPERTY_DOCUMENTS.getId()); } @@ -229,8 +256,8 @@ void shouldSaveTenancyLicenceDocuments() { List entities = documentEntityListCaptor.getValue(); assertThat(entities).hasSize(1); DocumentEntity entity = entities.getFirst(); - assertThat(entity.getType()).isEqualTo(DocumentType.TENANCY_LICENCE); - assertThat(entity.getFileName()).isEqualTo("file2"); + assertThat(entity.getType()).isEqualTo(DocumentType.TENANCY_AGREEMENT); + assertThat(entity.getFileName()).isEqualTo("file2 - Claimant 1"); assertThat(entity.getCategoryId()).isEqualTo(CaseFileCategory.PROPERTY_DOCUMENTS.getId()); } @@ -261,7 +288,7 @@ void shouldSaveOccupationLicenceDocuments() { assertThat(entities).hasSize(1); DocumentEntity entity = entities.getFirst(); assertThat(entity.getType()).isEqualTo(DocumentType.OCCUPATION_LICENCE); - assertThat(entity.getFileName()).isEqualTo("file3"); + assertThat(entity.getFileName()).isEqualTo("file3 - Claimant 1"); assertThat(entity.getCategoryId()).isEqualTo(CaseFileCategory.PROPERTY_DOCUMENTS.getId()); } @@ -291,9 +318,9 @@ void shouldSaveNoticeServedDocuments() { List entities = documentEntityListCaptor.getValue(); assertThat(entities).hasSize(1); DocumentEntity entity = entities.getFirst(); - assertThat(entity.getType()).isEqualTo(DocumentType.NOTICE_FOR_SERVICE_OUT_OF_JURISDICTION); - assertThat(entity.getFileName()).isEqualTo("file4"); - assertThat(entity.getCategoryId()).isEqualTo(CaseFileCategory.STATEMENTS_OF_CASE.getId()); + assertThat(entity.getType()).isEqualTo(DocumentType.POSSESSION_NOTICE); + assertThat(entity.getFileName()).isEqualTo("file4 - Claimant 1"); + assertThat(entity.getCategoryId()).isEqualTo(CaseFileCategory.PROPERTY_DOCUMENTS.getId()); } @Test @@ -399,20 +426,31 @@ void shouldSaveDescriptionForAdditionalDocuments() { // Given PCSCase pcsCase = mock(PCSCase.class); - AdditionalDocumentType additionalDocumentType = AdditionalDocumentType.WITNESS_STATEMENT; + AdditionalDocumentType additionalDocumentType = AdditionalDocumentType.WITNESS_STATEMENT; String description = "A short description"; - AdditionalDocument additionalDocument1 = AdditionalDocument.builder() - .document(Document.builder().build()) - .documentType(additionalDocumentType) + DynamicList documentTypeList = new DynamicList( + new DynamicListElement(UUID.randomUUID(), additionalDocumentType.getLabel()), + new ArrayList<>() + ); + + AdditionalDocuments additionalDocument = AdditionalDocuments.builder() + .document(Document.builder() + .filename("witness1.pdf") + .binaryUrl("someUrl") + .url("someUrl") + .categoryId("cat1") + .uploadTimestamp(LocalDateTime.now()) + .build()) + .documentTypeList(documentTypeList) .description(description) .build(); - List> additionalDocuments = List.of( - ListValue.builder().value(additionalDocument1).build() + List> additionalDocuments = List.of( + ListValue.builder().value(additionalDocument).build() ); - when(pcsCase.getAdditionalDocuments()).thenReturn(additionalDocuments); + when(pcsCase.getAdditionalDocs()).thenReturn(additionalDocuments); // When underTest.createAllDocuments(pcsCase); @@ -437,22 +475,27 @@ void shouldConvertEmptyDescriptionToNull() { // Given PCSCase pcsCase = mock(PCSCase.class); - AdditionalDocument additionalDocument = AdditionalDocument.builder() + DynamicList documentTypeList = new DynamicList( + new DynamicListElement(UUID.randomUUID(), "Witness statement"), + new ArrayList<>() + ); + + AdditionalDocuments additionalDocument = AdditionalDocuments.builder() .document(Document.builder() .url("url1") .filename("file1") .binaryUrl("bin1") .categoryId("cat1") .build()) - .documentType(AdditionalDocumentType.WITNESS_STATEMENT) + .documentTypeList(documentTypeList) .description("") .build(); - List> additionalDocuments = List.of( - ListValue.builder().value(additionalDocument).build() + List> additionalDocuments = List.of( + ListValue.builder().value(additionalDocument).build() ); - when(pcsCase.getAdditionalDocuments()).thenReturn(additionalDocuments); + when(pcsCase.getAdditionalDocs()).thenReturn(additionalDocuments); // When underTest.createAllDocuments(pcsCase); @@ -495,7 +538,7 @@ void shouldFilterOutNullValuesFromListValueDocuments() { verify(documentRepository).saveAll(documentEntityListCaptor.capture()); List entities = documentEntityListCaptor.getValue(); assertThat(entities).hasSize(1); - assertThat(entities.getFirst().getFileName()).isEqualTo("file1"); + assertThat(entities.getFirst().getFileName()).isEqualTo("file1 - Claimant 1"); } @Test @@ -532,13 +575,14 @@ void shouldSaveMultipleDocumentTypesInSingleCall() { .extracting(DocumentEntity::getType) .containsExactlyInAnyOrder( DocumentType.RENT_STATEMENT, - DocumentType.TENANCY_LICENCE, - DocumentType.NOTICE_FOR_SERVICE_OUT_OF_JURISDICTION + DocumentType.TENANCY_AGREEMENT, + DocumentType.POSSESSION_NOTICE ); assertThat(entities) .extracting(DocumentEntity::getFileName) - .containsExactlyInAnyOrder("file-rent", "file-tenancy", "file-notice"); + .containsExactlyInAnyOrder("file-rent - Claimant 1", "file-tenancy - Claimant 1", + "file-notice - Claimant 1"); } @Test @@ -547,6 +591,7 @@ void shouldAllowNullDescriptionForDocumentsOtherThanAdditionalDocuments() { PCSCase pcsCase = mock(PCSCase.class); Document doc = Document.builder() + .filename("filename.txt") .build(); NoticeServedDetails noticeServedDetails = NoticeServedDetails.builder()