From ef9cb775a68d7b03689e549a914f4022d9f03582 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Tue, 17 Feb 2026 18:16:17 +0000 Subject: [PATCH 01/54] Implement Enforcement Writ feature including entity, repository, DB schema, service, and test updates. --- .../writ/EnforcementWritEntity.java | 82 +++++ .../pcs/ccd/event/TestCaseGeneration.java | 10 +- .../warrant/EnforcementWritRepository.java | 9 + .../warrant/EnforcementOrderService.java | 18 +- .../writ/WritDetailsMapper.java | 69 ++++ .../V056__enforcement_writ_details.sql | 29 ++ .../Create-Case-Make-A-Claim-Basic-Case.json | 1 + .../Create-Enforcement-Writ-Basic-Case.json | 1 + .../Create-Make-A-Claim-Basic-Case.json | 1 - .../pcs/ccd/event/TestCaseGenerationTest.java | 4 +- .../writ/WritDetailsMapperTest.java | 311 ++++++++++++++++++ .../DomainDataModelSupportHelper.java | 20 +- .../pcs/testingsupport/EnforcementDMTest.java | 48 ++- 13 files changed, 568 insertions(+), 35 deletions(-) create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/EnforcementWritEntity.java create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementWritRepository.java create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java create mode 100644 src/main/resources/db/migration/V056__enforcement_writ_details.sql create mode 100644 src/main/resources/testcasesupport/Create-Case-Make-A-Claim-Basic-Case.json create mode 100644 src/main/resources/testcasesupport/Create-Enforcement-Writ-Basic-Case.json delete mode 100644 src/main/resources/testcasesupport/Create-Make-A-Claim-Basic-Case.json create mode 100644 src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/EnforcementWritEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/EnforcementWritEntity.java new file mode 100644 index 0000000000..35f8c23eb8 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/EnforcementWritEntity.java @@ -0,0 +1,82 @@ +package uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ; + +import com.fasterxml.jackson.annotation.JsonBackReference; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.JdbcTypeCode; +import org.hibernate.type.SqlTypes; +import uk.gov.hmcts.ccd.sdk.type.YesOrNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; + +import java.math.BigDecimal; +import java.util.UUID; + +@Entity +@Table(name = "enf_writ") +@Getter +@Setter +public class EnforcementWritEntity { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private UUID id; + + @OneToOne + @JoinColumn(name = "enf_case_id", nullable = false) + @JsonBackReference + private EnforcementOrderEntity enforcementOrder; + + // NameAndAddressForEviction + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo correctNameAndAddress; + + // Direct fields + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private YesOrNo showChangeNameAddressPage; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private YesOrNo showPeopleWhoWillBeEvictedPage; + + // LandRegistryFees + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo haveLandRegistryFeesBeenPaid; + + private BigDecimal amountOfLandRegistryFees; + + // Direct fields + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo hasHiredHighCourtEnforcementOfficer; + + private String hceoDetails; + + // LegalCosts + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo areLegalCostsToBeClaimed; + + private BigDecimal amountOfLegalCosts; + + // MoneyOwedByDefendants + private BigDecimal amountOwed; + + // Direct fields + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private YesOrNo hasClaimTransferredToHighCourt; + +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/TestCaseGeneration.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/TestCaseGeneration.java index d5f3245d68..61ce0f6a57 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/TestCaseGeneration.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/TestCaseGeneration.java @@ -39,8 +39,8 @@ public class TestCaseGeneration implements CCDConfig { static final String NO_NON_PROD_CASE_AVAILABLE = "No non-prod case json available."; static final String TEST_FEE_AMOUNT = "123.45"; static final String EVENT_NAME = "Test Support Case Creation"; - static final String MAKE_A_CLAIM_CASE_GENERATOR = "Create Make A Claim Basic Case"; - static final String ENFORCEMENT_CASE_GENERATOR = "Create Enforcement Warrant Basic Case"; + static final String MAKE_A_CLAIM_CASE_GENERATOR = "Create Case"; + static final String ENFORCEMENT_CASE_GENERATOR = "Create Enforcement"; private final ResumePossessionClaim resumePossessionClaim; private final EnforceTheOrder enforceTheOrder; @@ -82,10 +82,10 @@ SubmitResponse submit(EventPayload eventPayload) { PCSCase pcsCase = eventPayload.caseData(); DynamicList testFilesList = getTestFilesList(pcsCase); String label = testFilesList.getValue().getLabel(); - if (MAKE_A_CLAIM_CASE_GENERATOR.equalsIgnoreCase(label)) { + if (label.startsWith(MAKE_A_CLAIM_CASE_GENERATOR)) { makeAClaimTestCreation(label, caseReference); - } else if (ENFORCEMENT_CASE_GENERATOR.equalsIgnoreCase(label)) { - makeAClaimTestCreation(MAKE_A_CLAIM_CASE_GENERATOR, caseReference); + } else if (label.startsWith(ENFORCEMENT_CASE_GENERATOR)) { + makeAClaimTestCreation("Create-Case-Make-A-Claim-Basic-Case", caseReference); enforceTheOrder.submitOrder(caseReference, loadTestPcsCase(label)); } return SubmitResponse.builder().state(CASE_ISSUED).build(); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementWritRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementWritRepository.java new file mode 100644 index 0000000000..2eaea1d11d --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementWritRepository.java @@ -0,0 +1,9 @@ +package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant; + +import org.springframework.data.jpa.repository.JpaRepository; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.EnforcementWritEntity; + +import java.util.UUID; + +public interface EnforcementWritRepository extends JpaRepository { +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java index 910c503911..629d71925c 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java @@ -10,15 +10,19 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.EnforcementRiskDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.ClaimEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.PcsCaseEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementRiskProfileEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.EnforcementWritEntity; import uk.gov.hmcts.reform.pcs.ccd.event.EventId; import uk.gov.hmcts.reform.pcs.ccd.repository.PcsCaseRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementOrderRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementRiskProfileRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementWritRepository; import uk.gov.hmcts.reform.pcs.ccd.service.DraftCaseDataService; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.writ.WritDetailsMapper; import uk.gov.hmcts.reform.pcs.exception.CaseNotFoundException; import uk.gov.hmcts.reform.pcs.exception.ClaimNotFoundException; import uk.gov.hmcts.reform.pcs.exception.EnforcementOrderNotFoundException; @@ -35,6 +39,8 @@ public class EnforcementOrderService { private final EnforcementRiskProfileRepository enforcementRiskProfileRepository; private final PcsCaseRepository pcsCaseRepository; private final DraftCaseDataService draftCaseDataService; + private final WritDetailsMapper writDetailsMapper; + private final EnforcementWritRepository enforcementWritRepository; public EnforcementOrderEntity loadEnforcementOrder(UUID id) { return enforcementOrderRepository.findById(id) @@ -65,12 +71,22 @@ private void createEnforcementOrder(long caseReference, EnforcementOrder enforce enforcementOrderEntity.setClaim(claimEntity); enforcementOrderEntity.setEnforcementOrder(enforcementOrder); - enforcementOrderRepository.save(enforcementOrderEntity); + EnforcementOrderEntity orderEntity = enforcementOrderRepository.save(enforcementOrderEntity); if (enforcementOrder.getSelectEnforcementType() == SelectEnforcementType.WARRANT) { EnforcementRiskProfileEntity riskProfile = mapToRiskProfile(enforcementOrderEntity, enforcementOrder); enforcementRiskProfileRepository.save(riskProfile); } + if (enforcementOrder.getSelectEnforcementType() == SelectEnforcementType.WRIT + && enforcementOrder.getWritDetails() != null) { + storeEnforcementWrit(orderEntity, enforcementOrder.getWritDetails()); + } + } + + private void storeEnforcementWrit(EnforcementOrderEntity orderEntity, WritDetails writDetails) { + EnforcementWritEntity writEntity = writDetailsMapper.toEntity(writDetails); + writEntity.setEnforcementOrder(orderEntity); + enforcementWritRepository.save(writEntity); } private EnforcementRiskProfileEntity mapToRiskProfile( diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java new file mode 100644 index 0000000000..bc5fe75ec9 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java @@ -0,0 +1,69 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.writ; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LandRegistryFees; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LegalCosts; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.MoneyOwedByDefendants; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.NameAndAddressForEviction; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.EnforcementWritEntity; + +@Component +@Slf4j +public class WritDetailsMapper { + + public EnforcementWritEntity toEntity(WritDetails writDetails) { + EnforcementWritEntity entity = new EnforcementWritEntity(); + + // Map NameAndAddressForEviction fields + mapNameAndAddressForEviction(writDetails.getNameAndAddressForEviction(), entity); + + // Map direct fields + entity.setShowChangeNameAddressPage(writDetails.getShowChangeNameAddressPage()); + entity.setShowPeopleWhoWillBeEvictedPage(writDetails.getShowPeopleWhoWillBeEvictedPage()); + entity.setHasHiredHighCourtEnforcementOfficer(writDetails.getHasHiredHighCourtEnforcementOfficer()); + entity.setHceoDetails(writDetails.getHceoDetails()); + entity.setHasClaimTransferredToHighCourt(writDetails.getHasClaimTransferredToHighCourt()); + + // Map LandRegistryFees fields + mapLandRegistryFees(writDetails.getLandRegistryFees(), entity); + + // Map LegalCosts fields + mapLegalCosts(writDetails.getLegalCosts(), entity); + + // Map MoneyOwedByDefendants fields + mapMoneyOwedByDefendants(writDetails.getMoneyOwedByDefendants(), entity); + + return entity; + } + + private void mapNameAndAddressForEviction(NameAndAddressForEviction nameAndAddress, + EnforcementWritEntity entity) { + if (nameAndAddress != null) { + entity.setCorrectNameAndAddress(nameAndAddress.getCorrectNameAndAddress()); + } + } + + private void mapLandRegistryFees(LandRegistryFees landRegistryFees, EnforcementWritEntity entity) { + if (landRegistryFees != null) { + entity.setHaveLandRegistryFeesBeenPaid(landRegistryFees.getHaveLandRegistryFeesBeenPaid()); + entity.setAmountOfLandRegistryFees(landRegistryFees.getAmountOfLandRegistryFees()); + } + } + + private void mapLegalCosts(LegalCosts legalCosts, EnforcementWritEntity entity) { + if (legalCosts != null) { + entity.setAreLegalCostsToBeClaimed(legalCosts.getAreLegalCostsToBeClaimed()); + entity.setAmountOfLegalCosts(legalCosts.getAmountOfLegalCosts()); + } + } + + private void mapMoneyOwedByDefendants(MoneyOwedByDefendants moneyOwedByDefendants, + EnforcementWritEntity entity) { + if (moneyOwedByDefendants != null) { + entity.setAmountOwed(moneyOwedByDefendants.getAmountOwed()); + } + } + +} diff --git a/src/main/resources/db/migration/V056__enforcement_writ_details.sql b/src/main/resources/db/migration/V056__enforcement_writ_details.sql new file mode 100644 index 0000000000..5c477f5c3f --- /dev/null +++ b/src/main/resources/db/migration/V056__enforcement_writ_details.sql @@ -0,0 +1,29 @@ +CREATE TABLE enf_writ( + id UUID PRIMARY KEY, + enf_case_id UUID NOT NULL REFERENCES enf_case (id) ON DELETE CASCADE, + + -- NameAndAddressForEviction (JsonUnwrapped) + correct_name_and_address YES_NO, + + -- Direct fields + show_change_name_address_page YES_NO, + show_people_who_will_be_evicted_page YES_NO, + has_hired_high_court_enforcement_officer YES_NO, + hceo_details VARCHAR(120), + has_claim_transferred_to_high_court YES_NO, + + -- LandRegistryFees + have_land_registry_fees_been_paid YES_NO, + amount_of_land_registry_fees NUMERIC(10, 2), + + -- LegalCosts + are_legal_costs_to_be_claimed YES_NO, + amount_of_legal_costs NUMERIC(10, 2), + + -- MoneyOwedByDefendants + amount_owed NUMERIC(10, 2), + + CONSTRAINT unique_writ_per_enforcement UNIQUE(enf_case_id) +); + +CREATE INDEX idx_enf_writ_case_id ON enf_writ (enf_case_id); diff --git a/src/main/resources/testcasesupport/Create-Case-Make-A-Claim-Basic-Case.json b/src/main/resources/testcasesupport/Create-Case-Make-A-Claim-Basic-Case.json new file mode 100644 index 0000000000..2adb9d0460 --- /dev/null +++ b/src/main/resources/testcasesupport/Create-Case-Make-A-Claim-Basic-Case.json @@ -0,0 +1 @@ +{"parties": [], "defendant1": {"nameKnown": "NO", "addressKnown": "NO"}, "allDocuments": [], "claimantType": {"value": {"code": "PROVIDER_OF_SOCIAL_HOUSING", "label": "Registered provider of social housing"}, "valueCode": "PROVIDER_OF_SOCIAL_HOUSING", "list_items": [{"code": "PRIVATE_LANDLORD", "label": "Private landlord"}, {"code": "PROVIDER_OF_SOCIAL_HOUSING", "label": "Registered provider of social housing"}, {"code": "MORTGAGE_LENDER", "label": "Mortgage lender"}, {"code": "OTHER", "label": "Other"}]}, "languageUsed": "ENGLISH", "noticeServed": "No", "orgNameFound": "No", "userPcqIdSet": "No", "orgAddressFound": "No", "propertyAddress": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "statementOfTruth": {"completedBy": "CLAIMANT", "fullNameClaimant": "asdfasdf", "positionClaimant": "asdfasdf", "agreementClaimant": ["BELIEVE_TRUE"]}, "riotOffenceGround": "awfgdsfgsdfg", "completionNextStep": "SUBMIT_AND_PAY_NOW", "legislativeCountry": "England", "mediationAttempted": "NO", "addAnotherDefendant": "NO", "claimingCostsWanted": "NO", "settlementAttempted": "NO", "showRentSectionPage": "No", "applicationWithClaim": "NO", "claimantContactEmail": "pcs-solicitor1@test.com", "fallbackClaimantName": "dfgsdfgdfsg", "wantToUploadDocuments": "NO", "suspensionOfRTB_Reason": "sdfgsdfgsdfg", "claimAgainstTrespassers": "NO", "defendantTermPossessive": "defendant’s", "alternativesToPossession": ["SUSPENSION_OF_RIGHT_TO_BUY"], "hasUnderlesseeOrMortgagee": "NO", "showReasonsForGroundsPage": "Yes", "claimantNamePossessiveForm": "dfgsdfgdfsg’s", "claimantProvidePhoneNumber": "NO", "preActionProtocolCompleted": "YES", "suspensionOfRTB_HousingAct": "SECTION_6A_2", "claimantCircumstancesSelect": "NO", "rentArrearsOrBreachOfTenancy": [], "tenancy_TypeOfTenancyLicence": "SECURE_TENANCY", "hasDefendantCircumstancesInfo": "NO", "isCorrectClaimantContactEmail": "YES", "showClaimTypeNotEligibleWales": "No", "additionalReasonsForPossession": {"hasReasons": "NO"}, "showClaimTypeNotEligibleEngland": "No", "tenancy_TenancyLicenceDocuments": [], "overriddenClaimantContactAddress": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "secureOrFlexibleMandatoryGrounds": [], "showClaimantTypeNotEligibleWales": "No", "showClaimantTypeNotEligibleEngland": "No", "secureOrFlexibleMandatoryGroundsAlt": [], "suspensionOfRTB_ShowHousingActsPage": "Yes", "secureOrFlexibleDiscretionaryGrounds": ["RIOT_OFFENCE"], "demotionOfTenancy_ShowHousingActsPage": "No", "suspensionToBuyDemotionOfTenancyPages": "No", "secureOrFlexibleDiscretionaryGroundsAlt": []} diff --git a/src/main/resources/testcasesupport/Create-Enforcement-Writ-Basic-Case.json b/src/main/resources/testcasesupport/Create-Enforcement-Writ-Basic-Case.json new file mode 100644 index 0000000000..abb1c51136 --- /dev/null +++ b/src/main/resources/testcasesupport/Create-Enforcement-Writ-Basic-Case.json @@ -0,0 +1 @@ +{"parties": [{"value": {"address": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "orgName": "pcs-solicitor1@test.com", "emailAddress": "pcs-solicitor1@test.com", "phoneNumberProvided": "NO"}}, {"value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}, {"value": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}}], "allClaimants": [{"id": "5f70cd2a-fa4d-493a-8958-3726cd69246c", "value": {"address": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "orgName": "pcs-solicitor1@test.com", "emailAddress": "pcs-solicitor1@test.com", "phoneNumberProvided": "NO"}}], "allDocuments": [], "claimantType": {"value": {"code": "PROVIDER_OF_SOCIAL_HOUSING", "label": "Registered provider of social housing"}, "valueCode": "PROVIDER_OF_SOCIAL_HOUSING"}, "languageUsed": "ENGLISH", "noticeServed": "No", "userPcqIdSet": "No", "allDefendants": [{"id": "bf1e978c-b78b-46f7-9c41-dca8b9e9e20c", "value": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}}, {"id": "9578949d-0688-4aff-bb6c-1bf77b7f0f1a", "value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}], "writFeeAmount": "£999999.99", "writAmountOwed": "233300", "propertyAddress": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "statementOfTruth": {"completedBy": "CLAIMANT", "fullNameClaimant": "wert", "positionClaimant": "ewrt", "agreementClaimant": ["BELIEVE_TRUE"]}, "warrantFeeAmount": "£999999.99", "legislativeCountry": "England", "mediationAttempted": "NO", "addAnotherDefendant": "YES", "claimingCostsWanted": "NO", "settlementAttempted": "NO", "applicationWithClaim": "NO", "claimGroundSummaries": [{"id": "b1a772e2-8136-40c1-95fa-c89435349f44", "value": {"code": "NUISANCE_OR_IMMORAL_USE", "label": "Nuisance, annoyance, illegal or immoral use of the property (ground 2)", "reason": "sfgsdfgsdfg", "category": "SECURE_OR_FLEXIBLE_DISCRETIONARY", "isRentArrears": "No"}}], "selectEnforcementType": "WRIT", "wantToUploadDocuments": "NO", "suspensionOfRTB_Reason": "asdfasdf", "writAmountOfLegalCosts": "233200", "claimAgainstTrespassers": "NO", "formattedDefendantNames": "TVR HN
\nTest1 Testing1
", "formattedPropertyAddress": "1 Rse Way
London
SW11 1PD", "hasUnderlesseeOrMortgagee": "NO", "writCorrectNameAndAddress": "YES", "preActionProtocolCompleted": "NO", "suspensionOfRTB_HousingAct": "SECTION_6A_2", "claimantCircumstancesSelect": "NO", "tenancy_TypeOfTenancyLicence": "SECURE_TENANCY", "writAmountOfLandRegistryFees": "432400", "writAreLegalCostsToBeClaimed": "YES", "hasDefendantCircumstancesInfo": "NO", "writShowChangeNameAddressPage": "No", "additionalReasonsForPossession": {"hasReasons": "NO"}, "writHaveLandRegistryFeesBeenPaid": "YES", "writHasClaimTransferredToHighCourt": "Yes", "writShowPeopleWhoWillBeEvictedPage": "Yes", "writHasHiredHighCourtEnforcementOfficer": "NO"} diff --git a/src/main/resources/testcasesupport/Create-Make-A-Claim-Basic-Case.json b/src/main/resources/testcasesupport/Create-Make-A-Claim-Basic-Case.json deleted file mode 100644 index aa57a87400..0000000000 --- a/src/main/resources/testcasesupport/Create-Make-A-Claim-Basic-Case.json +++ /dev/null @@ -1 +0,0 @@ -{"parties": [], "defendant1": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}, "allDocuments": [], "claimantName": "pcs-solicitor1@test.com", "claimantType": {"value": {"code": "PROVIDER_OF_SOCIAL_HOUSING", "label": "Registered provider of social housing"}, "valueCode": "PROVIDER_OF_SOCIAL_HOUSING", "list_items": [{"code": "PRIVATE_LANDLORD", "label": "Private landlord"}, {"code": "PROVIDER_OF_SOCIAL_HOUSING", "label": "Registered provider of social housing"}, {"code": "MORTGAGE_LENDER", "label": "Mortgage lender"}, {"code": "OTHER", "label": "Other"}]}, "languageUsed": "ENGLISH", "noticeServed": "No", "userPcqIdSet": "No", "orgAddressFound": "No", "propertyAddress": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "statementOfTruth": {"completedBy": "CLAIMANT", "fullNameClaimant": "wert", "positionClaimant": "ewrt", "agreementClaimant": ["BELIEVE_TRUE"]}, "completionNextStep": "SUBMIT_AND_PAY_NOW", "legislativeCountry": "England", "mediationAttempted": "NO", "addAnotherDefendant": "YES", "claimingCostsWanted": "NO", "settlementAttempted": "NO", "showRentSectionPage": "No", "additionalDefendants": [{"id": "48f21da0-c44f-40fe-bd78-00d57b3001aa", "value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}], "applicationWithClaim": "NO", "claimantContactEmail": "pcs-solicitor1@test.com", "isClaimantNameCorrect": "YES", "wantToUploadDocuments": "NO", "suspensionOfRTB_Reason": "asdfasdf", "claimAgainstTrespassers": "NO", "defendantTermPossessive": "defendants’", "alternativesToPossession": ["SUSPENSION_OF_RIGHT_TO_BUY"], "hasUnderlesseeOrMortgagee": "NO", "showReasonsForGroundsPage": "Yes", "claimantNamePossessiveForm": "pcs-solicitor1@test.com’s", "claimantProvidePhoneNumber": "NO", "nuisanceOrImmoralUseGround": "sfgsdfgsdfg", "preActionProtocolCompleted": "NO", "suspensionOfRTB_HousingAct": "SECTION_6A_2", "claimantCircumstancesSelect": "NO", "rentArrearsOrBreachOfTenancy": [], "tenancy_TypeOfTenancyLicence": "SECURE_TENANCY", "hasDefendantCircumstancesInfo": "NO", "isCorrectClaimantContactEmail": "YES", "showClaimTypeNotEligibleWales": "No", "additionalReasonsForPossession": {"hasReasons": "NO"}, "showClaimTypeNotEligibleEngland": "No", "tenancy_TenancyLicenceDocuments": [], "overriddenClaimantContactAddress": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "secureOrFlexibleMandatoryGrounds": [], "showClaimantTypeNotEligibleWales": "No", "showClaimantTypeNotEligibleEngland": "No", "secureOrFlexibleMandatoryGroundsAlt": [], "suspensionOfRTB_ShowHousingActsPage": "Yes", "secureOrFlexibleDiscretionaryGrounds": ["NUISANCE_OR_IMMORAL_USE"], "demotionOfTenancy_ShowHousingActsPage": "No", "suspensionToBuyDemotionOfTenancyPages": "No", "secureOrFlexibleDiscretionaryGroundsAlt": []} diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/TestCaseGenerationTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/TestCaseGenerationTest.java index be3078bc7d..54fa313305 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/TestCaseGenerationTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/TestCaseGenerationTest.java @@ -211,7 +211,7 @@ void shouldSubmitMakeAClaimBasicCase() { void shouldSubmitEnforcementWarrantBasicCase() { // Given Long caseReference = 456L; - String label = TestCaseGeneration.ENFORCEMENT_CASE_GENERATOR; + String label = "Create Enforcement Warrant Basic Case"; DynamicList testFilesList = DynamicList.builder() .value(DynamicListElement.builder().label(label).build()) @@ -234,7 +234,7 @@ void shouldSubmitEnforcementWarrantBasicCase() { // Then assertThat(response.getState()).isEqualTo(State.CASE_ISSUED); - verify(spyUnderTest).makeAClaimTestCreation(TestCaseGeneration.MAKE_A_CLAIM_CASE_GENERATOR, caseReference); + verify(spyUnderTest).makeAClaimTestCreation("Create-Case-Make-A-Claim-Basic-Case", caseReference); verify(enforceTheOrder).submitOrder(caseReference, loadedCase); } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java new file mode 100644 index 0000000000..7285cf184d --- /dev/null +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java @@ -0,0 +1,311 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.writ; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.junit.jupiter.MockitoExtension; +import uk.gov.hmcts.ccd.sdk.type.YesOrNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LandRegistryFees; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LegalCosts; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.MoneyOwedByDefendants; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.NameAndAddressForEviction; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.EnforcementWritEntity; + +import java.math.BigDecimal; + +import static org.assertj.core.api.Assertions.assertThat; + +@ExtendWith(MockitoExtension.class) +@DisplayName("WritDetailsMapper Tests") +class WritDetailsMapperTest { + + @InjectMocks + private WritDetailsMapper underTest; + + private WritDetails writDetails; + private NameAndAddressForEviction nameAndAddressForEviction; + private LandRegistryFees landRegistryFees; + private LegalCosts legalCosts; + private MoneyOwedByDefendants moneyOwedByDefendants; + + @BeforeEach + void setUp() { + nameAndAddressForEviction = NameAndAddressForEviction.builder() + .correctNameAndAddress(VerticalYesNo.YES) + .build(); + + landRegistryFees = LandRegistryFees.builder() + .haveLandRegistryFeesBeenPaid(VerticalYesNo.YES) + .amountOfLandRegistryFees(new BigDecimal("500.00")) + .build(); + + legalCosts = LegalCosts.builder() + .areLegalCostsToBeClaimed(VerticalYesNo.YES) + .amountOfLegalCosts(new BigDecimal("1500.00")) + .build(); + + moneyOwedByDefendants = MoneyOwedByDefendants.builder() + .amountOwed(new BigDecimal("3000.00")) + .build(); + + writDetails = WritDetails.builder() + .nameAndAddressForEviction(nameAndAddressForEviction) + .showChangeNameAddressPage(YesOrNo.NO) + .showPeopleWhoWillBeEvictedPage(YesOrNo.YES) + .hasHiredHighCourtEnforcementOfficer(VerticalYesNo.YES) + .hceoDetails("John Smith, Enforcement Ltd") + .hasClaimTransferredToHighCourt(YesOrNo.YES) + .landRegistryFees(landRegistryFees) + .legalCosts(legalCosts) + .moneyOwedByDefendants(moneyOwedByDefendants) + .build(); + } + + @Test + void shouldMapAllFieldsSuccessfully() { + // When + EnforcementWritEntity entity = underTest.toEntity(writDetails); + + // Then + assertThat(entity.getCorrectNameAndAddress()).isEqualTo(VerticalYesNo.YES); + assertThat(entity.getShowChangeNameAddressPage()).isEqualTo(YesOrNo.NO); + assertThat(entity.getShowPeopleWhoWillBeEvictedPage()).isEqualTo(YesOrNo.YES); + assertThat(entity.getHasHiredHighCourtEnforcementOfficer()).isEqualTo(VerticalYesNo.YES); + assertThat(entity.getHceoDetails()).isEqualTo("John Smith, Enforcement Ltd"); + assertThat(entity.getHasClaimTransferredToHighCourt()).isEqualTo(YesOrNo.YES); + assertThat(entity.getHaveLandRegistryFeesBeenPaid()).isEqualTo(VerticalYesNo.YES); + assertThat(entity.getAmountOfLandRegistryFees()).isEqualByComparingTo(new BigDecimal("500.00")); + assertThat(entity.getAreLegalCostsToBeClaimed()).isEqualTo(VerticalYesNo.YES); + assertThat(entity.getAmountOfLegalCosts()).isEqualByComparingTo(new BigDecimal("1500.00")); + assertThat(entity.getAmountOwed()).isEqualByComparingTo(new BigDecimal("3000.00")); + } + + @Test + void shouldHandleNullNameAndAddressForEviction() { + // Given + writDetails.setNameAndAddressForEviction(null); + + // When + EnforcementWritEntity entity = underTest.toEntity(writDetails); + + // Then + assertThat(entity.getCorrectNameAndAddress()).isNull(); + assertThat(entity.getHceoDetails()).isEqualTo("John Smith, Enforcement Ltd"); + } + + @Test + void shouldHandleNullLandRegistryFees() { + // Given + writDetails.setLandRegistryFees(null); + + // When + EnforcementWritEntity entity = underTest.toEntity(writDetails); + + // Then + assertThat(entity.getHaveLandRegistryFeesBeenPaid()).isNull(); + assertThat(entity.getAmountOfLandRegistryFees()).isNull(); + assertThat(entity.getHceoDetails()).isEqualTo("John Smith, Enforcement Ltd"); + } + + @Test + void shouldHandleNullLegalCosts() { + // Given + writDetails.setLegalCosts(null); + + // When + EnforcementWritEntity entity = underTest.toEntity(writDetails); + + // Then + assertThat(entity.getAreLegalCostsToBeClaimed()).isNull(); + assertThat(entity.getAmountOfLegalCosts()).isNull(); + assertThat(entity.getHceoDetails()).isEqualTo("John Smith, Enforcement Ltd"); + } + + @Test + void shouldHandleNullMoneyOwedByDefendants() { + // Given + writDetails.setMoneyOwedByDefendants(null); + + // When + EnforcementWritEntity entity = underTest.toEntity(writDetails); + + // Then + assertThat(entity.getAmountOwed()).isNull(); + assertThat(entity.getHceoDetails()).isEqualTo("John Smith, Enforcement Ltd"); + } + + @Test + void shouldHandleAllNullCompositeObjects() { + // Given + writDetails.setNameAndAddressForEviction(null); + writDetails.setLandRegistryFees(null); + writDetails.setLegalCosts(null); + writDetails.setMoneyOwedByDefendants(null); + + // When + EnforcementWritEntity entity = underTest.toEntity(writDetails); + + assertThat(entity.getCorrectNameAndAddress()).isNull(); + assertThat(entity.getHaveLandRegistryFeesBeenPaid()).isNull(); + assertThat(entity.getAmountOfLandRegistryFees()).isNull(); + assertThat(entity.getAreLegalCostsToBeClaimed()).isNull(); + assertThat(entity.getAmountOfLegalCosts()).isNull(); + assertThat(entity.getAmountOwed()).isNull(); + assertThat(entity.getShowChangeNameAddressPage()).isEqualTo(YesOrNo.NO); + assertThat(entity.getHceoDetails()).isEqualTo("John Smith, Enforcement Ltd"); + } + + @Test + @DisplayName("Should map with all NO/false values") + void shouldMapWithAllNoValues() { + // Given + WritDetails noWritDetails = WritDetails.builder() + .nameAndAddressForEviction(NameAndAddressForEviction.builder() + .correctNameAndAddress(VerticalYesNo.NO) + .build()) + .showChangeNameAddressPage(YesOrNo.NO) + .showPeopleWhoWillBeEvictedPage(YesOrNo.NO) + .hasHiredHighCourtEnforcementOfficer(VerticalYesNo.NO) + .hasClaimTransferredToHighCourt(YesOrNo.NO) + .landRegistryFees(LandRegistryFees.builder() + .haveLandRegistryFeesBeenPaid(VerticalYesNo.NO) + .build()) + .legalCosts(LegalCosts.builder() + .areLegalCostsToBeClaimed(VerticalYesNo.NO) + .build()) + .moneyOwedByDefendants(MoneyOwedByDefendants.builder().build()) + .build(); + + // When + EnforcementWritEntity entity = underTest.toEntity(noWritDetails); + + // Then + assertThat(entity.getCorrectNameAndAddress()).isEqualTo(VerticalYesNo.NO); + assertThat(entity.getShowChangeNameAddressPage()).isEqualTo(YesOrNo.NO); + assertThat(entity.getShowPeopleWhoWillBeEvictedPage()).isEqualTo(YesOrNo.NO); + assertThat(entity.getHasHiredHighCourtEnforcementOfficer()).isEqualTo(VerticalYesNo.NO); + assertThat(entity.getHasClaimTransferredToHighCourt()).isEqualTo(YesOrNo.NO); + assertThat(entity.getHaveLandRegistryFeesBeenPaid()).isEqualTo(VerticalYesNo.NO); + assertThat(entity.getAreLegalCostsToBeClaimed()).isEqualTo(VerticalYesNo.NO); + } + + @Test + void shouldMapWithZeroAmounts() { + // Given + WritDetails zeroAmountWritDetails = WritDetails.builder() + .nameAndAddressForEviction(nameAndAddressForEviction) + .landRegistryFees(LandRegistryFees.builder() + .haveLandRegistryFeesBeenPaid(VerticalYesNo.YES) + .amountOfLandRegistryFees(BigDecimal.ZERO) + .build()) + .legalCosts(LegalCosts.builder() + .areLegalCostsToBeClaimed(VerticalYesNo.YES) + .amountOfLegalCosts(BigDecimal.ZERO) + .build()) + .moneyOwedByDefendants(MoneyOwedByDefendants.builder() + .amountOwed(BigDecimal.ZERO) + .build()) + .build(); + + // When + EnforcementWritEntity entity = underTest.toEntity(zeroAmountWritDetails); + + // Then + assertThat(entity.getAmountOfLandRegistryFees()).isEqualByComparingTo(BigDecimal.ZERO); + assertThat(entity.getAmountOfLegalCosts()).isEqualByComparingTo(BigDecimal.ZERO); + assertThat(entity.getAmountOwed()).isEqualByComparingTo(BigDecimal.ZERO); + } + + @Test + void shouldMapWithLargeAmounts() { + // Given + BigDecimal largeAmount = new BigDecimal("999999.99"); + WritDetails largeAmountWritDetails = WritDetails.builder() + .nameAndAddressForEviction(nameAndAddressForEviction) + .landRegistryFees(LandRegistryFees.builder() + .haveLandRegistryFeesBeenPaid(VerticalYesNo.YES) + .amountOfLandRegistryFees(largeAmount) + .build()) + .legalCosts(LegalCosts.builder() + .areLegalCostsToBeClaimed(VerticalYesNo.YES) + .amountOfLegalCosts(largeAmount) + .build()) + .moneyOwedByDefendants(MoneyOwedByDefendants.builder() + .amountOwed(largeAmount) + .build()) + .build(); + + // When + EnforcementWritEntity entity = underTest.toEntity(largeAmountWritDetails); + + // Then + assertThat(entity.getAmountOfLandRegistryFees()).isEqualByComparingTo(largeAmount); + assertThat(entity.getAmountOfLegalCosts()).isEqualByComparingTo(largeAmount); + assertThat(entity.getAmountOwed()).isEqualByComparingTo(largeAmount); + } + + @Test + void shouldMapWithMaxLengthHceoDetails() { + // Given + String maxLengthHceoDetails = "A".repeat(120); + writDetails.setHceoDetails(maxLengthHceoDetails); + + // When + EnforcementWritEntity entity = underTest.toEntity(writDetails); + + // Then + assertThat(entity.getHceoDetails()).hasSize(120); + assertThat(entity.getHceoDetails()).isEqualTo(maxLengthHceoDetails); + } + + @Test + void shouldMapWithNullHceoDetails() { + // Given + writDetails.setHceoDetails(null); + + // When + EnforcementWritEntity entity = underTest.toEntity(writDetails); + + // Then + assertThat(entity.getHceoDetails()).isNull(); + assertThat(entity.getHasHiredHighCourtEnforcementOfficer()).isEqualTo(VerticalYesNo.YES); + } + + @Test + void shouldCreateNewEntityInstanceOnEachCall() { + // When + EnforcementWritEntity entity1 = underTest.toEntity(writDetails); + EnforcementWritEntity entity2 = underTest.toEntity(writDetails); + + // Then + assertThat(entity1).isNotSameAs(entity2); + assertThat(entity1.getHceoDetails()).isEqualTo(entity2.getHceoDetails()); + } + + @Test + void shouldMapPartialDataCorrectly() { + // Given + WritDetails partialWritDetails = WritDetails.builder() + .hasHiredHighCourtEnforcementOfficer(VerticalYesNo.NO) + .hasClaimTransferredToHighCourt(YesOrNo.YES) + .moneyOwedByDefendants(MoneyOwedByDefendants.builder() + .amountOwed(new BigDecimal("2000.00")) + .build()) + .build(); + + // When + EnforcementWritEntity entity = underTest.toEntity(partialWritDetails); + + // Then + assertThat(entity.getHasHiredHighCourtEnforcementOfficer()).isEqualTo(VerticalYesNo.NO); + assertThat(entity.getHasClaimTransferredToHighCourt()).isEqualTo(YesOrNo.YES); + assertThat(entity.getAmountOwed()).isEqualByComparingTo(new BigDecimal("2000.00")); + assertThat(entity.getCorrectNameAndAddress()).isNull(); + assertThat(entity.getHaveLandRegistryFeesBeenPaid()).isNull(); + assertThat(entity.getAreLegalCostsToBeClaimed()).isNull(); + } +} diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/DomainDataModelSupportHelper.java b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/DomainDataModelSupportHelper.java index 0290d182ca..1c07f5b993 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/DomainDataModelSupportHelper.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/DomainDataModelSupportHelper.java @@ -37,10 +37,13 @@ public List findMissingCCDFields(Class entityClass) { collectEntityFieldNames(entityClass, entityFieldNames, new HashSet<>()); List missingFields = new ArrayList<>(); ccdFieldsByClass.forEach((className, ccdFields) -> { - for (CCDFieldInfo ccdField : ccdFields) { - if (!entityFieldNames.contains(ccdField.fieldName) - && !ignoredFieldsFromMissing.contains(ccdField.fieldName)) { - missingFields.add(new MissingCCDFieldInfo(className, ccdField)); + if (!ignoredClassesFromMissing.stream() + .filter(c -> c.getSimpleName().equalsIgnoreCase(className)).findAny().isPresent()) { + for (CCDFieldInfo ccdField : ccdFields) { + if (!entityFieldNames.contains(ccdField.fieldName) + && !ignoredFieldsFromMissing.contains(ccdField.fieldName)) { + missingFields.add(new MissingCCDFieldInfo(className, ccdField)); + } } } }); @@ -141,16 +144,17 @@ public Map> identifyCCDFields(Class clazz) { List ccdFields = new ArrayList<>(); for (Field field : fields) { if (field.isAnnotationPresent(CCD.class)) { - CCD ccdAnnotation = field.getAnnotation(CCD.class); - CCDFieldInfo fieldInfo = new CCDFieldInfo(field.getName(), field.getType(), ccdAnnotation); - ccdFields.add(fieldInfo); if (isCompositeType(field.getType())) { identifyCCDFields(field.getType()); + } else { + CCD ccdAnnotation = field.getAnnotation(CCD.class); + CCDFieldInfo fieldInfo = new CCDFieldInfo(field.getName(), field.getType(), ccdAnnotation); + ccdFields.add(fieldInfo); } } } - if (!ccdFields.isEmpty()) { + if (!ccdFields.isEmpty() && !ignoredClassesFromMissing.contains(clazz)) { ccdFieldsByClass.put(clazz.getSimpleName(), ccdFields); } return ccdFieldsByClass; diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java index 4bc7c5c13a..6add9e7f0f 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java @@ -1,11 +1,15 @@ package uk.gov.hmcts.reform.pcs.testingsupport; -import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.EnforcementRiskDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.ClaimEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.EnforcementWritEntity; import java.io.File; import java.io.FileWriter; @@ -32,16 +36,6 @@ class EnforcementDMTest { private DomainDataModelSupportHelper domainDataModelSupportHelper; - @BeforeEach - void beforeEach() throws IOException { - domainDataModelSupportHelper = new DomainDataModelSupportHelper(EnforcementOrder.class); - File tempFile = File.createTempFile("ccd_fields_report_", ".txt"); - try (PrintWriter writer = new PrintWriter(new FileWriter(tempFile))) { - domainDataModelSupportHelper.printCCDFields(writer); - System.out.println("Created : " + tempFile.getAbsolutePath()); - } - } - /** * Monitors the completeness of the EnforcementOrderEntity graph implementation. * This test tracks which CCD-annotated fields from the domain model are not yet @@ -55,18 +49,36 @@ void beforeEach() throws IOException { * @see EnforcementOrder */ @Test + @Disabled void shouldCaptureAllMissingEntityFieldsFromTheEnforcementDomain() throws IOException { - domainDataModelSupportHelper.addClassesToIgnore(EnforcementOrder.class, ClaimEntity.class); + domainDataModelSupportHelper = new DomainDataModelSupportHelper(WritDetails.class); + domainDataModelSupportHelper.addClassesToIgnore(EnforcementOrder.class, ClaimEntity.class, + WarrantDetails.class); + domainDataModelSupportHelper.addFieldsToIgnore("enforcementOrder", "enforcementLanguageUsed", + "writDetails"); + List missingFields = + domainDataModelSupportHelper.findMissingCCDFields(EnforcementWritEntity.class); + + consoleOutput(missingFields); + + assertThat(missingFields) + .as("Missing CCD field detection is working. " + + "Review console output to track entity graph implementation progress.") + .isNotNull(); + } + + @Test + void shouldCaptureAllMissingEntityFieldsFromTheEnforcementWritDetailsDomain() throws IOException { + domainDataModelSupportHelper = new DomainDataModelSupportHelper(WritDetails.class); + domainDataModelSupportHelper.addClassesToIgnore(EnforcementOrder.class, ClaimEntity.class, + EnforcementRiskDetails.class, WarrantDetails.class); + domainDataModelSupportHelper.addFieldsToIgnore("enforcementOrder", "warrantDetails", + "enforcementLanguageUsed"); List missingFields = - domainDataModelSupportHelper.findMissingCCDFields(EnforcementOrderEntity.class); + domainDataModelSupportHelper.findMissingCCDFields(EnforcementWritEntity.class); consoleOutput(missingFields); - // This assertion ensures the test mechanism works and produces a result - // The actual validation is done by reviewing the console output and generated report - // As the domain evolves, missing fields may be added or removed - this is expected - // The test is specifically in place so to no miss something that should otherwise be persisted and it is - // highlighted here within the builds. assertThat(missingFields) .as("Missing CCD field detection is working. " + "Review console output to track entity graph implementation progress.") From f54d87ea8daac1ac2820faafaadf1698e0db89e6 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Wed, 18 Feb 2026 16:57:18 +0000 Subject: [PATCH 02/54] Remove `showChangeNameAddressPage` field from WritDetailsMapper, EnforcementWritEntity, database schema, and associated tests. --- .../entity/enforcetheorder/writ/EnforcementWritEntity.java | 4 ---- .../ccd/service/enforcetheorder/writ/WritDetailsMapper.java | 1 - ...nt_writ_details.sql => V057__enforcement_writ_details.sql} | 1 - .../Create-Enforcement-Writ-Basic-Case.json | 1 + .../service/enforcetheorder/writ/WritDetailsMapperTest.java | 3 --- 5 files changed, 1 insertion(+), 9 deletions(-) rename src/main/resources/db/migration/{V056__enforcement_writ_details.sql => V057__enforcement_writ_details.sql} (94%) create mode 100644 src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/EnforcementWritEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/EnforcementWritEntity.java index 35f8c23eb8..772b627e47 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/EnforcementWritEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/EnforcementWritEntity.java @@ -42,10 +42,6 @@ public class EnforcementWritEntity { private VerticalYesNo correctNameAndAddress; // Direct fields - @Enumerated(EnumType.STRING) - @JdbcTypeCode(SqlTypes.NAMED_ENUM) - private YesOrNo showChangeNameAddressPage; - @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) private YesOrNo showPeopleWhoWillBeEvictedPage; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java index bc5fe75ec9..5bdc12843e 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java @@ -20,7 +20,6 @@ public EnforcementWritEntity toEntity(WritDetails writDetails) { mapNameAndAddressForEviction(writDetails.getNameAndAddressForEviction(), entity); // Map direct fields - entity.setShowChangeNameAddressPage(writDetails.getShowChangeNameAddressPage()); entity.setShowPeopleWhoWillBeEvictedPage(writDetails.getShowPeopleWhoWillBeEvictedPage()); entity.setHasHiredHighCourtEnforcementOfficer(writDetails.getHasHiredHighCourtEnforcementOfficer()); entity.setHceoDetails(writDetails.getHceoDetails()); diff --git a/src/main/resources/db/migration/V056__enforcement_writ_details.sql b/src/main/resources/db/migration/V057__enforcement_writ_details.sql similarity index 94% rename from src/main/resources/db/migration/V056__enforcement_writ_details.sql rename to src/main/resources/db/migration/V057__enforcement_writ_details.sql index 5c477f5c3f..ee3c85ae04 100644 --- a/src/main/resources/db/migration/V056__enforcement_writ_details.sql +++ b/src/main/resources/db/migration/V057__enforcement_writ_details.sql @@ -6,7 +6,6 @@ CREATE TABLE enf_writ( correct_name_and_address YES_NO, -- Direct fields - show_change_name_address_page YES_NO, show_people_who_will_be_evicted_page YES_NO, has_hired_high_court_enforcement_officer YES_NO, hceo_details VARCHAR(120), diff --git a/src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json b/src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json new file mode 100644 index 0000000000..4059acd0b3 --- /dev/null +++ b/src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json @@ -0,0 +1 @@ +{"parties": [{"value": {"address": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "orgName": "pcs-solicitor1@test.com", "emailAddress": "pcs-solicitor1@test.com", "phoneNumberProvided": "NO"}}, {"value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}, {"value": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}}], "allClaimants": [{"id": "ea700fdb-b710-4326-8b37-24df0f4d2f92", "value": {"address": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "orgName": "pcs-solicitor1@test.com", "emailAddress": "pcs-solicitor1@test.com", "phoneNumberProvided": "NO"}}], "allDocuments": [], "claimantType": {"value": {"code": "PROVIDER_OF_SOCIAL_HOUSING", "label": "Registered provider of social housing"}, "valueCode": "PROVIDER_OF_SOCIAL_HOUSING"}, "languageUsed": "ENGLISH", "noticeServed": "No", "userPcqIdSet": "No", "allDefendants": [{"id": "39d575e6-fed3-4747-a5bb-c85e3931c16e", "value": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}}, {"id": "0ee3acb7-5c81-47dc-b09f-211064f91037", "value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}], "writFeeAmount": "£999999.99", "writAmountOwed": "123300", "propertyAddress": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "statementOfTruth": {"completedBy": "CLAIMANT", "fullNameClaimant": "wert", "positionClaimant": "ewrt", "agreementClaimant": ["BELIEVE_TRUE"]}, "warrantFeeAmount": "£999999.99", "legislativeCountry": "England", "mediationAttempted": "NO", "addAnotherDefendant": "YES", "claimingCostsWanted": "NO", "settlementAttempted": "NO", "writRepaymentChoice": "ALL", "applicationWithClaim": "NO", "claimGroundSummaries": [{"id": "9df0dd7e-8ee2-49d9-9135-2dc33a5a2ff2", "value": {"code": "NUISANCE_OR_IMMORAL_USE", "label": "Nuisance, annoyance, illegal or immoral use of the property (ground 2)", "reason": "sfgsdfgsdfg", "category": "SECURE_OR_FLEXIBLE_DISCRETIONARY", "isRentArrears": "No"}}], "selectEnforcementType": "WRIT", "wantToUploadDocuments": "NO", "suspensionOfRTB_Reason": "asdfasdf", "writAmountOfLegalCosts": "12300", "claimAgainstTrespassers": "NO", "formattedDefendantNames": "TVR HN
\nTest1 Testing1
", "formattedPropertyAddress": "1 Rse Way
London
SW11 1PD", "hasUnderlesseeOrMortgagee": "NO", "writCorrectNameAndAddress": "YES", "preActionProtocolCompleted": "NO", "suspensionOfRTB_HousingAct": "SECTION_6A_2", "claimantCircumstancesSelect": "NO", "writEnforcementLanguageUsed": "ENGLISH", "tenancy_TypeOfTenancyLicence": "SECURE_TENANCY", "writAmountOfLandRegistryFees": "234500", "writAreLegalCostsToBeClaimed": "YES", "writRepaymentSummaryMarkdown": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Total amount that can be repaid
Repayment forAmount
Arrears and other costs\n £1,233
Legal costs£123
Land Registry fees£2,345
Writ of possession fee£999999.99
Total£1,003,700.99
", "hasDefendantCircumstancesInfo": "NO", "writShowChangeNameAddressPage": "No", "additionalReasonsForPossession": {"hasReasons": "NO"}, "writHaveLandRegistryFeesBeenPaid": "YES", "writHasClaimTransferredToHighCourt": "Yes", "writShowPeopleWhoWillBeEvictedPage": "Yes", "writHasHiredHighCourtEnforcementOfficer": "NO", "writStatementOfTruthRepaymentSummaryMarkdown": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
The payments due
Repayment forAmount
Arrears and other costs\n £1,233
Legal costs£123
Land Registry fees£2,345
Writ of possession fee£999999.99
Total£1,003,700.99
\n"} diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java index 7285cf184d..af7620b81f 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java @@ -72,7 +72,6 @@ void shouldMapAllFieldsSuccessfully() { // Then assertThat(entity.getCorrectNameAndAddress()).isEqualTo(VerticalYesNo.YES); - assertThat(entity.getShowChangeNameAddressPage()).isEqualTo(YesOrNo.NO); assertThat(entity.getShowPeopleWhoWillBeEvictedPage()).isEqualTo(YesOrNo.YES); assertThat(entity.getHasHiredHighCourtEnforcementOfficer()).isEqualTo(VerticalYesNo.YES); assertThat(entity.getHceoDetails()).isEqualTo("John Smith, Enforcement Ltd"); @@ -155,7 +154,6 @@ void shouldHandleAllNullCompositeObjects() { assertThat(entity.getAreLegalCostsToBeClaimed()).isNull(); assertThat(entity.getAmountOfLegalCosts()).isNull(); assertThat(entity.getAmountOwed()).isNull(); - assertThat(entity.getShowChangeNameAddressPage()).isEqualTo(YesOrNo.NO); assertThat(entity.getHceoDetails()).isEqualTo("John Smith, Enforcement Ltd"); } @@ -185,7 +183,6 @@ void shouldMapWithAllNoValues() { // Then assertThat(entity.getCorrectNameAndAddress()).isEqualTo(VerticalYesNo.NO); - assertThat(entity.getShowChangeNameAddressPage()).isEqualTo(YesOrNo.NO); assertThat(entity.getShowPeopleWhoWillBeEvictedPage()).isEqualTo(YesOrNo.NO); assertThat(entity.getHasHiredHighCourtEnforcementOfficer()).isEqualTo(VerticalYesNo.NO); assertThat(entity.getHasClaimTransferredToHighCourt()).isEqualTo(YesOrNo.NO); From e499ad3d8608b96e518b7722528e3907d092abca Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Wed, 18 Feb 2026 17:18:04 +0000 Subject: [PATCH 03/54] Refactor `loadTestPcsCase` method to enhance readability and utilize try-with-resources for safe InputStream handling. --- .../hmcts/reform/pcs/ccd/event/TestCaseGeneration.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/TestCaseGeneration.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/TestCaseGeneration.java index 61ce0f6a57..3f850836b3 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/TestCaseGeneration.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/TestCaseGeneration.java @@ -102,15 +102,15 @@ void makeAClaimTestCreation(String label, Long caseReference) { } PCSCase loadTestPcsCase(String label) { - PCSCase loadedCase; try { Resource testResource = testCaseSupportHelper.getTestResource(label); - String jsonString = StreamUtils.copyToString(testResource.getInputStream(), StandardCharsets.UTF_8); - loadedCase = draftCaseDataService.parseCaseDataJson(jsonString); + try (var inputStream = testResource.getInputStream()) { + String jsonString = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8); + return draftCaseDataService.parseCaseDataJson(jsonString); + } } catch (IOException e) { throw new TestCaseSupportException(e); } - return loadedCase; } public DynamicList getTestFilesList(PCSCase fromEvent) { From 2b60e2eac67bfc414d2440336bd31e7cfa291925 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Thu, 19 Feb 2026 10:35:18 +0000 Subject: [PATCH 04/54] Rename `EnforcementWritEntity` and `EnforcementWritRepository` to `WritEntity` and `WritRepository` respectively. Update references across services and tests for consistency. --- ...rcementWritEntity.java => WritEntity.java} | 2 +- .../warrant/EnforcementWritRepository.java | 9 ----- .../warrant/WritRepository.java | 9 +++++ .../warrant/EnforcementOrderService.java | 10 ++--- .../writ/WritDetailsMapper.java | 14 +++---- .../writ/WritDetailsMapperTest.java | 39 +++++++++---------- .../pcs/testingsupport/EnforcementDMTest.java | 6 +-- 7 files changed, 43 insertions(+), 46 deletions(-) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/{EnforcementWritEntity.java => WritEntity.java} (98%) delete mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementWritRepository.java create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/WritRepository.java diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/EnforcementWritEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/WritEntity.java similarity index 98% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/EnforcementWritEntity.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/WritEntity.java index 772b627e47..44f7b02129 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/EnforcementWritEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/writ/WritEntity.java @@ -25,7 +25,7 @@ @Table(name = "enf_writ") @Getter @Setter -public class EnforcementWritEntity { +public class WritEntity { @Id @GeneratedValue(strategy = GenerationType.UUID) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementWritRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementWritRepository.java deleted file mode 100644 index 2eaea1d11d..0000000000 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementWritRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant; - -import org.springframework.data.jpa.repository.JpaRepository; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.EnforcementWritEntity; - -import java.util.UUID; - -public interface EnforcementWritRepository extends JpaRepository { -} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/WritRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/WritRepository.java new file mode 100644 index 0000000000..11ea72b0ff --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/WritRepository.java @@ -0,0 +1,9 @@ +package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant; + +import org.springframework.data.jpa.repository.JpaRepository; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; + +import java.util.UUID; + +public interface WritRepository extends JpaRepository { +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java index 8408b41335..db6ee9b249 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java @@ -16,13 +16,13 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementSelectedDefendantEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementRiskProfileEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.EnforcementWritEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; import uk.gov.hmcts.reform.pcs.ccd.event.EventId; import uk.gov.hmcts.reform.pcs.ccd.repository.PcsCaseRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementOrderRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementRiskProfileRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementSelectedDefendantRepository; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementWritRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.WritRepository; import uk.gov.hmcts.reform.pcs.ccd.service.DraftCaseDataService; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.writ.WritDetailsMapper; import uk.gov.hmcts.reform.pcs.exception.CaseNotFoundException; @@ -44,7 +44,7 @@ public class EnforcementOrderService { private final EnforcementSelectedDefendantRepository enforcementSelectedDefendantRepository; private final SelectedDefendantsMapper selectedDefendantsMapper; private final WritDetailsMapper writDetailsMapper; - private final EnforcementWritRepository enforcementWritRepository; + private final WritRepository writRepository; public EnforcementOrderEntity loadEnforcementOrder(UUID id) { return enforcementOrderRepository.findById(id) @@ -95,9 +95,9 @@ private void createEnforcementOrder(long caseReference, EnforcementOrder enforce } private void storeEnforcementWrit(EnforcementOrderEntity orderEntity, WritDetails writDetails) { - EnforcementWritEntity writEntity = writDetailsMapper.toEntity(writDetails); + WritEntity writEntity = writDetailsMapper.toEntity(writDetails); writEntity.setEnforcementOrder(orderEntity); - enforcementWritRepository.save(writEntity); + writRepository.save(writEntity); } private EnforcementRiskProfileEntity mapToRiskProfile( diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java index 5bdc12843e..e2405d7a20 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java @@ -7,14 +7,14 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.MoneyOwedByDefendants; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.NameAndAddressForEviction; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.EnforcementWritEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; @Component @Slf4j public class WritDetailsMapper { - public EnforcementWritEntity toEntity(WritDetails writDetails) { - EnforcementWritEntity entity = new EnforcementWritEntity(); + public WritEntity toEntity(WritDetails writDetails) { + WritEntity entity = new WritEntity(); // Map NameAndAddressForEviction fields mapNameAndAddressForEviction(writDetails.getNameAndAddressForEviction(), entity); @@ -38,20 +38,20 @@ public EnforcementWritEntity toEntity(WritDetails writDetails) { } private void mapNameAndAddressForEviction(NameAndAddressForEviction nameAndAddress, - EnforcementWritEntity entity) { + WritEntity entity) { if (nameAndAddress != null) { entity.setCorrectNameAndAddress(nameAndAddress.getCorrectNameAndAddress()); } } - private void mapLandRegistryFees(LandRegistryFees landRegistryFees, EnforcementWritEntity entity) { + private void mapLandRegistryFees(LandRegistryFees landRegistryFees, WritEntity entity) { if (landRegistryFees != null) { entity.setHaveLandRegistryFeesBeenPaid(landRegistryFees.getHaveLandRegistryFeesBeenPaid()); entity.setAmountOfLandRegistryFees(landRegistryFees.getAmountOfLandRegistryFees()); } } - private void mapLegalCosts(LegalCosts legalCosts, EnforcementWritEntity entity) { + private void mapLegalCosts(LegalCosts legalCosts, WritEntity entity) { if (legalCosts != null) { entity.setAreLegalCostsToBeClaimed(legalCosts.getAreLegalCostsToBeClaimed()); entity.setAmountOfLegalCosts(legalCosts.getAmountOfLegalCosts()); @@ -59,7 +59,7 @@ private void mapLegalCosts(LegalCosts legalCosts, EnforcementWritEntity entity) } private void mapMoneyOwedByDefendants(MoneyOwedByDefendants moneyOwedByDefendants, - EnforcementWritEntity entity) { + WritEntity entity) { if (moneyOwedByDefendants != null) { entity.setAmountOwed(moneyOwedByDefendants.getAmountOwed()); } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java index af7620b81f..d6b6214abf 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java @@ -13,7 +13,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.MoneyOwedByDefendants; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.NameAndAddressForEviction; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.EnforcementWritEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; import java.math.BigDecimal; @@ -28,9 +28,6 @@ class WritDetailsMapperTest { private WritDetails writDetails; private NameAndAddressForEviction nameAndAddressForEviction; - private LandRegistryFees landRegistryFees; - private LegalCosts legalCosts; - private MoneyOwedByDefendants moneyOwedByDefendants; @BeforeEach void setUp() { @@ -38,17 +35,17 @@ void setUp() { .correctNameAndAddress(VerticalYesNo.YES) .build(); - landRegistryFees = LandRegistryFees.builder() + LandRegistryFees landRegistryFees = LandRegistryFees.builder() .haveLandRegistryFeesBeenPaid(VerticalYesNo.YES) .amountOfLandRegistryFees(new BigDecimal("500.00")) .build(); - legalCosts = LegalCosts.builder() + LegalCosts legalCosts = LegalCosts.builder() .areLegalCostsToBeClaimed(VerticalYesNo.YES) .amountOfLegalCosts(new BigDecimal("1500.00")) .build(); - moneyOwedByDefendants = MoneyOwedByDefendants.builder() + MoneyOwedByDefendants moneyOwedByDefendants = MoneyOwedByDefendants.builder() .amountOwed(new BigDecimal("3000.00")) .build(); @@ -68,7 +65,7 @@ void setUp() { @Test void shouldMapAllFieldsSuccessfully() { // When - EnforcementWritEntity entity = underTest.toEntity(writDetails); + WritEntity entity = underTest.toEntity(writDetails); // Then assertThat(entity.getCorrectNameAndAddress()).isEqualTo(VerticalYesNo.YES); @@ -89,7 +86,7 @@ void shouldHandleNullNameAndAddressForEviction() { writDetails.setNameAndAddressForEviction(null); // When - EnforcementWritEntity entity = underTest.toEntity(writDetails); + WritEntity entity = underTest.toEntity(writDetails); // Then assertThat(entity.getCorrectNameAndAddress()).isNull(); @@ -102,7 +99,7 @@ void shouldHandleNullLandRegistryFees() { writDetails.setLandRegistryFees(null); // When - EnforcementWritEntity entity = underTest.toEntity(writDetails); + WritEntity entity = underTest.toEntity(writDetails); // Then assertThat(entity.getHaveLandRegistryFeesBeenPaid()).isNull(); @@ -116,7 +113,7 @@ void shouldHandleNullLegalCosts() { writDetails.setLegalCosts(null); // When - EnforcementWritEntity entity = underTest.toEntity(writDetails); + WritEntity entity = underTest.toEntity(writDetails); // Then assertThat(entity.getAreLegalCostsToBeClaimed()).isNull(); @@ -130,7 +127,7 @@ void shouldHandleNullMoneyOwedByDefendants() { writDetails.setMoneyOwedByDefendants(null); // When - EnforcementWritEntity entity = underTest.toEntity(writDetails); + WritEntity entity = underTest.toEntity(writDetails); // Then assertThat(entity.getAmountOwed()).isNull(); @@ -146,7 +143,7 @@ void shouldHandleAllNullCompositeObjects() { writDetails.setMoneyOwedByDefendants(null); // When - EnforcementWritEntity entity = underTest.toEntity(writDetails); + WritEntity entity = underTest.toEntity(writDetails); assertThat(entity.getCorrectNameAndAddress()).isNull(); assertThat(entity.getHaveLandRegistryFeesBeenPaid()).isNull(); @@ -179,7 +176,7 @@ void shouldMapWithAllNoValues() { .build(); // When - EnforcementWritEntity entity = underTest.toEntity(noWritDetails); + WritEntity entity = underTest.toEntity(noWritDetails); // Then assertThat(entity.getCorrectNameAndAddress()).isEqualTo(VerticalYesNo.NO); @@ -209,7 +206,7 @@ void shouldMapWithZeroAmounts() { .build(); // When - EnforcementWritEntity entity = underTest.toEntity(zeroAmountWritDetails); + WritEntity entity = underTest.toEntity(zeroAmountWritDetails); // Then assertThat(entity.getAmountOfLandRegistryFees()).isEqualByComparingTo(BigDecimal.ZERO); @@ -237,7 +234,7 @@ void shouldMapWithLargeAmounts() { .build(); // When - EnforcementWritEntity entity = underTest.toEntity(largeAmountWritDetails); + WritEntity entity = underTest.toEntity(largeAmountWritDetails); // Then assertThat(entity.getAmountOfLandRegistryFees()).isEqualByComparingTo(largeAmount); @@ -252,7 +249,7 @@ void shouldMapWithMaxLengthHceoDetails() { writDetails.setHceoDetails(maxLengthHceoDetails); // When - EnforcementWritEntity entity = underTest.toEntity(writDetails); + WritEntity entity = underTest.toEntity(writDetails); // Then assertThat(entity.getHceoDetails()).hasSize(120); @@ -265,7 +262,7 @@ void shouldMapWithNullHceoDetails() { writDetails.setHceoDetails(null); // When - EnforcementWritEntity entity = underTest.toEntity(writDetails); + WritEntity entity = underTest.toEntity(writDetails); // Then assertThat(entity.getHceoDetails()).isNull(); @@ -275,8 +272,8 @@ void shouldMapWithNullHceoDetails() { @Test void shouldCreateNewEntityInstanceOnEachCall() { // When - EnforcementWritEntity entity1 = underTest.toEntity(writDetails); - EnforcementWritEntity entity2 = underTest.toEntity(writDetails); + WritEntity entity1 = underTest.toEntity(writDetails); + WritEntity entity2 = underTest.toEntity(writDetails); // Then assertThat(entity1).isNotSameAs(entity2); @@ -295,7 +292,7 @@ void shouldMapPartialDataCorrectly() { .build(); // When - EnforcementWritEntity entity = underTest.toEntity(partialWritDetails); + WritEntity entity = underTest.toEntity(partialWritDetails); // Then assertThat(entity.getHasHiredHighCourtEnforcementOfficer()).isEqualTo(VerticalYesNo.NO); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java index 6add9e7f0f..010cd3c372 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java @@ -9,7 +9,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.ClaimEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.EnforcementWritEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; import java.io.File; import java.io.FileWriter; @@ -57,7 +57,7 @@ void shouldCaptureAllMissingEntityFieldsFromTheEnforcementDomain() throws IOExce domainDataModelSupportHelper.addFieldsToIgnore("enforcementOrder", "enforcementLanguageUsed", "writDetails"); List missingFields = - domainDataModelSupportHelper.findMissingCCDFields(EnforcementWritEntity.class); + domainDataModelSupportHelper.findMissingCCDFields(WritEntity.class); consoleOutput(missingFields); @@ -75,7 +75,7 @@ void shouldCaptureAllMissingEntityFieldsFromTheEnforcementWritDetailsDomain() th domainDataModelSupportHelper.addFieldsToIgnore("enforcementOrder", "warrantDetails", "enforcementLanguageUsed"); List missingFields = - domainDataModelSupportHelper.findMissingCCDFields(EnforcementWritEntity.class); + domainDataModelSupportHelper.findMissingCCDFields(WritEntity.class); consoleOutput(missingFields); From 57c9b6bf4de9556964c63f86ec0c463672225d61 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Thu, 19 Feb 2026 17:02:15 +0000 Subject: [PATCH 05/54] Introduce `EnforcementTypeStrategy` framework and refactor `EnforcementOrderService` to delegate specific processing logic for Writ and Warrant to their respective strategies. Update services, mappers, and tests accordingly. --- ...fileEntity.java => RiskProfileEntity.java} | 2 +- ...tity.java => SelectedDefendantEntity.java} | 2 +- ...sitory.java => RiskProfileRepository.java} | 6 +- ....java => SelectedDefendantRepository.java} | 6 +- .../strategy/EnforcementTypeStrategy.java | 10 + .../EnforcementTypeStrategyFactory.java | 23 ++ .../strategy/WarrantStrategy.java | 72 ++++ .../strategy/WritStrategy.java | 29 ++ .../warrant/EnforcementOrderService.java | 89 +---- .../warrant/SelectedDefendantsMapper.java | 6 +- .../EnforcementOrderServiceTest.java | 324 +----------------- .../SelectedDefendantsMapperTest.java | 6 +- .../EnforcementTypeStrategyFactoryTest.java | 63 ++++ .../strategy/WarrantStrategyTest.java | 319 +++++++++++++++++ .../strategy/WritStrategyTest.java | 217 ++++++++++++ 15 files changed, 767 insertions(+), 407 deletions(-) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/warrant/{EnforcementRiskProfileEntity.java => RiskProfileEntity.java} (97%) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/warrant/{EnforcementSelectedDefendantEntity.java => SelectedDefendantEntity.java} (95%) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/{EnforcementRiskProfileRepository.java => RiskProfileRepository.java} (60%) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/{EnforcementSelectedDefendantRepository.java => SelectedDefendantRepository.java} (63%) create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategy.java create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactory.java create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategy.java create mode 100644 src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java create mode 100644 src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java create mode 100644 src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/warrant/EnforcementRiskProfileEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/warrant/RiskProfileEntity.java similarity index 97% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/warrant/EnforcementRiskProfileEntity.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/warrant/RiskProfileEntity.java index 8f6fa3440d..8752a82ec3 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/warrant/EnforcementRiskProfileEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/warrant/RiskProfileEntity.java @@ -25,7 +25,7 @@ @Table(name = "enf_risk_profile") @Getter @Setter -public class EnforcementRiskProfileEntity { +public class RiskProfileEntity { @Id @GeneratedValue(strategy = GenerationType.UUID) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/warrant/EnforcementSelectedDefendantEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/warrant/SelectedDefendantEntity.java similarity index 95% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/warrant/EnforcementSelectedDefendantEntity.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/warrant/SelectedDefendantEntity.java index c7461d6333..3a0cb69be1 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/warrant/EnforcementSelectedDefendantEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/warrant/SelectedDefendantEntity.java @@ -25,7 +25,7 @@ @NoArgsConstructor @AllArgsConstructor @Builder -public class EnforcementSelectedDefendantEntity { +public class SelectedDefendantEntity { @Id @GeneratedValue(strategy = GenerationType.UUID) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementRiskProfileRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/RiskProfileRepository.java similarity index 60% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementRiskProfileRepository.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/RiskProfileRepository.java index 9185a5683a..2260075c3a 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementRiskProfileRepository.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/RiskProfileRepository.java @@ -1,10 +1,10 @@ package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant; import org.springframework.data.jpa.repository.JpaRepository; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementRiskProfileEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; import java.util.UUID; -public interface EnforcementRiskProfileRepository - extends JpaRepository { +public interface RiskProfileRepository + extends JpaRepository { } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementSelectedDefendantRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/SelectedDefendantRepository.java similarity index 63% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementSelectedDefendantRepository.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/SelectedDefendantRepository.java index 9573acada8..0809338d97 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementSelectedDefendantRepository.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/SelectedDefendantRepository.java @@ -2,11 +2,11 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementSelectedDefendantEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.SelectedDefendantEntity; import java.util.UUID; @Repository -public interface EnforcementSelectedDefendantRepository extends - JpaRepository { +public interface SelectedDefendantRepository extends + JpaRepository { } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategy.java new file mode 100644 index 0000000000..bd86fc2fd7 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategy.java @@ -0,0 +1,10 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy; + +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; + +public interface EnforcementTypeStrategy { + + void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder); + +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactory.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactory.java new file mode 100644 index 0000000000..c02e9a525f --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactory.java @@ -0,0 +1,23 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy; + +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType; + +import java.util.Map; + +@Component +@AllArgsConstructor +public class EnforcementTypeStrategyFactory { + + private final WarrantStrategy warrantStrategy; + private final WritStrategy writStrategy; + + public EnforcementTypeStrategy getStrategy(SelectEnforcementType type) { + return Map.of( + SelectEnforcementType.WARRANT, warrantStrategy, + SelectEnforcementType.WRIT, writStrategy + ).get(type); + } + +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java new file mode 100644 index 0000000000..d062c67a6d --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java @@ -0,0 +1,72 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy; + +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.EnforcementRiskDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.SelectedDefendantEntity; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.RiskProfileRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.SelectedDefendantRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.SelectedDefendantsMapper; + +import java.util.List; + +@Component +@AllArgsConstructor +public class WarrantStrategy implements EnforcementTypeStrategy { + + private final RiskProfileRepository riskProfileRepository; + private final SelectedDefendantsMapper selectedDefendantsMapper; + private final SelectedDefendantRepository selectedDefendantRepository; + + @Override + public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { + RiskProfileEntity riskProfile = mapToRiskProfile(enforcementOrderEntity, enforcementOrder); + riskProfileRepository.save(riskProfile); + } + + private RiskProfileEntity mapToRiskProfile(EnforcementOrderEntity enforcementOrderEntity, + EnforcementOrder enforcementOrder) { + RiskProfileEntity entity = new RiskProfileEntity(); + entity.setEnforcementOrder(enforcementOrderEntity); + WarrantDetails warrantDetails = enforcementOrder.getWarrantDetails(); + if (warrantDetails != null) { + entity.setAnyRiskToBailiff(warrantDetails.getAnyRiskToBailiff()); + EnforcementRiskDetails riskDetails = warrantDetails.getRiskDetails(); + if (riskDetails != null) { + entity.setViolentDetails(riskDetails.getEnforcementViolentDetails()); + entity.setFirearmsDetails(riskDetails.getEnforcementFirearmsDetails()); + entity.setCriminalDetails(riskDetails.getEnforcementCriminalDetails()); + entity.setVerbalThreatsDetails(riskDetails.getEnforcementVerbalOrWrittenThreatsDetails()); + entity.setProtestGroupDetails(riskDetails.getEnforcementProtestGroupMemberDetails()); + entity.setPoliceSocialServicesDetails( + riskDetails.getEnforcementPoliceOrSocialServicesDetails()); + entity.setAnimalsDetails(riskDetails.getEnforcementDogsOrOtherAnimalsDetails()); + } + } + + RawWarrantDetails rawWarrantDetails = enforcementOrder.getRawWarrantDetails(); + if (rawWarrantDetails != null) { + entity.setVulnerablePeoplePresent(rawWarrantDetails.getVulnerablePeoplePresent()); + if (rawWarrantDetails.getVulnerableAdultsChildren() != null) { + entity.setVulnerableCategory( + rawWarrantDetails.getVulnerableAdultsChildren().getVulnerableCategory()); + entity.setVulnerableReasonText( + rawWarrantDetails.getVulnerableAdultsChildren().getVulnerableReasonText()); + } + } + + List selectedDefendantsEntities = + selectedDefendantsMapper.mapToEntities(enforcementOrderEntity); + if (!CollectionUtils.isEmpty(selectedDefendantsEntities)) { + selectedDefendantRepository.saveAll(selectedDefendantsEntities); + } + return entity; + } + +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategy.java new file mode 100644 index 0000000000..c110cce48b --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategy.java @@ -0,0 +1,29 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy; + +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.WritRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.writ.WritDetailsMapper; + +@Component +@AllArgsConstructor +public class WritStrategy implements EnforcementTypeStrategy { + + private final WritDetailsMapper writDetailsMapper; + private final WritRepository writRepository; + + @Override + public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { + WritDetails writDetails = enforcementOrder.getWritDetails(); + if (writDetails != null) { + WritEntity writEntity = writDetailsMapper.toEntity(writDetails); + writEntity.setEnforcementOrder(enforcementOrderEntity); + writRepository.save(writEntity); + } + } + +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java index db6ee9b249..9f1f786469 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java @@ -3,28 +3,16 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.EnforcementRiskDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.ClaimEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.PcsCaseEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementSelectedDefendantEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementRiskProfileEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; import uk.gov.hmcts.reform.pcs.ccd.event.EventId; import uk.gov.hmcts.reform.pcs.ccd.repository.PcsCaseRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementOrderRepository; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementRiskProfileRepository; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementSelectedDefendantRepository; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.WritRepository; import uk.gov.hmcts.reform.pcs.ccd.service.DraftCaseDataService; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.writ.WritDetailsMapper; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy.EnforcementTypeStrategyFactory; import uk.gov.hmcts.reform.pcs.exception.CaseNotFoundException; import uk.gov.hmcts.reform.pcs.exception.ClaimNotFoundException; import uk.gov.hmcts.reform.pcs.exception.EnforcementOrderNotFoundException; @@ -38,20 +26,15 @@ public class EnforcementOrderService { private final EnforcementOrderRepository enforcementOrderRepository; - private final EnforcementRiskProfileRepository enforcementRiskProfileRepository; private final PcsCaseRepository pcsCaseRepository; private final DraftCaseDataService draftCaseDataService; - private final EnforcementSelectedDefendantRepository enforcementSelectedDefendantRepository; - private final SelectedDefendantsMapper selectedDefendantsMapper; - private final WritDetailsMapper writDetailsMapper; - private final WritRepository writRepository; + private final EnforcementTypeStrategyFactory strategyFactory; public EnforcementOrderEntity loadEnforcementOrder(UUID id) { return enforcementOrderRepository.findById(id) .orElseThrow(() -> new EnforcementOrderNotFoundException(id)); } - @Transactional public void saveAndClearDraftData(long caseReference, EnforcementOrder enforcementOrder) { createEnforcementOrder(caseReference, enforcementOrder); draftCaseDataService.deleteUnsubmittedCaseData(caseReference, EventId.enforceTheOrder); @@ -70,69 +53,19 @@ private void createEnforcementOrder(long caseReference, EnforcementOrder enforce // Assuming 1 claim per PcsCase ClaimEntity claimEntity = claimEntities.getFirst(); + EnforcementOrderEntity orderEntity = enforcementOrderRepository + .save(mapToEntity(enforcementOrder, claimEntity)); - EnforcementOrderEntity enforcementOrderEntity = new EnforcementOrderEntity(); - enforcementOrderEntity.setClaim(claimEntity); - enforcementOrderEntity.setEnforcementOrder(enforcementOrder); + strategyFactory.getStrategy(enforcementOrder.getSelectEnforcementType()) + .process(orderEntity, enforcementOrder); - EnforcementOrderEntity orderEntity = enforcementOrderRepository.save(enforcementOrderEntity); - - if (enforcementOrder.getSelectEnforcementType() == SelectEnforcementType.WARRANT) { - EnforcementRiskProfileEntity riskProfile = mapToRiskProfile(enforcementOrderEntity, enforcementOrder); - enforcementRiskProfileRepository.save(riskProfile); - } - - List selectedDefendantsEntities = - selectedDefendantsMapper.mapToEntities(enforcementOrderEntity); - - if (!CollectionUtils.isEmpty(selectedDefendantsEntities)) { - enforcementSelectedDefendantRepository.saveAll(selectedDefendantsEntities); - } - if (enforcementOrder.getSelectEnforcementType() == SelectEnforcementType.WRIT - && enforcementOrder.getWritDetails() != null) { - storeEnforcementWrit(orderEntity, enforcementOrder.getWritDetails()); - } } - private void storeEnforcementWrit(EnforcementOrderEntity orderEntity, WritDetails writDetails) { - WritEntity writEntity = writDetailsMapper.toEntity(writDetails); - writEntity.setEnforcementOrder(orderEntity); - writRepository.save(writEntity); + private EnforcementOrderEntity mapToEntity(EnforcementOrder enforcementOrder, ClaimEntity claimEntity) { + EnforcementOrderEntity enforcementOrderEntity = new EnforcementOrderEntity(); + enforcementOrderEntity.setClaim(claimEntity); + enforcementOrderEntity.setEnforcementOrder(enforcementOrder); + return enforcementOrderEntity; } - private EnforcementRiskProfileEntity mapToRiskProfile( - EnforcementOrderEntity enforcementOrderEntity, - EnforcementOrder enforcementOrder) { - EnforcementRiskProfileEntity entity = new EnforcementRiskProfileEntity(); - entity.setEnforcementOrder(enforcementOrderEntity); - - WarrantDetails warrantDetails = enforcementOrder.getWarrantDetails(); - if (warrantDetails != null) { - entity.setAnyRiskToBailiff(warrantDetails.getAnyRiskToBailiff()); - EnforcementRiskDetails riskDetails = warrantDetails.getRiskDetails(); - if (riskDetails != null) { - entity.setViolentDetails(riskDetails.getEnforcementViolentDetails()); - entity.setFirearmsDetails(riskDetails.getEnforcementFirearmsDetails()); - entity.setCriminalDetails(riskDetails.getEnforcementCriminalDetails()); - entity.setVerbalThreatsDetails(riskDetails.getEnforcementVerbalOrWrittenThreatsDetails()); - entity.setProtestGroupDetails(riskDetails.getEnforcementProtestGroupMemberDetails()); - entity.setPoliceSocialServicesDetails( - riskDetails.getEnforcementPoliceOrSocialServicesDetails()); - entity.setAnimalsDetails(riskDetails.getEnforcementDogsOrOtherAnimalsDetails()); - } - } - - RawWarrantDetails rawWarrantDetails = enforcementOrder.getRawWarrantDetails(); - if (rawWarrantDetails != null) { - entity.setVulnerablePeoplePresent(rawWarrantDetails.getVulnerablePeoplePresent()); - if (rawWarrantDetails.getVulnerableAdultsChildren() != null) { - entity.setVulnerableCategory( - rawWarrantDetails.getVulnerableAdultsChildren().getVulnerableCategory()); - entity.setVulnerableReasonText( - rawWarrantDetails.getVulnerableAdultsChildren().getVulnerableReasonText()); - } - } - - return entity; - } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/SelectedDefendantsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/SelectedDefendantsMapper.java index 7b7e1abae4..62f4b3c020 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/SelectedDefendantsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/SelectedDefendantsMapper.java @@ -3,7 +3,7 @@ import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementSelectedDefendantEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.SelectedDefendantEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.PartyRepository; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicMultiSelectStringList; @@ -19,7 +19,7 @@ public class SelectedDefendantsMapper { private final PartyRepository partyRepository; - public List mapToEntities( + public List mapToEntities( EnforcementOrderEntity enforcementOrderEntity) { DynamicMultiSelectStringList selectedDefendants = @@ -38,7 +38,7 @@ public List mapToEntities( List parties = partyRepository.findAllById(selectedIds); return parties.stream() - .map(party -> EnforcementSelectedDefendantEntity.builder() + .map(party -> SelectedDefendantEntity.builder() .enforcementCase(enforcementOrderEntity) .party(party) .build() diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java index 42ea3ffff6..193a941102 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java @@ -7,43 +7,26 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; -import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.VulnerableCategory; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.NameAndAddressForEviction; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PeopleToEvict; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.ClaimEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.PcsCaseEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementSelectedDefendantEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementRiskProfileEntity; import uk.gov.hmcts.reform.pcs.ccd.event.EventId; import uk.gov.hmcts.reform.pcs.ccd.repository.PcsCaseRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementOrderRepository; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementRiskProfileRepository; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementSelectedDefendantRepository; import uk.gov.hmcts.reform.pcs.ccd.service.DraftCaseDataService; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy.EnforcementTypeStrategy; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy.EnforcementTypeStrategyFactory; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.EnforcementOrderService; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.SelectedDefendantsMapper; -import uk.gov.hmcts.reform.pcs.ccd.type.DynamicStringListElement; -import uk.gov.hmcts.reform.pcs.exception.ClaimNotFoundException; -import uk.gov.hmcts.reform.pcs.exception.EnforcementOrderNotFoundException; -import java.util.List; import java.util.Optional; import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.times; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @@ -51,53 +34,24 @@ class EnforcementOrderServiceTest { @Mock private DraftCaseDataService draftCaseDataService; - @Mock private EnforcementOrderRepository enforcementOrderRepository; - - @Mock - private EnforcementRiskProfileRepository enforcementRiskProfileRepository; - @Mock private PcsCaseRepository pcsCaseRepository; - @Mock - private EnforcementSelectedDefendantRepository enforcementSelectedDefendantRepository; + private EnforcementTypeStrategyFactory strategyFactory; @InjectMocks private EnforcementOrderService enforcementOrderService; - @Captor - private ArgumentCaptor> captor; - @Captor private ArgumentCaptor enforcementOrderEntityCaptor; - @Captor - private ArgumentCaptor enforcementRiskProfileEntityCaptor; - - @Mock - private SelectedDefendantsMapper selectedDefendantsMapper; - private final UUID enforcementOrderId = UUID.fromString("f47ac10b-58cc-4372-a567-0e02b2c3d479"); - private final UUID claimId = UUID.fromString("a1b2c3d4-e5f6-7890-1234-567890abcdef"); - private final UUID pcsCaseId = UUID.fromString("7b9e0f1a-2b3c-4d5e-6f7a-8b9c0d1e2f3a"); private static final long CASE_REFERENCE = 1234L; - @Test - void shouldThrowExceptionWhenNoEnforcementOrder() { - // Given - when(enforcementOrderRepository.findById(enforcementOrderId)).thenReturn(Optional.empty()); - - // When & - // Then - assertThatThrownBy(() -> enforcementOrderService.loadEnforcementOrder(enforcementOrderId)) - .isInstanceOf(EnforcementOrderNotFoundException.class) - .hasMessageContaining("No enforcement order found for case reference"); - } - @Test void shouldReturnEnforcementOrderWhenFound() { // Given @@ -126,6 +80,9 @@ void shouldSaveNewSubmittedEnforcementData() { when(pcsCaseRepository.findByCaseReference(CASE_REFERENCE)) .thenReturn(Optional.of(pcsCaseEntity)); + when(enforcementOrderRepository.save(any())).thenReturn(new EnforcementOrderEntity()); + when(strategyFactory.getStrategy(enforcementOrder.getSelectEnforcementType())) + .thenReturn(mock(EnforcementTypeStrategy.class)); // When enforcementOrderService.saveAndClearDraftData(CASE_REFERENCE, enforcementOrder); @@ -134,270 +91,7 @@ void shouldSaveNewSubmittedEnforcementData() { verify(enforcementOrderRepository).save(enforcementOrderEntityCaptor.capture()); EnforcementOrderEntity savedEntity = enforcementOrderEntityCaptor.getValue(); assertThat(savedEntity.getEnforcementOrder()).isEqualTo(enforcementOrder); - - verify(enforcementRiskProfileRepository).save(enforcementRiskProfileEntityCaptor.capture()); - EnforcementRiskProfileEntity savedRiskProfile = enforcementRiskProfileEntityCaptor.getValue(); - assertThat(savedRiskProfile.getEnforcementOrder()).isEqualTo(savedEntity); - assertThat(savedRiskProfile.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.YES); - assertThat(savedRiskProfile.getViolentDetails()).isEqualTo("Violent"); - assertThat(savedRiskProfile.getVerbalThreatsDetails()).isEqualTo("Verbal"); - } - - @Test - void shouldThrowExceptionWhenNoClaimFound() { - // Given - final PcsCaseEntity pcsCaseEntity = EnforcementDataUtil.buildPcsCaseEntity(pcsCaseId, claimId); - pcsCaseEntity.setClaims(null); - final EnforcementOrder enforcementOrder = EnforcementDataUtil.buildEnforcementOrder(); - - when(pcsCaseRepository.findByCaseReference(CASE_REFERENCE)) - .thenReturn(Optional.of(pcsCaseEntity)); - - // When & - // Then - assertThatThrownBy(() -> - enforcementOrderService.saveAndClearDraftData(CASE_REFERENCE, enforcementOrder)) - .isInstanceOf(ClaimNotFoundException.class) - .hasMessageContaining("No claim found for case reference"); - verifyNoInteractions(draftCaseDataService); - verifyNoInteractions(enforcementRiskProfileRepository); - } - - @Test - void shouldDeleteDraftEnforcementDataWhenSubmittedSuccessfully() { - // Given - final PcsCaseEntity pcsCaseEntity = EnforcementDataUtil.buildPcsCaseEntity(pcsCaseId, claimId); - final EnforcementOrder enforcementOrder = EnforcementDataUtil.buildEnforcementOrder(); - - when(pcsCaseRepository.findByCaseReference(CASE_REFERENCE)) - .thenReturn(Optional.of(pcsCaseEntity)); - - // When - enforcementOrderService.saveAndClearDraftData(CASE_REFERENCE, enforcementOrder); - - // Then - verify(draftCaseDataService).deleteUnsubmittedCaseData(CASE_REFERENCE, EventId.enforceTheOrder); - } - - @Test - void shouldPersistRiskProfileWithMinimalDataWhenWarrantButNoWarrantOrRawDetails() { - // Given: WARRANT type but no warrant or raw details - final PcsCaseEntity pcsCaseEntity = EnforcementDataUtil.buildPcsCaseEntity(pcsCaseId, claimId); - final EnforcementOrder enforcementOrder = EnforcementOrder.builder() - .selectEnforcementType(SelectEnforcementType.WARRANT) - .build(); - - when(pcsCaseRepository.findByCaseReference(CASE_REFERENCE)) - .thenReturn(Optional.of(pcsCaseEntity)); - - // When - enforcementOrderService.saveAndClearDraftData(CASE_REFERENCE, enforcementOrder); - - // Then: risk profile is still saved with null risk/vulnerability fields - verify(enforcementRiskProfileRepository).save(enforcementRiskProfileEntityCaptor.capture()); - EnforcementRiskProfileEntity savedRiskProfile = enforcementRiskProfileEntityCaptor.getValue(); - assertThat(savedRiskProfile.getAnyRiskToBailiff()).isNull(); - assertThat(savedRiskProfile.getVulnerablePeoplePresent()).isNull(); - assertThat(savedRiskProfile.getVulnerableCategory()).isNull(); - assertThat(savedRiskProfile.getVulnerableReasonText()).isNull(); - assertThat(savedRiskProfile.getViolentDetails()).isNull(); - assertThat(savedRiskProfile.getVerbalThreatsDetails()).isNull(); - } - - @Test - void shouldNotPersistRiskProfileWhenEnforcementTypeIsWrit() { - // Given: WRIT type (risk profile only applies to warrant) - final PcsCaseEntity pcsCaseEntity = EnforcementDataUtil.buildPcsCaseEntity(pcsCaseId, claimId); - final EnforcementOrder enforcementOrder = EnforcementOrder.builder() - .selectEnforcementType(SelectEnforcementType.WRIT) - .build(); - - when(pcsCaseRepository.findByCaseReference(CASE_REFERENCE)) - .thenReturn(Optional.of(pcsCaseEntity)); - - // When - enforcementOrderService.saveAndClearDraftData(CASE_REFERENCE, enforcementOrder); - - // Then - verify(enforcementOrderRepository).save(enforcementOrderEntityCaptor.capture()); - verifyNoInteractions(enforcementRiskProfileRepository); - } - - @Test - void shouldNotPersistRiskProfileWhenEnforcementTypeIsNull() { - // Given: no enforcement type set - final PcsCaseEntity pcsCaseEntity = EnforcementDataUtil.buildPcsCaseEntity(pcsCaseId, claimId); - final EnforcementOrder enforcementOrder = EnforcementOrder.builder().build(); - - when(pcsCaseRepository.findByCaseReference(CASE_REFERENCE)) - .thenReturn(Optional.of(pcsCaseEntity)); - - // When - enforcementOrderService.saveAndClearDraftData(CASE_REFERENCE, enforcementOrder); - - // Then - verify(enforcementOrderRepository).save(enforcementOrderEntityCaptor.capture()); - verifyNoInteractions(enforcementRiskProfileRepository); - } - - @Test - void shouldPersistVulnerabilityDetailsInRiskProfile() { - // Given: order with raw warrant details (vulnerability) - final PcsCaseEntity pcsCaseEntity = EnforcementDataUtil.buildPcsCaseEntity(pcsCaseId, claimId); - final EnforcementOrder enforcementOrder = EnforcementDataUtil.buildEnforcementOrderWithVulnerability(); - - when(pcsCaseRepository.findByCaseReference(CASE_REFERENCE)) - .thenReturn(Optional.of(pcsCaseEntity)); - - // When - enforcementOrderService.saveAndClearDraftData(CASE_REFERENCE, enforcementOrder); - - // Then - verify(enforcementRiskProfileRepository).save(enforcementRiskProfileEntityCaptor.capture()); - EnforcementRiskProfileEntity savedRiskProfile = enforcementRiskProfileEntityCaptor.getValue(); - assertThat(savedRiskProfile.getVulnerablePeoplePresent()).isEqualTo(YesNoNotSure.YES); - assertThat(savedRiskProfile.getVulnerableCategory()).isEqualTo(VulnerableCategory.VULNERABLE_ADULTS); - assertThat(savedRiskProfile.getVulnerableReasonText()).isEqualTo("Vulnerability reason"); + verify(draftCaseDataService).deleteUnsubmittedCaseData(anyLong(), any(EventId.class)); } - @Test - void shouldAddSelectedDefendantsWhenProvided() { - // Given - final PcsCaseEntity pcsCaseEntity = EnforcementDataUtil.buildPcsCaseEntity(pcsCaseId, claimId); - String jessMayID = UUID.randomUUID().toString(); - - List selected = List.of( - new DynamicStringListElement(jessMayID, "Jess May") - ); - - List listItems = List.of( - new DynamicStringListElement(jessMayID, "Jess May") - ); - - final EnforcementOrder enforcementOrder = - EnforcementDataUtil.buildEnforcementOrderWithSelectedDefendants(selected, listItems); - - when(pcsCaseRepository.findByCaseReference(CASE_REFERENCE)) - .thenReturn(Optional.of(pcsCaseEntity)); - - PartyEntity partyJessMay = PartyEntity.builder() - .id(UUID.fromString(jessMayID)) - .firstName("Jess") - .lastName("May") - .build(); - - EnforcementOrderEntity enforcementOrderEntity = new EnforcementOrderEntity(); - enforcementOrderEntity.setEnforcementOrder(enforcementOrder); - - EnforcementSelectedDefendantEntity entity = new EnforcementSelectedDefendantEntity(); - entity.setEnforcementCase(enforcementOrderEntity); - entity.setParty(partyJessMay); - - when(selectedDefendantsMapper.mapToEntities(any(EnforcementOrderEntity.class))) - .thenReturn(List.of(entity)); - - // When - enforcementOrderService.saveAndClearDraftData(CASE_REFERENCE, enforcementOrder); - - // Then - verify(draftCaseDataService) - .deleteUnsubmittedCaseData(CASE_REFERENCE, EventId.enforceTheOrder); - - verify(enforcementSelectedDefendantRepository, times(1)).saveAll(captor.capture()); - List savedEntities = captor.getValue(); - assertThat(savedEntities).hasSize(1); - - EnforcementSelectedDefendantEntity savedEntity = savedEntities.getFirst(); - - assertThat(savedEntity.getParty().getId()).isEqualTo(UUID.fromString(jessMayID)); - assertThat(savedEntity.getParty().getFirstName()).isEqualTo("Jess"); - assertThat(savedEntity.getParty().getLastName()).isEqualTo("May"); - } - - @Test - void shouldAddMultipleSelectedDefendantsWhenProvided() { - // Given - final PcsCaseEntity pcsCaseEntity = EnforcementDataUtil.buildPcsCaseEntity(pcsCaseId, claimId); - String jessMayID = UUID.randomUUID().toString(); - String jamesMayID = UUID.randomUUID().toString(); - - List selected = List.of( - new DynamicStringListElement(jessMayID, "Jess May"), - new DynamicStringListElement(jamesMayID, "James May") - ); - - List listItems = List.of( - new DynamicStringListElement(jessMayID, "Jess May"), - new DynamicStringListElement(jamesMayID, "James May") - ); - - final EnforcementOrder enforcementOrder = - EnforcementDataUtil.buildEnforcementOrderWithSelectedDefendants(selected, listItems); - - when(pcsCaseRepository.findByCaseReference(CASE_REFERENCE)) - .thenReturn(Optional.of(pcsCaseEntity)); - - PartyEntity partyJessMay = PartyEntity.builder() - .id(UUID.fromString(jessMayID)) - .firstName("Jess") - .lastName("May") - .build(); - - PartyEntity partyJamesMay = PartyEntity.builder() - .id(UUID.fromString(jamesMayID)) - .firstName("James") - .lastName("May") - .build(); - - EnforcementSelectedDefendantEntity entityJess = new EnforcementSelectedDefendantEntity(); - entityJess.setParty(partyJessMay); - - EnforcementSelectedDefendantEntity entityJames = new EnforcementSelectedDefendantEntity(); - entityJames.setParty(partyJamesMay); - - when(selectedDefendantsMapper.mapToEntities(any(EnforcementOrderEntity.class))) - .thenReturn(List.of(entityJess, entityJames)); - - // When - enforcementOrderService.saveAndClearDraftData(CASE_REFERENCE, enforcementOrder); - - // Then - verify(enforcementSelectedDefendantRepository, times(1)).saveAll(captor.capture()); - List savedEntities = captor.getValue(); - - assertThat(savedEntities).hasSize(2); - assertThat(savedEntities) - .extracting(EnforcementSelectedDefendantEntity::getParty) - .containsExactlyInAnyOrder(partyJessMay, partyJamesMay); - } - - - @Test - void shouldNotAddAnySelectedDefendantsWhenEvictEveryoneIsYes() { - // Given - final PcsCaseEntity pcsCaseEntity = EnforcementDataUtil.buildPcsCaseEntity(pcsCaseId, claimId); - - final EnforcementOrder enforcementOrder = EnforcementOrder.builder() - .selectEnforcementType(SelectEnforcementType.WARRANT) - .warrantDetails(WarrantDetails.builder() - .nameAndAddressForEviction(NameAndAddressForEviction.builder() - .correctNameAndAddress(VerticalYesNo.YES) - .build()) - .peopleToEvict(PeopleToEvict.builder() - .evictEveryone(VerticalYesNo.YES) - .build()) - .build()) - .rawWarrantDetails(RawWarrantDetails.builder().selectedDefendants(null).build()) - .build(); - - when(pcsCaseRepository.findByCaseReference(CASE_REFERENCE)) - .thenReturn(Optional.of(pcsCaseEntity)); - - // When - enforcementOrderService.saveAndClearDraftData(CASE_REFERENCE, enforcementOrder); - - // Then - verifyNoInteractions(enforcementSelectedDefendantRepository); - verify(draftCaseDataService).deleteUnsubmittedCaseData(CASE_REFERENCE, EventId.enforceTheOrder); - } } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/SelectedDefendantsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/SelectedDefendantsMapperTest.java index 224b4f5416..86573ba180 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/SelectedDefendantsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/SelectedDefendantsMapperTest.java @@ -11,7 +11,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementSelectedDefendantEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.SelectedDefendantEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.PartyRepository; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.SelectedDefendantsMapper; @@ -73,7 +73,7 @@ void shouldMapSelectedDefendantsToEntities() { // When - List entities = + List entities = selectedDefendantsMapper.mapToEntities(enforcementOrderEntity); // Then @@ -101,7 +101,7 @@ void shouldReturnEmptyListWhenNoSelectedDefendants() { enforcementOrderEntity.setEnforcementOrder(enforcementOrder); // When - List entities = + List entities = selectedDefendantsMapper.mapToEntities(enforcementOrderEntity); // Then diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java new file mode 100644 index 0000000000..83be3da88c --- /dev/null +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java @@ -0,0 +1,63 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy; + +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 uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType; + +import static org.assertj.core.api.Assertions.assertThat; + +@ExtendWith(MockitoExtension.class) +class EnforcementTypeStrategyFactoryTest { + + @Mock + private WarrantStrategy warrantStrategy; + @Mock + private WritStrategy writStrategy; + + @InjectMocks + private EnforcementTypeStrategyFactory underTest; + + @Test + void shouldReturnWarrantStrategyForWarrantType() { + // When + EnforcementTypeStrategy strategy = underTest.getStrategy(SelectEnforcementType.WARRANT); + + // Then + assertThat(strategy).isSameAs(warrantStrategy); + } + + @Test + void shouldReturnWritStrategyForWritType() { + // When + EnforcementTypeStrategy strategy = underTest.getStrategy(SelectEnforcementType.WRIT); + + // Then + assertThat(strategy).isSameAs(writStrategy); + } + + @Test + void shouldReturnDifferentStrategiesForDifferentTypes() { + // When + EnforcementTypeStrategy warrantResult = underTest.getStrategy(SelectEnforcementType.WARRANT); + EnforcementTypeStrategy writResult = underTest.getStrategy(SelectEnforcementType.WRIT); + + // Then + assertThat(warrantResult).isNotSameAs(writResult); + assertThat(warrantResult).isSameAs(warrantStrategy); + assertThat(writResult).isSameAs(writStrategy); + } + + @Test + void shouldConsistentlyReturnSameStrategyInstance() { + // When + EnforcementTypeStrategy firstCall = underTest.getStrategy(SelectEnforcementType.WARRANT); + EnforcementTypeStrategy secondCall = underTest.getStrategy(SelectEnforcementType.WARRANT); + + // Then + assertThat(firstCall).isSameAs(secondCall); + assertThat(firstCall).isSameAs(warrantStrategy); + } +} diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java new file mode 100644 index 0000000000..567940cb2b --- /dev/null +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java @@ -0,0 +1,319 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InOrder; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.EnforcementRiskDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.VulnerableAdultsChildren; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.SelectedDefendantEntity; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.RiskProfileRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.SelectedDefendantRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.SelectedDefendantsMapper; + +import java.util.Collections; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.VulnerableCategory.VULNERABLE_CHILDREN; + +@ExtendWith(MockitoExtension.class) +class WarrantStrategyTest { + + @Mock + private RiskProfileRepository riskProfileRepository; + @Mock + private SelectedDefendantsMapper selectedDefendantsMapper; + @Mock + private SelectedDefendantRepository selectedDefendantRepository; + + @InjectMocks + private WarrantStrategy underTest; + + @Captor + private ArgumentCaptor riskProfileCaptor; + + private EnforcementOrderEntity enforcementOrderEntity; + private EnforcementOrder enforcementOrder; + private WarrantDetails warrantDetails; + private RawWarrantDetails rawWarrantDetails; + private EnforcementRiskDetails riskDetails; + + @BeforeEach + void setUp() { + enforcementOrderEntity = mock(EnforcementOrderEntity.class); + + riskDetails = EnforcementRiskDetails.builder() + .enforcementViolentDetails("Violent behavior reported") + .enforcementFirearmsDetails("Firearms present") + .enforcementCriminalDetails("Criminal history") + .enforcementVerbalOrWrittenThreatsDetails("Verbal threats made") + .enforcementProtestGroupMemberDetails("Member of protest group") + .enforcementPoliceOrSocialServicesDetails("Police involvement") + .enforcementDogsOrOtherAnimalsDetails("Aggressive dogs on premises") + .build(); + + warrantDetails = WarrantDetails.builder().anyRiskToBailiff(YesNoNotSure.YES).riskDetails(riskDetails).build(); + + VulnerableAdultsChildren vulnerableAdultsChildren = VulnerableAdultsChildren.builder() + .vulnerableCategory(VULNERABLE_CHILDREN).vulnerableReasonText("Young children present").build(); + + rawWarrantDetails = RawWarrantDetails.builder() + .vulnerablePeoplePresent(YesNoNotSure.YES).vulnerableAdultsChildren(vulnerableAdultsChildren).build(); + + enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails) + .rawWarrantDetails(rawWarrantDetails).build(); + } + + @Test + void shouldProcessWarrantDetailsSuccessfully() { + // Given + RiskProfileEntity savedEntity = new RiskProfileEntity(); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(savedEntity); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) + .thenReturn(Collections.emptyList()); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + assertThat(capturedEntity.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.YES); + assertThat(capturedEntity.getViolentDetails()).isEqualTo("Violent behavior reported"); + assertThat(capturedEntity.getFirearmsDetails()).isEqualTo("Firearms present"); + assertThat(capturedEntity.getCriminalDetails()).isEqualTo("Criminal history"); + assertThat(capturedEntity.getVerbalThreatsDetails()).isEqualTo("Verbal threats made"); + assertThat(capturedEntity.getProtestGroupDetails()).isEqualTo("Member of protest group"); + assertThat(capturedEntity.getPoliceSocialServicesDetails()).isEqualTo("Police involvement"); + assertThat(capturedEntity.getAnimalsDetails()).isEqualTo("Aggressive dogs on premises"); + assertThat(capturedEntity.getVulnerablePeoplePresent()).isEqualTo(YesNoNotSure.YES); + assertThat(capturedEntity.getVulnerableCategory()).isEqualTo(VULNERABLE_CHILDREN); + assertThat(capturedEntity.getVulnerableReasonText()).isEqualTo("Young children present"); + } + + @Test + void shouldHandleNullWarrantDetails() { + // Given + enforcementOrder.setWarrantDetails(null); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) + .thenReturn(Collections.emptyList()); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + assertThat(capturedEntity.getAnyRiskToBailiff()).isNull(); + assertThat(capturedEntity.getViolentDetails()).isNull(); + assertThat(capturedEntity.getFirearmsDetails()).isNull(); + } + + @Test + void shouldHandleNullRiskDetails() { + // Given + warrantDetails.setRiskDetails(null); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) + .thenReturn(Collections.emptyList()); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + assertThat(capturedEntity.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.YES); + assertThat(capturedEntity.getViolentDetails()).isNull(); + assertThat(capturedEntity.getFirearmsDetails()).isNull(); + } + + @Test + void shouldHandleNullRawWarrantDetails() { + // Given + enforcementOrder.setRawWarrantDetails(null); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) + .thenReturn(Collections.emptyList()); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getVulnerablePeoplePresent()).isNull(); + assertThat(capturedEntity.getVulnerableCategory()).isNull(); + assertThat(capturedEntity.getVulnerableReasonText()).isNull(); + } + + @Test + void shouldHandleNullVulnerableAdultsChildren() { + // Given + rawWarrantDetails.setVulnerableAdultsChildren(null); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) + .thenReturn(Collections.emptyList()); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getVulnerablePeoplePresent()).isEqualTo(YesNoNotSure.YES); + assertThat(capturedEntity.getVulnerableCategory()).isNull(); + assertThat(capturedEntity.getVulnerableReasonText()).isNull(); + } + + @Test + void shouldSaveSelectedDefendantsWhenPresent() { + // Given + SelectedDefendantEntity defendant1 = new SelectedDefendantEntity(); + SelectedDefendantEntity defendant2 = new SelectedDefendantEntity(); + List defendants = List.of(defendant1, defendant2); + + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)).thenReturn(defendants); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(selectedDefendantRepository).saveAll(defendants); + } + + @Test + void shouldNotSaveSelectedDefendantsWhenEmpty() { + // Given + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) + .thenReturn(Collections.emptyList()); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(selectedDefendantRepository, never()).saveAll(any()); + } + + @Test + void shouldNotSaveSelectedDefendantsWhenNull() { + // Given + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)).thenReturn(null); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(selectedDefendantRepository, never()).saveAll(any()); + } + + @Test + void shouldHandleWarrantDetailsWithNoRiskToBailiff() { + // Given + warrantDetails.setAnyRiskToBailiff(YesNoNotSure.NO); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) + .thenReturn(Collections.emptyList()); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.NO); + } + + @Test + void shouldHandleMinimalEnforcementOrder() { + // Given + EnforcementOrder minimalOrder = EnforcementOrder.builder().build(); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) + .thenReturn(Collections.emptyList()); + + // When + underTest.process(enforcementOrderEntity, minimalOrder); + + // Then + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + assertThat(capturedEntity.getAnyRiskToBailiff()).isNull(); + } + + @Test + void shouldMapAllRiskDetailsFieldsCorrectly() { + // Given + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) + .thenReturn(Collections.emptyList()); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getViolentDetails()).isEqualTo(riskDetails.getEnforcementViolentDetails()); + assertThat(capturedEntity.getFirearmsDetails()).isEqualTo(riskDetails.getEnforcementFirearmsDetails()); + assertThat(capturedEntity.getCriminalDetails()).isEqualTo(riskDetails.getEnforcementCriminalDetails()); + assertThat(capturedEntity.getVerbalThreatsDetails()) + .isEqualTo(riskDetails.getEnforcementVerbalOrWrittenThreatsDetails()); + assertThat(capturedEntity.getProtestGroupDetails()) + .isEqualTo(riskDetails.getEnforcementProtestGroupMemberDetails()); + assertThat(capturedEntity.getPoliceSocialServicesDetails()) + .isEqualTo(riskDetails.getEnforcementPoliceOrSocialServicesDetails()); + assertThat(capturedEntity.getAnimalsDetails()) + .isEqualTo(riskDetails.getEnforcementDogsOrOtherAnimalsDetails()); + } + + @Test + void shouldSaveRiskProfileBeforeSelectedDefendants() { + // Given + List defendants = List.of(new SelectedDefendantEntity()); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)).thenReturn(defendants); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + InOrder inOrder = inOrder(riskProfileRepository, selectedDefendantRepository); + inOrder.verify(selectedDefendantRepository).saveAll(defendants); + inOrder.verify(riskProfileRepository).save(any(RiskProfileEntity.class)); + } +} diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java new file mode 100644 index 0000000000..592e70e0d2 --- /dev/null +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java @@ -0,0 +1,217 @@ + +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import uk.gov.hmcts.ccd.sdk.type.YesOrNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.NameAndAddressForEviction; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.WritRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.writ.WritDetailsMapper; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class WritStrategyTest { + + @Mock + private WritDetailsMapper writDetailsMapper; + @Mock + private WritRepository writRepository; + + @InjectMocks + private WritStrategy underTest; + + @Captor + private ArgumentCaptor writEntityCaptor; + + private EnforcementOrderEntity enforcementOrderEntity; + private EnforcementOrder enforcementOrder; + private WritDetails writDetails; + private WritEntity writEntity; + + @BeforeEach + void setUp() { + enforcementOrderEntity = mock(EnforcementOrderEntity.class); + + writDetails = WritDetails.builder() + .nameAndAddressForEviction(NameAndAddressForEviction.builder() + .correctNameAndAddress(VerticalYesNo.YES) + .build()) + .showChangeNameAddressPage(YesOrNo.NO) + .showPeopleWhoWillBeEvictedPage(YesOrNo.YES) + .hasHiredHighCourtEnforcementOfficer(VerticalYesNo.YES) + .hceoDetails("Enforcement") + .hasClaimTransferredToHighCourt(YesOrNo.YES) + .build(); + + enforcementOrder = EnforcementOrder.builder().writDetails(writDetails).build(); + + writEntity = new WritEntity(); + } + + @Test + void shouldProcessWritDetailsSuccessfully() { + // Given + when(writDetailsMapper.toEntity(writDetails)).thenReturn(writEntity); + when(writRepository.save(any(WritEntity.class))).thenReturn(writEntity); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(writDetailsMapper).toEntity(writDetails); + verify(writRepository).save(writEntityCaptor.capture()); + + WritEntity savedEntity = writEntityCaptor.getValue(); + assertThat(savedEntity).isSameAs(writEntity); + assertThat(savedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + } + + @Test + void shouldSetEnforcementOrderOnWritEntity() { + // Given + when(writDetailsMapper.toEntity(writDetails)).thenReturn(writEntity); + when(writRepository.save(any(WritEntity.class))).thenReturn(writEntity); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(writRepository).save(writEntityCaptor.capture()); + WritEntity savedEntity = writEntityCaptor.getValue(); + assertThat(savedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + } + + @Test + void shouldNotProcessWhenWritDetailsIsNull() { + // Given + enforcementOrder.setWritDetails(null); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(writDetailsMapper, never()).toEntity(any()); + verify(writRepository, never()).save(any()); + } + + @Test + void shouldHandleEmptyWritDetails() { + // Given + WritDetails emptyWritDetails = WritDetails.builder().build(); + enforcementOrder.setWritDetails(emptyWritDetails); + WritEntity emptyWritEntity = new WritEntity(); + + when(writDetailsMapper.toEntity(emptyWritDetails)).thenReturn(emptyWritEntity); + when(writRepository.save(any(WritEntity.class))).thenReturn(emptyWritEntity); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(writDetailsMapper).toEntity(emptyWritDetails); + verify(writRepository).save(writEntityCaptor.capture()); + + WritEntity savedEntity = writEntityCaptor.getValue(); + assertThat(savedEntity).isSameAs(emptyWritEntity); + assertThat(savedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + } + + @Test + void shouldMapAndSaveWritDetailsInCorrectOrder() { + // Given + when(writDetailsMapper.toEntity(writDetails)).thenReturn(writEntity); + when(writRepository.save(any(WritEntity.class))).thenReturn(writEntity); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + var inOrder = org.mockito.Mockito.inOrder(writDetailsMapper, writRepository); + inOrder.verify(writDetailsMapper).toEntity(writDetails); + inOrder.verify(writRepository).save(any(WritEntity.class)); + } + + @Test + void shouldHandleWritDetailsWithMinimalData() { + // Given + WritDetails minimalWritDetails = WritDetails.builder() + .hasHiredHighCourtEnforcementOfficer(VerticalYesNo.NO) + .build(); + enforcementOrder.setWritDetails(minimalWritDetails); + WritEntity minimalWritEntity = new WritEntity(); + + when(writDetailsMapper.toEntity(minimalWritDetails)).thenReturn(minimalWritEntity); + when(writRepository.save(any(WritEntity.class))).thenReturn(minimalWritEntity); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(writDetailsMapper).toEntity(minimalWritDetails); + verify(writRepository).save(writEntityCaptor.capture()); + + WritEntity savedEntity = writEntityCaptor.getValue(); + assertThat(savedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + } + + @Test + void shouldHandleWritDetailsWithAllFieldsPopulated() { + // Given + WritDetails fullWritDetails = WritDetails.builder() + .nameAndAddressForEviction(NameAndAddressForEviction.builder() + .correctNameAndAddress(VerticalYesNo.YES) + .build()) + .showChangeNameAddressPage(YesOrNo.NO) + .showPeopleWhoWillBeEvictedPage(YesOrNo.YES) + .hasHiredHighCourtEnforcementOfficer(VerticalYesNo.YES) + .hceoDetails("Complete HCEO Details") + .hasClaimTransferredToHighCourt(YesOrNo.YES) + .build(); + enforcementOrder.setWritDetails(fullWritDetails); + WritEntity fullWritEntity = new WritEntity(); + + when(writDetailsMapper.toEntity(fullWritDetails)).thenReturn(fullWritEntity); + when(writRepository.save(any(WritEntity.class))).thenReturn(fullWritEntity); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(writDetailsMapper).toEntity(fullWritDetails); + verify(writRepository).save(writEntityCaptor.capture()); + + WritEntity savedEntity = writEntityCaptor.getValue(); + assertThat(savedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + } + + @Test + void shouldCallMapperBeforeSaving() { + // Given + when(writDetailsMapper.toEntity(writDetails)).thenReturn(writEntity); + when(writRepository.save(any(WritEntity.class))).thenReturn(writEntity); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(writDetailsMapper).toEntity(writDetails); + verify(writRepository).save(writEntity); + } +} From 5be1666acbc1c14720e8326c732cbfe3591ebea6 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Fri, 20 Feb 2026 11:40:44 +0000 Subject: [PATCH 06/54] Rename `EnforcementRiskProfileEntity` to `RiskProfileEntity` across the codebase, update related methods, mappers, tests, and test resources for consistency and readability. --- .../strategy/WarrantStrategy.java | 41 +----- .../warrant/EnforcementRiskProfileMapper.java | 9 +- .../TestCaseSupportHelper.java | 6 +- .../Create-Case-Make-A-Claim-Basic-Case.json | 0 ...Create-Enforcement-Warrant-Basic-Case.json | 0 .../Create-Enforcement-Writ-Basic-Case.json | 0 .../strategy/WarrantStrategyTest.java | 126 ++++++++---------- .../EnforcementRiskProfileMapperTest.java | 11 +- 8 files changed, 74 insertions(+), 119 deletions(-) rename src/main/resources/{test-case-generation => testcasegeneration}/Create-Case-Make-A-Claim-Basic-Case.json (100%) rename src/main/resources/{test-case-generation => testcasegeneration}/Create-Enforcement-Warrant-Basic-Case.json (100%) rename src/main/resources/{test-case-generation => testcasegeneration}/Create-Enforcement-Writ-Basic-Case.json (100%) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java index d062c67a6d..708a4f2622 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java @@ -4,14 +4,12 @@ import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.EnforcementRiskDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.SelectedDefendantEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.RiskProfileRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.SelectedDefendantRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.EnforcementRiskProfileMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.SelectedDefendantsMapper; import java.util.List; @@ -23,50 +21,17 @@ public class WarrantStrategy implements EnforcementTypeStrategy { private final RiskProfileRepository riskProfileRepository; private final SelectedDefendantsMapper selectedDefendantsMapper; private final SelectedDefendantRepository selectedDefendantRepository; + private final EnforcementRiskProfileMapper riskProfileMapper; @Override public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { - RiskProfileEntity riskProfile = mapToRiskProfile(enforcementOrderEntity, enforcementOrder); + RiskProfileEntity riskProfile = riskProfileMapper.toEntity(enforcementOrderEntity, enforcementOrder); riskProfileRepository.save(riskProfile); - } - - private RiskProfileEntity mapToRiskProfile(EnforcementOrderEntity enforcementOrderEntity, - EnforcementOrder enforcementOrder) { - RiskProfileEntity entity = new RiskProfileEntity(); - entity.setEnforcementOrder(enforcementOrderEntity); - WarrantDetails warrantDetails = enforcementOrder.getWarrantDetails(); - if (warrantDetails != null) { - entity.setAnyRiskToBailiff(warrantDetails.getAnyRiskToBailiff()); - EnforcementRiskDetails riskDetails = warrantDetails.getRiskDetails(); - if (riskDetails != null) { - entity.setViolentDetails(riskDetails.getEnforcementViolentDetails()); - entity.setFirearmsDetails(riskDetails.getEnforcementFirearmsDetails()); - entity.setCriminalDetails(riskDetails.getEnforcementCriminalDetails()); - entity.setVerbalThreatsDetails(riskDetails.getEnforcementVerbalOrWrittenThreatsDetails()); - entity.setProtestGroupDetails(riskDetails.getEnforcementProtestGroupMemberDetails()); - entity.setPoliceSocialServicesDetails( - riskDetails.getEnforcementPoliceOrSocialServicesDetails()); - entity.setAnimalsDetails(riskDetails.getEnforcementDogsOrOtherAnimalsDetails()); - } - } - - RawWarrantDetails rawWarrantDetails = enforcementOrder.getRawWarrantDetails(); - if (rawWarrantDetails != null) { - entity.setVulnerablePeoplePresent(rawWarrantDetails.getVulnerablePeoplePresent()); - if (rawWarrantDetails.getVulnerableAdultsChildren() != null) { - entity.setVulnerableCategory( - rawWarrantDetails.getVulnerableAdultsChildren().getVulnerableCategory()); - entity.setVulnerableReasonText( - rawWarrantDetails.getVulnerableAdultsChildren().getVulnerableReasonText()); - } - } - List selectedDefendantsEntities = selectedDefendantsMapper.mapToEntities(enforcementOrderEntity); if (!CollectionUtils.isEmpty(selectedDefendantsEntities)) { selectedDefendantRepository.saveAll(selectedDefendantsEntities); } - return entity; } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementRiskProfileMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementRiskProfileMapper.java index bff61d73cb..5618225fb5 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementRiskProfileMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementRiskProfileMapper.java @@ -7,7 +7,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementRiskProfileEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; @Component public class EnforcementRiskProfileMapper { @@ -18,10 +18,9 @@ public EnforcementRiskProfileMapper(ModelMapper modelMapper) { this.modelMapper = modelMapper; } - public EnforcementRiskProfileEntity toEntity( - EnforcementOrderEntity enforcementOrderEntity, - EnforcementOrder enforcementOrder) { - EnforcementRiskProfileEntity entity = new EnforcementRiskProfileEntity(); + public RiskProfileEntity toEntity(EnforcementOrderEntity enforcementOrderEntity, + EnforcementOrder enforcementOrder) { + RiskProfileEntity entity = new RiskProfileEntity(); entity.setEnforcementOrder(enforcementOrderEntity); WarrantDetails warrantDetails = enforcementOrder.getWarrantDetails(); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java index 538fb05a8c..6efe7d8242 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java @@ -19,7 +19,7 @@ @Slf4j public class TestCaseSupportHelper { - public static final String LOCATION_PATTERN = "classpath*:test-case-generation/"; + public static final String LOCATION_PATTERN = "classpath*:testcasegeneration/"; public static final String JSON = ".json"; private final ResourcePatternResolver resourcePatternResolver; @@ -27,6 +27,7 @@ public class TestCaseSupportHelper { public DynamicList getFileList() { try { Resource[] resources = resourcePatternResolver.getResources(LOCATION_PATTERN + "*"); + log.info("Found {} resources from pattern: {}", resources.length, LOCATION_PATTERN + "*"); List listItems = Arrays.stream(resources) .filter(Resource::isFile) .map(Resource::getFilename) @@ -47,8 +48,7 @@ public DynamicList getFileList() { } private String generateLabelFromFilename(String filename) { - String name = filename.replace(LOCATION_PATTERN, ""); - return name.replace("-", " ").replace(JSON, ""); + return filename.replace("-", " ").replace(JSON, ""); } public Resource getTestResource(String label) throws IOException { diff --git a/src/main/resources/test-case-generation/Create-Case-Make-A-Claim-Basic-Case.json b/src/main/resources/testcasegeneration/Create-Case-Make-A-Claim-Basic-Case.json similarity index 100% rename from src/main/resources/test-case-generation/Create-Case-Make-A-Claim-Basic-Case.json rename to src/main/resources/testcasegeneration/Create-Case-Make-A-Claim-Basic-Case.json diff --git a/src/main/resources/test-case-generation/Create-Enforcement-Warrant-Basic-Case.json b/src/main/resources/testcasegeneration/Create-Enforcement-Warrant-Basic-Case.json similarity index 100% rename from src/main/resources/test-case-generation/Create-Enforcement-Warrant-Basic-Case.json rename to src/main/resources/testcasegeneration/Create-Enforcement-Warrant-Basic-Case.json diff --git a/src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json b/src/main/resources/testcasegeneration/Create-Enforcement-Writ-Basic-Case.json similarity index 100% rename from src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json rename to src/main/resources/testcasegeneration/Create-Enforcement-Writ-Basic-Case.json diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java index 567940cb2b..c80de7f6d6 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java @@ -20,6 +20,7 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.SelectedDefendantEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.RiskProfileRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.SelectedDefendantRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.EnforcementRiskProfileMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.SelectedDefendantsMapper; import java.util.Collections; @@ -43,6 +44,8 @@ class WarrantStrategyTest { private SelectedDefendantsMapper selectedDefendantsMapper; @Mock private SelectedDefendantRepository selectedDefendantRepository; + @Mock + private EnforcementRiskProfileMapper riskProfileMapper; @InjectMocks private WarrantStrategy underTest; @@ -61,13 +64,13 @@ void setUp() { enforcementOrderEntity = mock(EnforcementOrderEntity.class); riskDetails = EnforcementRiskDetails.builder() - .enforcementViolentDetails("Violent behavior reported") - .enforcementFirearmsDetails("Firearms present") - .enforcementCriminalDetails("Criminal history") - .enforcementVerbalOrWrittenThreatsDetails("Verbal threats made") - .enforcementProtestGroupMemberDetails("Member of protest group") - .enforcementPoliceOrSocialServicesDetails("Police involvement") - .enforcementDogsOrOtherAnimalsDetails("Aggressive dogs on premises") + .violentDetails("Violent behavior reported") + .firearmsDetails("Firearms present") + .criminalDetails("Criminal history") + .verbalThreatsDetails("Verbal threats made") + .protestGroupDetails("Member of protest group") + .policeSocialServicesDetails("Police involvement") + .animalsDetails("Aggressive dogs on premises") .build(); warrantDetails = WarrantDetails.builder().anyRiskToBailiff(YesNoNotSure.YES).riskDetails(riskDetails).build(); @@ -85,7 +88,8 @@ void setUp() { @Test void shouldProcessWarrantDetailsSuccessfully() { // Given - RiskProfileEntity savedEntity = new RiskProfileEntity(); + RiskProfileEntity savedEntity = createExpectedRiskProfileEntity(); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(savedEntity); when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(savedEntity); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) .thenReturn(Collections.emptyList()); @@ -111,52 +115,11 @@ void shouldProcessWarrantDetailsSuccessfully() { assertThat(capturedEntity.getVulnerableReasonText()).isEqualTo("Young children present"); } - @Test - void shouldHandleNullWarrantDetails() { - // Given - enforcementOrder.setWarrantDetails(null); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); - when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) - .thenReturn(Collections.emptyList()); - - // When - underTest.process(enforcementOrderEntity, enforcementOrder); - - // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - - assertThat(capturedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); - assertThat(capturedEntity.getAnyRiskToBailiff()).isNull(); - assertThat(capturedEntity.getViolentDetails()).isNull(); - assertThat(capturedEntity.getFirearmsDetails()).isNull(); - } - - @Test - void shouldHandleNullRiskDetails() { - // Given - warrantDetails.setRiskDetails(null); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); - when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) - .thenReturn(Collections.emptyList()); - - // When - underTest.process(enforcementOrderEntity, enforcementOrder); - - // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - - assertThat(capturedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); - assertThat(capturedEntity.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.YES); - assertThat(capturedEntity.getViolentDetails()).isNull(); - assertThat(capturedEntity.getFirearmsDetails()).isNull(); - } - @Test void shouldHandleNullRawWarrantDetails() { // Given enforcementOrder.setRawWarrantDetails(null); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) .thenReturn(Collections.emptyList()); @@ -177,6 +140,9 @@ void shouldHandleNullRawWarrantDetails() { void shouldHandleNullVulnerableAdultsChildren() { // Given rawWarrantDetails.setVulnerableAdultsChildren(null); + RiskProfileEntity riskProfileEntity = new RiskProfileEntity(); + riskProfileEntity.setVulnerablePeoplePresent(YesNoNotSure.YES); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) .thenReturn(Collections.emptyList()); @@ -199,7 +165,7 @@ void shouldSaveSelectedDefendantsWhenPresent() { SelectedDefendantEntity defendant1 = new SelectedDefendantEntity(); SelectedDefendantEntity defendant2 = new SelectedDefendantEntity(); List defendants = List.of(defendant1, defendant2); - + when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)).thenReturn(defendants); @@ -213,7 +179,9 @@ void shouldSaveSelectedDefendantsWhenPresent() { @Test void shouldNotSaveSelectedDefendantsWhenEmpty() { // Given - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + RiskProfileEntity riskProfileEntity = createExpectedRiskProfileEntity(); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(riskProfileEntity); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) .thenReturn(Collections.emptyList()); @@ -227,6 +195,7 @@ void shouldNotSaveSelectedDefendantsWhenEmpty() { @Test void shouldNotSaveSelectedDefendantsWhenNull() { // Given + when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)).thenReturn(null); @@ -241,6 +210,9 @@ void shouldNotSaveSelectedDefendantsWhenNull() { void shouldHandleWarrantDetailsWithNoRiskToBailiff() { // Given warrantDetails.setAnyRiskToBailiff(YesNoNotSure.NO); + RiskProfileEntity riskProfileEntity = new RiskProfileEntity(); + riskProfileEntity.setAnyRiskToBailiff(YesNoNotSure.NO); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) .thenReturn(Collections.emptyList()); @@ -258,10 +230,12 @@ void shouldHandleWarrantDetailsWithNoRiskToBailiff() { @Test void shouldHandleMinimalEnforcementOrder() { // Given + RiskProfileEntity riskProfileEntity = createExpectedRiskProfileEntity(); + riskProfileEntity.setAnyRiskToBailiff(null); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(riskProfileEntity); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)).thenReturn(Collections.emptyList()); EnforcementOrder minimalOrder = EnforcementOrder.builder().build(); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); - when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) - .thenReturn(Collections.emptyList()); // When underTest.process(enforcementOrderEntity, minimalOrder); @@ -277,7 +251,9 @@ void shouldHandleMinimalEnforcementOrder() { @Test void shouldMapAllRiskDetailsFieldsCorrectly() { // Given - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + RiskProfileEntity riskProfileEntity = createExpectedRiskProfileEntity(); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); + when(riskProfileRepository.save(riskProfileEntity)).thenReturn(riskProfileEntity); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) .thenReturn(Collections.emptyList()); @@ -288,23 +264,21 @@ void shouldMapAllRiskDetailsFieldsCorrectly() { verify(riskProfileRepository).save(riskProfileCaptor.capture()); RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - assertThat(capturedEntity.getViolentDetails()).isEqualTo(riskDetails.getEnforcementViolentDetails()); - assertThat(capturedEntity.getFirearmsDetails()).isEqualTo(riskDetails.getEnforcementFirearmsDetails()); - assertThat(capturedEntity.getCriminalDetails()).isEqualTo(riskDetails.getEnforcementCriminalDetails()); - assertThat(capturedEntity.getVerbalThreatsDetails()) - .isEqualTo(riskDetails.getEnforcementVerbalOrWrittenThreatsDetails()); - assertThat(capturedEntity.getProtestGroupDetails()) - .isEqualTo(riskDetails.getEnforcementProtestGroupMemberDetails()); + assertThat(capturedEntity.getViolentDetails()).isEqualTo(riskDetails.getViolentDetails()); + assertThat(capturedEntity.getFirearmsDetails()).isEqualTo(riskDetails.getFirearmsDetails()); + assertThat(capturedEntity.getCriminalDetails()).isEqualTo(riskDetails.getCriminalDetails()); + assertThat(capturedEntity.getVerbalThreatsDetails()).isEqualTo(riskDetails.getVerbalThreatsDetails()); + assertThat(capturedEntity.getProtestGroupDetails()).isEqualTo(riskDetails.getProtestGroupDetails()); assertThat(capturedEntity.getPoliceSocialServicesDetails()) - .isEqualTo(riskDetails.getEnforcementPoliceOrSocialServicesDetails()); - assertThat(capturedEntity.getAnimalsDetails()) - .isEqualTo(riskDetails.getEnforcementDogsOrOtherAnimalsDetails()); + .isEqualTo(riskDetails.getPoliceSocialServicesDetails()); + assertThat(capturedEntity.getAnimalsDetails()).isEqualTo(riskDetails.getAnimalsDetails()); } @Test void shouldSaveRiskProfileBeforeSelectedDefendants() { // Given List defendants = List.of(new SelectedDefendantEntity()); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)).thenReturn(defendants); @@ -313,7 +287,25 @@ void shouldSaveRiskProfileBeforeSelectedDefendants() { // Then InOrder inOrder = inOrder(riskProfileRepository, selectedDefendantRepository); - inOrder.verify(selectedDefendantRepository).saveAll(defendants); inOrder.verify(riskProfileRepository).save(any(RiskProfileEntity.class)); + inOrder.verify(selectedDefendantRepository).saveAll(defendants); } + + private RiskProfileEntity createExpectedRiskProfileEntity() { + RiskProfileEntity entity = new RiskProfileEntity(); + entity.setEnforcementOrder(enforcementOrderEntity); + entity.setAnyRiskToBailiff(YesNoNotSure.YES); + entity.setViolentDetails("Violent behavior reported"); + entity.setFirearmsDetails("Firearms present"); + entity.setCriminalDetails("Criminal history"); + entity.setVerbalThreatsDetails("Verbal threats made"); + entity.setProtestGroupDetails("Member of protest group"); + entity.setPoliceSocialServicesDetails("Police involvement"); + entity.setAnimalsDetails("Aggressive dogs on premises"); + entity.setVulnerablePeoplePresent(YesNoNotSure.YES); + entity.setVulnerableCategory(VULNERABLE_CHILDREN); + entity.setVulnerableReasonText("Young children present"); + return entity; + } + } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementRiskProfileMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementRiskProfileMapperTest.java index 4d33b744a1..da227dc06b 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementRiskProfileMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementRiskProfileMapperTest.java @@ -14,7 +14,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.VulnerableCategory; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementRiskProfileEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; import java.util.UUID; @@ -46,7 +46,7 @@ void mapsFullWarrantAndRiskDetails() { .build()) .build(); - EnforcementRiskProfileEntity result = mapper.toEntity(orderEntity, order); + RiskProfileEntity result = mapper.toEntity(orderEntity, order); assertThat(result.getEnforcementOrder()).isEqualTo(orderEntity); assertThat(result.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.YES); @@ -71,7 +71,7 @@ void mapsVulnerabilityDetails() { .build()) .build(); - EnforcementRiskProfileEntity result = mapper.toEntity(orderEntity, order); + RiskProfileEntity result = mapper.toEntity(orderEntity, order); assertThat(result.getVulnerablePeoplePresent()).isEqualTo(YesNoNotSure.YES); assertThat(result.getVulnerableCategory()).isEqualTo(VulnerableCategory.VULNERABLE_ADULTS); @@ -85,7 +85,7 @@ void returnsEntityWithNullRiskFieldsWhenDetailsNull() { orderEntity.setId(UUID.randomUUID()); EnforcementOrder order = EnforcementOrder.builder().build(); - EnforcementRiskProfileEntity result = mapper.toEntity(orderEntity, order); + RiskProfileEntity result = mapper.toEntity(orderEntity, order); assertThat(result.getEnforcementOrder()).isEqualTo(orderEntity); assertThat(result.getAnyRiskToBailiff()).isNull(); @@ -106,8 +106,7 @@ void mapsWarrantDetailsWhenRiskDetailsNull() { .build()) .build(); - EnforcementRiskProfileEntity result = mapper.toEntity(orderEntity, order); - + RiskProfileEntity result = mapper.toEntity(orderEntity, order); assertThat(result.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.NO); assertThat(result.getViolentDetails()).isNull(); assertThat(result.getVerbalThreatsDetails()).isNull(); From c41cb906d52efd761ea27dab383c23b09fedc05d Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Mon, 23 Feb 2026 09:36:00 +0000 Subject: [PATCH 07/54] Move `warrant` repositories into `enforcetheorder` package and update imports across services, strategies, and tests. Annotate `saveAndClearDraftData` with `@Transactional`. --- .../{warrant => }/EnforcementOrderRepository.java | 2 +- .../enforcetheorder/{warrant => }/RiskProfileRepository.java | 2 +- .../{warrant => }/SelectedDefendantRepository.java | 2 +- .../enforcetheorder/{warrant => }/WritRepository.java | 2 +- .../ccd/service/enforcetheorder/strategy/WarrantStrategy.java | 4 ++-- .../ccd/service/enforcetheorder/strategy/WritStrategy.java | 2 +- .../enforcetheorder/warrant/EnforcementOrderService.java | 4 +++- .../service/enforcetheorder/EnforcementOrderServiceTest.java | 2 +- .../service/enforcetheorder/strategy/WarrantStrategyTest.java | 4 ++-- .../service/enforcetheorder/strategy/WritStrategyTest.java | 2 +- 10 files changed, 14 insertions(+), 12 deletions(-) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/{warrant => }/EnforcementOrderRepository.java (79%) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/{warrant => }/RiskProfileRepository.java (79%) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/{warrant => }/SelectedDefendantRepository.java (82%) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/{warrant => }/WritRepository.java (76%) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementOrderRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/EnforcementOrderRepository.java similarity index 79% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementOrderRepository.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/EnforcementOrderRepository.java index b38871e801..721ebcb297 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/EnforcementOrderRepository.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/EnforcementOrderRepository.java @@ -1,4 +1,4 @@ -package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant; +package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder; import org.springframework.data.jpa.repository.JpaRepository; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/RiskProfileRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/RiskProfileRepository.java similarity index 79% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/RiskProfileRepository.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/RiskProfileRepository.java index 2260075c3a..cdca11fa9a 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/RiskProfileRepository.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/RiskProfileRepository.java @@ -1,4 +1,4 @@ -package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant; +package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder; import org.springframework.data.jpa.repository.JpaRepository; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/SelectedDefendantRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/SelectedDefendantRepository.java similarity index 82% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/SelectedDefendantRepository.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/SelectedDefendantRepository.java index 0809338d97..3174a7c54b 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/SelectedDefendantRepository.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/SelectedDefendantRepository.java @@ -1,4 +1,4 @@ -package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant; +package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/WritRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/WritRepository.java similarity index 76% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/WritRepository.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/WritRepository.java index 11ea72b0ff..3217a76db0 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/warrant/WritRepository.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/WritRepository.java @@ -1,4 +1,4 @@ -package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant; +package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder; import org.springframework.data.jpa.repository.JpaRepository; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java index 708a4f2622..798390211d 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java @@ -7,8 +7,8 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.SelectedDefendantEntity; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.RiskProfileRepository; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.SelectedDefendantRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.RiskProfileRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.SelectedDefendantRepository; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.EnforcementRiskProfileMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.SelectedDefendantsMapper; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategy.java index c110cce48b..f8ce63ec68 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategy.java @@ -6,7 +6,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.WritRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WritRepository; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.writ.WritDetailsMapper; @Component diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java index f52f215e24..d8def1cc07 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java @@ -3,6 +3,7 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.entity.ClaimEntity; @@ -10,7 +11,7 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.event.EventId; import uk.gov.hmcts.reform.pcs.ccd.repository.PcsCaseRepository; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementOrderRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.EnforcementOrderRepository; import uk.gov.hmcts.reform.pcs.ccd.service.DraftCaseDataService; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy.EnforcementTypeStrategyFactory; import uk.gov.hmcts.reform.pcs.exception.CaseNotFoundException; @@ -28,6 +29,7 @@ public class EnforcementOrderService { private final DraftCaseDataService draftCaseDataService; private final EnforcementTypeStrategyFactory strategyFactory; + @Transactional public void saveAndClearDraftData(long caseReference, EnforcementOrder enforcementOrder) { createEnforcementOrder(caseReference, enforcementOrder); draftCaseDataService.deleteUnsubmittedCaseData(caseReference, EventId.enforceTheOrder); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java index 4f7c2161ab..b6cfd4ef1c 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java @@ -12,7 +12,7 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.event.EventId; import uk.gov.hmcts.reform.pcs.ccd.repository.PcsCaseRepository; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.EnforcementOrderRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.EnforcementOrderRepository; import uk.gov.hmcts.reform.pcs.ccd.service.DraftCaseDataService; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy.EnforcementTypeStrategy; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy.EnforcementTypeStrategyFactory; diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java index c80de7f6d6..4a5b734b5b 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java @@ -18,8 +18,8 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.SelectedDefendantEntity; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.RiskProfileRepository; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.SelectedDefendantRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.RiskProfileRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.SelectedDefendantRepository; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.EnforcementRiskProfileMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.SelectedDefendantsMapper; diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java index 592e70e0d2..0baef4d224 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java @@ -16,7 +16,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant.WritRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WritRepository; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.writ.WritDetailsMapper; import static org.assertj.core.api.Assertions.assertThat; From d877cd982c38fb04999a85150c863cec623dcf3d Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Mon, 23 Feb 2026 14:28:36 +0000 Subject: [PATCH 08/54] Map YesOrNo and VerticalYesNo fields in WritDetailsMapper with conversion methods and update affected tests. --- .../enforcetheorder/writ/WritDetailsMapper.java | 17 ++++++++++++++--- .../EnforcementOrderServiceTest.java | 1 - 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java index e2405d7a20..8229abf08d 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java @@ -2,6 +2,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import uk.gov.hmcts.ccd.sdk.type.YesOrNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LandRegistryFees; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LegalCosts; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.MoneyOwedByDefendants; @@ -20,10 +22,11 @@ public WritEntity toEntity(WritDetails writDetails) { mapNameAndAddressForEviction(writDetails.getNameAndAddressForEviction(), entity); // Map direct fields - entity.setShowPeopleWhoWillBeEvictedPage(writDetails.getShowPeopleWhoWillBeEvictedPage()); - entity.setHasHiredHighCourtEnforcementOfficer(writDetails.getHasHiredHighCourtEnforcementOfficer()); + entity.setShowPeopleWhoWillBeEvictedPage(convertYesOrNo(writDetails.getShowPeopleWhoWillBeEvictedPage())); + entity.setHasHiredHighCourtEnforcementOfficer( + convertToVerticalYesNo(writDetails.getHasHiredHighCourtEnforcementOfficer())); entity.setHceoDetails(writDetails.getHceoDetails()); - entity.setHasClaimTransferredToHighCourt(writDetails.getHasClaimTransferredToHighCourt()); + entity.setHasClaimTransferredToHighCourt(convertYesOrNo(writDetails.getHasClaimTransferredToHighCourt())); // Map LandRegistryFees fields mapLandRegistryFees(writDetails.getLandRegistryFees(), entity); @@ -65,4 +68,12 @@ private void mapMoneyOwedByDefendants(MoneyOwedByDefendants moneyOwedByDefendant } } + private YesOrNo convertYesOrNo(YesOrNo yesOrNo) { + return yesOrNo == YesOrNo.YES ? YesOrNo.YES : YesOrNo.NO; + } + + private VerticalYesNo convertToVerticalYesNo(VerticalYesNo yesOrNo) { + return yesOrNo == VerticalYesNo.YES ? VerticalYesNo.YES : VerticalYesNo.NO; + } + } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java index b6cfd4ef1c..aff8b4df4b 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java @@ -45,7 +45,6 @@ class EnforcementOrderServiceTest { @Captor private ArgumentCaptor enforcementOrderEntityCaptor; - private final UUID enforcementOrderId = UUID.fromString("f47ac10b-58cc-4372-a567-0e02b2c3d479"); private final UUID claimId = UUID.fromString("a1b2c3d4-e5f6-7890-1234-567890abcdef"); private final UUID pcsCaseId = UUID.fromString("7b9e0f1a-2b3c-4d5e-6f7a-8b9c0d1e2f3a"); From 88501e50c4abcc2063565bb36a2fa3ecbba4c2d5 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Mon, 23 Feb 2026 14:29:53 +0000 Subject: [PATCH 09/54] Rename `testcasegeneration` directory to `test-case-generation` and update related file paths and constants for consistency. --- .../reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java | 2 +- .../Create-Case-Make-A-Claim-Basic-Case.json | 0 .../Create-Enforcement-Warrant-Basic-Case.json | 0 .../Create-Enforcement-Writ-Basic-Case.json | 0 4 files changed, 1 insertion(+), 1 deletion(-) rename src/main/resources/{testcasegeneration => test-case-generation}/Create-Case-Make-A-Claim-Basic-Case.json (100%) rename src/main/resources/{testcasegeneration => test-case-generation}/Create-Enforcement-Warrant-Basic-Case.json (100%) rename src/main/resources/{testcasegeneration => test-case-generation}/Create-Enforcement-Writ-Basic-Case.json (100%) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java index 6efe7d8242..3ca15fca73 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java @@ -19,7 +19,7 @@ @Slf4j public class TestCaseSupportHelper { - public static final String LOCATION_PATTERN = "classpath*:testcasegeneration/"; + public static final String LOCATION_PATTERN = "classpath*:test-case-generation/"; public static final String JSON = ".json"; private final ResourcePatternResolver resourcePatternResolver; diff --git a/src/main/resources/testcasegeneration/Create-Case-Make-A-Claim-Basic-Case.json b/src/main/resources/test-case-generation/Create-Case-Make-A-Claim-Basic-Case.json similarity index 100% rename from src/main/resources/testcasegeneration/Create-Case-Make-A-Claim-Basic-Case.json rename to src/main/resources/test-case-generation/Create-Case-Make-A-Claim-Basic-Case.json diff --git a/src/main/resources/testcasegeneration/Create-Enforcement-Warrant-Basic-Case.json b/src/main/resources/test-case-generation/Create-Enforcement-Warrant-Basic-Case.json similarity index 100% rename from src/main/resources/testcasegeneration/Create-Enforcement-Warrant-Basic-Case.json rename to src/main/resources/test-case-generation/Create-Enforcement-Warrant-Basic-Case.json diff --git a/src/main/resources/testcasegeneration/Create-Enforcement-Writ-Basic-Case.json b/src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json similarity index 100% rename from src/main/resources/testcasegeneration/Create-Enforcement-Writ-Basic-Case.json rename to src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json From bb28f56fbf5676e5504303b372f78f20b010f95a Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Mon, 23 Feb 2026 17:07:17 +0000 Subject: [PATCH 10/54] Delete obsolete `Create-Enforcement-Writ-Basic-Case.json` test resource file. --- .../test-case-generation/Create-Enforcement-Writ-Basic-Case.json | 1 - 1 file changed, 1 deletion(-) delete mode 100644 src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json diff --git a/src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json b/src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json deleted file mode 100644 index 4059acd0b3..0000000000 --- a/src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json +++ /dev/null @@ -1 +0,0 @@ -{"parties": [{"value": {"address": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "orgName": "pcs-solicitor1@test.com", "emailAddress": "pcs-solicitor1@test.com", "phoneNumberProvided": "NO"}}, {"value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}, {"value": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}}], "allClaimants": [{"id": "ea700fdb-b710-4326-8b37-24df0f4d2f92", "value": {"address": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "orgName": "pcs-solicitor1@test.com", "emailAddress": "pcs-solicitor1@test.com", "phoneNumberProvided": "NO"}}], "allDocuments": [], "claimantType": {"value": {"code": "PROVIDER_OF_SOCIAL_HOUSING", "label": "Registered provider of social housing"}, "valueCode": "PROVIDER_OF_SOCIAL_HOUSING"}, "languageUsed": "ENGLISH", "noticeServed": "No", "userPcqIdSet": "No", "allDefendants": [{"id": "39d575e6-fed3-4747-a5bb-c85e3931c16e", "value": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}}, {"id": "0ee3acb7-5c81-47dc-b09f-211064f91037", "value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}], "writFeeAmount": "£999999.99", "writAmountOwed": "123300", "propertyAddress": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "statementOfTruth": {"completedBy": "CLAIMANT", "fullNameClaimant": "wert", "positionClaimant": "ewrt", "agreementClaimant": ["BELIEVE_TRUE"]}, "warrantFeeAmount": "£999999.99", "legislativeCountry": "England", "mediationAttempted": "NO", "addAnotherDefendant": "YES", "claimingCostsWanted": "NO", "settlementAttempted": "NO", "writRepaymentChoice": "ALL", "applicationWithClaim": "NO", "claimGroundSummaries": [{"id": "9df0dd7e-8ee2-49d9-9135-2dc33a5a2ff2", "value": {"code": "NUISANCE_OR_IMMORAL_USE", "label": "Nuisance, annoyance, illegal or immoral use of the property (ground 2)", "reason": "sfgsdfgsdfg", "category": "SECURE_OR_FLEXIBLE_DISCRETIONARY", "isRentArrears": "No"}}], "selectEnforcementType": "WRIT", "wantToUploadDocuments": "NO", "suspensionOfRTB_Reason": "asdfasdf", "writAmountOfLegalCosts": "12300", "claimAgainstTrespassers": "NO", "formattedDefendantNames": "TVR HN
\nTest1 Testing1
", "formattedPropertyAddress": "1 Rse Way
London
SW11 1PD", "hasUnderlesseeOrMortgagee": "NO", "writCorrectNameAndAddress": "YES", "preActionProtocolCompleted": "NO", "suspensionOfRTB_HousingAct": "SECTION_6A_2", "claimantCircumstancesSelect": "NO", "writEnforcementLanguageUsed": "ENGLISH", "tenancy_TypeOfTenancyLicence": "SECURE_TENANCY", "writAmountOfLandRegistryFees": "234500", "writAreLegalCostsToBeClaimed": "YES", "writRepaymentSummaryMarkdown": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Total amount that can be repaid
Repayment forAmount
Arrears and other costs\n £1,233
Legal costs£123
Land Registry fees£2,345
Writ of possession fee£999999.99
Total£1,003,700.99
", "hasDefendantCircumstancesInfo": "NO", "writShowChangeNameAddressPage": "No", "additionalReasonsForPossession": {"hasReasons": "NO"}, "writHaveLandRegistryFeesBeenPaid": "YES", "writHasClaimTransferredToHighCourt": "Yes", "writShowPeopleWhoWillBeEvictedPage": "Yes", "writHasHiredHighCourtEnforcementOfficer": "NO", "writStatementOfTruthRepaymentSummaryMarkdown": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
The payments due
Repayment forAmount
Arrears and other costs\n £1,233
Legal costs£123
Land Registry fees£2,345
Writ of possession fee£999999.99
Total£1,003,700.99
\n"} From fc5de9a8dbeb3be75e21f1ca2a95425d8fc659fd Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Mon, 23 Feb 2026 17:51:49 +0000 Subject: [PATCH 11/54] Add `Create-Enforcement-Writ-Basic-Case.json` test file and update file paths to align with renamed `testcasegeneration` directory. --- .../reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java | 2 +- .../Create-Case-Make-A-Claim-Basic-Case.json | 0 .../Create-Enforcement-Warrant-Basic-Case.json | 0 .../testcasegeneration/Create-Enforcement-Writ-Basic-Case.json | 1 + 4 files changed, 2 insertions(+), 1 deletion(-) rename src/main/resources/{test-case-generation => testcasegeneration}/Create-Case-Make-A-Claim-Basic-Case.json (100%) rename src/main/resources/{test-case-generation => testcasegeneration}/Create-Enforcement-Warrant-Basic-Case.json (100%) create mode 100644 src/main/resources/testcasegeneration/Create-Enforcement-Writ-Basic-Case.json diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java index 3ca15fca73..6efe7d8242 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java @@ -19,7 +19,7 @@ @Slf4j public class TestCaseSupportHelper { - public static final String LOCATION_PATTERN = "classpath*:test-case-generation/"; + public static final String LOCATION_PATTERN = "classpath*:testcasegeneration/"; public static final String JSON = ".json"; private final ResourcePatternResolver resourcePatternResolver; diff --git a/src/main/resources/test-case-generation/Create-Case-Make-A-Claim-Basic-Case.json b/src/main/resources/testcasegeneration/Create-Case-Make-A-Claim-Basic-Case.json similarity index 100% rename from src/main/resources/test-case-generation/Create-Case-Make-A-Claim-Basic-Case.json rename to src/main/resources/testcasegeneration/Create-Case-Make-A-Claim-Basic-Case.json diff --git a/src/main/resources/test-case-generation/Create-Enforcement-Warrant-Basic-Case.json b/src/main/resources/testcasegeneration/Create-Enforcement-Warrant-Basic-Case.json similarity index 100% rename from src/main/resources/test-case-generation/Create-Enforcement-Warrant-Basic-Case.json rename to src/main/resources/testcasegeneration/Create-Enforcement-Warrant-Basic-Case.json diff --git a/src/main/resources/testcasegeneration/Create-Enforcement-Writ-Basic-Case.json b/src/main/resources/testcasegeneration/Create-Enforcement-Writ-Basic-Case.json new file mode 100644 index 0000000000..4059acd0b3 --- /dev/null +++ b/src/main/resources/testcasegeneration/Create-Enforcement-Writ-Basic-Case.json @@ -0,0 +1 @@ +{"parties": [{"value": {"address": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "orgName": "pcs-solicitor1@test.com", "emailAddress": "pcs-solicitor1@test.com", "phoneNumberProvided": "NO"}}, {"value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}, {"value": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}}], "allClaimants": [{"id": "ea700fdb-b710-4326-8b37-24df0f4d2f92", "value": {"address": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "orgName": "pcs-solicitor1@test.com", "emailAddress": "pcs-solicitor1@test.com", "phoneNumberProvided": "NO"}}], "allDocuments": [], "claimantType": {"value": {"code": "PROVIDER_OF_SOCIAL_HOUSING", "label": "Registered provider of social housing"}, "valueCode": "PROVIDER_OF_SOCIAL_HOUSING"}, "languageUsed": "ENGLISH", "noticeServed": "No", "userPcqIdSet": "No", "allDefendants": [{"id": "39d575e6-fed3-4747-a5bb-c85e3931c16e", "value": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}}, {"id": "0ee3acb7-5c81-47dc-b09f-211064f91037", "value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}], "writFeeAmount": "£999999.99", "writAmountOwed": "123300", "propertyAddress": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "statementOfTruth": {"completedBy": "CLAIMANT", "fullNameClaimant": "wert", "positionClaimant": "ewrt", "agreementClaimant": ["BELIEVE_TRUE"]}, "warrantFeeAmount": "£999999.99", "legislativeCountry": "England", "mediationAttempted": "NO", "addAnotherDefendant": "YES", "claimingCostsWanted": "NO", "settlementAttempted": "NO", "writRepaymentChoice": "ALL", "applicationWithClaim": "NO", "claimGroundSummaries": [{"id": "9df0dd7e-8ee2-49d9-9135-2dc33a5a2ff2", "value": {"code": "NUISANCE_OR_IMMORAL_USE", "label": "Nuisance, annoyance, illegal or immoral use of the property (ground 2)", "reason": "sfgsdfgsdfg", "category": "SECURE_OR_FLEXIBLE_DISCRETIONARY", "isRentArrears": "No"}}], "selectEnforcementType": "WRIT", "wantToUploadDocuments": "NO", "suspensionOfRTB_Reason": "asdfasdf", "writAmountOfLegalCosts": "12300", "claimAgainstTrespassers": "NO", "formattedDefendantNames": "TVR HN
\nTest1 Testing1
", "formattedPropertyAddress": "1 Rse Way
London
SW11 1PD", "hasUnderlesseeOrMortgagee": "NO", "writCorrectNameAndAddress": "YES", "preActionProtocolCompleted": "NO", "suspensionOfRTB_HousingAct": "SECTION_6A_2", "claimantCircumstancesSelect": "NO", "writEnforcementLanguageUsed": "ENGLISH", "tenancy_TypeOfTenancyLicence": "SECURE_TENANCY", "writAmountOfLandRegistryFees": "234500", "writAreLegalCostsToBeClaimed": "YES", "writRepaymentSummaryMarkdown": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Total amount that can be repaid
Repayment forAmount
Arrears and other costs\n £1,233
Legal costs£123
Land Registry fees£2,345
Writ of possession fee£999999.99
Total£1,003,700.99
", "hasDefendantCircumstancesInfo": "NO", "writShowChangeNameAddressPage": "No", "additionalReasonsForPossession": {"hasReasons": "NO"}, "writHaveLandRegistryFeesBeenPaid": "YES", "writHasClaimTransferredToHighCourt": "Yes", "writShowPeopleWhoWillBeEvictedPage": "Yes", "writHasHiredHighCourtEnforcementOfficer": "NO", "writStatementOfTruthRepaymentSummaryMarkdown": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
The payments due
Repayment forAmount
Arrears and other costs\n £1,233
Legal costs£123
Land Registry fees£2,345
Writ of possession fee£999999.99
Total£1,003,700.99
\n"} From 0febeecf9def263a5c478a5548d69cafc13ab209 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Tue, 24 Feb 2026 09:31:31 +0000 Subject: [PATCH 12/54] Add logging for `listItems` and `dynamicList` creation in `TestCaseSupportHelper` to improve debugging. --- .../pcs/ccd/testcasesupport/TestCaseSupportHelper.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java index 6efe7d8242..27c473a1a4 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java @@ -29,18 +29,19 @@ public DynamicList getFileList() { Resource[] resources = resourcePatternResolver.getResources(LOCATION_PATTERN + "*"); log.info("Found {} resources from pattern: {}", resources.length, LOCATION_PATTERN + "*"); List listItems = Arrays.stream(resources) - .filter(Resource::isFile) .map(Resource::getFilename) .filter(Objects::nonNull) - .filter(name -> name.endsWith(".json")) .distinct() .map(name -> DynamicListElement.builder().code(UUID.nameUUIDFromBytes(name.getBytes())) .label(generateLabelFromFilename(name)).build()) .toList(); - return DynamicList.builder() + log.info("ListItems {}", listItems); + DynamicList dynamicList = DynamicList.builder() .listItems(listItems) .value(DynamicListElement.builder().label("Please select ...").code(UUID.randomUUID()).build()) .build(); + log.info("DynamicList {}", dynamicList); + return dynamicList; } catch (IOException e) { log.error("Error reading Test Case Support files", e); return DynamicList.builder().build(); From 361a1e28cef1275585d8c56c0c4738411993ac00 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Tue, 24 Feb 2026 09:43:10 +0000 Subject: [PATCH 13/54] Remove redundant `isFile` checks in `TestCaseSupportHelperTest` to clean up test setup. --- .../ccd/testcasesupport/TestCaseSupportHelperTest.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelperTest.java index 69d8920a7a..e8e8ed1cfb 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelperTest.java @@ -41,11 +41,8 @@ void shouldReturnDynamicListWithAllResourceFilenamesWhenTestCaseDirectoryContain throws IOException { // Given when(resource1.getFilename()).thenReturn("test-file-one.json"); - when(resource1.isFile()).thenReturn(true); when(resource2.getFilename()).thenReturn("test-file-two.json"); - when(resource2.isFile()).thenReturn(true); when(resource3.getFilename()).thenReturn("test-file-three.json"); - when(resource3.isFile()).thenReturn(true); Resource[] resources = {resource1, resource2, resource3}; when(resourcePatternResolver.getResources(LOCATION_PATTERN + "*")).thenReturn(resources); @@ -82,9 +79,7 @@ void shouldGenerateUuidCodesFromFilenameBytesForEachDynamicListElement() throws String filename2 = "test-file-two.json"; when(resource1.getFilename()).thenReturn(filename1); - when(resource1.isFile()).thenReturn(true); when(resource2.getFilename()).thenReturn(filename2); - when(resource2.isFile()).thenReturn(true); Resource[] resources = {resource1, resource2}; when(resourcePatternResolver.getResources(LOCATION_PATTERN + "*")).thenReturn(resources); @@ -105,11 +100,8 @@ void shouldGenerateUuidCodesFromFilenameBytesForEachDynamicListElement() throws void shouldReplaceHyphensWithSpacesAndRemoveJsonExtensionInLabels() throws IOException { // Given when(resource1.getFilename()).thenReturn("test-file-one.json"); - when(resource1.isFile()).thenReturn(true); when(resource2.getFilename()).thenReturn("another-test-file.json"); - when(resource2.isFile()).thenReturn(true); when(resource3.getFilename()).thenReturn("final-test-file.json"); - when(resource3.isFile()).thenReturn(true); Resource[] resources = {resource1, resource2, resource3}; when(resourcePatternResolver.getResources(LOCATION_PATTERN + "*")).thenReturn(resources); @@ -132,7 +124,6 @@ void shouldReplaceHyphensWithSpacesAndRemoveJsonExtensionInLabels() throws IOExc void shouldReturnDynamicListWithDefaultPleaseSelectValueElement() throws IOException { // Given when(resource1.getFilename()).thenReturn("test-file.json"); - when(resource1.isFile()).thenReturn(true); Resource[] resources = {resource1}; when(resourcePatternResolver.getResources(LOCATION_PATTERN + "*")).thenReturn(resources); From 08d650ebdc5ac3a1c322af84cb3a332170e4064c Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Tue, 24 Feb 2026 10:09:10 +0000 Subject: [PATCH 14/54] Update `testcasegeneration` directory references to `test-case-generation` for naming consistency. --- .../reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java | 2 +- .../Create-Case-Make-A-Claim-Basic-Case.json | 0 .../Create-Enforcement-Warrant-Basic-Case.json | 0 .../Create-Enforcement-Writ-Basic-Case.json | 0 4 files changed, 1 insertion(+), 1 deletion(-) rename src/main/resources/{testcasegeneration => test-case-generation}/Create-Case-Make-A-Claim-Basic-Case.json (100%) rename src/main/resources/{testcasegeneration => test-case-generation}/Create-Enforcement-Warrant-Basic-Case.json (100%) rename src/main/resources/{testcasegeneration => test-case-generation}/Create-Enforcement-Writ-Basic-Case.json (100%) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java index 27c473a1a4..5a076eefff 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/testcasesupport/TestCaseSupportHelper.java @@ -19,7 +19,7 @@ @Slf4j public class TestCaseSupportHelper { - public static final String LOCATION_PATTERN = "classpath*:testcasegeneration/"; + public static final String LOCATION_PATTERN = "classpath*:test-case-generation/"; public static final String JSON = ".json"; private final ResourcePatternResolver resourcePatternResolver; diff --git a/src/main/resources/testcasegeneration/Create-Case-Make-A-Claim-Basic-Case.json b/src/main/resources/test-case-generation/Create-Case-Make-A-Claim-Basic-Case.json similarity index 100% rename from src/main/resources/testcasegeneration/Create-Case-Make-A-Claim-Basic-Case.json rename to src/main/resources/test-case-generation/Create-Case-Make-A-Claim-Basic-Case.json diff --git a/src/main/resources/testcasegeneration/Create-Enforcement-Warrant-Basic-Case.json b/src/main/resources/test-case-generation/Create-Enforcement-Warrant-Basic-Case.json similarity index 100% rename from src/main/resources/testcasegeneration/Create-Enforcement-Warrant-Basic-Case.json rename to src/main/resources/test-case-generation/Create-Enforcement-Warrant-Basic-Case.json diff --git a/src/main/resources/testcasegeneration/Create-Enforcement-Writ-Basic-Case.json b/src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json similarity index 100% rename from src/main/resources/testcasegeneration/Create-Enforcement-Writ-Basic-Case.json rename to src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json From fa106579cf79238099a19fe8d30bdddadd65cb4d Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Wed, 25 Feb 2026 14:50:33 +0000 Subject: [PATCH 15/54] Refactor `mapper` package structure and rename classes for consistency across enforcement order services. Streamline null checks in mappers and update associated tests. --- .../enforcetheorder/EnforceTheOrder.java | 2 +- .../EnforcementOrderService.java | 2 +- .../SelectedDefendantsMapper.java | 2 +- .../WarrantDetailsMapper.java} | 23 +++++++------- .../{writ => mapper}/WritDetailsMapper.java | 2 +- .../strategy/WarrantStrategy.java | 6 ++-- .../strategy/WritStrategy.java | 10 +++---- .../V057__enforcement_writ_details.sql | 1 - .../enforcetheorder/EnforceTheOrderTest.java | 2 +- .../EnforcementOrderServiceTest.java | 1 - .../SelectedDefendantsMapperTest.java | 2 +- .../EnforcementTypeStrategyFactoryTest.java | 30 ++++++++++++------- .../strategy/WarrantStrategyTest.java | 6 ++-- .../strategy/WritStrategyTest.java | 16 +--------- ...est.java => WarrantDetailsMapperTest.java} | 24 +++------------ .../writ/WritDetailsMapperTest.java | 1 + 16 files changed, 52 insertions(+), 78 deletions(-) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/{warrant => }/EnforcementOrderService.java (97%) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/{warrant => mapper}/SelectedDefendantsMapper.java (95%) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/{warrant/EnforcementRiskProfileMapper.java => mapper/WarrantDetailsMapper.java} (75%) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/{writ => mapper}/WritDetailsMapper.java (97%) rename src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/{EnforcementRiskProfileMapperTest.java => WarrantDetailsMapperTest.java} (81%) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/enforcetheorder/EnforceTheOrder.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/enforcetheorder/EnforceTheOrder.java index fad6f42670..ed232dfa63 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/enforcetheorder/EnforceTheOrder.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/event/enforcetheorder/EnforceTheOrder.java @@ -19,7 +19,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.page.enforcetheorder.writ.WritPageConfigurer; import uk.gov.hmcts.reform.pcs.ccd.service.DefendantService; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.EnforcementOrderService; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.EnforcementOrderService; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicMultiSelectStringList; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicStringListElement; import uk.gov.hmcts.reform.pcs.ccd.util.AddressFormatter; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderService.java similarity index 97% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderService.java index d8def1cc07..fa601c1fab 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementOrderService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderService.java @@ -1,4 +1,4 @@ -package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant; +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/SelectedDefendantsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/SelectedDefendantsMapper.java similarity index 95% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/SelectedDefendantsMapper.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/SelectedDefendantsMapper.java index 62f4b3c020..e7f7b0e474 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/SelectedDefendantsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/SelectedDefendantsMapper.java @@ -1,4 +1,4 @@ -package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant; +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper; import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementRiskProfileMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java similarity index 75% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementRiskProfileMapper.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java index 5618225fb5..abb85f4264 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementRiskProfileMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java @@ -1,4 +1,4 @@ -package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant; +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper; import org.modelmapper.ModelMapper; import org.springframework.stereotype.Component; @@ -10,11 +10,11 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; @Component -public class EnforcementRiskProfileMapper { +public class WarrantDetailsMapper { private final ModelMapper modelMapper; - public EnforcementRiskProfileMapper(ModelMapper modelMapper) { + public WarrantDetailsMapper(ModelMapper modelMapper) { this.modelMapper = modelMapper; } @@ -22,16 +22,17 @@ public RiskProfileEntity toEntity(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { RiskProfileEntity entity = new RiskProfileEntity(); entity.setEnforcementOrder(enforcementOrderEntity); - WarrantDetails warrantDetails = enforcementOrder.getWarrantDetails(); - if (warrantDetails != null) { - entity.setAnyRiskToBailiff(warrantDetails.getAnyRiskToBailiff()); - EnforcementRiskDetails riskDetails = warrantDetails.getRiskDetails(); - if (riskDetails != null) { - modelMapper.map(riskDetails, entity); - } + entity.setAnyRiskToBailiff(warrantDetails.getAnyRiskToBailiff()); + EnforcementRiskDetails riskDetails = warrantDetails.getRiskDetails(); + if (riskDetails != null) { + modelMapper.map(riskDetails, entity); } + applyRawWarrantDetails(enforcementOrder, entity); + return entity; + } + private void applyRawWarrantDetails(EnforcementOrder enforcementOrder, RiskProfileEntity entity) { RawWarrantDetails rawWarrantDetails = enforcementOrder.getRawWarrantDetails(); if (rawWarrantDetails != null) { entity.setVulnerablePeoplePresent(rawWarrantDetails.getVulnerablePeoplePresent()); @@ -42,7 +43,5 @@ public RiskProfileEntity toEntity(EnforcementOrderEntity enforcementOrderEntity, rawWarrantDetails.getVulnerableAdultsChildren().getVulnerableReasonText()); } } - - return entity; } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java similarity index 97% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java index 8229abf08d..8251c1ce9a 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java @@ -1,4 +1,4 @@ -package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.writ; +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java index 798390211d..c736498792 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java @@ -9,8 +9,8 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.SelectedDefendantEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.RiskProfileRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.SelectedDefendantRepository; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.EnforcementRiskProfileMapper; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.SelectedDefendantsMapper; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantDetailsMapper; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.SelectedDefendantsMapper; import java.util.List; @@ -21,7 +21,7 @@ public class WarrantStrategy implements EnforcementTypeStrategy { private final RiskProfileRepository riskProfileRepository; private final SelectedDefendantsMapper selectedDefendantsMapper; private final SelectedDefendantRepository selectedDefendantRepository; - private final EnforcementRiskProfileMapper riskProfileMapper; + private final WarrantDetailsMapper riskProfileMapper; @Override public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategy.java index f8ce63ec68..8f9d6dc851 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategy.java @@ -7,7 +7,7 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WritRepository; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.writ.WritDetailsMapper; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WritDetailsMapper; @Component @AllArgsConstructor @@ -19,11 +19,9 @@ public class WritStrategy implements EnforcementTypeStrategy { @Override public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { WritDetails writDetails = enforcementOrder.getWritDetails(); - if (writDetails != null) { - WritEntity writEntity = writDetailsMapper.toEntity(writDetails); - writEntity.setEnforcementOrder(enforcementOrderEntity); - writRepository.save(writEntity); - } + WritEntity writEntity = writDetailsMapper.toEntity(writDetails); + writEntity.setEnforcementOrder(enforcementOrderEntity); + writRepository.save(writEntity); } } diff --git a/src/main/resources/db/migration/V057__enforcement_writ_details.sql b/src/main/resources/db/migration/V057__enforcement_writ_details.sql index ee3c85ae04..db8acd7a35 100644 --- a/src/main/resources/db/migration/V057__enforcement_writ_details.sql +++ b/src/main/resources/db/migration/V057__enforcement_writ_details.sql @@ -25,4 +25,3 @@ CREATE TABLE enf_writ( CONSTRAINT unique_writ_per_enforcement UNIQUE(enf_case_id) ); -CREATE INDEX idx_enf_writ_case_id ON enf_writ (enf_case_id); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/enforcetheorder/EnforceTheOrderTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/enforcetheorder/EnforceTheOrderTest.java index b3228e9f61..0f03517ad1 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/enforcetheorder/EnforceTheOrderTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/event/enforcetheorder/EnforceTheOrderTest.java @@ -24,7 +24,7 @@ import uk.gov.hmcts.reform.pcs.ccd.event.BaseEventTest; import uk.gov.hmcts.reform.pcs.ccd.page.enforcetheorder.writ.WritPageConfigurer; import uk.gov.hmcts.reform.pcs.ccd.service.DefendantService; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.EnforcementOrderService; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.EnforcementOrderService; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicMultiSelectStringList; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicStringListElement; import uk.gov.hmcts.reform.pcs.ccd.util.AddressFormatter; diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java index aff8b4df4b..1f6c812c35 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderServiceTest.java @@ -16,7 +16,6 @@ import uk.gov.hmcts.reform.pcs.ccd.service.DraftCaseDataService; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy.EnforcementTypeStrategy; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy.EnforcementTypeStrategyFactory; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.EnforcementOrderService; import java.util.Optional; import java.util.UUID; diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/SelectedDefendantsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/SelectedDefendantsMapperTest.java index 86573ba180..bcb2936e46 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/SelectedDefendantsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/SelectedDefendantsMapperTest.java @@ -14,7 +14,7 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.SelectedDefendantEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.PartyRepository; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.SelectedDefendantsMapper; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.SelectedDefendantsMapper; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicMultiSelectStringList; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicStringListElement; diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java index 83be3da88c..9a87af4a6e 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java @@ -1,12 +1,18 @@ + package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy; 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.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType; +import java.util.stream.Stream; + import static org.assertj.core.api.Assertions.assertThat; @ExtendWith(MockitoExtension.class) @@ -20,22 +26,24 @@ class EnforcementTypeStrategyFactoryTest { @InjectMocks private EnforcementTypeStrategyFactory underTest; - @Test - void shouldReturnWarrantStrategyForWarrantType() { + @ParameterizedTest + @MethodSource("provideEnforcementTypeAndExpectedStrategy") + void shouldReturnCorrectStrategyForEnforcementType(SelectEnforcementType type, String expectedStrategyField) { // When - EnforcementTypeStrategy strategy = underTest.getStrategy(SelectEnforcementType.WARRANT); + EnforcementTypeStrategy strategy = underTest.getStrategy(type); // Then - assertThat(strategy).isSameAs(warrantStrategy); + EnforcementTypeStrategy expectedStrategy = expectedStrategyField.equals("warrant") + ? warrantStrategy + : writStrategy; + assertThat(strategy).isSameAs(expectedStrategy); } - @Test - void shouldReturnWritStrategyForWritType() { - // When - EnforcementTypeStrategy strategy = underTest.getStrategy(SelectEnforcementType.WRIT); - - // Then - assertThat(strategy).isSameAs(writStrategy); + private static Stream provideEnforcementTypeAndExpectedStrategy() { + return Stream.of( + Arguments.of(SelectEnforcementType.WARRANT, "warrant"), + Arguments.of(SelectEnforcementType.WRIT, "writ") + ); } @Test diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java index 4a5b734b5b..07f1fc045e 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java @@ -20,8 +20,8 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.SelectedDefendantEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.RiskProfileRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.SelectedDefendantRepository; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.EnforcementRiskProfileMapper; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant.SelectedDefendantsMapper; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantDetailsMapper; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.SelectedDefendantsMapper; import java.util.Collections; import java.util.List; @@ -45,7 +45,7 @@ class WarrantStrategyTest { @Mock private SelectedDefendantRepository selectedDefendantRepository; @Mock - private EnforcementRiskProfileMapper riskProfileMapper; + private WarrantDetailsMapper riskProfileMapper; @InjectMocks private WarrantStrategy underTest; diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java index 0baef4d224..5d003b101d 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java @@ -17,12 +17,11 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WritRepository; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.writ.WritDetailsMapper; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WritDetailsMapper; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -98,19 +97,6 @@ void shouldSetEnforcementOrderOnWritEntity() { assertThat(savedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); } - @Test - void shouldNotProcessWhenWritDetailsIsNull() { - // Given - enforcementOrder.setWritDetails(null); - - // When - underTest.process(enforcementOrderEntity, enforcementOrder); - - // Then - verify(writDetailsMapper, never()).toEntity(any()); - verify(writRepository, never()).save(any()); - } - @Test void shouldHandleEmptyWritDetails() { // Given diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementRiskProfileMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java similarity index 81% rename from src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementRiskProfileMapperTest.java rename to src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java index da227dc06b..ebd99bd02e 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementRiskProfileMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java @@ -15,16 +15,17 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantDetailsMapper; import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; @ExtendWith(MockitoExtension.class) -class EnforcementRiskProfileMapperTest { +class WarrantDetailsMapperTest { - private final EnforcementRiskProfileMapper mapper = - new EnforcementRiskProfileMapper(new ModelMapper()); + private final WarrantDetailsMapper mapper = + new WarrantDetailsMapper(new ModelMapper()); @Nested @DisplayName("toEntity") @@ -78,23 +79,6 @@ void mapsVulnerabilityDetails() { assertThat(result.getVulnerableReasonText()).isEqualTo("Vulnerability reason"); } - @Test - @DisplayName("returns entity with null risk fields when warrant and raw details are null") - void returnsEntityWithNullRiskFieldsWhenDetailsNull() { - EnforcementOrderEntity orderEntity = new EnforcementOrderEntity(); - orderEntity.setId(UUID.randomUUID()); - EnforcementOrder order = EnforcementOrder.builder().build(); - - RiskProfileEntity result = mapper.toEntity(orderEntity, order); - - assertThat(result.getEnforcementOrder()).isEqualTo(orderEntity); - assertThat(result.getAnyRiskToBailiff()).isNull(); - assertThat(result.getViolentDetails()).isNull(); - assertThat(result.getVulnerablePeoplePresent()).isNull(); - assertThat(result.getVulnerableCategory()).isNull(); - assertThat(result.getVulnerableReasonText()).isNull(); - } - @Test @DisplayName("maps warrant details when risk details is null") void mapsWarrantDetailsWhenRiskDetailsNull() { diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java index d6b6214abf..73449efa50 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java @@ -14,6 +14,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.NameAndAddressForEviction; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WritDetailsMapper; import java.math.BigDecimal; From 48d2f3478f50aff89905da4b3e16bbe948dbda3e Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Wed, 25 Feb 2026 17:35:38 +0000 Subject: [PATCH 16/54] Remove `EnforcementWarrantMapper` and associated test classes as they are obsolete. --- .../EnforcementWarrantRepository.java | 2 +- .../mapper/EnforcementWarrantMapper.java | 185 ------ .../mapper/RiskDetailsMapper.java | 47 ++ .../mapper/WarrantDetailsMapper.java | 192 +++++- .../strategy/WarrantStrategy.java | 23 +- ...sql => V058__enforcement_writ_details.sql} | 0 .../strategy/WarrantStrategyTest.java | 237 ++++++-- .../warrant/EnforcementWarrantMapperTest.java | 514 ---------------- .../warrant/RiskDetailsMapperTest.java | 99 +++ .../warrant/WarrantDetailsMapperTest.java | 574 +++++++++++++++--- .../pcs/testingsupport/EnforcementDMTest.java | 5 +- 11 files changed, 1010 insertions(+), 868 deletions(-) delete mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/EnforcementWarrantMapper.java create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapper.java rename src/main/resources/db/migration/{V057__enforcement_writ_details.sql => V058__enforcement_writ_details.sql} (100%) delete mode 100644 src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementWarrantMapperTest.java create mode 100644 src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/RiskDetailsMapperTest.java diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/EnforcementWarrantRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/EnforcementWarrantRepository.java index 874f89c440..707b1135d0 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/EnforcementWarrantRepository.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/EnforcementWarrantRepository.java @@ -1,4 +1,4 @@ -package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.warrant; +package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder; import org.springframework.data.jpa.repository.JpaRepository; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementWarrantEntity; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/EnforcementWarrantMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/EnforcementWarrantMapper.java deleted file mode 100644 index f4efa63800..0000000000 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/EnforcementWarrantMapper.java +++ /dev/null @@ -1,185 +0,0 @@ -package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant; - -import org.springframework.stereotype.Component; -import uk.gov.hmcts.ccd.sdk.type.YesOrNo; -import uk.gov.hmcts.reform.pcs.ccd.domain.RepaymentPreference; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreement; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementClaimant; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementLegalRep; -import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LandRegistryFees; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LegalCosts; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RepaymentCosts; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.StatementOfTruthDetailsEnforcement; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementWarrantEntity; - -import java.util.List; -import java.util.stream.Collectors; - -@Component -public class EnforcementWarrantMapper { - - public EnforcementWarrantEntity toEntity(EnforcementOrder enforcementOrder, - EnforcementOrderEntity enforcementOrderEntity) { - EnforcementWarrantEntity warrantEntity = EnforcementWarrantEntity.builder() - .enforcementOrder(enforcementOrderEntity).build(); - if (enforcementOrder.getWarrantDetails() != null) { - WarrantDetails warrantDetails = enforcementOrder.getWarrantDetails(); - controlFlags(warrantEntity, warrantDetails); - suspendTheOrder(warrantEntity, warrantDetails); - additionalInformation(warrantDetails, warrantEntity); - nameAndAddressForEviction(warrantDetails, warrantEntity); - peopleToEvict(warrantDetails, warrantEntity); - propertyAccessDetails(warrantDetails, warrantEntity); - legalCosts(warrantDetails, warrantEntity); - moneyOwed(warrantDetails, warrantEntity); - landRegistry(warrantDetails, warrantEntity); - repayment(warrantDetails, warrantEntity); - defendantsDOB(warrantEntity, warrantDetails); - statementOfTruth(warrantDetails, warrantEntity); - } - return warrantEntity; - } - - private void controlFlags(EnforcementWarrantEntity warrantEntity, WarrantDetails warrantDetails) { - warrantEntity.setShowPeopleWhoWillBeEvictedPage( - convertYesOrNoToVerticalYesNo(warrantDetails.getShowPeopleWhoWillBeEvictedPage())); - warrantEntity.setShowPeopleYouWantToEvictPage( - convertYesOrNoToVerticalYesNo(warrantDetails.getShowPeopleYouWantToEvictPage())); - } - - private void statementOfTruth(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { - if (warrantDetails.getStatementOfTruth() != null) { - StatementOfTruthDetailsEnforcement statementOfTruth = warrantDetails.getStatementOfTruth(); - warrantEntity.setCompletedBy(statementOfTruth.getCompletedBy()); - warrantEntity.setFullNameClaimant(statementOfTruth.getFullNameClaimant()); - warrantEntity.setPositionClaimant(statementOfTruth.getPositionClaimant()); - warrantEntity.setFullNameLegalRep(statementOfTruth.getFullNameLegalRep()); - warrantEntity.setFirmNameLegalRep(statementOfTruth.getFirmNameLegalRep()); - warrantEntity.setPositionLegalRep(statementOfTruth.getPositionLegalRep()); - - agreementClaimant(warrantEntity, statementOfTruth); - agreementLegalRep(warrantEntity, statementOfTruth); - certification(warrantEntity, statementOfTruth); - } - } - - private void certification(EnforcementWarrantEntity warrantEntity, - StatementOfTruthDetailsEnforcement statementOfTruth) { - List certification = statementOfTruth.getCertification(); - if (certification != null && !certification.isEmpty()) { - warrantEntity.setCertification( - certification.stream() - .map(Enum::name) - .collect(Collectors.joining(",")) - ); - } - } - - private void agreementLegalRep(EnforcementWarrantEntity warrantEntity, - StatementOfTruthDetailsEnforcement statementOfTruth) { - List agreementLegalRep = statementOfTruth.getAgreementLegalRep(); - if (agreementLegalRep != null && !agreementLegalRep.isEmpty()) { - warrantEntity.setAgreementLegalRep(agreementLegalRep.stream() - .map(Enum::name) - .collect(Collectors.joining(",")) - ); - } - } - - private void agreementClaimant(EnforcementWarrantEntity warrantEntity, - StatementOfTruthDetailsEnforcement statementOfTruth) { - List agreementClaimant = statementOfTruth.getAgreementClaimant(); - if (agreementClaimant != null && !agreementClaimant.isEmpty()) { - warrantEntity.setAgreementClaimant( - agreementClaimant.stream() - .map(Enum::name) - .collect(Collectors.joining(",")) - ); - } - } - - private void suspendTheOrder(EnforcementWarrantEntity warrantEntity, WarrantDetails warrantDetails) { - warrantEntity.setIsSuspendedOrder(warrantDetails.getIsSuspendedOrder()); - } - - private void peopleToEvict(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { - if (warrantDetails.getPeopleToEvict() != null) { - warrantEntity.setEvictEveryone(warrantDetails.getPeopleToEvict().getEvictEveryone()); - } - } - - private void nameAndAddressForEviction(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { - if (warrantDetails.getNameAndAddressForEviction() != null) { - warrantEntity.setCorrectNameAndAddress( - warrantDetails.getNameAndAddressForEviction().getCorrectNameAndAddress()); - } - } - - private void additionalInformation(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { - if (warrantDetails.getAdditionalInformation() != null) { - warrantEntity.setAdditionalInformationSelect( - warrantDetails.getAdditionalInformation().getAdditionalInformationSelect()); - warrantEntity.setAdditionalInformationDetails( - warrantDetails.getAdditionalInformation().getAdditionalInformationDetails()); - } - } - - private void propertyAccessDetails(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { - if (warrantDetails.getPropertyAccessDetails() != null) { - warrantEntity.setIsDifficultToAccessProperty( - warrantDetails.getPropertyAccessDetails().getIsDifficultToAccessProperty()); - warrantEntity.setClarificationOnAccessDifficultyText( - warrantDetails.getPropertyAccessDetails().getClarificationOnAccessDifficultyText()); - } - } - - private void legalCosts(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { - LegalCosts legalCosts = warrantDetails.getLegalCosts(); - if (legalCosts != null) { - warrantEntity.setAreLegalCostsToBeClaimed(legalCosts.getAreLegalCostsToBeClaimed()); - warrantEntity.setAmountOfLegalCosts(legalCosts.getAmountOfLegalCosts()); - } - } - - private void landRegistry(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { - LandRegistryFees landRegistryFees = warrantDetails.getLandRegistryFees(); - if (landRegistryFees != null) { - warrantEntity.setHaveLandRegistryFeesBeenPaid(landRegistryFees.getHaveLandRegistryFeesBeenPaid()); - warrantEntity.setAmountOfLandRegistryFees(landRegistryFees.getAmountOfLandRegistryFees()); - } - } - - private void repayment(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { - if (warrantDetails.getRepaymentCosts() != null) { - RepaymentCosts repaymentCosts = warrantDetails.getRepaymentCosts(); - RepaymentPreference repaymentChoice = repaymentCosts.getRepaymentChoice(); - if (repaymentChoice != null) { - warrantEntity.setRepaymentChoice(repaymentChoice.getLabel()); - } - warrantEntity.setAmountOfRepaymentCosts(repaymentCosts.getAmountOfRepaymentCosts()); - warrantEntity.setRepaymentSummaryMarkdown(repaymentCosts.getRepaymentSummaryMarkdown()); - } - } - - private void defendantsDOB(EnforcementWarrantEntity warrantEntity, WarrantDetails warrantDetails) { - warrantEntity.setDefendantsDOBKnown(warrantDetails.getDefendantsDOBKnown()); - if (warrantDetails.getDefendantsDOB() != null) { - warrantEntity.setDefendantsDOBDetails( - warrantDetails.getDefendantsDOB().getDefendantsDOBDetails()); - } - } - - private void moneyOwed(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { - if (warrantDetails.getMoneyOwedByDefendants() != null) { - warrantEntity.setAmountOwed(warrantDetails.getMoneyOwedByDefendants().getAmountOwed()); - } - } - - private VerticalYesNo convertYesOrNoToVerticalYesNo(YesOrNo yesOrNo) { - return yesOrNo == YesOrNo.YES ? VerticalYesNo.YES : VerticalYesNo.NO; - } -} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapper.java new file mode 100644 index 0000000000..2b1aabddde --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapper.java @@ -0,0 +1,47 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper; + +import org.modelmapper.ModelMapper; +import org.springframework.stereotype.Component; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.EnforcementRiskDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; + +@Component +public class RiskDetailsMapper { + + private final ModelMapper modelMapper; + + public RiskDetailsMapper(ModelMapper modelMapper) { + this.modelMapper = modelMapper; + } + + public RiskProfileEntity toEntity(EnforcementOrderEntity enforcementOrderEntity, + EnforcementOrder enforcementOrder) { + RiskProfileEntity riskProfileEntity = new RiskProfileEntity(); + riskProfileEntity.setEnforcementOrder(enforcementOrderEntity); + WarrantDetails warrantDetails = enforcementOrder.getWarrantDetails(); + riskProfileEntity.setAnyRiskToBailiff(warrantDetails.getAnyRiskToBailiff()); + EnforcementRiskDetails riskDetails = warrantDetails.getRiskDetails(); + if (riskDetails != null) { + modelMapper.map(riskDetails, riskProfileEntity); + } + applyRawWarrantDetails(enforcementOrder, riskProfileEntity); + return riskProfileEntity; + } + + private void applyRawWarrantDetails(EnforcementOrder enforcementOrder, RiskProfileEntity entity) { + RawWarrantDetails rawWarrantDetails = enforcementOrder.getRawWarrantDetails(); + if (rawWarrantDetails != null) { + entity.setVulnerablePeoplePresent(rawWarrantDetails.getVulnerablePeoplePresent()); + if (rawWarrantDetails.getVulnerableAdultsChildren() != null) { + entity.setVulnerableCategory( + rawWarrantDetails.getVulnerableAdultsChildren().getVulnerableCategory()); + entity.setVulnerableReasonText( + rawWarrantDetails.getVulnerableAdultsChildren().getVulnerableReasonText()); + } + } + } +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java index abb85f4264..8013895490 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java @@ -1,47 +1,185 @@ package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper; -import org.modelmapper.ModelMapper; import org.springframework.stereotype.Component; +import uk.gov.hmcts.ccd.sdk.type.YesOrNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.RepaymentPreference; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreement; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementClaimant; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementLegalRep; +import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.EnforcementRiskDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LandRegistryFees; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LegalCosts; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RepaymentCosts; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.StatementOfTruthDetailsEnforcement; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementWarrantEntity; + +import java.util.List; +import java.util.stream.Collectors; @Component public class WarrantDetailsMapper { - private final ModelMapper modelMapper; + public EnforcementWarrantEntity toEntity(EnforcementOrder enforcementOrder, + EnforcementOrderEntity enforcementOrderEntity) { + EnforcementWarrantEntity warrantEntity = EnforcementWarrantEntity.builder() + .enforcementOrder(enforcementOrderEntity).build(); + if (enforcementOrder.getWarrantDetails() != null) { + WarrantDetails warrantDetails = enforcementOrder.getWarrantDetails(); + controlFlags(warrantEntity, warrantDetails); + suspendTheOrder(warrantEntity, warrantDetails); + additionalInformation(warrantDetails, warrantEntity); + nameAndAddressForEviction(warrantDetails, warrantEntity); + peopleToEvict(warrantDetails, warrantEntity); + propertyAccessDetails(warrantDetails, warrantEntity); + legalCosts(warrantDetails, warrantEntity); + moneyOwed(warrantDetails, warrantEntity); + landRegistry(warrantDetails, warrantEntity); + repayment(warrantDetails, warrantEntity); + defendantsDOB(warrantEntity, warrantDetails); + statementOfTruth(warrantDetails, warrantEntity); + } + return warrantEntity; + } + + private void controlFlags(EnforcementWarrantEntity warrantEntity, WarrantDetails warrantDetails) { + warrantEntity.setShowPeopleWhoWillBeEvictedPage( + convertYesOrNoToVerticalYesNo(warrantDetails.getShowPeopleWhoWillBeEvictedPage())); + warrantEntity.setShowPeopleYouWantToEvictPage( + convertYesOrNoToVerticalYesNo(warrantDetails.getShowPeopleYouWantToEvictPage())); + } + + private void statementOfTruth(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { + if (warrantDetails.getStatementOfTruth() != null) { + StatementOfTruthDetailsEnforcement statementOfTruth = warrantDetails.getStatementOfTruth(); + warrantEntity.setCompletedBy(statementOfTruth.getCompletedBy()); + warrantEntity.setFullNameClaimant(statementOfTruth.getFullNameClaimant()); + warrantEntity.setPositionClaimant(statementOfTruth.getPositionClaimant()); + warrantEntity.setFullNameLegalRep(statementOfTruth.getFullNameLegalRep()); + warrantEntity.setFirmNameLegalRep(statementOfTruth.getFirmNameLegalRep()); + warrantEntity.setPositionLegalRep(statementOfTruth.getPositionLegalRep()); - public WarrantDetailsMapper(ModelMapper modelMapper) { - this.modelMapper = modelMapper; + agreementClaimant(warrantEntity, statementOfTruth); + agreementLegalRep(warrantEntity, statementOfTruth); + certification(warrantEntity, statementOfTruth); + } + } + + private void certification(EnforcementWarrantEntity warrantEntity, + StatementOfTruthDetailsEnforcement statementOfTruth) { + List certification = statementOfTruth.getCertification(); + if (certification != null && !certification.isEmpty()) { + warrantEntity.setCertification( + certification.stream() + .map(Enum::name) + .collect(Collectors.joining(",")) + ); + } + } + + private void agreementLegalRep(EnforcementWarrantEntity warrantEntity, + StatementOfTruthDetailsEnforcement statementOfTruth) { + List agreementLegalRep = statementOfTruth.getAgreementLegalRep(); + if (agreementLegalRep != null && !agreementLegalRep.isEmpty()) { + warrantEntity.setAgreementLegalRep(agreementLegalRep.stream() + .map(Enum::name) + .collect(Collectors.joining(",")) + ); + } + } + + private void agreementClaimant(EnforcementWarrantEntity warrantEntity, + StatementOfTruthDetailsEnforcement statementOfTruth) { + List agreementClaimant = statementOfTruth.getAgreementClaimant(); + if (agreementClaimant != null && !agreementClaimant.isEmpty()) { + warrantEntity.setAgreementClaimant( + agreementClaimant.stream() + .map(Enum::name) + .collect(Collectors.joining(",")) + ); + } + } + + private void suspendTheOrder(EnforcementWarrantEntity warrantEntity, WarrantDetails warrantDetails) { + warrantEntity.setIsSuspendedOrder(warrantDetails.getIsSuspendedOrder()); + } + + private void peopleToEvict(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { + if (warrantDetails.getPeopleToEvict() != null) { + warrantEntity.setEvictEveryone(warrantDetails.getPeopleToEvict().getEvictEveryone()); + } } - public RiskProfileEntity toEntity(EnforcementOrderEntity enforcementOrderEntity, - EnforcementOrder enforcementOrder) { - RiskProfileEntity entity = new RiskProfileEntity(); - entity.setEnforcementOrder(enforcementOrderEntity); - WarrantDetails warrantDetails = enforcementOrder.getWarrantDetails(); - entity.setAnyRiskToBailiff(warrantDetails.getAnyRiskToBailiff()); - EnforcementRiskDetails riskDetails = warrantDetails.getRiskDetails(); - if (riskDetails != null) { - modelMapper.map(riskDetails, entity); + private void nameAndAddressForEviction(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { + if (warrantDetails.getNameAndAddressForEviction() != null) { + warrantEntity.setCorrectNameAndAddress( + warrantDetails.getNameAndAddressForEviction().getCorrectNameAndAddress()); } - applyRawWarrantDetails(enforcementOrder, entity); - return entity; } - private void applyRawWarrantDetails(EnforcementOrder enforcementOrder, RiskProfileEntity entity) { - RawWarrantDetails rawWarrantDetails = enforcementOrder.getRawWarrantDetails(); - if (rawWarrantDetails != null) { - entity.setVulnerablePeoplePresent(rawWarrantDetails.getVulnerablePeoplePresent()); - if (rawWarrantDetails.getVulnerableAdultsChildren() != null) { - entity.setVulnerableCategory( - rawWarrantDetails.getVulnerableAdultsChildren().getVulnerableCategory()); - entity.setVulnerableReasonText( - rawWarrantDetails.getVulnerableAdultsChildren().getVulnerableReasonText()); + private void additionalInformation(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { + if (warrantDetails.getAdditionalInformation() != null) { + warrantEntity.setAdditionalInformationSelect( + warrantDetails.getAdditionalInformation().getAdditionalInformationSelect()); + warrantEntity.setAdditionalInformationDetails( + warrantDetails.getAdditionalInformation().getAdditionalInformationDetails()); + } + } + + private void propertyAccessDetails(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { + if (warrantDetails.getPropertyAccessDetails() != null) { + warrantEntity.setIsDifficultToAccessProperty( + warrantDetails.getPropertyAccessDetails().getIsDifficultToAccessProperty()); + warrantEntity.setClarificationOnAccessDifficultyText( + warrantDetails.getPropertyAccessDetails().getClarificationOnAccessDifficultyText()); + } + } + + private void legalCosts(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { + LegalCosts legalCosts = warrantDetails.getLegalCosts(); + if (legalCosts != null) { + warrantEntity.setAreLegalCostsToBeClaimed(legalCosts.getAreLegalCostsToBeClaimed()); + warrantEntity.setAmountOfLegalCosts(legalCosts.getAmountOfLegalCosts()); + } + } + + private void landRegistry(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { + LandRegistryFees landRegistryFees = warrantDetails.getLandRegistryFees(); + if (landRegistryFees != null) { + warrantEntity.setHaveLandRegistryFeesBeenPaid(landRegistryFees.getHaveLandRegistryFeesBeenPaid()); + warrantEntity.setAmountOfLandRegistryFees(landRegistryFees.getAmountOfLandRegistryFees()); + } + } + + private void repayment(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { + if (warrantDetails.getRepaymentCosts() != null) { + RepaymentCosts repaymentCosts = warrantDetails.getRepaymentCosts(); + RepaymentPreference repaymentChoice = repaymentCosts.getRepaymentChoice(); + if (repaymentChoice != null) { + warrantEntity.setRepaymentChoice(repaymentChoice.getLabel()); } + warrantEntity.setAmountOfRepaymentCosts(repaymentCosts.getAmountOfRepaymentCosts()); + warrantEntity.setRepaymentSummaryMarkdown(repaymentCosts.getRepaymentSummaryMarkdown()); + } + } + + private void defendantsDOB(EnforcementWarrantEntity warrantEntity, WarrantDetails warrantDetails) { + warrantEntity.setDefendantsDOBKnown(warrantDetails.getDefendantsDOBKnown()); + if (warrantDetails.getDefendantsDOB() != null) { + warrantEntity.setDefendantsDOBDetails( + warrantDetails.getDefendantsDOB().getDefendantsDOBDetails()); } } + + private void moneyOwed(WarrantDetails warrantDetails, EnforcementWarrantEntity warrantEntity) { + if (warrantDetails.getMoneyOwedByDefendants() != null) { + warrantEntity.setAmountOwed(warrantDetails.getMoneyOwedByDefendants().getAmountOwed()); + } + } + + private VerticalYesNo convertYesOrNoToVerticalYesNo(YesOrNo yesOrNo) { + return yesOrNo == YesOrNo.YES ? VerticalYesNo.YES : VerticalYesNo.NO; + } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java index c736498792..5305af2037 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java @@ -5,12 +5,15 @@ import org.springframework.util.CollectionUtils; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementWarrantEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.SelectedDefendantEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.RiskProfileRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.SelectedDefendantRepository; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantDetailsMapper; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.RiskDetailsMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.SelectedDefendantsMapper; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.EnforcementWarrantRepository; import java.util.List; @@ -21,12 +24,30 @@ public class WarrantStrategy implements EnforcementTypeStrategy { private final RiskProfileRepository riskProfileRepository; private final SelectedDefendantsMapper selectedDefendantsMapper; private final SelectedDefendantRepository selectedDefendantRepository; - private final WarrantDetailsMapper riskProfileMapper; + private final WarrantDetailsMapper warrantDetailsMapper; + private final RiskDetailsMapper riskProfileMapper; + private final EnforcementWarrantRepository enforcementWarrantRepository; @Override public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { + processWarrant(enforcementOrder, enforcementOrderEntity); + processRisk(enforcementOrder, enforcementOrderEntity); + processSelectedDefendants(enforcementOrderEntity); + } + + private void processWarrant(EnforcementOrder enforcementOrder, EnforcementOrderEntity enforcementOrderEntity) { + EnforcementWarrantEntity warrantEntity = warrantDetailsMapper.toEntity(enforcementOrder, + enforcementOrderEntity); + EnforcementWarrantEntity saved = enforcementWarrantRepository.save(warrantEntity); + enforcementOrderEntity.setWarrantDetails(saved); + } + + private void processRisk(EnforcementOrder enforcementOrder, EnforcementOrderEntity enforcementOrderEntity) { RiskProfileEntity riskProfile = riskProfileMapper.toEntity(enforcementOrderEntity, enforcementOrder); riskProfileRepository.save(riskProfile); + } + + private void processSelectedDefendants(EnforcementOrderEntity enforcementOrderEntity) { List selectedDefendantsEntities = selectedDefendantsMapper.mapToEntities(enforcementOrderEntity); if (!CollectionUtils.isEmpty(selectedDefendantsEntities)) { diff --git a/src/main/resources/db/migration/V057__enforcement_writ_details.sql b/src/main/resources/db/migration/V058__enforcement_writ_details.sql similarity index 100% rename from src/main/resources/db/migration/V057__enforcement_writ_details.sql rename to src/main/resources/db/migration/V058__enforcement_writ_details.sql diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java index 07f1fc045e..e0b6d408de 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java @@ -3,6 +3,9 @@ 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.ArgumentCaptor; import org.mockito.Captor; import org.mockito.InOrder; @@ -16,18 +19,24 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.VulnerableAdultsChildren; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementWarrantEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.SelectedDefendantEntity; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.EnforcementWarrantRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.RiskProfileRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.SelectedDefendantRepository; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantDetailsMapper; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.RiskDetailsMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.SelectedDefendantsMapper; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantDetailsMapper; import java.util.Collections; import java.util.List; +import java.util.UUID; +import java.util.stream.Stream; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -45,18 +54,22 @@ class WarrantStrategyTest { @Mock private SelectedDefendantRepository selectedDefendantRepository; @Mock - private WarrantDetailsMapper riskProfileMapper; + private RiskDetailsMapper riskProfileMapper; + @Mock + private WarrantDetailsMapper warrantDetailsMapper; + @Mock + private EnforcementWarrantRepository enforcementWarrantRepository; + @Captor + private ArgumentCaptor riskProfileCaptor; + @Captor + private ArgumentCaptor warrantEntityCaptor; @InjectMocks private WarrantStrategy underTest; - @Captor - private ArgumentCaptor riskProfileCaptor; - private EnforcementOrderEntity enforcementOrderEntity; private EnforcementOrder enforcementOrder; private WarrantDetails warrantDetails; - private RawWarrantDetails rawWarrantDetails; private EnforcementRiskDetails riskDetails; @BeforeEach @@ -78,7 +91,7 @@ void setUp() { VulnerableAdultsChildren vulnerableAdultsChildren = VulnerableAdultsChildren.builder() .vulnerableCategory(VULNERABLE_CHILDREN).vulnerableReasonText("Young children present").build(); - rawWarrantDetails = RawWarrantDetails.builder() + RawWarrantDetails rawWarrantDetails = RawWarrantDetails.builder() .vulnerablePeoplePresent(YesNoNotSure.YES).vulnerableAdultsChildren(vulnerableAdultsChildren).build(); enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails) @@ -86,11 +99,17 @@ void setUp() { } @Test - void shouldProcessWarrantDetailsSuccessfully() { + void shouldProcessWarrantDetailsAndSaveToRepository() { // Given - RiskProfileEntity savedEntity = createExpectedRiskProfileEntity(); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(savedEntity); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(savedEntity); + EnforcementWarrantEntity warrantEntity = new EnforcementWarrantEntity(); + EnforcementWarrantEntity savedWarrantEntity = new EnforcementWarrantEntity(); + savedWarrantEntity.setId(UUID.randomUUID()); + + when(warrantDetailsMapper.toEntity(enforcementOrder, enforcementOrderEntity)) + .thenReturn(warrantEntity); + when(enforcementWarrantRepository.save(warrantEntity)).thenReturn(savedWarrantEntity); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) .thenReturn(Collections.emptyList()); @@ -98,27 +117,22 @@ void shouldProcessWarrantDetailsSuccessfully() { underTest.process(enforcementOrderEntity, enforcementOrder); // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - - assertThat(capturedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); - assertThat(capturedEntity.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.YES); - assertThat(capturedEntity.getViolentDetails()).isEqualTo("Violent behavior reported"); - assertThat(capturedEntity.getFirearmsDetails()).isEqualTo("Firearms present"); - assertThat(capturedEntity.getCriminalDetails()).isEqualTo("Criminal history"); - assertThat(capturedEntity.getVerbalThreatsDetails()).isEqualTo("Verbal threats made"); - assertThat(capturedEntity.getProtestGroupDetails()).isEqualTo("Member of protest group"); - assertThat(capturedEntity.getPoliceSocialServicesDetails()).isEqualTo("Police involvement"); - assertThat(capturedEntity.getAnimalsDetails()).isEqualTo("Aggressive dogs on premises"); - assertThat(capturedEntity.getVulnerablePeoplePresent()).isEqualTo(YesNoNotSure.YES); - assertThat(capturedEntity.getVulnerableCategory()).isEqualTo(VULNERABLE_CHILDREN); - assertThat(capturedEntity.getVulnerableReasonText()).isEqualTo("Young children present"); + verify(warrantDetailsMapper).toEntity(enforcementOrder, enforcementOrderEntity); + verify(enforcementWarrantRepository).save(warrantEntity); + verify(enforcementOrderEntity).setWarrantDetails(savedWarrantEntity); } @Test - void shouldHandleNullRawWarrantDetails() { + void shouldSetSavedWarrantDetailsOnEnforcementOrderEntity() { // Given - enforcementOrder.setRawWarrantDetails(null); + EnforcementWarrantEntity warrantEntity = new EnforcementWarrantEntity(); + EnforcementWarrantEntity savedWarrantEntity = new EnforcementWarrantEntity(); + UUID warrantId = UUID.randomUUID(); + savedWarrantEntity.setId(warrantId); + + when(warrantDetailsMapper.toEntity(enforcementOrder, enforcementOrderEntity)) + .thenReturn(warrantEntity); + when(enforcementWarrantRepository.save(warrantEntity)).thenReturn(savedWarrantEntity); when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) @@ -128,21 +142,22 @@ void shouldHandleNullRawWarrantDetails() { underTest.process(enforcementOrderEntity, enforcementOrder); // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - - assertThat(capturedEntity.getVulnerablePeoplePresent()).isNull(); - assertThat(capturedEntity.getVulnerableCategory()).isNull(); - assertThat(capturedEntity.getVulnerableReasonText()).isNull(); + verify(enforcementWarrantRepository).save(warrantEntityCaptor.capture()); + EnforcementWarrantEntity capturedEntity = warrantEntityCaptor.getValue(); + assertThat(capturedEntity).isEqualTo(warrantEntity); + verify(enforcementOrderEntity).setWarrantDetails(savedWarrantEntity); } @Test - void shouldHandleNullVulnerableAdultsChildren() { + void shouldProcessWarrantBeforeRiskProfile() { // Given - rawWarrantDetails.setVulnerableAdultsChildren(null); - RiskProfileEntity riskProfileEntity = new RiskProfileEntity(); - riskProfileEntity.setVulnerablePeoplePresent(YesNoNotSure.YES); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); + EnforcementWarrantEntity warrantEntity = new EnforcementWarrantEntity(); + EnforcementWarrantEntity savedWarrantEntity = new EnforcementWarrantEntity(); + + when(warrantDetailsMapper.toEntity(enforcementOrder, enforcementOrderEntity)) + .thenReturn(warrantEntity); + when(enforcementWarrantRepository.save(warrantEntity)).thenReturn(savedWarrantEntity); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) .thenReturn(Collections.emptyList()); @@ -151,20 +166,45 @@ void shouldHandleNullVulnerableAdultsChildren() { underTest.process(enforcementOrderEntity, enforcementOrder); // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + InOrder inOrder = inOrder(enforcementWarrantRepository, riskProfileRepository); + inOrder.verify(enforcementWarrantRepository).save(warrantEntity); + inOrder.verify(riskProfileRepository).save(any(RiskProfileEntity.class)); + } - assertThat(capturedEntity.getVulnerablePeoplePresent()).isEqualTo(YesNoNotSure.YES); - assertThat(capturedEntity.getVulnerableCategory()).isNull(); - assertThat(capturedEntity.getVulnerableReasonText()).isNull(); + @Test + void shouldCallWarrantDetailsMapper() { + // Given + EnforcementWarrantEntity warrantEntity = new EnforcementWarrantEntity(); + EnforcementWarrantEntity savedWarrantEntity = new EnforcementWarrantEntity(); + + when(warrantDetailsMapper.toEntity(enforcementOrder, enforcementOrderEntity)) + .thenReturn(warrantEntity); + when(enforcementWarrantRepository.save(warrantEntity)).thenReturn(savedWarrantEntity); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) + .thenReturn(Collections.emptyList()); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(warrantDetailsMapper).toEntity( + argThat(order -> order.equals(enforcementOrder)), + argThat(entity -> entity.equals(enforcementOrderEntity)) + ); } @Test - void shouldSaveSelectedDefendantsWhenPresent() { + void shouldProcessAllThreeStepsInCorrectOrder() { // Given - SelectedDefendantEntity defendant1 = new SelectedDefendantEntity(); - SelectedDefendantEntity defendant2 = new SelectedDefendantEntity(); - List defendants = List.of(defendant1, defendant2); + EnforcementWarrantEntity warrantEntity = new EnforcementWarrantEntity(); + EnforcementWarrantEntity savedWarrantEntity = new EnforcementWarrantEntity(); + List defendants = List.of(new SelectedDefendantEntity()); + + when(warrantDetailsMapper.toEntity(enforcementOrder, enforcementOrderEntity)) + .thenReturn(warrantEntity); + when(enforcementWarrantRepository.save(warrantEntity)).thenReturn(savedWarrantEntity); when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)).thenReturn(defendants); @@ -173,15 +213,61 @@ void shouldSaveSelectedDefendantsWhenPresent() { underTest.process(enforcementOrderEntity, enforcementOrder); // Then - verify(selectedDefendantRepository).saveAll(defendants); + InOrder inOrder = inOrder( + enforcementWarrantRepository, + riskProfileRepository, + selectedDefendantRepository + ); + inOrder.verify(enforcementWarrantRepository).save(warrantEntity); + inOrder.verify(riskProfileRepository).save(any(RiskProfileEntity.class)); + inOrder.verify(selectedDefendantRepository).saveAll(defendants); } @Test - void shouldNotSaveSelectedDefendantsWhenEmpty() { + void shouldProcessWarrantDetailsSuccessfully() { // Given - RiskProfileEntity riskProfileEntity = createExpectedRiskProfileEntity(); + RiskProfileEntity savedEntity = createExpectedRiskProfileEntity(); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(savedEntity); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(savedEntity); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) + .thenReturn(Collections.emptyList()); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + assertThat(capturedEntity.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.YES); + assertThat(capturedEntity.getViolentDetails()).isEqualTo("Violent behavior reported"); + assertThat(capturedEntity.getFirearmsDetails()).isEqualTo("Firearms present"); + assertThat(capturedEntity.getCriminalDetails()).isEqualTo("Criminal history"); + assertThat(capturedEntity.getVerbalThreatsDetails()).isEqualTo("Verbal threats made"); + assertThat(capturedEntity.getProtestGroupDetails()).isEqualTo("Member of protest group"); + assertThat(capturedEntity.getPoliceSocialServicesDetails()).isEqualTo("Police involvement"); + assertThat(capturedEntity.getAnimalsDetails()).isEqualTo("Aggressive dogs on premises"); + assertThat(capturedEntity.getVulnerablePeoplePresent()).isEqualTo(YesNoNotSure.YES); + assertThat(capturedEntity.getVulnerableCategory()).isEqualTo(VULNERABLE_CHILDREN); + assertThat(capturedEntity.getVulnerableReasonText()).isEqualTo("Young children present"); + } + + @ParameterizedTest + @MethodSource("provideNullWarrantDetailsScenarios") + void shouldHandleNullValuesInWarrantDetails( + RawWarrantDetails rawWarrantDetails, + YesNoNotSure expectedVulnerablePeoplePresent, + boolean expectNullVulnerableFields + ) { + // Given + enforcementOrder.setRawWarrantDetails(rawWarrantDetails); + RiskProfileEntity riskProfileEntity = new RiskProfileEntity(); + if (expectedVulnerablePeoplePresent != null) { + riskProfileEntity.setVulnerablePeoplePresent(expectedVulnerablePeoplePresent); + } when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(riskProfileEntity); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) .thenReturn(Collections.emptyList()); @@ -189,23 +275,60 @@ void shouldNotSaveSelectedDefendantsWhenEmpty() { underTest.process(enforcementOrderEntity, enforcementOrder); // Then - verify(selectedDefendantRepository, never()).saveAll(any()); + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getVulnerablePeoplePresent()).isEqualTo(expectedVulnerablePeoplePresent); + if (expectNullVulnerableFields) { + assertThat(capturedEntity.getVulnerableCategory()).isNull(); + assertThat(capturedEntity.getVulnerableReasonText()).isNull(); + } } - @Test - void shouldNotSaveSelectedDefendantsWhenNull() { + private static Stream provideNullWarrantDetailsScenarios() { + RawWarrantDetails withNullVulnerableChildren = RawWarrantDetails.builder() + .vulnerablePeoplePresent(YesNoNotSure.YES) + .vulnerableAdultsChildren(null) + .build(); + + return Stream.of( + Arguments.of(null, null, true), + Arguments.of(withNullVulnerableChildren, YesNoNotSure.YES, true) + ); + } + + @ParameterizedTest + @MethodSource("provideSelectedDefendantScenarios") + void shouldHandleSelectedDefendantsBasedOnMapperResult(List defendants, + boolean shouldCallSaveAll) { // Given when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); - when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)).thenReturn(null); + when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)).thenReturn(defendants); // When underTest.process(enforcementOrderEntity, enforcementOrder); // Then - verify(selectedDefendantRepository, never()).saveAll(any()); + if (shouldCallSaveAll) { + verify(selectedDefendantRepository).saveAll(defendants); + } else { + verify(selectedDefendantRepository, never()).saveAll(any()); + } } + private static Stream provideSelectedDefendantScenarios() { + SelectedDefendantEntity defendant1 = new SelectedDefendantEntity(); + SelectedDefendantEntity defendant2 = new SelectedDefendantEntity(); + + return Stream.of( + Arguments.of(List.of(defendant1, defendant2), true), + Arguments.of(Collections.emptyList(), false), + Arguments.of(null, false) + ); + } + + @Test void shouldHandleWarrantDetailsWithNoRiskToBailiff() { // Given diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementWarrantMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementWarrantMapperTest.java deleted file mode 100644 index f37f1d5c0d..0000000000 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/EnforcementWarrantMapperTest.java +++ /dev/null @@ -1,514 +0,0 @@ -package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant; - -import org.jetbrains.annotations.NotNull; -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.junit.jupiter.MockitoExtension; -import uk.gov.hmcts.ccd.sdk.type.YesOrNo; -import uk.gov.hmcts.reform.pcs.ccd.domain.RepaymentPreference; -import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LandRegistryFees; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LegalCosts; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.MoneyOwedByDefendants; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RepaymentCosts; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.AdditionalInformation; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.DefendantsDOB; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.NameAndAddressForEviction; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PeopleToEvict; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PropertyAccessDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.StatementOfTruthDetailsEnforcement; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreement; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementClaimant; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementLegalRep; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementWarrantEntity; - -import java.math.BigDecimal; -import java.util.Collections; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -@ExtendWith(MockitoExtension.class) -class EnforcementWarrantMapperTest { - - @InjectMocks - private EnforcementWarrantMapper mapper; - - private EnforcementOrderEntity enforcementOrderEntity; - - @BeforeEach - void setUp() { - enforcementOrderEntity = new EnforcementOrderEntity(); - } - - @Test - void shouldMapToEntityWithNullWarrantDetails() { - // Given - EnforcementOrder enforcementOrder = EnforcementOrder.builder().build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result).isNotNull(); - assertThat(result.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); - } - - @Test - void shouldMapControlFlags() { - // Given - WarrantDetails warrantDetails = WarrantDetails.builder() - .showChangeNameAddressPage(YesOrNo.YES) - .showPeopleWhoWillBeEvictedPage(YesOrNo.NO) - .showPeopleYouWantToEvictPage(YesOrNo.YES) - .build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getShowPeopleWhoWillBeEvictedPage()).isEqualTo(VerticalYesNo.NO); - assertThat(result.getShowPeopleYouWantToEvictPage()).isEqualTo(VerticalYesNo.YES); - } - - @Test - void shouldMapControlFlagsWithNullValues() { - // Given - WarrantDetails warrantDetails = WarrantDetails.builder() - .showChangeNameAddressPage(null) - .showPeopleWhoWillBeEvictedPage(null) - .showPeopleYouWantToEvictPage(null) - .build(); - - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getShowPeopleWhoWillBeEvictedPage()).isEqualTo(VerticalYesNo.NO); - assertThat(result.getShowPeopleYouWantToEvictPage()).isEqualTo(VerticalYesNo.NO); - } - - @Test - void shouldMapSuspendTheOrder() { - // Given - WarrantDetails warrantDetails = WarrantDetails.builder().isSuspendedOrder(VerticalYesNo.YES).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getIsSuspendedOrder()).isEqualTo(VerticalYesNo.YES); - } - - @Test - void shouldMapAdditionalInformation() { - // Given - AdditionalInformation additionalInfo = AdditionalInformation.builder() - .additionalInformationSelect(VerticalYesNo.YES) - .additionalInformationDetails("Additional details") - .build(); - - WarrantDetails warrantDetails = WarrantDetails.builder().additionalInformation(additionalInfo).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getAdditionalInformationSelect()).isEqualTo(VerticalYesNo.YES); - assertThat(result.getAdditionalInformationDetails()).isEqualTo("Additional details"); - } - - @Test - void shouldHandleNullAdditionalInformation() { - // Given - WarrantDetails warrantDetails = WarrantDetails.builder() - .additionalInformation(null) - .build(); - - EnforcementOrder enforcementOrder = EnforcementOrder.builder() - .warrantDetails(warrantDetails) - .build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getAdditionalInformationSelect()).isNull(); - assertThat(result.getAdditionalInformationDetails()).isNull(); - } - - @Test - void shouldMapNameAndAddressForEviction() { - // Given - NameAndAddressForEviction nameAndAddress = NameAndAddressForEviction.builder() - .correctNameAndAddress(VerticalYesNo.NO) - .build(); - - WarrantDetails warrantDetails = WarrantDetails.builder() - .nameAndAddressForEviction(nameAndAddress) - .build(); - - EnforcementOrder enforcementOrder = EnforcementOrder.builder() - .warrantDetails(warrantDetails) - .build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getCorrectNameAndAddress()).isEqualTo(VerticalYesNo.NO); - } - - @Test - void shouldMapPeopleToEvict() { - // Given - PeopleToEvict peopleToEvict = PeopleToEvict.builder().evictEveryone(VerticalYesNo.YES).build(); - WarrantDetails warrantDetails = WarrantDetails.builder().peopleToEvict(peopleToEvict).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getEvictEveryone()).isEqualTo(VerticalYesNo.YES); - } - - @Test - void shouldMapPropertyAccessDetails() { - // Given - PropertyAccessDetails accessDetails = PropertyAccessDetails.builder() - .isDifficultToAccessProperty(VerticalYesNo.YES) - .clarificationOnAccessDifficultyText("Hard to access") - .build(); - - WarrantDetails warrantDetails = WarrantDetails.builder().propertyAccessDetails(accessDetails).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getIsDifficultToAccessProperty()).isEqualTo(VerticalYesNo.YES); - assertThat(result.getClarificationOnAccessDifficultyText()).isEqualTo("Hard to access"); - } - - @Test - void shouldMapLegalCosts() { - // Given - LegalCosts legalCosts = LegalCosts.builder() - .areLegalCostsToBeClaimed(VerticalYesNo.YES) - .amountOfLegalCosts(new BigDecimal("1500.50")) - .build(); - WarrantDetails warrantDetails = WarrantDetails.builder().legalCosts(legalCosts).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getAreLegalCostsToBeClaimed()).isEqualTo(VerticalYesNo.YES); - assertThat(result.getAmountOfLegalCosts()).isEqualByComparingTo(new BigDecimal("1500.50")); - } - - @Test - void shouldHandleLegalCostsWithEmptyAmount() { - // Given - LegalCosts legalCosts = LegalCosts.builder() - .areLegalCostsToBeClaimed(VerticalYesNo.YES) - .build(); - WarrantDetails warrantDetails = WarrantDetails.builder().legalCosts(legalCosts).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getAreLegalCostsToBeClaimed()).isEqualTo(VerticalYesNo.YES); - assertThat(result.getAmountOfLegalCosts()).isNull(); - } - - @Test - void shouldMapMoneyOwed() { - // Given - MoneyOwedByDefendants moneyOwed = MoneyOwedByDefendants.builder() - .amountOwed(new BigDecimal("2500.75")) - .build(); - WarrantDetails warrantDetails = WarrantDetails.builder().moneyOwedByDefendants(moneyOwed).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getAmountOwed()).isEqualByComparingTo(new BigDecimal("2500.75")); - } - - @Test - void shouldHandleMoneyOwedWithEmptyAmount() { - // Given - MoneyOwedByDefendants moneyOwed = MoneyOwedByDefendants.builder() - .build(); - WarrantDetails warrantDetails = WarrantDetails.builder().moneyOwedByDefendants(moneyOwed).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getAmountOwed()).isNull(); - } - - @Test - void shouldMapLandRegistryFees() { - // Given - LandRegistryFees landRegistryFees = LandRegistryFees.builder() - .haveLandRegistryFeesBeenPaid(VerticalYesNo.YES) - .amountOfLandRegistryFees(new BigDecimal("350.00")) - .build(); - WarrantDetails warrantDetails = WarrantDetails.builder().landRegistryFees(landRegistryFees).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getHaveLandRegistryFeesBeenPaid()).isEqualTo(VerticalYesNo.YES); - assertThat(result.getAmountOfLandRegistryFees()).isEqualByComparingTo(new BigDecimal("350.00")); - } - - @Test - void shouldMapLandRegistryFeesWithEmptyAmount() { - // Given - LandRegistryFees landRegistryFees = LandRegistryFees.builder() - .haveLandRegistryFeesBeenPaid(VerticalYesNo.YES) - .build(); - - WarrantDetails warrantDetails = WarrantDetails.builder().landRegistryFees(landRegistryFees).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getHaveLandRegistryFeesBeenPaid()).isEqualTo(VerticalYesNo.YES); - assertThat(result.getAmountOfLandRegistryFees()).isNull(); - } - - @Test - void shouldMapRepaymentCosts() { - // Given - RepaymentPreference repaymentPreference = RepaymentPreference.SOME; - - RepaymentCosts repaymentCosts = RepaymentCosts.builder() - .repaymentChoice(repaymentPreference) - .amountOfRepaymentCosts(new BigDecimal("1000.00")) - .repaymentSummaryMarkdown("Summary markdown") - .build(); - WarrantDetails warrantDetails = WarrantDetails.builder().repaymentCosts(repaymentCosts).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getRepaymentChoice()).isEqualTo(RepaymentPreference.SOME.getLabel()); - assertThat(result.getAmountOfRepaymentCosts()).isEqualByComparingTo(new BigDecimal("1000.00")); - assertThat(result.getRepaymentSummaryMarkdown()).isEqualTo("Summary markdown"); - } - - @Test - void shouldHandleRepaymentCostsWithNullChoice() { - // Given - RepaymentCosts repaymentCosts = RepaymentCosts.builder() - .repaymentChoice(null) - .amountOfRepaymentCosts(new BigDecimal("1000.00")) - .build(); - WarrantDetails warrantDetails = WarrantDetails.builder().repaymentCosts(repaymentCosts).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getRepaymentChoice()).isNull(); - assertThat(result.getAmountOfRepaymentCosts()).isEqualByComparingTo(new BigDecimal("1000.00")); - } - - @Test - void shouldMapDefendantsDOB() { - // Given - DefendantsDOB defendantsDOB = DefendantsDOB.builder().defendantsDOBDetails("01/01/1980").build(); - WarrantDetails warrantDetails = WarrantDetails.builder().defendantsDOBKnown(VerticalYesNo.YES) - .defendantsDOB(defendantsDOB).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getDefendantsDOBKnown()).isEqualTo(VerticalYesNo.YES); - assertThat(result.getDefendantsDOBDetails()).isEqualTo("01/01/1980"); - } - - @Test - void shouldHandleNullDefendantsDOB() { - // Given - WarrantDetails warrantDetails = WarrantDetails.builder().defendantsDOBKnown(VerticalYesNo.NO) - .defendantsDOB(null).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getDefendantsDOBKnown()).isEqualTo(VerticalYesNo.NO); - assertThat(result.getDefendantsDOBDetails()).isNull(); - } - - @Test - void shouldMapStatementOfTruth() { - // Given - StatementOfTruthDetailsEnforcement statementOfTruth = new StatementOfTruthDetailsEnforcement(); - statementOfTruth.setCompletedBy(StatementOfTruthCompletedBy.CLAIMANT); - statementOfTruth.setFullNameClaimant("John Doe"); - statementOfTruth.setPositionClaimant("Owner"); - statementOfTruth.setFullNameLegalRep("Jane Smith"); - statementOfTruth.setFirmNameLegalRep("Smith & Co"); - statementOfTruth.setPositionLegalRep("Solicitor"); - WarrantDetails warrantDetails = WarrantDetails.builder().statementOfTruth(statementOfTruth).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getCompletedBy()).isEqualTo(StatementOfTruthCompletedBy.CLAIMANT); - assertThat(result.getFullNameClaimant()).isEqualTo("John Doe"); - assertThat(result.getPositionClaimant()).isEqualTo("Owner"); - assertThat(result.getFullNameLegalRep()).isEqualTo("Jane Smith"); - assertThat(result.getFirmNameLegalRep()).isEqualTo("Smith & Co"); - assertThat(result.getPositionLegalRep()).isEqualTo("Solicitor"); - } - - @Test - void shouldMapAgreementClaimant() { - // Given - List agreements = List.of(StatementOfTruthAgreementClaimant.BELIEVE_TRUE); - StatementOfTruthDetailsEnforcement statementOfTruth = new StatementOfTruthDetailsEnforcement(); - statementOfTruth.setAgreementClaimant(agreements); - WarrantDetails warrantDetails = WarrantDetails.builder().statementOfTruth(statementOfTruth).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getAgreementClaimant()).isEqualTo(StatementOfTruthAgreementClaimant.BELIEVE_TRUE.name()); - } - - @Test - void shouldHandleEmptyAgreementClaimant() { - // Given - StatementOfTruthDetailsEnforcement statementOfTruth = new StatementOfTruthDetailsEnforcement(); - statementOfTruth.setAgreementClaimant(Collections.emptyList()); - WarrantDetails warrantDetails = WarrantDetails.builder().statementOfTruth(statementOfTruth).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getAgreementClaimant()).isNull(); - } - - @Test - void shouldMapAgreementLegalRep() { - // Given - List agreements = List.of(StatementOfTruthAgreementLegalRep.AGREED); - StatementOfTruthDetailsEnforcement statementOfTruth = new StatementOfTruthDetailsEnforcement(); - statementOfTruth.setAgreementLegalRep(agreements); - WarrantDetails warrantDetails = WarrantDetails.builder().statementOfTruth(statementOfTruth).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getAgreementLegalRep()).isEqualTo(StatementOfTruthAgreementLegalRep.AGREED.name()); - } - - @Test - void shouldMapCertification() { - // Given - List certifications = List.of(StatementOfTruthAgreement.CERTIFY); - StatementOfTruthDetailsEnforcement statementOfTruth = new StatementOfTruthDetailsEnforcement(); - statementOfTruth.setCertification(certifications); - - WarrantDetails warrantDetails = WarrantDetails.builder().statementOfTruth(statementOfTruth).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getCertification()).isEqualTo(StatementOfTruthAgreement.CERTIFY.name()); - } - - @Test - void shouldMapCompleteWarrantDetails() { - // Given - EnforcementOrder enforcementOrder = createCompleteEnforcementOrder(); - - // When - EnforcementWarrantEntity result = mapper.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result).isNotNull(); - assertThat(result.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); - assertThat(result.getIsSuspendedOrder()).isEqualTo(VerticalYesNo.NO); - assertThat(result.getAmountOfLegalCosts()).isEqualByComparingTo(new BigDecimal("1000.00")); - assertThat(result.getCompletedBy()).isEqualTo(StatementOfTruthCompletedBy.LEGAL_REPRESENTATIVE); - } - - private EnforcementOrder createCompleteEnforcementOrder() { - StatementOfTruthDetailsEnforcement statementOfTruth = getStatementOfTruthDetailsEnforcement(); - - WarrantDetails warrantDetails = WarrantDetails.builder() - .showChangeNameAddressPage(YesOrNo.YES) - .isSuspendedOrder(VerticalYesNo.NO) - .additionalInformation(AdditionalInformation.builder() - .additionalInformationSelect(VerticalYesNo.YES) - .additionalInformationDetails("Details") - .build()) - .legalCosts(LegalCosts.builder() - .areLegalCostsToBeClaimed(VerticalYesNo.YES) - .amountOfLegalCosts(new BigDecimal("1000.00")) - .build()) - .statementOfTruth(statementOfTruth) - .build(); - - return EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - } - - private static @NotNull StatementOfTruthDetailsEnforcement getStatementOfTruthDetailsEnforcement() { - StatementOfTruthDetailsEnforcement statementOfTruth = new StatementOfTruthDetailsEnforcement(); - statementOfTruth.setCompletedBy(StatementOfTruthCompletedBy.LEGAL_REPRESENTATIVE); - statementOfTruth.setFullNameLegalRep("Legal Rep Name"); - statementOfTruth.setFirmNameLegalRep("Law Firm"); - statementOfTruth.setPositionLegalRep("Senior Partner"); - statementOfTruth.setAgreementLegalRep(List.of(StatementOfTruthAgreementLegalRep.AGREED)); - statementOfTruth.setCertification(List.of(StatementOfTruthAgreement.CERTIFY)); - return statementOfTruth; - } -} diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/RiskDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/RiskDetailsMapperTest.java new file mode 100644 index 0000000000..b6712e0a95 --- /dev/null +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/RiskDetailsMapperTest.java @@ -0,0 +1,99 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant; + +import org.modelmapper.ModelMapper; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; +import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.EnforcementRiskDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.VulnerableAdultsChildren; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.VulnerableCategory; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.RiskDetailsMapper; + +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; + +@ExtendWith(MockitoExtension.class) +class RiskDetailsMapperTest { + + private final RiskDetailsMapper mapper = + new RiskDetailsMapper(new ModelMapper()); + + @Nested + @DisplayName("toEntity") + class ToEntity { + + @Test + @DisplayName("maps full warrant and risk details to entity") + void mapsFullWarrantAndRiskDetails() { + EnforcementOrderEntity orderEntity = new EnforcementOrderEntity(); + orderEntity.setId(UUID.randomUUID()); + EnforcementOrder order = EnforcementOrder.builder() + .warrantDetails(WarrantDetails.builder() + .anyRiskToBailiff(YesNoNotSure.YES) + .riskDetails(EnforcementRiskDetails.builder() + .violentDetails("Violent") + .verbalThreatsDetails("Verbal") + .firearmsDetails("Firearms") + .build()) + .build()) + .build(); + + RiskProfileEntity result = mapper.toEntity(orderEntity, order); + + assertThat(result.getEnforcementOrder()).isEqualTo(orderEntity); + assertThat(result.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.YES); + assertThat(result.getViolentDetails()).isEqualTo("Violent"); + assertThat(result.getVerbalThreatsDetails()).isEqualTo("Verbal"); + assertThat(result.getFirearmsDetails()).isEqualTo("Firearms"); + } + + @Test + @DisplayName("maps vulnerability details from raw warrant details") + void mapsVulnerabilityDetails() { + EnforcementOrderEntity orderEntity = new EnforcementOrderEntity(); + orderEntity.setId(UUID.randomUUID()); + EnforcementOrder order = EnforcementOrder.builder() + .warrantDetails(WarrantDetails.builder().build()) + .rawWarrantDetails(RawWarrantDetails.builder() + .vulnerablePeoplePresent(YesNoNotSure.YES) + .vulnerableAdultsChildren(VulnerableAdultsChildren.builder() + .vulnerableCategory(VulnerableCategory.VULNERABLE_ADULTS) + .vulnerableReasonText("Vulnerability reason") + .build()) + .build()) + .build(); + + RiskProfileEntity result = mapper.toEntity(orderEntity, order); + + assertThat(result.getVulnerablePeoplePresent()).isEqualTo(YesNoNotSure.YES); + assertThat(result.getVulnerableCategory()).isEqualTo(VulnerableCategory.VULNERABLE_ADULTS); + assertThat(result.getVulnerableReasonText()).isEqualTo("Vulnerability reason"); + } + + @Test + @DisplayName("maps warrant details when risk details is null") + void mapsWarrantDetailsWhenRiskDetailsNull() { + EnforcementOrderEntity orderEntity = new EnforcementOrderEntity(); + orderEntity.setId(UUID.randomUUID()); + EnforcementOrder order = EnforcementOrder.builder() + .warrantDetails(WarrantDetails.builder() + .anyRiskToBailiff(YesNoNotSure.NO) + .build()) + .build(); + + RiskProfileEntity result = mapper.toEntity(orderEntity, order); + assertThat(result.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.NO); + assertThat(result.getViolentDetails()).isNull(); + assertThat(result.getVerbalThreatsDetails()).isNull(); + } + } +} diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java index ebd99bd02e..2eb56d0f74 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java @@ -1,99 +1,515 @@ package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.warrant; -import org.modelmapper.ModelMapper; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; +import org.jetbrains.annotations.NotNull; +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.junit.jupiter.MockitoExtension; -import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; +import uk.gov.hmcts.ccd.sdk.type.YesOrNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.RepaymentPreference; +import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.EnforcementRiskDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.VulnerableAdultsChildren; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.VulnerableCategory; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LandRegistryFees; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LegalCosts; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.MoneyOwedByDefendants; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RepaymentCosts; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.AdditionalInformation; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.DefendantsDOB; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.NameAndAddressForEviction; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PeopleToEvict; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PropertyAccessDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.StatementOfTruthDetailsEnforcement; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreement; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementClaimant; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementLegalRep; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.RiskProfileEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementWarrantEntity; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantDetailsMapper; -import java.util.UUID; +import java.math.BigDecimal; +import java.util.Collections; +import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @ExtendWith(MockitoExtension.class) class WarrantDetailsMapperTest { - private final WarrantDetailsMapper mapper = - new WarrantDetailsMapper(new ModelMapper()); - - @Nested - @DisplayName("toEntity") - class ToEntity { - - @Test - @DisplayName("maps full warrant and risk details to entity") - void mapsFullWarrantAndRiskDetails() { - EnforcementOrderEntity orderEntity = new EnforcementOrderEntity(); - orderEntity.setId(UUID.randomUUID()); - EnforcementOrder order = EnforcementOrder.builder() - .warrantDetails(WarrantDetails.builder() - .anyRiskToBailiff(YesNoNotSure.YES) - .riskDetails(EnforcementRiskDetails.builder() - .violentDetails("Violent") - .verbalThreatsDetails("Verbal") - .firearmsDetails("Firearms") - .build()) - .build()) - .build(); - - RiskProfileEntity result = mapper.toEntity(orderEntity, order); - - assertThat(result.getEnforcementOrder()).isEqualTo(orderEntity); - assertThat(result.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.YES); - assertThat(result.getViolentDetails()).isEqualTo("Violent"); - assertThat(result.getVerbalThreatsDetails()).isEqualTo("Verbal"); - assertThat(result.getFirearmsDetails()).isEqualTo("Firearms"); - } - - @Test - @DisplayName("maps vulnerability details from raw warrant details") - void mapsVulnerabilityDetails() { - EnforcementOrderEntity orderEntity = new EnforcementOrderEntity(); - orderEntity.setId(UUID.randomUUID()); - EnforcementOrder order = EnforcementOrder.builder() - .warrantDetails(WarrantDetails.builder().build()) - .rawWarrantDetails(RawWarrantDetails.builder() - .vulnerablePeoplePresent(YesNoNotSure.YES) - .vulnerableAdultsChildren(VulnerableAdultsChildren.builder() - .vulnerableCategory(VulnerableCategory.VULNERABLE_ADULTS) - .vulnerableReasonText("Vulnerability reason") - .build()) - .build()) - .build(); - - RiskProfileEntity result = mapper.toEntity(orderEntity, order); - - assertThat(result.getVulnerablePeoplePresent()).isEqualTo(YesNoNotSure.YES); - assertThat(result.getVulnerableCategory()).isEqualTo(VulnerableCategory.VULNERABLE_ADULTS); - assertThat(result.getVulnerableReasonText()).isEqualTo("Vulnerability reason"); - } - - @Test - @DisplayName("maps warrant details when risk details is null") - void mapsWarrantDetailsWhenRiskDetailsNull() { - EnforcementOrderEntity orderEntity = new EnforcementOrderEntity(); - orderEntity.setId(UUID.randomUUID()); - EnforcementOrder order = EnforcementOrder.builder() - .warrantDetails(WarrantDetails.builder() - .anyRiskToBailiff(YesNoNotSure.NO) + @InjectMocks + private WarrantDetailsMapper underTest; + + private EnforcementOrderEntity enforcementOrderEntity; + + @BeforeEach + void setUp() { + enforcementOrderEntity = new EnforcementOrderEntity(); + } + + @Test + void shouldMapToEntityWithNullWarrantDetails() { + // Given + EnforcementOrder enforcementOrder = EnforcementOrder.builder().build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result).isNotNull(); + assertThat(result.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + } + + @Test + void shouldMapControlFlags() { + // Given + WarrantDetails warrantDetails = WarrantDetails.builder() + .showChangeNameAddressPage(YesOrNo.YES) + .showPeopleWhoWillBeEvictedPage(YesOrNo.NO) + .showPeopleYouWantToEvictPage(YesOrNo.YES) + .build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getShowPeopleWhoWillBeEvictedPage()).isEqualTo(VerticalYesNo.NO); + assertThat(result.getShowPeopleYouWantToEvictPage()).isEqualTo(VerticalYesNo.YES); + } + + @Test + void shouldMapControlFlagsWithNullValues() { + // Given + WarrantDetails warrantDetails = WarrantDetails.builder() + .showChangeNameAddressPage(null) + .showPeopleWhoWillBeEvictedPage(null) + .showPeopleYouWantToEvictPage(null) + .build(); + + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getShowPeopleWhoWillBeEvictedPage()).isEqualTo(VerticalYesNo.NO); + assertThat(result.getShowPeopleYouWantToEvictPage()).isEqualTo(VerticalYesNo.NO); + } + + @Test + void shouldMapSuspendTheOrder() { + // Given + WarrantDetails warrantDetails = WarrantDetails.builder().isSuspendedOrder(VerticalYesNo.YES).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getIsSuspendedOrder()).isEqualTo(VerticalYesNo.YES); + } + + @Test + void shouldMapAdditionalInformation() { + // Given + AdditionalInformation additionalInfo = AdditionalInformation.builder() + .additionalInformationSelect(VerticalYesNo.YES) + .additionalInformationDetails("Additional details") + .build(); + + WarrantDetails warrantDetails = WarrantDetails.builder().additionalInformation(additionalInfo).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getAdditionalInformationSelect()).isEqualTo(VerticalYesNo.YES); + assertThat(result.getAdditionalInformationDetails()).isEqualTo("Additional details"); + } + + @Test + void shouldHandleNullAdditionalInformation() { + // Given + WarrantDetails warrantDetails = WarrantDetails.builder() + .additionalInformation(null) + .build(); + + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .warrantDetails(warrantDetails) + .build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getAdditionalInformationSelect()).isNull(); + assertThat(result.getAdditionalInformationDetails()).isNull(); + } + + @Test + void shouldMapNameAndAddressForEviction() { + // Given + NameAndAddressForEviction nameAndAddress = NameAndAddressForEviction.builder() + .correctNameAndAddress(VerticalYesNo.NO) + .build(); + + WarrantDetails warrantDetails = WarrantDetails.builder() + .nameAndAddressForEviction(nameAndAddress) + .build(); + + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .warrantDetails(warrantDetails) + .build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getCorrectNameAndAddress()).isEqualTo(VerticalYesNo.NO); + } + + @Test + void shouldMapPeopleToEvict() { + // Given + PeopleToEvict peopleToEvict = PeopleToEvict.builder().evictEveryone(VerticalYesNo.YES).build(); + WarrantDetails warrantDetails = WarrantDetails.builder().peopleToEvict(peopleToEvict).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getEvictEveryone()).isEqualTo(VerticalYesNo.YES); + } + + @Test + void shouldMapPropertyAccessDetails() { + // Given + PropertyAccessDetails accessDetails = PropertyAccessDetails.builder() + .isDifficultToAccessProperty(VerticalYesNo.YES) + .clarificationOnAccessDifficultyText("Hard to access") + .build(); + + WarrantDetails warrantDetails = WarrantDetails.builder().propertyAccessDetails(accessDetails).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getIsDifficultToAccessProperty()).isEqualTo(VerticalYesNo.YES); + assertThat(result.getClarificationOnAccessDifficultyText()).isEqualTo("Hard to access"); + } + + @Test + void shouldMapLegalCosts() { + // Given + LegalCosts legalCosts = LegalCosts.builder() + .areLegalCostsToBeClaimed(VerticalYesNo.YES) + .amountOfLegalCosts(new BigDecimal("1500.50")) + .build(); + WarrantDetails warrantDetails = WarrantDetails.builder().legalCosts(legalCosts).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getAreLegalCostsToBeClaimed()).isEqualTo(VerticalYesNo.YES); + assertThat(result.getAmountOfLegalCosts()).isEqualByComparingTo(new BigDecimal("1500.50")); + } + + @Test + void shouldHandleLegalCostsWithEmptyAmount() { + // Given + LegalCosts legalCosts = LegalCosts.builder() + .areLegalCostsToBeClaimed(VerticalYesNo.YES) + .build(); + WarrantDetails warrantDetails = WarrantDetails.builder().legalCosts(legalCosts).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getAreLegalCostsToBeClaimed()).isEqualTo(VerticalYesNo.YES); + assertThat(result.getAmountOfLegalCosts()).isNull(); + } + + @Test + void shouldMapMoneyOwed() { + // Given + MoneyOwedByDefendants moneyOwed = MoneyOwedByDefendants.builder() + .amountOwed(new BigDecimal("2500.75")) + .build(); + WarrantDetails warrantDetails = WarrantDetails.builder().moneyOwedByDefendants(moneyOwed).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getAmountOwed()).isEqualByComparingTo(new BigDecimal("2500.75")); + } + + @Test + void shouldHandleMoneyOwedWithEmptyAmount() { + // Given + MoneyOwedByDefendants moneyOwed = MoneyOwedByDefendants.builder() + .build(); + WarrantDetails warrantDetails = WarrantDetails.builder().moneyOwedByDefendants(moneyOwed).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getAmountOwed()).isNull(); + } + + @Test + void shouldMapLandRegistryFees() { + // Given + LandRegistryFees landRegistryFees = LandRegistryFees.builder() + .haveLandRegistryFeesBeenPaid(VerticalYesNo.YES) + .amountOfLandRegistryFees(new BigDecimal("350.00")) + .build(); + WarrantDetails warrantDetails = WarrantDetails.builder().landRegistryFees(landRegistryFees).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getHaveLandRegistryFeesBeenPaid()).isEqualTo(VerticalYesNo.YES); + assertThat(result.getAmountOfLandRegistryFees()).isEqualByComparingTo(new BigDecimal("350.00")); + } + + @Test + void shouldMapLandRegistryFeesWithEmptyAmount() { + // Given + LandRegistryFees landRegistryFees = LandRegistryFees.builder() + .haveLandRegistryFeesBeenPaid(VerticalYesNo.YES) + .build(); + + WarrantDetails warrantDetails = WarrantDetails.builder().landRegistryFees(landRegistryFees).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getHaveLandRegistryFeesBeenPaid()).isEqualTo(VerticalYesNo.YES); + assertThat(result.getAmountOfLandRegistryFees()).isNull(); + } + + @Test + void shouldMapRepaymentCosts() { + // Given + RepaymentPreference repaymentPreference = RepaymentPreference.SOME; + + RepaymentCosts repaymentCosts = RepaymentCosts.builder() + .repaymentChoice(repaymentPreference) + .amountOfRepaymentCosts(new BigDecimal("1000.00")) + .repaymentSummaryMarkdown("Summary markdown") + .build(); + WarrantDetails warrantDetails = WarrantDetails.builder().repaymentCosts(repaymentCosts).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getRepaymentChoice()).isEqualTo(RepaymentPreference.SOME.getLabel()); + assertThat(result.getAmountOfRepaymentCosts()).isEqualByComparingTo(new BigDecimal("1000.00")); + assertThat(result.getRepaymentSummaryMarkdown()).isEqualTo("Summary markdown"); + } + + @Test + void shouldHandleRepaymentCostsWithNullChoice() { + // Given + RepaymentCosts repaymentCosts = RepaymentCosts.builder() + .repaymentChoice(null) + .amountOfRepaymentCosts(new BigDecimal("1000.00")) + .build(); + WarrantDetails warrantDetails = WarrantDetails.builder().repaymentCosts(repaymentCosts).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getRepaymentChoice()).isNull(); + assertThat(result.getAmountOfRepaymentCosts()).isEqualByComparingTo(new BigDecimal("1000.00")); + } + + @Test + void shouldMapDefendantsDOB() { + // Given + DefendantsDOB defendantsDOB = DefendantsDOB.builder().defendantsDOBDetails("01/01/1980").build(); + WarrantDetails warrantDetails = WarrantDetails.builder().defendantsDOBKnown(VerticalYesNo.YES) + .defendantsDOB(defendantsDOB).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getDefendantsDOBKnown()).isEqualTo(VerticalYesNo.YES); + assertThat(result.getDefendantsDOBDetails()).isEqualTo("01/01/1980"); + } + + @Test + void shouldHandleNullDefendantsDOB() { + // Given + WarrantDetails warrantDetails = WarrantDetails.builder().defendantsDOBKnown(VerticalYesNo.NO) + .defendantsDOB(null).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getDefendantsDOBKnown()).isEqualTo(VerticalYesNo.NO); + assertThat(result.getDefendantsDOBDetails()).isNull(); + } + + @Test + void shouldMapStatementOfTruth() { + // Given + StatementOfTruthDetailsEnforcement statementOfTruth = new StatementOfTruthDetailsEnforcement(); + statementOfTruth.setCompletedBy(StatementOfTruthCompletedBy.CLAIMANT); + statementOfTruth.setFullNameClaimant("John Doe"); + statementOfTruth.setPositionClaimant("Owner"); + statementOfTruth.setFullNameLegalRep("Jane Smith"); + statementOfTruth.setFirmNameLegalRep("Smith & Co"); + statementOfTruth.setPositionLegalRep("Solicitor"); + WarrantDetails warrantDetails = WarrantDetails.builder().statementOfTruth(statementOfTruth).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getCompletedBy()).isEqualTo(StatementOfTruthCompletedBy.CLAIMANT); + assertThat(result.getFullNameClaimant()).isEqualTo("John Doe"); + assertThat(result.getPositionClaimant()).isEqualTo("Owner"); + assertThat(result.getFullNameLegalRep()).isEqualTo("Jane Smith"); + assertThat(result.getFirmNameLegalRep()).isEqualTo("Smith & Co"); + assertThat(result.getPositionLegalRep()).isEqualTo("Solicitor"); + } + + @Test + void shouldMapAgreementClaimant() { + // Given + List agreements = List.of(StatementOfTruthAgreementClaimant.BELIEVE_TRUE); + StatementOfTruthDetailsEnforcement statementOfTruth = new StatementOfTruthDetailsEnforcement(); + statementOfTruth.setAgreementClaimant(agreements); + WarrantDetails warrantDetails = WarrantDetails.builder().statementOfTruth(statementOfTruth).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getAgreementClaimant()).isEqualTo(StatementOfTruthAgreementClaimant.BELIEVE_TRUE.name()); + } + + @Test + void shouldHandleEmptyAgreementClaimant() { + // Given + StatementOfTruthDetailsEnforcement statementOfTruth = new StatementOfTruthDetailsEnforcement(); + statementOfTruth.setAgreementClaimant(Collections.emptyList()); + WarrantDetails warrantDetails = WarrantDetails.builder().statementOfTruth(statementOfTruth).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getAgreementClaimant()).isNull(); + } + + @Test + void shouldMapAgreementLegalRep() { + // Given + List agreements = List.of(StatementOfTruthAgreementLegalRep.AGREED); + StatementOfTruthDetailsEnforcement statementOfTruth = new StatementOfTruthDetailsEnforcement(); + statementOfTruth.setAgreementLegalRep(agreements); + WarrantDetails warrantDetails = WarrantDetails.builder().statementOfTruth(statementOfTruth).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getAgreementLegalRep()).isEqualTo(StatementOfTruthAgreementLegalRep.AGREED.name()); + } + + @Test + void shouldMapCertification() { + // Given + List certifications = List.of(StatementOfTruthAgreement.CERTIFY); + StatementOfTruthDetailsEnforcement statementOfTruth = new StatementOfTruthDetailsEnforcement(); + statementOfTruth.setCertification(certifications); + + WarrantDetails warrantDetails = WarrantDetails.builder().statementOfTruth(statementOfTruth).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getCertification()).isEqualTo(StatementOfTruthAgreement.CERTIFY.name()); + } + + @Test + void shouldMapCompleteWarrantDetails() { + // Given + EnforcementOrder enforcementOrder = createCompleteEnforcementOrder(); + + // When + EnforcementWarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result).isNotNull(); + assertThat(result.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + assertThat(result.getIsSuspendedOrder()).isEqualTo(VerticalYesNo.NO); + assertThat(result.getAmountOfLegalCosts()).isEqualByComparingTo(new BigDecimal("1000.00")); + assertThat(result.getCompletedBy()).isEqualTo(StatementOfTruthCompletedBy.LEGAL_REPRESENTATIVE); + } + + private EnforcementOrder createCompleteEnforcementOrder() { + StatementOfTruthDetailsEnforcement statementOfTruth = getStatementOfTruthDetailsEnforcement(); + + WarrantDetails warrantDetails = WarrantDetails.builder() + .showChangeNameAddressPage(YesOrNo.YES) + .isSuspendedOrder(VerticalYesNo.NO) + .additionalInformation(AdditionalInformation.builder() + .additionalInformationSelect(VerticalYesNo.YES) + .additionalInformationDetails("Details") + .build()) + .legalCosts(LegalCosts.builder() + .areLegalCostsToBeClaimed(VerticalYesNo.YES) + .amountOfLegalCosts(new BigDecimal("1000.00")) .build()) - .build(); + .statementOfTruth(statementOfTruth) + .build(); + + return EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + } - RiskProfileEntity result = mapper.toEntity(orderEntity, order); - assertThat(result.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.NO); - assertThat(result.getViolentDetails()).isNull(); - assertThat(result.getVerbalThreatsDetails()).isNull(); - } + private static @NotNull StatementOfTruthDetailsEnforcement getStatementOfTruthDetailsEnforcement() { + StatementOfTruthDetailsEnforcement statementOfTruth = new StatementOfTruthDetailsEnforcement(); + statementOfTruth.setCompletedBy(StatementOfTruthCompletedBy.LEGAL_REPRESENTATIVE); + statementOfTruth.setFullNameLegalRep("Legal Rep Name"); + statementOfTruth.setFirmNameLegalRep("Law Firm"); + statementOfTruth.setPositionLegalRep("Senior Partner"); + statementOfTruth.setAgreementLegalRep(List.of(StatementOfTruthAgreementLegalRep.AGREED)); + statementOfTruth.setCertification(List.of(StatementOfTruthAgreement.CERTIFY)); + return statementOfTruth; } } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java index 3aa845a329..d5489e3b46 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java @@ -1,18 +1,15 @@ package uk.gov.hmcts.reform.pcs.testingsupport; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.EnforcementRiskDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.EnforcementRiskDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.ClaimEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementWarrantEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writ.WritEntity; import java.io.File; import java.io.FileWriter; From 14cac61b596c2ce5a78a626b858d1b37d6f85c00 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Fri, 27 Feb 2026 10:32:19 +0000 Subject: [PATCH 17/54] Applying the same strategy approach to the WritOfRestritution. Update of tests to accomodate the change. --- .../EnforcementOrderService.java | 13 ------ .../EnforcementTypeStrategyFactory.java | 4 +- .../strategy/WritOfRestitutionStrategy.java | 23 ++++++++++ ...sql => V059__enforcement_writ_details.sql} | 0 .../EnforcementTypeStrategyFactoryTest.java | 29 +++++------- .../WritOfRestitutionStrategyTest.java | 44 +++++++++++++++++++ 6 files changed, 81 insertions(+), 32 deletions(-) create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategy.java rename src/main/resources/db/migration/{V058__enforcement_writ_details.sql => V059__enforcement_writ_details.sql} (100%) create mode 100644 src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategyTest.java diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderService.java index b31df58b63..c42b81736b 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderService.java @@ -54,19 +54,6 @@ private void createEnforcementOrder(long caseReference, EnforcementOrder enforce .process(orderEntity, enforcementOrder); } - private void storeWarrant(EnforcementOrder enforcementOrder, EnforcementOrderEntity enforcementOrderEntity) { - EnforcementWarrantEntity warrantEntity = enforcementWarrantMapper.toEntity(enforcementOrder, - enforcementOrderEntity); - EnforcementWarrantEntity saved = enforcementWarrantRepository.save(warrantEntity); - enforcementOrderEntity.setWarrantDetails(saved); - } - - private void createWritOfRestitutionEntity(EnforcementOrderEntity enforcementOrderEntity) { - WritOfRestitutionEntity writOfRestitutionEntity = new WritOfRestitutionEntity(); - writOfRestitutionEntity.setEnforcementOrder(enforcementOrderEntity); - writOfRestitutionRepository.save(writOfRestitutionEntity); - } - private EnforcementOrderEntity mapToEntity(EnforcementOrder enforcementOrder, ClaimEntity claimEntity) { EnforcementOrderEntity enforcementOrderEntity = new EnforcementOrderEntity(); enforcementOrderEntity.setClaim(claimEntity); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactory.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactory.java index c02e9a525f..b02843cab5 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactory.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactory.java @@ -12,11 +12,13 @@ public class EnforcementTypeStrategyFactory { private final WarrantStrategy warrantStrategy; private final WritStrategy writStrategy; + private final WritOfRestitutionStrategy writOfRestitutionStrategy; public EnforcementTypeStrategy getStrategy(SelectEnforcementType type) { return Map.of( SelectEnforcementType.WARRANT, warrantStrategy, - SelectEnforcementType.WRIT, writStrategy + SelectEnforcementType.WRIT, writStrategy, + SelectEnforcementType.WRIT_OF_RESTITUTION, writOfRestitutionStrategy ).get(type); } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategy.java new file mode 100644 index 0000000000..f75155519d --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategy.java @@ -0,0 +1,23 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy; + +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writofrestitution.WritOfRestitutionEntity; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.writofrestitution.WritOfRestitutionRepository; + +@Component +@AllArgsConstructor +public class WritOfRestitutionStrategy implements EnforcementTypeStrategy { + + private final WritOfRestitutionRepository writOfRestitutionRepository; + + @Override + public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { + WritOfRestitutionEntity writOfRestitutionEntity = new WritOfRestitutionEntity(); + writOfRestitutionEntity.setEnforcementOrder(enforcementOrderEntity); + writOfRestitutionRepository.save(writOfRestitutionEntity); + } + +} diff --git a/src/main/resources/db/migration/V058__enforcement_writ_details.sql b/src/main/resources/db/migration/V059__enforcement_writ_details.sql similarity index 100% rename from src/main/resources/db/migration/V058__enforcement_writ_details.sql rename to src/main/resources/db/migration/V059__enforcement_writ_details.sql diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java index 9a87af4a6e..80c93ca6d8 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java @@ -22,27 +22,28 @@ class EnforcementTypeStrategyFactoryTest { private WarrantStrategy warrantStrategy; @Mock private WritStrategy writStrategy; + @Mock + private WritOfRestitutionStrategy writOfRestitutionStrategy; @InjectMocks private EnforcementTypeStrategyFactory underTest; @ParameterizedTest @MethodSource("provideEnforcementTypeAndExpectedStrategy") - void shouldReturnCorrectStrategyForEnforcementType(SelectEnforcementType type, String expectedStrategyField) { + void shouldReturnCorrectStrategyForEnforcementType(SelectEnforcementType type, String expectedStrategy) { // When EnforcementTypeStrategy strategy = underTest.getStrategy(type); // Then - EnforcementTypeStrategy expectedStrategy = expectedStrategyField.equals("warrant") - ? warrantStrategy - : writStrategy; - assertThat(strategy).isSameAs(expectedStrategy); + assertThat(strategy.getClass().getSimpleName()).isEqualTo(expectedStrategy); } private static Stream provideEnforcementTypeAndExpectedStrategy() { return Stream.of( - Arguments.of(SelectEnforcementType.WARRANT, "warrant"), - Arguments.of(SelectEnforcementType.WRIT, "writ") + Arguments.of(SelectEnforcementType.WARRANT, WarrantStrategy.class.getSimpleName()), + Arguments.of(SelectEnforcementType.WRIT, WritStrategy.class.getSimpleName()), + Arguments.of(SelectEnforcementType.WRIT_OF_RESTITUTION, + WritOfRestitutionStrategy.class.getSimpleName()) ); } @@ -51,21 +52,13 @@ void shouldReturnDifferentStrategiesForDifferentTypes() { // When EnforcementTypeStrategy warrantResult = underTest.getStrategy(SelectEnforcementType.WARRANT); EnforcementTypeStrategy writResult = underTest.getStrategy(SelectEnforcementType.WRIT); + EnforcementTypeStrategy writOfRestitutionResult = underTest + .getStrategy(SelectEnforcementType.WRIT_OF_RESTITUTION); // Then - assertThat(warrantResult).isNotSameAs(writResult); assertThat(warrantResult).isSameAs(warrantStrategy); assertThat(writResult).isSameAs(writStrategy); + assertThat(writOfRestitutionResult).isSameAs(writOfRestitutionStrategy); } - @Test - void shouldConsistentlyReturnSameStrategyInstance() { - // When - EnforcementTypeStrategy firstCall = underTest.getStrategy(SelectEnforcementType.WARRANT); - EnforcementTypeStrategy secondCall = underTest.getStrategy(SelectEnforcementType.WARRANT); - - // Then - assertThat(firstCall).isSameAs(secondCall); - assertThat(firstCall).isSameAs(warrantStrategy); - } } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategyTest.java new file mode 100644 index 0000000000..8abfd8514c --- /dev/null +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategyTest.java @@ -0,0 +1,44 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.warrant.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.writofrestitution.WritOfRestitutionEntity; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.writofrestitution.WritOfRestitutionRepository; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.verify; + +@ExtendWith(MockitoExtension.class) +public class WritOfRestitutionStrategyTest { + + @InjectMocks + private WritOfRestitutionStrategy underTest; + @Mock + private WritOfRestitutionRepository writOfRestitutionRepository; + + + @Test + void shouldProcess() { + // Given + EnforcementOrderEntity enforcementOrderEntity = new EnforcementOrderEntity(); + EnforcementOrder enforcementOrder = new EnforcementOrder(); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + ArgumentCaptor captor = + ArgumentCaptor.forClass(WritOfRestitutionEntity.class); + + // Then + verify(writOfRestitutionRepository).save(captor.capture()); + WritOfRestitutionEntity saved = captor.getValue(); + assertThat(saved).isNotNull(); + assertThat(saved.getEnforcementOrder()).isSameAs(enforcementOrderEntity); + } + +} From 478d7ccb854c02c5455e8ec18566fe1da79ec4f8 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Fri, 27 Feb 2026 12:46:32 +0000 Subject: [PATCH 18/54] Updating for the addition of the warrant of restitution strategy --- .../strategy/EnforcementTypeStrategyFactoryTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java index 4b36163be9..9dc3e83f88 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/EnforcementTypeStrategyFactoryTest.java @@ -58,11 +58,14 @@ void shouldReturnDifferentStrategiesForDifferentTypes() { EnforcementTypeStrategy writResult = underTest.getStrategy(SelectEnforcementType.WRIT); EnforcementTypeStrategy writOfRestitutionResult = underTest .getStrategy(SelectEnforcementType.WRIT_OF_RESTITUTION); + EnforcementTypeStrategy warrantOfRestitutionResult = underTest + .getStrategy(SelectEnforcementType.WARRANT_OF_RESTITUTION); // Then assertThat(warrantResult).isSameAs(warrantStrategy); assertThat(writResult).isSameAs(writStrategy); assertThat(writOfRestitutionResult).isSameAs(writOfRestitutionStrategy); + assertThat(warrantOfRestitutionResult).isSameAs(warrantOfRestitutionStrategy); } } From a1e3023230abead9d91091cccebe0575e0d2f804 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Fri, 27 Feb 2026 14:15:26 +0000 Subject: [PATCH 19/54] Applying back tests at the new location. --- .../enforcetheorder/EnforcementDataUtil.java | 18 +-- .../strategy/WarrantStrategyTest.java | 112 +++++++++++++++++- 2 files changed, 114 insertions(+), 16 deletions(-) diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementDataUtil.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementDataUtil.java index ccadcbca1d..9f46690b67 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementDataUtil.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementDataUtil.java @@ -3,6 +3,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.EnforcementRiskDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.NameAndAddressForEviction; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PeopleToEvict; @@ -10,11 +11,9 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RiskCategory; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.VulnerableAdultsChildren; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.VulnerableCategory; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.ClaimEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.PcsCaseEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicMultiSelectStringList; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicStringListElement; @@ -22,7 +21,7 @@ import java.util.Set; import java.util.UUID; -final class EnforcementDataUtil { +public final class EnforcementDataUtil { static PcsCaseEntity buildPcsCaseEntity(UUID pcsId, UUID claimId) { PcsCaseEntity pcsCaseEntity = new PcsCaseEntity(); @@ -39,15 +38,6 @@ private static ClaimEntity buildClaimEntity(UUID claimId, PcsCaseEntity pcsCase) return claimEntity; } - static EnforcementOrderEntity buildEnforcementOrderEntity(UUID enfId, ClaimEntity claimEntity, - EnforcementOrder enforcementOrder) { - EnforcementOrderEntity enforcementOrderEntity = new EnforcementOrderEntity(); - enforcementOrderEntity.setId(enfId); - enforcementOrderEntity.setClaim(claimEntity); - enforcementOrderEntity.setEnforcementOrder(enforcementOrder); - return enforcementOrderEntity; - } - static EnforcementOrder buildEnforcementOrder() { return EnforcementOrder.builder() .selectEnforcementType(SelectEnforcementType.WARRANT) @@ -67,7 +57,7 @@ static EnforcementOrder buildEnforcementOrder() { .build(); } - static EnforcementOrder buildEnforcementOrderWithVulnerability() { + public static EnforcementOrder buildEnforcementOrderWithVulnerability() { return EnforcementOrder.builder() .selectEnforcementType(SelectEnforcementType.WARRANT) .warrantDetails(WarrantDetails.builder() @@ -85,7 +75,7 @@ static EnforcementOrder buildEnforcementOrderWithVulnerability() { .build(); } - static EnforcementOrder buildEnforcementOrderWithSelectedDefendants( + public static EnforcementOrder buildEnforcementOrderWithSelectedDefendants( List selectedValues, List listItems) { DynamicMultiSelectStringList selectedDefendants = new DynamicMultiSelectStringList(selectedValues, listItems); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java index a2aeddd893..20083ec682 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java @@ -12,22 +12,30 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.EnforcementRiskDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.NameAndAddressForEviction; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PeopleToEvict; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.VulnerableAdultsChildren; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.VulnerableCategory; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.RiskProfileEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.SelectedDefendantEntity; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantRepository; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.RiskProfileRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.SelectedDefendantRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.EnforcementDataUtil; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.RiskDetailsMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.SelectedDefendantsMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantDetailsMapper; +import uk.gov.hmcts.reform.pcs.ccd.type.DynamicStringListElement; import java.util.Collections; import java.util.List; @@ -37,10 +45,12 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; import static uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.VulnerableCategory.VULNERABLE_CHILDREN; @@ -63,6 +73,8 @@ class WarrantStrategyTest { private ArgumentCaptor riskProfileCaptor; @Captor private ArgumentCaptor warrantEntityCaptor; + @Captor + private ArgumentCaptor> selectedDefendantEntityCaptor; @InjectMocks private WarrantStrategy underTest; @@ -414,6 +426,102 @@ void shouldSaveRiskProfileBeforeSelectedDefendants() { inOrder.verify(selectedDefendantRepository).saveAll(defendants); } + @Test + void shouldPersistVulnerabilityDetailsInRiskProfile() { + // Given: order with raw warrant details (vulnerability) + final EnforcementOrder enforcementOrder = EnforcementDataUtil.buildEnforcementOrderWithVulnerability(); + final RiskProfileEntity stubbedRiskProfile = new RiskProfileEntity(); + stubbedRiskProfile.setVulnerablePeoplePresent(YesNoNotSure.YES); + stubbedRiskProfile.setVulnerableCategory(VulnerableCategory.VULNERABLE_ADULTS); + stubbedRiskProfile.setVulnerableReasonText("Vulnerability reason"); + when(riskProfileMapper.toEntity(any(EnforcementOrderEntity.class), eq(enforcementOrder))) + .thenReturn(stubbedRiskProfile); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then: service calls mapper and saves returned risk profile + verify(riskProfileMapper).toEntity(any(), any()); + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + } + + @Test + void shouldAddMultipleSelectedDefendantsWhenProvided() { + // Given + String jessMayID = UUID.randomUUID().toString(); + String jamesMayID = UUID.randomUUID().toString(); + + List selected = List.of( + new DynamicStringListElement(jessMayID, "Jess May"), + new DynamicStringListElement(jamesMayID, "James May") + ); + + List listItems = List.of( + new DynamicStringListElement(jessMayID, "Jess May"), + new DynamicStringListElement(jamesMayID, "James May") + ); + + final EnforcementOrder enforcementOrder = + EnforcementDataUtil.buildEnforcementOrderWithSelectedDefendants(selected, listItems); + + PartyEntity partyJessMay = PartyEntity.builder() + .id(UUID.fromString(jessMayID)) + .firstName("Jess") + .lastName("May") + .build(); + + PartyEntity partyJamesMay = PartyEntity.builder() + .id(UUID.fromString(jamesMayID)) + .firstName("James") + .lastName("May") + .build(); + + SelectedDefendantEntity entityJess = new SelectedDefendantEntity(); + entityJess.setParty(partyJessMay); + + SelectedDefendantEntity entityJames = new SelectedDefendantEntity(); + entityJames.setParty(partyJamesMay); + + when(selectedDefendantsMapper.mapToEntities(any(EnforcementOrderEntity.class))) + .thenReturn(List.of(entityJess, entityJames)); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(selectedDefendantRepository) + .saveAll(selectedDefendantEntityCaptor.capture()); + List savedEntities = selectedDefendantEntityCaptor.getValue(); + + assertThat(savedEntities).hasSize(2); + assertThat(savedEntities) + .extracting(SelectedDefendantEntity::getParty) + .containsExactlyInAnyOrder(partyJessMay, partyJamesMay); + } + + @Test + void shouldNotAddAnySelectedDefendantsWhenEvictEveryoneIsYes() { + // Given + final EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .selectEnforcementType(SelectEnforcementType.WARRANT) + .warrantDetails(WarrantDetails.builder() + .nameAndAddressForEviction(NameAndAddressForEviction.builder() + .correctNameAndAddress(VerticalYesNo.YES) + .build()) + .peopleToEvict(PeopleToEvict.builder() + .evictEveryone(VerticalYesNo.YES) + .build()) + .build()) + .rawWarrantDetails(RawWarrantDetails.builder().selectedDefendants(null).build()) + .build(); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verifyNoInteractions(selectedDefendantRepository); + } + private RiskProfileEntity createExpectedRiskProfileEntity() { RiskProfileEntity entity = new RiskProfileEntity(); entity.setEnforcementOrder(enforcementOrderEntity); From ee99bfe07fdf8dfcfdfff7fb0087ed2283052f59 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Mon, 2 Mar 2026 10:04:51 +0000 Subject: [PATCH 20/54] Upgrade enforcement writ details migration to V061. --- ...cement_writ_details.sql => V061__enforcement_writ_details.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V060__enforcement_writ_details.sql => V061__enforcement_writ_details.sql} (100%) diff --git a/src/main/resources/db/migration/V060__enforcement_writ_details.sql b/src/main/resources/db/migration/V061__enforcement_writ_details.sql similarity index 100% rename from src/main/resources/db/migration/V060__enforcement_writ_details.sql rename to src/main/resources/db/migration/V061__enforcement_writ_details.sql From dfda175d1df85971251326fe13250cd644f99698 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Mon, 2 Mar 2026 17:24:15 +0000 Subject: [PATCH 21/54] Upgrade enforcement writ details migration to V062. --- ...cement_writ_details.sql => V062__enforcement_writ_details.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V061__enforcement_writ_details.sql => V062__enforcement_writ_details.sql} (100%) diff --git a/src/main/resources/db/migration/V061__enforcement_writ_details.sql b/src/main/resources/db/migration/V062__enforcement_writ_details.sql similarity index 100% rename from src/main/resources/db/migration/V061__enforcement_writ_details.sql rename to src/main/resources/db/migration/V062__enforcement_writ_details.sql From 118fbc9810c06aff7d9b3b6a64ba28e70a145f38 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Wed, 4 Mar 2026 09:50:03 +0000 Subject: [PATCH 22/54] WIP - Add language_used, show_change_name_address_page and other UI fields to enforcement tables and update entity models accordingly. --- .../warrant/WarrantDetails.java | 3 ++ .../entity/enforcetheorder/WarrantEntity.java | 8 ++++++ .../WarrantOfRestitutionEntity.java | 7 +++++ .../entity/enforcetheorder/WritEntity.java | 11 ++++++++ .../WritOfRestitutionEntity.java | 7 +++++ .../V063__enforcement_data_model_updates.sql | 28 +++++++++++++++++++ .../pcs/testingsupport/EnforcementDMTest.java | 10 +++++-- 7 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 src/main/resources/db/migration/V063__enforcement_data_model_updates.sql diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrant/WarrantDetails.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrant/WarrantDetails.java index ba125eb9b4..1089a90e26 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrant/WarrantDetails.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrant/WarrantDetails.java @@ -5,6 +5,8 @@ import com.fasterxml.jackson.annotation.JsonUnwrapped; import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.annotation.JsonNaming; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -119,4 +121,5 @@ public class WarrantDetails { @CCD @JsonUnwrapped private DefendantsDOB defendantsDOB; + } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java index 7b6b8bef0d..e4b9463c7e 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java @@ -18,6 +18,7 @@ import lombok.Setter; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; +import uk.gov.hmcts.reform.pcs.ccd.domain.LanguageUsed; import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; @@ -133,4 +134,11 @@ public class WarrantEntity { private String certification; + @Enumerated(EnumType.STRING) + private LanguageUsed languageUsed; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo showChangeNameAddressPage; + } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java index e5d6978421..edcab624f5 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java @@ -2,6 +2,8 @@ import com.fasterxml.jackson.annotation.JsonBackReference; import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; @@ -10,6 +12,7 @@ import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; +import uk.gov.hmcts.reform.pcs.ccd.domain.LanguageUsed; import java.util.UUID; @@ -27,4 +30,8 @@ public class WarrantOfRestitutionEntity { @JoinColumn(name = "enf_case_id", nullable = false) @JsonBackReference private EnforcementOrderEntity enforcementOrder; + + @Enumerated(EnumType.STRING) + private LanguageUsed languageUsed; + } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java index d5ec87ce30..2fd770fc2d 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java @@ -15,7 +15,9 @@ import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.LanguageUsed; import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; import java.math.BigDecimal; import java.util.UUID; @@ -74,4 +76,13 @@ public class WritEntity { @JdbcTypeCode(SqlTypes.NAMED_ENUM) private YesOrNo hasClaimTransferredToHighCourt; + @Enumerated(EnumType.STRING) + private LanguageUsed languageUsed; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private StatementOfTruthCompletedBy completedBy; + + private String certification; + } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritOfRestitutionEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritOfRestitutionEntity.java index dd1a996b16..f64c9a10ed 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritOfRestitutionEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritOfRestitutionEntity.java @@ -2,6 +2,8 @@ import com.fasterxml.jackson.annotation.JsonBackReference; import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @@ -14,6 +16,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import uk.gov.hmcts.reform.pcs.ccd.domain.LanguageUsed; import java.util.UUID; @@ -34,5 +37,9 @@ public class WritOfRestitutionEntity { @JoinColumn(name = "enf_case_id", nullable = false) @JsonBackReference private EnforcementOrderEntity enforcementOrder; + + @Enumerated(EnumType.STRING) + private LanguageUsed languageUsed; + } diff --git a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql new file mode 100644 index 0000000000..354d6a8037 --- /dev/null +++ b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql @@ -0,0 +1,28 @@ +-- Add Language used to each existing table +ALTER TABLE public.enf_warrant ADD COLUMN language_used VARCHAR(30); +ALTER TABLE public.enf_writ ADD COLUMN language_used VARCHAR(30); +ALTER TABLE public.enf_warrant_of_restitution ADD COLUMN language_used VARCHAR(30); +ALTER TABLE public.enf_writ_of_restitution ADD COLUMN language_used VARCHAR(30); + +ALTER TABLE public.enf_warrant ADD COLUMN show_change_name_address_page YES_NO; + +-- Not needed within Writ +ALTER TABLE public.enf_writ DROP COLUMN show_people_who_will_be_evicted_page; + +ALTER TABLE public.enf_writ ADD COLUMN was_general_application_to_transfer_to_high_court_successful YES_NO; +ALTER TABLE public.enf_writ ADD COLUMN completed_by STATEMENT_OF_TRUTH_COMPLETED_BY; +ALTER TABLE public.enf_writ ADD COLUMN certification TEXT; + + -- Repayment + repayment_choice VARCHAR(20), + amount_of_repayment_costs NUMERIC(10, 2), + + + + +ALTER TABLE public.enf_risk_details ADD COLUMN enforcement_risk_categories VARCHAR(6800); + + + + + diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java index 585cf8937c..505eb7d8ba 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java @@ -65,10 +65,13 @@ void shouldCaptureAllMissingEntityFieldsFromTheEnforcementDomain() throws IOExce @Test void shouldCaptureAllMissingEntityFieldsFromTheEnforcementWarrantDetailsDomain() throws IOException { - domainDataModelSupportHelper = new DomainDataModelSupportHelper(EnforcementOrder.class); + domainDataModelSupportHelper = new DomainDataModelSupportHelper(WarrantDetails.class); domainDataModelSupportHelper.addClassesToIgnore(EnforcementOrder.class, ClaimEntity.class, + EnforcementOrderEntity.class, EnforcementRiskDetails.class, WritDetails.class); - domainDataModelSupportHelper.addFieldsToIgnore("enforcementOrder", "writDetails", "enforcementLanguageUsed"); + domainDataModelSupportHelper.addFieldsToIgnore("enforcementOrder", "writDetails", + "enforcementLanguageUsed", "anyRiskToBailiff", + "riskCategories"); List missingFields = domainDataModelSupportHelper.findMissingCCDFields(WarrantEntity.class); @@ -84,9 +87,10 @@ void shouldCaptureAllMissingEntityFieldsFromTheEnforcementWarrantDetailsDomain() void shouldCaptureAllMissingEntityFieldsFromTheEnforcementWritDetailsDomain() throws IOException { domainDataModelSupportHelper = new DomainDataModelSupportHelper(WritDetails.class); domainDataModelSupportHelper.addClassesToIgnore(EnforcementOrder.class, ClaimEntity.class, + EnforcementOrderEntity.class, EnforcementRiskDetails.class, WarrantDetails.class); domainDataModelSupportHelper.addFieldsToIgnore("enforcementOrder", "warrantDetails", - "enforcementLanguageUsed"); + "languageUsed"); List missingFields = domainDataModelSupportHelper.findMissingCCDFields(WritEntity.class); From 0198afc95cf76a2b7f2caadd855986efa70c12f1 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Wed, 4 Mar 2026 16:07:31 +0000 Subject: [PATCH 23/54] Add submission_date to enforcement tables, add language_used and show_change_name_address_page columns, drop obsolete show_people_who_will_be_evicted_page from Writ, and add enforcement_risk_categories to risk_details. --- .../V063__enforcement_data_model_updates.sql | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql index 354d6a8037..e1d490004b 100644 --- a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql +++ b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql @@ -1,3 +1,9 @@ +-- Add Timestamps submission date to each of the existing tables !!! +ALTER TABLE public.enf_warrant ADD COLUMN submission_date DATE; +ALTER TABLE public.enf_writ ADD COLUMN submission_date DATE; +ALTER TABLE public.enf_warrant_of_restitution ADD COLUMN submission_date DATE; +ALTER TABLE public.enf_writ_of_restitution ADD COLUMN submission_date DATE; + -- Add Language used to each existing table ALTER TABLE public.enf_warrant ADD COLUMN language_used VARCHAR(30); ALTER TABLE public.enf_writ ADD COLUMN language_used VARCHAR(30); @@ -6,9 +12,6 @@ ALTER TABLE public.enf_writ_of_restitution ADD COLUMN language_used VARCHAR(30); ALTER TABLE public.enf_warrant ADD COLUMN show_change_name_address_page YES_NO; --- Not needed within Writ -ALTER TABLE public.enf_writ DROP COLUMN show_people_who_will_be_evicted_page; - ALTER TABLE public.enf_writ ADD COLUMN was_general_application_to_transfer_to_high_court_successful YES_NO; ALTER TABLE public.enf_writ ADD COLUMN completed_by STATEMENT_OF_TRUTH_COMPLETED_BY; ALTER TABLE public.enf_writ ADD COLUMN certification TEXT; @@ -18,11 +21,10 @@ ALTER TABLE public.enf_writ ADD COLUMN certification TEXT; amount_of_repayment_costs NUMERIC(10, 2), - - ALTER TABLE public.enf_risk_details ADD COLUMN enforcement_risk_categories VARCHAR(6800); - +-- Not needed within Writ +ALTER TABLE public.enf_writ DROP COLUMN show_people_who_will_be_evicted_page; From 5334dde701ca227b4e6c33cdd03914646f5cccfe Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Thu, 5 Mar 2026 12:26:06 +0000 Subject: [PATCH 24/54] Drop obsolete `showPeopleWhoWillBeEvictedPage` field from the Writ model, entity, and database, and remove all associated tests, mappings, and page logic. Update migration V063 to reflect the removal and align related code accordingly. --- .../enforcetheorder/warrant/WarrantDetails.java | 2 -- .../ccd/domain/enforcetheorder/writ/WritDetails.java | 5 +---- .../pcs/ccd/entity/enforcetheorder/WritEntity.java | 5 ----- .../writ/NameAndAddressForEvictionWritPage.java | 2 -- .../enforcetheorder/mapper/WritDetailsMapper.java | 1 - .../V063__enforcement_data_model_updates.sql | 11 +++++------ .../writ/NameAndAddressForEvictionPageTest.java | 4 ---- .../enforcetheorder/strategy/WritStrategyTest.java | 2 -- .../enforcetheorder/writ/WritDetailsMapperTest.java | 4 ---- 9 files changed, 6 insertions(+), 30 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrant/WarrantDetails.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrant/WarrantDetails.java index 1089a90e26..82579659fd 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrant/WarrantDetails.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrant/WarrantDetails.java @@ -5,8 +5,6 @@ import com.fasterxml.jackson.annotation.JsonUnwrapped; import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.annotation.JsonNaming; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/writ/WritDetails.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/writ/WritDetails.java index 98b681ed1a..933da85aa4 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/writ/WritDetails.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/writ/WritDetails.java @@ -33,9 +33,6 @@ public class WritDetails { @CCD(searchable = false) private YesOrNo showChangeNameAddressPage; - @CCD(searchable = false) - private YesOrNo showPeopleWhoWillBeEvictedPage; - @CCD( label = "Have you hired a High Court enforcement officer?" ) @@ -82,7 +79,7 @@ public class WritDetails { label = "TEMPORARY TEST ONLY – Was the general application to transfer to the High Court successful?" ) private YesOrNo wasGeneralApplicationToTransferToHighCourtSuccessful; - + @JsonUnwrapped @CCD private StatementOfTruthDetailsEnforcement statementOfTruth; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java index 2fd770fc2d..1e45dae60e 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java @@ -42,11 +42,6 @@ public class WritEntity { @JdbcTypeCode(SqlTypes.NAMED_ENUM) private VerticalYesNo correctNameAndAddress; - // Direct fields - @Enumerated(EnumType.STRING) - @JdbcTypeCode(SqlTypes.NAMED_ENUM) - private YesOrNo showPeopleWhoWillBeEvictedPage; - // LandRegistryFees @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/writ/NameAndAddressForEvictionWritPage.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/writ/NameAndAddressForEvictionWritPage.java index caa4c08ce5..180dc95697 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/writ/NameAndAddressForEvictionWritPage.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/writ/NameAndAddressForEvictionWritPage.java @@ -70,11 +70,9 @@ private AboutToStartOrSubmitResponse midEvent( if (correctNameAndAddress == VerticalYesNo.NO) { // Navigate to ChangeNameAddressPage writDetails.setShowChangeNameAddressPage(YesOrNo.YES); - writDetails.setShowPeopleWhoWillBeEvictedPage(YesOrNo.NO); } else if (correctNameAndAddress == VerticalYesNo.YES) { // Navigate to PeopleWhoWillBeEvictedPage writDetails.setShowChangeNameAddressPage(YesOrNo.NO); - writDetails.setShowPeopleWhoWillBeEvictedPage(YesOrNo.YES); } return AboutToStartOrSubmitResponse.builder() diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java index 8606a6190e..5b5ad16fdc 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java @@ -22,7 +22,6 @@ public WritEntity toEntity(WritDetails writDetails) { mapNameAndAddressForEviction(writDetails.getNameAndAddressForEviction(), entity); // Map direct fields - entity.setShowPeopleWhoWillBeEvictedPage(convertYesOrNo(writDetails.getShowPeopleWhoWillBeEvictedPage())); entity.setHasHiredHighCourtEnforcementOfficer( convertToVerticalYesNo(writDetails.getHasHiredHighCourtEnforcementOfficer())); entity.setHceoDetails(writDetails.getHceoDetails()); diff --git a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql index e1d490004b..e5ffc6eb26 100644 --- a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql +++ b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql @@ -16,15 +16,14 @@ ALTER TABLE public.enf_writ ADD COLUMN was_general_application_to_transfer_to_hi ALTER TABLE public.enf_writ ADD COLUMN completed_by STATEMENT_OF_TRUTH_COMPLETED_BY; ALTER TABLE public.enf_writ ADD COLUMN certification TEXT; + + -- Repayment - repayment_choice VARCHAR(20), - amount_of_repayment_costs NUMERIC(10, 2), + --repayment_choice VARCHAR(20), + --amount_of_repayment_costs NUMERIC(10, 2), -ALTER TABLE public.enf_risk_details ADD COLUMN enforcement_risk_categories VARCHAR(6800); +ALTER TABLE public.enf_risk_profile ADD COLUMN enforcement_risk_categories VARCHAR(6800); -- Not needed within Writ ALTER TABLE public.enf_writ DROP COLUMN show_people_who_will_be_evicted_page; - - - diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/writ/NameAndAddressForEvictionPageTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/writ/NameAndAddressForEvictionPageTest.java index c9852c250d..39127604ac 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/writ/NameAndAddressForEvictionPageTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/writ/NameAndAddressForEvictionPageTest.java @@ -50,8 +50,6 @@ void shouldSetNavigationFlagsWhenCorrectNameAndAddressIsNo() { EnforcementOrder enforcementOrder = response.getData().getEnforcementOrder(); assertThat(enforcementOrder.getWritDetails() .getShowChangeNameAddressPage()).isEqualTo(YesOrNo.YES); - assertThat(enforcementOrder.getWritDetails() - .getShowPeopleWhoWillBeEvictedPage()).isEqualTo(YesOrNo.NO); } @Test @@ -76,8 +74,6 @@ void shouldSetNavigationFlagsWhenCorrectNameAndAddressIsYes() { EnforcementOrder enforcementOrder = response.getData().getEnforcementOrder(); assertThat(enforcementOrder.getWritDetails() .getShowChangeNameAddressPage()).isEqualTo(YesOrNo.NO); - assertThat(enforcementOrder.getWritDetails() - .getShowPeopleWhoWillBeEvictedPage()).isEqualTo(YesOrNo.YES); } } } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java index e969a516b7..97cb6b3ff4 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritStrategyTest.java @@ -53,7 +53,6 @@ void setUp() { .correctNameAndAddress(VerticalYesNo.YES) .build()) .showChangeNameAddressPage(YesOrNo.NO) - .showPeopleWhoWillBeEvictedPage(YesOrNo.YES) .hasHiredHighCourtEnforcementOfficer(VerticalYesNo.YES) .hceoDetails("Enforcement") .hasClaimTransferredToHighCourt(YesOrNo.YES) @@ -165,7 +164,6 @@ void shouldHandleWritDetailsWithAllFieldsPopulated() { .correctNameAndAddress(VerticalYesNo.YES) .build()) .showChangeNameAddressPage(YesOrNo.NO) - .showPeopleWhoWillBeEvictedPage(YesOrNo.YES) .hasHiredHighCourtEnforcementOfficer(VerticalYesNo.YES) .hceoDetails("Complete HCEO Details") .hasClaimTransferredToHighCourt(YesOrNo.YES) diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java index a5226a4eb1..5c516ea28a 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java @@ -53,7 +53,6 @@ void setUp() { writDetails = WritDetails.builder() .nameAndAddressForEviction(nameAndAddressForEviction) .showChangeNameAddressPage(YesOrNo.NO) - .showPeopleWhoWillBeEvictedPage(YesOrNo.YES) .hasHiredHighCourtEnforcementOfficer(VerticalYesNo.YES) .hceoDetails("John Smith, Enforcement Ltd") .hasClaimTransferredToHighCourt(YesOrNo.YES) @@ -70,7 +69,6 @@ void shouldMapAllFieldsSuccessfully() { // Then assertThat(entity.getCorrectNameAndAddress()).isEqualTo(VerticalYesNo.YES); - assertThat(entity.getShowPeopleWhoWillBeEvictedPage()).isEqualTo(YesOrNo.YES); assertThat(entity.getHasHiredHighCourtEnforcementOfficer()).isEqualTo(VerticalYesNo.YES); assertThat(entity.getHceoDetails()).isEqualTo("John Smith, Enforcement Ltd"); assertThat(entity.getHasClaimTransferredToHighCourt()).isEqualTo(YesOrNo.YES); @@ -164,7 +162,6 @@ void shouldMapWithAllNoValues() { .correctNameAndAddress(VerticalYesNo.NO) .build()) .showChangeNameAddressPage(YesOrNo.NO) - .showPeopleWhoWillBeEvictedPage(YesOrNo.NO) .hasHiredHighCourtEnforcementOfficer(VerticalYesNo.NO) .hasClaimTransferredToHighCourt(YesOrNo.NO) .landRegistryFees(LandRegistryFees.builder() @@ -181,7 +178,6 @@ void shouldMapWithAllNoValues() { // Then assertThat(entity.getCorrectNameAndAddress()).isEqualTo(VerticalYesNo.NO); - assertThat(entity.getShowPeopleWhoWillBeEvictedPage()).isEqualTo(YesOrNo.NO); assertThat(entity.getHasHiredHighCourtEnforcementOfficer()).isEqualTo(VerticalYesNo.NO); assertThat(entity.getHasClaimTransferredToHighCourt()).isEqualTo(YesOrNo.NO); assertThat(entity.getHaveLandRegistryFeesBeenPaid()).isEqualTo(VerticalYesNo.NO); From 09e0034915ab8580e8ae46b32e8547ee4b9e1940 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Fri, 6 Mar 2026 09:15:17 +0000 Subject: [PATCH 25/54] Add submission dates and language selection to enforcement entities, inject Clock, and map repayment details * Add `submission_date` columns to `enf_warrant`, `enf_writ`, and `enf_warrant_of_restitution` tables. * Introduce `language_used` and `show_change_name_address_page` columns in writ table. * Add repayment fields (`repayment_choice`, `amount_of_repayment_costs`, `repayment_summary_markdown`) to writ table. * Update `WritDetailsMapper`, `WarrantDetailsMapper`, `WritOfRestitutionStrategy`, and `WarrantOfRestitutionStrategy` to set `submissionDate` and `languageUsed` using injected `Clock`. * Add `Clock` dependency to mappers and strategies and update related tests. * Adjust entity classes (`WritEntity`, `WarrantEntity`, `WritOfRestitutionEntity`, `WarrantOfRestitutionEntity`) to include new fields. * Update migration V063 accordingly. --- .../WarrantOfRestitutionDetails.java | 1 + .../enforcetheorder/writ/WritDetails.java | 5 +++- .../entity/enforcetheorder/WarrantEntity.java | 3 +++ .../WarrantOfRestitutionEntity.java | 2 ++ .../entity/enforcetheorder/WritEntity.java | 10 ++++++++ .../WritOfRestitutionEntity.java | 3 +++ .../writ/LanguageUsedWritPage.java | 2 +- .../mapper/WarrantDetailsMapper.java | 8 +++++++ .../mapper/WritDetailsMapper.java | 24 +++++++++++++++++++ .../WarrantOfRestitutionStrategy.java | 5 ++++ .../strategy/WritOfRestitutionStrategy.java | 5 ++++ .../V063__enforcement_data_model_updates.sql | 13 ++++------ .../WarrantOfRestitutionStrategyTest.java | 9 +++++++ .../WritOfRestitutionStrategyTest.java | 9 +++++++ .../warrant/WarrantDetailsMapperTest.java | 11 ++++++++- .../writ/WritDetailsMapperTest.java | 9 +++++++ .../pcs/testingsupport/EnforcementDMTest.java | 4 +++- 17 files changed, 110 insertions(+), 13 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java index 8e646a6594..5bf81f67af 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java @@ -29,4 +29,5 @@ public class WarrantOfRestitutionDetails { typeOverride = FieldType.TextArea ) private String howDefendantsReturned; + } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/writ/WritDetails.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/writ/WritDetails.java index 933da85aa4..dba930e5f9 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/writ/WritDetails.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/writ/WritDetails.java @@ -1,6 +1,7 @@ package uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonUnwrapped; import com.fasterxml.jackson.databind.PropertyNamingStrategies; import com.fasterxml.jackson.databind.annotation.JsonNaming; @@ -67,7 +68,9 @@ public class WritDetails { + "ask them if they answered any questions in Welsh. We’ll use this to " + "make sure your claim is processed correctly" ) - private LanguageUsed enforcementLanguageUsed; + @JsonProperty("EnforcementLanguageUsed") + private LanguageUsed languageUsed; + @CCD( searchable = false, label = "TEMPORARY TEST ONLY – Has the claim been transferred to the High Court?" diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java index e4b9463c7e..9e647f8a64 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java @@ -23,6 +23,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.UUID; @Entity @@ -141,4 +142,6 @@ public class WarrantEntity { @JdbcTypeCode(SqlTypes.NAMED_ENUM) private VerticalYesNo showChangeNameAddressPage; + private LocalDate submissionDate; + } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java index edcab624f5..59e00648a8 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java @@ -14,6 +14,7 @@ import lombok.Setter; import uk.gov.hmcts.reform.pcs.ccd.domain.LanguageUsed; +import java.time.LocalDate; import java.util.UUID; @Entity @@ -34,4 +35,5 @@ public class WarrantOfRestitutionEntity { @Enumerated(EnumType.STRING) private LanguageUsed languageUsed; + private LocalDate submissionDate; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java index 1e45dae60e..9b7a674458 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java @@ -20,6 +20,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; import java.math.BigDecimal; +import java.time.LocalDate; import java.util.UUID; @Entity @@ -80,4 +81,13 @@ public class WritEntity { private String certification; + private LocalDate submissionDate; + + // Repayment + private String repaymentChoice; + + private BigDecimal amountOfRepaymentCosts; + + private String repaymentSummaryMarkdown; + } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritOfRestitutionEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritOfRestitutionEntity.java index f64c9a10ed..44d476ac81 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritOfRestitutionEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritOfRestitutionEntity.java @@ -18,6 +18,7 @@ import lombok.Setter; import uk.gov.hmcts.reform.pcs.ccd.domain.LanguageUsed; +import java.time.LocalDate; import java.util.UUID; @Entity @@ -41,5 +42,7 @@ public class WritOfRestitutionEntity { @Enumerated(EnumType.STRING) private LanguageUsed languageUsed; + private LocalDate submissionDate; + } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/writ/LanguageUsedWritPage.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/writ/LanguageUsedWritPage.java index 75e717e167..a1312cefa4 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/writ/LanguageUsedWritPage.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/writ/LanguageUsedWritPage.java @@ -23,7 +23,7 @@ public void addTo(PageBuilder pageBuilder) { .label("languageUsedWrit-separator", "---") .complex(PCSCase::getEnforcementOrder) .complex(EnforcementOrder::getWritDetails) - .mandatory(WritDetails::getEnforcementLanguageUsed) + .mandatory(WritDetails::getLanguageUsed) .done() .done() .label("languageUsedWrit-saveAndReturn", SAVE_AND_RETURN); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java index 6eca101e21..2802b38d31 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java @@ -1,5 +1,6 @@ package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper; +import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.RepaymentPreference; @@ -16,18 +17,25 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantEntity; +import java.time.Clock; +import java.time.LocalDate; import java.util.List; import java.util.stream.Collectors; @Component +@AllArgsConstructor public class WarrantDetailsMapper { + private final Clock ukClock; + public WarrantEntity toEntity(EnforcementOrder enforcementOrder, EnforcementOrderEntity enforcementOrderEntity) { WarrantEntity warrantEntity = WarrantEntity.builder() .enforcementOrder(enforcementOrderEntity).build(); if (enforcementOrder.getWarrantDetails() != null) { WarrantDetails warrantDetails = enforcementOrder.getWarrantDetails(); + warrantEntity.setSubmissionDate(LocalDate.now(ukClock)); + warrantEntity.setLanguageUsed(warrantDetails.getLanguageUsed()); controlFlags(warrantEntity, warrantDetails); suspendTheOrder(warrantEntity, warrantDetails); additionalInformation(warrantDetails, warrantEntity); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java index 5b5ad16fdc..e00ada5981 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java @@ -1,20 +1,29 @@ package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.RepaymentPreference; import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LandRegistryFees; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LegalCosts; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.MoneyOwedByDefendants; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RepaymentCosts; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.NameAndAddressForEviction; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WritEntity; +import java.time.Clock; +import java.time.LocalDate; + @Component @Slf4j +@AllArgsConstructor public class WritDetailsMapper { + private final Clock ukClock; + public WritEntity toEntity(WritDetails writDetails) { WritEntity entity = new WritEntity(); @@ -26,6 +35,8 @@ public WritEntity toEntity(WritDetails writDetails) { convertToVerticalYesNo(writDetails.getHasHiredHighCourtEnforcementOfficer())); entity.setHceoDetails(writDetails.getHceoDetails()); entity.setHasClaimTransferredToHighCourt(convertYesOrNo(writDetails.getHasClaimTransferredToHighCourt())); + entity.setLanguageUsed(writDetails.getLanguageUsed()); + entity.setSubmissionDate(LocalDate.now(ukClock)); // Map LandRegistryFees fields mapLandRegistryFees(writDetails.getLandRegistryFees(), entity); @@ -35,10 +46,23 @@ public WritEntity toEntity(WritDetails writDetails) { // Map MoneyOwedByDefendants fields mapMoneyOwedByDefendants(writDetails.getMoneyOwedByDefendants(), entity); + // Map Repayment + mapRepaymentCosts(writDetails.getRepaymentCosts(), entity); return entity; } + private void mapRepaymentCosts(RepaymentCosts repaymentCosts, WritEntity entity) { + if (repaymentCosts != null) { + RepaymentPreference repaymentChoice = repaymentCosts.getRepaymentChoice(); + if (repaymentChoice != null) { + entity.setRepaymentChoice(repaymentChoice.getLabel()); + } + entity.setAmountOfRepaymentCosts(repaymentCosts.getAmountOfRepaymentCosts()); + entity.setRepaymentSummaryMarkdown(repaymentCosts.getRepaymentSummaryMarkdown()); + } + } + private void mapNameAndAddressForEviction(NameAndAddressForEviction nameAndAddress, WritEntity entity) { if (nameAndAddress != null) { diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java index cd90278639..946b8843c4 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java @@ -7,16 +7,21 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantOfRestitutionEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantOfRestitutionRepository; +import java.time.Clock; +import java.time.LocalDate; + @Component @AllArgsConstructor public class WarrantOfRestitutionStrategy implements EnforcementTypeStrategy { private final WarrantOfRestitutionRepository warrantOfRestitutionRepository; + private final Clock ukClock; @Override public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { WarrantOfRestitutionEntity warrantOfRestitutionEntity = new WarrantOfRestitutionEntity(); warrantOfRestitutionEntity.setEnforcementOrder(enforcementOrderEntity); + warrantOfRestitutionEntity.setSubmissionDate(LocalDate.now(ukClock)); warrantOfRestitutionRepository.save(warrantOfRestitutionEntity); } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategy.java index f069493e3e..4a969edfb4 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategy.java @@ -7,16 +7,21 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WritOfRestitutionEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WritOfRestitutionRepository; +import java.time.Clock; +import java.time.LocalDate; + @Component @AllArgsConstructor public class WritOfRestitutionStrategy implements EnforcementTypeStrategy { private final WritOfRestitutionRepository writOfRestitutionRepository; + private final Clock ukClock; @Override public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { WritOfRestitutionEntity writOfRestitutionEntity = new WritOfRestitutionEntity(); writOfRestitutionEntity.setEnforcementOrder(enforcementOrderEntity); + writOfRestitutionEntity.setSubmissionDate(LocalDate.now(ukClock)); writOfRestitutionRepository.save(writOfRestitutionEntity); } diff --git a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql index e5ffc6eb26..0217ff3480 100644 --- a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql +++ b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql @@ -1,4 +1,4 @@ --- Add Timestamps submission date to each of the existing tables !!! +-- Add Timestamps submission date to each of the existing tables ALTER TABLE public.enf_warrant ADD COLUMN submission_date DATE; ALTER TABLE public.enf_writ ADD COLUMN submission_date DATE; ALTER TABLE public.enf_warrant_of_restitution ADD COLUMN submission_date DATE; @@ -12,16 +12,11 @@ ALTER TABLE public.enf_writ_of_restitution ADD COLUMN language_used VARCHAR(30); ALTER TABLE public.enf_warrant ADD COLUMN show_change_name_address_page YES_NO; -ALTER TABLE public.enf_writ ADD COLUMN was_general_application_to_transfer_to_high_court_successful YES_NO; ALTER TABLE public.enf_writ ADD COLUMN completed_by STATEMENT_OF_TRUTH_COMPLETED_BY; ALTER TABLE public.enf_writ ADD COLUMN certification TEXT; - - - - -- Repayment - --repayment_choice VARCHAR(20), - --amount_of_repayment_costs NUMERIC(10, 2), - +ALTER TABLE public.enf_writ ADD COLUMN repayment_choice VARCHAR(20); +ALTER TABLE public.enf_writ ADD COLUMN amount_of_repayment_costs NUMERIC(10, 2); +ALTER TABLE public.enf_writ ADD COLUMN repayment_summary_markdown TEXT; ALTER TABLE public.enf_risk_profile ADD COLUMN enforcement_risk_categories VARCHAR(6800); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java index f17e309b4b..3bd1e8f1d4 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java @@ -11,8 +11,13 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantOfRestitutionEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantOfRestitutionRepository; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; + import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) public class WarrantOfRestitutionStrategyTest { @@ -21,12 +26,16 @@ public class WarrantOfRestitutionStrategyTest { private WarrantOfRestitutionStrategy underTest; @Mock private WarrantOfRestitutionRepository warrantOfRestitutionRepository; + @Mock + private Clock clock; @Test void shouldProcess() { // Given EnforcementOrderEntity enforcementOrderEntity = new EnforcementOrderEntity(); EnforcementOrder enforcementOrder = new EnforcementOrder(); + when(clock.instant()).thenReturn(Instant.parse("2026-03-05T00:00:00Z")); + when(clock.getZone()).thenReturn(ZoneId.of("Europe/London")); // When underTest.process(enforcementOrderEntity, enforcementOrder); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategyTest.java index 277c540438..2a4bc1035a 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategyTest.java @@ -11,8 +11,13 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WritOfRestitutionEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WritOfRestitutionRepository; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; + import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) public class WritOfRestitutionStrategyTest { @@ -21,12 +26,16 @@ public class WritOfRestitutionStrategyTest { private WritOfRestitutionStrategy underTest; @Mock private WritOfRestitutionRepository writOfRestitutionRepository; + @Mock + private Clock clock; @Test void shouldProcess() { // Given EnforcementOrderEntity enforcementOrderEntity = new EnforcementOrderEntity(); EnforcementOrder enforcementOrder = new EnforcementOrder(); + when(clock.instant()).thenReturn(Instant.parse("2026-03-05T00:00:00Z")); + when(clock.getZone()).thenReturn(ZoneId.of("Europe/London")); // When underTest.process(enforcementOrderEntity, enforcementOrder); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java index 86b007225d..be47cffec6 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java @@ -5,6 +5,7 @@ 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 uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.RepaymentPreference; @@ -14,12 +15,12 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LegalCosts; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.MoneyOwedByDefendants; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RepaymentCosts; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.StatementOfTruthDetailsEnforcement; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.AdditionalInformation; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.DefendantsDOB; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.NameAndAddressForEviction; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PeopleToEvict; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PropertyAccessDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.StatementOfTruthDetailsEnforcement; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreement; import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementClaimant; @@ -30,22 +31,30 @@ import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantDetailsMapper; import java.math.BigDecimal; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; import java.util.Collections; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.lenient; @ExtendWith(MockitoExtension.class) class WarrantDetailsMapperTest { @InjectMocks private WarrantDetailsMapper underTest; + @Mock + private Clock clock; private EnforcementOrderEntity enforcementOrderEntity; @BeforeEach void setUp() { enforcementOrderEntity = new EnforcementOrderEntity(); + lenient().when(clock.instant()).thenReturn(Instant.parse("2026-03-05T00:00:00Z")); + lenient().when(clock.getZone()).thenReturn(ZoneId.of("Europe/London")); } @Test diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java index 5c516ea28a..7e6ffc27db 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java @@ -5,6 +5,7 @@ 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 uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; @@ -17,8 +18,12 @@ import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WritDetailsMapper; import java.math.BigDecimal; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.lenient; @ExtendWith(MockitoExtension.class) @DisplayName("WritDetailsMapper Tests") @@ -26,6 +31,8 @@ class WritDetailsMapperTest { @InjectMocks private WritDetailsMapper underTest; + @Mock + private Clock clock; private WritDetails writDetails; private NameAndAddressForEviction nameAndAddressForEviction; @@ -60,6 +67,8 @@ void setUp() { .legalCosts(legalCosts) .moneyOwedByDefendants(moneyOwedByDefendants) .build(); + lenient().when(clock.instant()).thenReturn(Instant.parse("2026-03-05T00:00:00Z")); + lenient().when(clock.getZone()).thenReturn(ZoneId.of("Europe/London")); } @Test diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java index 505eb7d8ba..472db74f78 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java @@ -89,8 +89,10 @@ void shouldCaptureAllMissingEntityFieldsFromTheEnforcementWritDetailsDomain() th domainDataModelSupportHelper.addClassesToIgnore(EnforcementOrder.class, ClaimEntity.class, EnforcementOrderEntity.class, EnforcementRiskDetails.class, WarrantDetails.class); + // showChangeNameAddressPage is not stored with this to flow path but used in the show conditions. domainDataModelSupportHelper.addFieldsToIgnore("enforcementOrder", "warrantDetails", - "languageUsed"); + "wasGeneralApplicationToTransferToHighCourtSuccessful", // temp + "showChangeNameAddressPage"); List missingFields = domainDataModelSupportHelper.findMissingCCDFields(WritEntity.class); From 5181b0b2b4bb589b2eabf1cd05c9c550f2b73aea Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Fri, 6 Mar 2026 11:59:05 +0000 Subject: [PATCH 26/54] Additional tests and some minor alterations. --- .../mapper/WarrantDetailsMapper.java | 4 +- .../mapper/WritDetailsMapper.java | 10 +-- .../warrant/WarrantDetailsMapperTest.java | 46 ++++++++------ .../writ/WritDetailsMapperTest.java | 62 +++++++++++++++++++ 4 files changed, 92 insertions(+), 30 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java index 2802b38d31..138a26ca27 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java @@ -165,9 +165,7 @@ private void repayment(WarrantDetails warrantDetails, WarrantEntity warrantEntit if (warrantDetails.getRepaymentCosts() != null) { RepaymentCosts repaymentCosts = warrantDetails.getRepaymentCosts(); RepaymentPreference repaymentChoice = repaymentCosts.getRepaymentChoice(); - if (repaymentChoice != null) { - warrantEntity.setRepaymentChoice(repaymentChoice.getLabel()); - } + warrantEntity.setRepaymentChoice(repaymentChoice.getLabel()); warrantEntity.setAmountOfRepaymentCosts(repaymentCosts.getAmountOfRepaymentCosts()); warrantEntity.setRepaymentSummaryMarkdown(repaymentCosts.getRepaymentSummaryMarkdown()); } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java index e00ada5981..1cece850a3 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java @@ -38,15 +38,9 @@ public WritEntity toEntity(WritDetails writDetails) { entity.setLanguageUsed(writDetails.getLanguageUsed()); entity.setSubmissionDate(LocalDate.now(ukClock)); - // Map LandRegistryFees fields mapLandRegistryFees(writDetails.getLandRegistryFees(), entity); - - // Map LegalCosts fields mapLegalCosts(writDetails.getLegalCosts(), entity); - - // Map MoneyOwedByDefendants fields mapMoneyOwedByDefendants(writDetails.getMoneyOwedByDefendants(), entity); - // Map Repayment mapRepaymentCosts(writDetails.getRepaymentCosts(), entity); return entity; @@ -55,9 +49,7 @@ public WritEntity toEntity(WritDetails writDetails) { private void mapRepaymentCosts(RepaymentCosts repaymentCosts, WritEntity entity) { if (repaymentCosts != null) { RepaymentPreference repaymentChoice = repaymentCosts.getRepaymentChoice(); - if (repaymentChoice != null) { - entity.setRepaymentChoice(repaymentChoice.getLabel()); - } + entity.setRepaymentChoice(repaymentChoice.getLabel()); entity.setAmountOfRepaymentCosts(repaymentCosts.getAmountOfRepaymentCosts()); entity.setRepaymentSummaryMarkdown(repaymentCosts.getRepaymentSummaryMarkdown()); } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java index be47cffec6..b9fa972e04 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java @@ -4,6 +4,8 @@ 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.EnumSource; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; @@ -337,24 +339,6 @@ void shouldMapRepaymentCosts() { assertThat(result.getRepaymentSummaryMarkdown()).isEqualTo("Summary markdown"); } - @Test - void shouldHandleRepaymentCostsWithNullChoice() { - // Given - RepaymentCosts repaymentCosts = RepaymentCosts.builder() - .repaymentChoice(null) - .amountOfRepaymentCosts(new BigDecimal("1000.00")) - .build(); - WarrantDetails warrantDetails = WarrantDetails.builder().repaymentCosts(repaymentCosts).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); - - // When - WarrantEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getRepaymentChoice()).isNull(); - assertThat(result.getAmountOfRepaymentCosts()).isEqualByComparingTo(new BigDecimal("1000.00")); - } - @Test void shouldMapDefendantsDOB() { // Given @@ -491,6 +475,32 @@ void shouldMapCompleteWarrantDetails() { assertThat(result.getCompletedBy()).isEqualTo(StatementOfTruthCompletedBy.LEGAL_REPRESENTATIVE); } + @ParameterizedTest + @EnumSource(RepaymentPreference.class) + void shouldMapRepaymentCostsForAllPreferences(RepaymentPreference repaymentPreference) { + // Given + WarrantDetails warrantDetails = WarrantDetails.builder() + .showChangeNameAddressPage(YesOrNo.YES) + .showPeopleWhoWillBeEvictedPage(YesOrNo.NO) + .showPeopleYouWantToEvictPage(YesOrNo.YES) + .build(); + RepaymentCosts repaymentCosts = RepaymentCosts.builder() + .repaymentChoice(repaymentPreference) + .amountOfRepaymentCosts(new BigDecimal("500.00")) + .repaymentSummaryMarkdown("Repayment summary") + .build(); + warrantDetails.setRepaymentCosts(repaymentCosts); + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + + // When + WarrantEntity entity = underTest.toEntity(enforcementOrder, new EnforcementOrderEntity()); + + // Then + assertThat(entity.getRepaymentChoice()).isEqualTo(repaymentPreference.getLabel()); + assertThat(entity.getAmountOfRepaymentCosts()).isEqualByComparingTo(new BigDecimal("500.00")); + assertThat(entity.getRepaymentSummaryMarkdown()).isEqualTo("Repayment summary"); + } + private EnforcementOrder createCompleteEnforcementOrder() { StatementOfTruthDetailsEnforcement statementOfTruth = getStatementOfTruthDetailsEnforcement(); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java index 7e6ffc27db..b987899b98 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java @@ -4,14 +4,19 @@ import org.junit.jupiter.api.DisplayName; 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.EnumSource; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.LanguageUsed; +import uk.gov.hmcts.reform.pcs.ccd.domain.RepaymentPreference; import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LandRegistryFees; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LegalCosts; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.MoneyOwedByDefendants; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RepaymentCosts; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.NameAndAddressForEviction; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WritEntity; @@ -20,6 +25,7 @@ import java.math.BigDecimal; import java.time.Clock; import java.time.Instant; +import java.time.LocalDate; import java.time.ZoneId; import static org.assertj.core.api.Assertions.assertThat; @@ -308,4 +314,60 @@ void shouldMapPartialDataCorrectly() { assertThat(entity.getHaveLandRegistryFeesBeenPaid()).isNull(); assertThat(entity.getAreLegalCostsToBeClaimed()).isNull(); } + + @Test + void shouldMapSubmissionDateFromClock() { + // When + WritEntity entity = underTest.toEntity(writDetails); + + // Then + assertThat(entity.getSubmissionDate()).isEqualTo(LocalDate.of(2026, 3, 5)); + } + + @Test + void shouldMapLanguageUsed() { + // Given + writDetails.setLanguageUsed(LanguageUsed.ENGLISH); + + // When + WritEntity entity = underTest.toEntity(writDetails); + + // Then + assertThat(entity.getLanguageUsed()).isEqualTo(LanguageUsed.ENGLISH); + } + + @Test + void shouldMapRepaymentCostsAllNull() { + // Given + writDetails.setRepaymentCosts(null); + + // When + WritEntity entity = underTest.toEntity(writDetails); + + // Then + assertThat(entity.getRepaymentChoice()).isNull(); + assertThat(entity.getAmountOfRepaymentCosts()).isNull(); + assertThat(entity.getRepaymentSummaryMarkdown()).isNull(); + } + + @ParameterizedTest + @EnumSource(RepaymentPreference.class) + void shouldMapRepaymentCostsForAllPreferences(RepaymentPreference repaymentPreference) { + // Given + RepaymentCosts repaymentCosts = RepaymentCosts.builder() + .repaymentChoice(repaymentPreference) + .amountOfRepaymentCosts(new BigDecimal("500.00")) + .repaymentSummaryMarkdown("Repayment summary") + .build(); + writDetails.setRepaymentCosts(repaymentCosts); + + // When + WritEntity entity = underTest.toEntity(writDetails); + + // Then + assertThat(entity.getRepaymentChoice()).isEqualTo(repaymentPreference.getLabel()); + assertThat(entity.getAmountOfRepaymentCosts()).isEqualByComparingTo(new BigDecimal("500.00")); + assertThat(entity.getRepaymentSummaryMarkdown()).isEqualTo("Repayment summary"); + } + } From 5d79c12dd9402b216165c52b06fae14ed4d1cac5 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Fri, 6 Mar 2026 14:01:23 +0000 Subject: [PATCH 27/54] Altered to take on as a timestamp now the submissionDate becomes created inline with elsewhere in the project. --- .../entity/enforcetheorder/WarrantEntity.java | 9 ++++++--- .../WarrantOfRestitutionEntity.java | 8 ++++++-- .../entity/enforcetheorder/WritEntity.java | 9 ++++++--- .../WritOfRestitutionEntity.java | 8 ++++++-- .../mapper/WarrantDetailsMapper.java | 11 +++-------- .../mapper/WritDetailsMapper.java | 6 ------ .../WarrantOfRestitutionStrategy.java | 5 ----- .../strategy/WritOfRestitutionStrategy.java | 5 ----- .../V063__enforcement_data_model_updates.sql | 8 ++++---- .../WarrantOfRestitutionStrategyTest.java | 9 --------- .../WritOfRestitutionStrategyTest.java | 9 --------- .../warrant/WarrantDetailsMapperTest.java | 9 --------- .../writ/WritDetailsMapperTest.java | 19 ------------------- 13 files changed, 31 insertions(+), 84 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java index 9e647f8a64..fc0edc5159 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java @@ -16,14 +16,15 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; import uk.gov.hmcts.reform.pcs.ccd.domain.LanguageUsed; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; import java.math.BigDecimal; -import java.time.LocalDate; +import java.time.Instant; import java.util.UUID; @Entity @@ -142,6 +143,8 @@ public class WarrantEntity { @JdbcTypeCode(SqlTypes.NAMED_ENUM) private VerticalYesNo showChangeNameAddressPage; - private LocalDate submissionDate; + @CreationTimestamp + @Column(updatable = false, nullable = false) + private Instant created; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java index 59e00648a8..b627d5b71d 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java @@ -1,6 +1,7 @@ package uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder; import com.fasterxml.jackson.annotation.JsonBackReference; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; @@ -12,9 +13,10 @@ import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; +import org.hibernate.annotations.CreationTimestamp; import uk.gov.hmcts.reform.pcs.ccd.domain.LanguageUsed; -import java.time.LocalDate; +import java.time.Instant; import java.util.UUID; @Entity @@ -35,5 +37,7 @@ public class WarrantOfRestitutionEntity { @Enumerated(EnumType.STRING) private LanguageUsed languageUsed; - private LocalDate submissionDate; + @CreationTimestamp + @Column(updatable = false, nullable = false) + private Instant created; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java index 9b7a674458..42148068f4 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java @@ -1,6 +1,7 @@ package uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder; import com.fasterxml.jackson.annotation.JsonBackReference; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; @@ -12,6 +13,7 @@ import jakarta.persistence.Table; import lombok.Getter; import lombok.Setter; +import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; @@ -20,7 +22,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; import java.math.BigDecimal; -import java.time.LocalDate; +import java.time.Instant; import java.util.UUID; @Entity @@ -81,9 +83,10 @@ public class WritEntity { private String certification; - private LocalDate submissionDate; + @CreationTimestamp + @Column(updatable = false, nullable = false) + private Instant created; - // Repayment private String repaymentChoice; private BigDecimal amountOfRepaymentCosts; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritOfRestitutionEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritOfRestitutionEntity.java index 44d476ac81..b5d4f64327 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritOfRestitutionEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritOfRestitutionEntity.java @@ -1,6 +1,7 @@ package uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder; import com.fasterxml.jackson.annotation.JsonBackReference; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; @@ -16,9 +17,10 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import org.hibernate.annotations.CreationTimestamp; import uk.gov.hmcts.reform.pcs.ccd.domain.LanguageUsed; -import java.time.LocalDate; +import java.time.Instant; import java.util.UUID; @Entity @@ -42,7 +44,9 @@ public class WritOfRestitutionEntity { @Enumerated(EnumType.STRING) private LanguageUsed languageUsed; - private LocalDate submissionDate; + @CreationTimestamp + @Column(updatable = false, nullable = false) + private Instant created; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java index 138a26ca27..c4762e45c5 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java @@ -4,9 +4,6 @@ import org.springframework.stereotype.Component; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.RepaymentPreference; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreement; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementClaimant; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementLegalRep; import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LandRegistryFees; @@ -14,11 +11,12 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RepaymentCosts; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.StatementOfTruthDetailsEnforcement; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreement; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementClaimant; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementLegalRep; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantEntity; -import java.time.Clock; -import java.time.LocalDate; import java.util.List; import java.util.stream.Collectors; @@ -26,15 +24,12 @@ @AllArgsConstructor public class WarrantDetailsMapper { - private final Clock ukClock; - public WarrantEntity toEntity(EnforcementOrder enforcementOrder, EnforcementOrderEntity enforcementOrderEntity) { WarrantEntity warrantEntity = WarrantEntity.builder() .enforcementOrder(enforcementOrderEntity).build(); if (enforcementOrder.getWarrantDetails() != null) { WarrantDetails warrantDetails = enforcementOrder.getWarrantDetails(); - warrantEntity.setSubmissionDate(LocalDate.now(ukClock)); warrantEntity.setLanguageUsed(warrantDetails.getLanguageUsed()); controlFlags(warrantEntity, warrantDetails); suspendTheOrder(warrantEntity, warrantDetails); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java index 1cece850a3..2c4f1f3b66 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WritDetailsMapper.java @@ -14,16 +14,11 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.writ.WritDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WritEntity; -import java.time.Clock; -import java.time.LocalDate; - @Component @Slf4j @AllArgsConstructor public class WritDetailsMapper { - private final Clock ukClock; - public WritEntity toEntity(WritDetails writDetails) { WritEntity entity = new WritEntity(); @@ -36,7 +31,6 @@ public WritEntity toEntity(WritDetails writDetails) { entity.setHceoDetails(writDetails.getHceoDetails()); entity.setHasClaimTransferredToHighCourt(convertYesOrNo(writDetails.getHasClaimTransferredToHighCourt())); entity.setLanguageUsed(writDetails.getLanguageUsed()); - entity.setSubmissionDate(LocalDate.now(ukClock)); mapLandRegistryFees(writDetails.getLandRegistryFees(), entity); mapLegalCosts(writDetails.getLegalCosts(), entity); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java index 946b8843c4..cd90278639 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java @@ -7,21 +7,16 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantOfRestitutionEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantOfRestitutionRepository; -import java.time.Clock; -import java.time.LocalDate; - @Component @AllArgsConstructor public class WarrantOfRestitutionStrategy implements EnforcementTypeStrategy { private final WarrantOfRestitutionRepository warrantOfRestitutionRepository; - private final Clock ukClock; @Override public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { WarrantOfRestitutionEntity warrantOfRestitutionEntity = new WarrantOfRestitutionEntity(); warrantOfRestitutionEntity.setEnforcementOrder(enforcementOrderEntity); - warrantOfRestitutionEntity.setSubmissionDate(LocalDate.now(ukClock)); warrantOfRestitutionRepository.save(warrantOfRestitutionEntity); } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategy.java index 4a969edfb4..f069493e3e 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategy.java @@ -7,21 +7,16 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WritOfRestitutionEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WritOfRestitutionRepository; -import java.time.Clock; -import java.time.LocalDate; - @Component @AllArgsConstructor public class WritOfRestitutionStrategy implements EnforcementTypeStrategy { private final WritOfRestitutionRepository writOfRestitutionRepository; - private final Clock ukClock; @Override public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { WritOfRestitutionEntity writOfRestitutionEntity = new WritOfRestitutionEntity(); writOfRestitutionEntity.setEnforcementOrder(enforcementOrderEntity); - writOfRestitutionEntity.setSubmissionDate(LocalDate.now(ukClock)); writOfRestitutionRepository.save(writOfRestitutionEntity); } diff --git a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql index 0217ff3480..0827425f72 100644 --- a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql +++ b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql @@ -1,8 +1,8 @@ -- Add Timestamps submission date to each of the existing tables -ALTER TABLE public.enf_warrant ADD COLUMN submission_date DATE; -ALTER TABLE public.enf_writ ADD COLUMN submission_date DATE; -ALTER TABLE public.enf_warrant_of_restitution ADD COLUMN submission_date DATE; -ALTER TABLE public.enf_writ_of_restitution ADD COLUMN submission_date DATE; +ALTER TABLE public.enf_warrant ADD COLUMN created TIMESTAMP WITHOUT TIME ZONE NOT NULL; +ALTER TABLE public.enf_writ ADD COLUMN created TIMESTAMP WITHOUT TIME ZONE NOT NULL; +ALTER TABLE public.enf_warrant_of_restitution ADD COLUMN created TIMESTAMP WITHOUT TIME ZONE NOT NULL; +ALTER TABLE public.enf_writ_of_restitution ADD COLUMN created TIMESTAMP WITHOUT TIME ZONE NOT NULL; -- Add Language used to each existing table ALTER TABLE public.enf_warrant ADD COLUMN language_used VARCHAR(30); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java index 3bd1e8f1d4..f17e309b4b 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java @@ -11,13 +11,8 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantOfRestitutionEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantOfRestitutionRepository; -import java.time.Clock; -import java.time.Instant; -import java.time.ZoneId; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) public class WarrantOfRestitutionStrategyTest { @@ -26,16 +21,12 @@ public class WarrantOfRestitutionStrategyTest { private WarrantOfRestitutionStrategy underTest; @Mock private WarrantOfRestitutionRepository warrantOfRestitutionRepository; - @Mock - private Clock clock; @Test void shouldProcess() { // Given EnforcementOrderEntity enforcementOrderEntity = new EnforcementOrderEntity(); EnforcementOrder enforcementOrder = new EnforcementOrder(); - when(clock.instant()).thenReturn(Instant.parse("2026-03-05T00:00:00Z")); - when(clock.getZone()).thenReturn(ZoneId.of("Europe/London")); // When underTest.process(enforcementOrderEntity, enforcementOrder); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategyTest.java index 2a4bc1035a..277c540438 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WritOfRestitutionStrategyTest.java @@ -11,13 +11,8 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WritOfRestitutionEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WritOfRestitutionRepository; -import java.time.Clock; -import java.time.Instant; -import java.time.ZoneId; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) public class WritOfRestitutionStrategyTest { @@ -26,16 +21,12 @@ public class WritOfRestitutionStrategyTest { private WritOfRestitutionStrategy underTest; @Mock private WritOfRestitutionRepository writOfRestitutionRepository; - @Mock - private Clock clock; @Test void shouldProcess() { // Given EnforcementOrderEntity enforcementOrderEntity = new EnforcementOrderEntity(); EnforcementOrder enforcementOrder = new EnforcementOrder(); - when(clock.instant()).thenReturn(Instant.parse("2026-03-05T00:00:00Z")); - when(clock.getZone()).thenReturn(ZoneId.of("Europe/London")); // When underTest.process(enforcementOrderEntity, enforcementOrder); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java index b9fa972e04..70a4e808a6 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/warrant/WarrantDetailsMapperTest.java @@ -7,7 +7,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import org.mockito.InjectMocks; -import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.RepaymentPreference; @@ -33,30 +32,22 @@ import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantDetailsMapper; import java.math.BigDecimal; -import java.time.Clock; -import java.time.Instant; -import java.time.ZoneId; import java.util.Collections; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.lenient; @ExtendWith(MockitoExtension.class) class WarrantDetailsMapperTest { @InjectMocks private WarrantDetailsMapper underTest; - @Mock - private Clock clock; private EnforcementOrderEntity enforcementOrderEntity; @BeforeEach void setUp() { enforcementOrderEntity = new EnforcementOrderEntity(); - lenient().when(clock.instant()).thenReturn(Instant.parse("2026-03-05T00:00:00Z")); - lenient().when(clock.getZone()).thenReturn(ZoneId.of("Europe/London")); } @Test diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java index b987899b98..e4803c8d4d 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/writ/WritDetailsMapperTest.java @@ -7,7 +7,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import org.mockito.InjectMocks; -import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.LanguageUsed; @@ -23,13 +22,8 @@ import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WritDetailsMapper; import java.math.BigDecimal; -import java.time.Clock; -import java.time.Instant; -import java.time.LocalDate; -import java.time.ZoneId; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.lenient; @ExtendWith(MockitoExtension.class) @DisplayName("WritDetailsMapper Tests") @@ -37,8 +31,6 @@ class WritDetailsMapperTest { @InjectMocks private WritDetailsMapper underTest; - @Mock - private Clock clock; private WritDetails writDetails; private NameAndAddressForEviction nameAndAddressForEviction; @@ -73,8 +65,6 @@ void setUp() { .legalCosts(legalCosts) .moneyOwedByDefendants(moneyOwedByDefendants) .build(); - lenient().when(clock.instant()).thenReturn(Instant.parse("2026-03-05T00:00:00Z")); - lenient().when(clock.getZone()).thenReturn(ZoneId.of("Europe/London")); } @Test @@ -315,15 +305,6 @@ void shouldMapPartialDataCorrectly() { assertThat(entity.getAreLegalCostsToBeClaimed()).isNull(); } - @Test - void shouldMapSubmissionDateFromClock() { - // When - WritEntity entity = underTest.toEntity(writDetails); - - // Then - assertThat(entity.getSubmissionDate()).isEqualTo(LocalDate.of(2026, 3, 5)); - } - @Test void shouldMapLanguageUsed() { // Given From 24255b3772cb21163218079abfe106cf4a445a28 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Fri, 6 Mar 2026 16:27:44 +0000 Subject: [PATCH 28/54] Drop some indexes that are not needed. --- .../db/migration/V063__enforcement_data_model_updates.sql | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql index 0827425f72..18ba0282bb 100644 --- a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql +++ b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql @@ -22,3 +22,9 @@ ALTER TABLE public.enf_risk_profile ADD COLUMN enforcement_risk_categories VARCH -- Not needed within Writ ALTER TABLE public.enf_writ DROP COLUMN show_people_who_will_be_evicted_page; + + + +DROP INDEX idx_enf_writ_of_restitution_case_id; +DROP INDEX idx_enf_warrant_case_id; + From 1c2f9fafa675ca28ac2a239cf2966e26284c0a63 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Fri, 6 Mar 2026 16:28:23 +0000 Subject: [PATCH 29/54] With IF EXISTS --- .../db/migration/V063__enforcement_data_model_updates.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql index 18ba0282bb..1eb3f86b93 100644 --- a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql +++ b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql @@ -25,6 +25,6 @@ ALTER TABLE public.enf_writ DROP COLUMN show_people_who_will_be_evicted_page; -DROP INDEX idx_enf_writ_of_restitution_case_id; -DROP INDEX idx_enf_warrant_case_id; +DROP INDEX IF EXISTS idx_enf_writ_of_restitution_case_id; +DROP INDEX IF EXISTS idx_enf_warrant_case_id; From e084d85fabb8247e164ac3bb17ff91ebc1cd10c1 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Fri, 6 Mar 2026 16:30:08 +0000 Subject: [PATCH 30/54] Added another redundant index. --- .../db/migration/V063__enforcement_data_model_updates.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql index 1eb3f86b93..d998b6c2cb 100644 --- a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql +++ b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql @@ -27,4 +27,4 @@ ALTER TABLE public.enf_writ DROP COLUMN show_people_who_will_be_evicted_page; DROP INDEX IF EXISTS idx_enf_writ_of_restitution_case_id; DROP INDEX IF EXISTS idx_enf_warrant_case_id; - +DROP INDEX IF EXISTS idx_enf_selected_defendants_case; From 67595175b1eb860970801482506573a9faa5c3db Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Mon, 9 Mar 2026 16:52:22 +0000 Subject: [PATCH 31/54] Drop unused enforcement indexes from the database migration. --- .../db/migration/V063__enforcement_data_model_updates.sql | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql index d998b6c2cb..e0f5ee27cf 100644 --- a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql +++ b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql @@ -23,8 +23,6 @@ ALTER TABLE public.enf_risk_profile ADD COLUMN enforcement_risk_categories VARCH -- Not needed within Writ ALTER TABLE public.enf_writ DROP COLUMN show_people_who_will_be_evicted_page; - - DROP INDEX IF EXISTS idx_enf_writ_of_restitution_case_id; DROP INDEX IF EXISTS idx_enf_warrant_case_id; DROP INDEX IF EXISTS idx_enf_selected_defendants_case; From b6e1dab7b68251431f4317476b4287d6fa2f20b4 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Fri, 13 Mar 2026 15:48:40 +0000 Subject: [PATCH 32/54] Remove unused showChangeNameAddressPage column and field from WarrantEntity and database migration. --- .../pcs/ccd/entity/enforcetheorder/WarrantEntity.java | 4 ---- .../db/migration/V063__enforcement_data_model_updates.sql | 6 ------ .../hmcts/reform/pcs/testingsupport/EnforcementDMTest.java | 7 +++++-- 3 files changed, 5 insertions(+), 12 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java index fc0edc5159..a7421ec9f3 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantEntity.java @@ -139,10 +139,6 @@ public class WarrantEntity { @Enumerated(EnumType.STRING) private LanguageUsed languageUsed; - @Enumerated(EnumType.STRING) - @JdbcTypeCode(SqlTypes.NAMED_ENUM) - private VerticalYesNo showChangeNameAddressPage; - @CreationTimestamp @Column(updatable = false, nullable = false) private Instant created; diff --git a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql index e0f5ee27cf..03b248c86c 100644 --- a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql +++ b/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql @@ -10,16 +10,10 @@ ALTER TABLE public.enf_writ ADD COLUMN language_used VARCHAR(30); ALTER TABLE public.enf_warrant_of_restitution ADD COLUMN language_used VARCHAR(30); ALTER TABLE public.enf_writ_of_restitution ADD COLUMN language_used VARCHAR(30); -ALTER TABLE public.enf_warrant ADD COLUMN show_change_name_address_page YES_NO; - -ALTER TABLE public.enf_writ ADD COLUMN completed_by STATEMENT_OF_TRUTH_COMPLETED_BY; -ALTER TABLE public.enf_writ ADD COLUMN certification TEXT; ALTER TABLE public.enf_writ ADD COLUMN repayment_choice VARCHAR(20); ALTER TABLE public.enf_writ ADD COLUMN amount_of_repayment_costs NUMERIC(10, 2); ALTER TABLE public.enf_writ ADD COLUMN repayment_summary_markdown TEXT; -ALTER TABLE public.enf_risk_profile ADD COLUMN enforcement_risk_categories VARCHAR(6800); - -- Not needed within Writ ALTER TABLE public.enf_writ DROP COLUMN show_people_who_will_be_evicted_page; diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java index 472db74f78..4a66c3b68f 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java @@ -71,7 +71,9 @@ void shouldCaptureAllMissingEntityFieldsFromTheEnforcementWarrantDetailsDomain() EnforcementRiskDetails.class, WritDetails.class); domainDataModelSupportHelper.addFieldsToIgnore("enforcementOrder", "writDetails", "enforcementLanguageUsed", "anyRiskToBailiff", - "riskCategories"); + "riskCategories", + "showChangeNameAddressPage" // Domain only field + ); List missingFields = domainDataModelSupportHelper.findMissingCCDFields(WarrantEntity.class); @@ -92,7 +94,8 @@ void shouldCaptureAllMissingEntityFieldsFromTheEnforcementWritDetailsDomain() th // showChangeNameAddressPage is not stored with this to flow path but used in the show conditions. domainDataModelSupportHelper.addFieldsToIgnore("enforcementOrder", "warrantDetails", "wasGeneralApplicationToTransferToHighCourtSuccessful", // temp - "showChangeNameAddressPage"); + "showChangeNameAddressPage" // Domain only field + ); List missingFields = domainDataModelSupportHelper.findMissingCCDFields(WritEntity.class); From e0a4fc36b6e87dc06347cb4808754b24263ab203 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Sun, 15 Mar 2026 22:53:13 +0000 Subject: [PATCH 33/54] =?UTF-8?q?Remove=20unused=20statement=E2=80=91of?= =?UTF-8?q?=E2=80=91truth=20fields=20from=20`WritEntity`=20and=20clean=20u?= =?UTF-8?q?p=20related=20imports.=20Update=20tests=20to=20ignore=20`RiskDe?= =?UTF-8?q?tails`=20instead=20of=20`EnforcementRiskDetails`.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reform/pcs/ccd/entity/enforcetheorder/WritEntity.java | 7 ------- ...pdates.sql => V064__enforcement_data_model_updates.sql} | 0 .../enforcetheorder/mapper/WarrantDetailsMapperTest.java | 2 -- .../hmcts/reform/pcs/testingsupport/EnforcementDMTest.java | 4 ++-- 4 files changed, 2 insertions(+), 11 deletions(-) rename src/main/resources/db/migration/{V063__enforcement_data_model_updates.sql => V064__enforcement_data_model_updates.sql} (100%) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java index 42148068f4..3823c2a689 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WritEntity.java @@ -19,7 +19,6 @@ import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.LanguageUsed; import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; import java.math.BigDecimal; import java.time.Instant; @@ -77,12 +76,6 @@ public class WritEntity { @Enumerated(EnumType.STRING) private LanguageUsed languageUsed; - @Enumerated(EnumType.STRING) - @JdbcTypeCode(SqlTypes.NAMED_ENUM) - private StatementOfTruthCompletedBy completedBy; - - private String certification; - @CreationTimestamp @Column(updatable = false, nullable = false) private Instant created; diff --git a/src/main/resources/db/migration/V063__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V064__enforcement_data_model_updates.sql similarity index 100% rename from src/main/resources/db/migration/V063__enforcement_data_model_updates.sql rename to src/main/resources/db/migration/V064__enforcement_data_model_updates.sql diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapperTest.java index 1734ec1fe4..14556e32f8 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapperTest.java @@ -22,8 +22,6 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.NameAndAddressForEviction; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PeopleToEvict; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.PropertyAccessDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.StatementOfTruthDetailsEnforcement; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PropertyAccessDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreement; import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementClaimant; diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java index 2de09290fa..750395b04e 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/testingsupport/EnforcementDMTest.java @@ -68,7 +68,7 @@ void shouldCaptureAllMissingEntityFieldsFromTheEnforcementWarrantDetailsDomain() domainDataModelSupportHelper = new DomainDataModelSupportHelper(WarrantDetails.class); domainDataModelSupportHelper.addClassesToIgnore(EnforcementOrder.class, ClaimEntity.class, EnforcementOrderEntity.class, - EnforcementRiskDetails.class, WritDetails.class); + RiskDetails.class, WritDetails.class); domainDataModelSupportHelper.addFieldsToIgnore("enforcementOrder", "writDetails", "enforcementLanguageUsed", "anyRiskToBailiff", "riskCategories", @@ -90,7 +90,7 @@ void shouldCaptureAllMissingEntityFieldsFromTheEnforcementWritDetailsDomain() th domainDataModelSupportHelper = new DomainDataModelSupportHelper(WritDetails.class); domainDataModelSupportHelper.addClassesToIgnore(EnforcementOrder.class, ClaimEntity.class, EnforcementOrderEntity.class, - EnforcementRiskDetails.class, WarrantDetails.class); + RiskDetails.class, WarrantDetails.class); // showChangeNameAddressPage is not stored with this to flow path but used in the show conditions. domainDataModelSupportHelper.addFieldsToIgnore("enforcementOrder", "warrantDetails", "wasGeneralApplicationToTransferToHighCourtSuccessful", // temp From d93595aeabf70766a311fa115e28a96c83e6419a Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Tue, 17 Mar 2026 09:33:30 +0000 Subject: [PATCH 34/54] Changed numbering to V065 enforcement data model migration --- ...model_updates.sql => V065__enforcement_data_model_updates.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V064__enforcement_data_model_updates.sql => V065__enforcement_data_model_updates.sql} (100%) diff --git a/src/main/resources/db/migration/V064__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V065__enforcement_data_model_updates.sql similarity index 100% rename from src/main/resources/db/migration/V064__enforcement_data_model_updates.sql rename to src/main/resources/db/migration/V065__enforcement_data_model_updates.sql From 5221e3b79822390f99f0d8b653c8d2f883fa3a5c Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Tue, 17 Mar 2026 13:30:07 +0000 Subject: [PATCH 35/54] Changed numbering to V067 enforcement data model migration --- ...model_updates.sql => V067__enforcement_data_model_updates.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V065__enforcement_data_model_updates.sql => V067__enforcement_data_model_updates.sql} (100%) diff --git a/src/main/resources/db/migration/V065__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V067__enforcement_data_model_updates.sql similarity index 100% rename from src/main/resources/db/migration/V065__enforcement_data_model_updates.sql rename to src/main/resources/db/migration/V067__enforcement_data_model_updates.sql From d66ac56c89de9239ab8a40de0700a935b2e8bbe2 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Thu, 19 Mar 2026 10:43:53 +0000 Subject: [PATCH 36/54] Changed numbering to V070 enforcement data model migration --- ...model_updates.sql => V070__enforcement_data_model_updates.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V067__enforcement_data_model_updates.sql => V070__enforcement_data_model_updates.sql} (100%) diff --git a/src/main/resources/db/migration/V067__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V070__enforcement_data_model_updates.sql similarity index 100% rename from src/main/resources/db/migration/V067__enforcement_data_model_updates.sql rename to src/main/resources/db/migration/V070__enforcement_data_model_updates.sql From e02b81800fce30aed32bb83b25b7760c21af8460 Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Fri, 20 Mar 2026 10:11:59 +0000 Subject: [PATCH 37/54] HDPI-5188 - Initial changes for Warrant of Restitution - Update data model --- .../RawWarrantRestDetails.java | 4 + .../WarrantOfRestitutionDetails.java | 13 +- .../reform/pcs/ccd/entity/DocumentEntity.java | 6 + .../entity/claim/StatementOfTruthEntity.java | 6 + .../EnforcementOrderEntity.java | 28 +- .../WarrantOfRestitutionEntity.java | 44 ++- .../ccd/service/StatementOfTruthService.java | 8 +- .../enforcetheorder/RiskProfileService.java | 24 ++ .../mapper/StatementOfTruthMapper.java | 25 ++ .../mapper/WarrantDetailsMapper.java | 8 +- .../mapper/WarrantOfRestitutionMapper.java | 60 ++++ .../WarrantOfRestitutionStrategy.java | 17 +- .../strategy/WarrantStrategy.java | 15 +- .../pcs/ccd/util/EnforcementTypeUtil.java | 6 + ...rcement_warrant_of_restitution_details.sql | 26 ++ .../enforcetheorder/EnforcementDataUtil.java | 20 ++ .../RiskProfileServiceTest.java | 245 ++++++++++++++++ .../mapper/StatementOfTruthMapperTest.java | 91 ++++++ .../WarrantOfRestitutionMapperTest.java | 202 +++++++++++++- .../WarrantOfRestitutionStrategyTest.java | 39 ++- .../strategy/WarrantStrategyTest.java | 262 +----------------- 21 files changed, 858 insertions(+), 291 deletions(-) create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/RiskProfileService.java create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapper.java create mode 100644 src/main/resources/db/migration/V063__enforcement_warrant_of_restitution_details.sql create mode 100644 src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/RiskProfileServiceTest.java create mode 100644 src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapperTest.java diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/RawWarrantRestDetails.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/RawWarrantRestDetails.java index 5bc71d91ce..d4aec81820 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/RawWarrantRestDetails.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/RawWarrantRestDetails.java @@ -8,6 +8,7 @@ import uk.gov.hmcts.ccd.sdk.api.CCD; import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableAdultsChildren; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthDetails; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicMultiSelectStringList; import static uk.gov.hmcts.ccd.sdk.type.FieldType.DynamicMultiSelectList; @@ -31,4 +32,7 @@ public class RawWarrantRestDetails { typeOverride = DynamicMultiSelectList ) private DynamicMultiSelectStringList selectedDefendants; + + @CCD + private StatementOfTruthDetails statementOfTruthWarrantRest; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java index cfe0e9f5b7..5185967081 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java @@ -13,11 +13,13 @@ import uk.gov.hmcts.ccd.sdk.api.CCD; import uk.gov.hmcts.ccd.sdk.type.FieldType; import uk.gov.hmcts.ccd.sdk.type.ListValue; +import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.PropertyAccessDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RiskCategory; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RiskDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.AdditionalInformation; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PeopleToEvict; import java.util.List; import java.util.Set; @@ -30,6 +32,16 @@ @JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class) public class WarrantOfRestitutionDetails { + @CCD(searchable = false) + private YesOrNo showPeopleWhoWillBeEvictedPage; + + @CCD(searchable = false) + private YesOrNo showPeopleYouWantToEvictPage; + + @JsonUnwrapped + @CCD + private PeopleToEvict peopleToEvict; + public static final String HOW_DEFENDANTS_RETURNED_LABEL = "How did the defendants return to the property?"; @@ -75,5 +87,4 @@ public class WarrantOfRestitutionDetails { @JsonUnwrapped @CCD private AdditionalInformation additionalInformation; - } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DocumentEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DocumentEntity.java index 558fb82a10..fd8432f267 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DocumentEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DocumentEntity.java @@ -18,6 +18,7 @@ import lombok.NoArgsConstructor; import lombok.Setter; import uk.gov.hmcts.reform.pcs.ccd.domain.DocumentType; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import java.util.ArrayList; import java.util.List; @@ -58,4 +59,9 @@ public class DocumentEntity { @Builder.Default @JsonManagedReference private List claimDocuments = new ArrayList<>(); + + @ManyToOne(fetch = LAZY) + @JoinColumn(name = "enf_case_id") + @JsonBackReference + private EnforcementOrderEntity enforcementOrder; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/claim/StatementOfTruthEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/claim/StatementOfTruthEntity.java index 7d0d1ebca6..d551d4ddd1 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/claim/StatementOfTruthEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/claim/StatementOfTruthEntity.java @@ -1,6 +1,7 @@ package uk.gov.hmcts.reform.pcs.ccd.entity.claim; import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonManagedReference; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; @@ -19,6 +20,7 @@ import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; import uk.gov.hmcts.reform.pcs.ccd.entity.ClaimEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import java.util.UUID; @@ -39,6 +41,10 @@ public class StatementOfTruthEntity { @JsonBackReference private ClaimEntity claim; + @OneToOne(mappedBy = "statementOfTruth") + @JsonManagedReference + private EnforcementOrderEntity enforcementOrder; + @Enumerated(EnumType.STRING) private StatementOfTruthCompletedBy completedBy; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/EnforcementOrderEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/EnforcementOrderEntity.java index 3a90601007..40cf76f73f 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/EnforcementOrderEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/EnforcementOrderEntity.java @@ -1,6 +1,7 @@ package uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder; import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonManagedReference; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -8,23 +9,35 @@ import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; import jakarta.persistence.OneToOne; import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.entity.ClaimEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.DocumentEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.claim.StatementOfTruthEntity; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; +import static jakarta.persistence.CascadeType.ALL; import static jakarta.persistence.FetchType.LAZY; @Entity @Table(name = "enf_case") @Getter @Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor public class EnforcementOrderEntity { @Id @@ -40,7 +53,20 @@ public class EnforcementOrderEntity { @Column(name = "enforcement_order") private EnforcementOrder enforcementOrder; - @OneToOne(mappedBy = "enforcementOrder", fetch = LAZY) + @OneToOne(mappedBy = "enforcementOrder") private WarrantEntity warrantDetails; + @OneToOne(mappedBy = "enforcementOrder") + private WarrantOfRestitutionEntity warrantOfRestitutionDetails; + + @OneToOne(fetch = LAZY) + @JoinColumn(name = "sot_id", nullable = false) + @JsonBackReference + private StatementOfTruthEntity statementOfTruth; + + @OneToMany(mappedBy = "enforcementOrder", fetch = LAZY, cascade = ALL, orphanRemoval = true) + @Builder.Default + @JsonManagedReference + private List documents = new ArrayList<>(); + } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java index e5d6978421..9ea521e692 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java @@ -2,21 +2,32 @@ import com.fasterxml.jackson.annotation.JsonBackReference; import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.OneToOne; import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; import lombok.Setter; +import org.hibernate.annotations.JdbcTypeCode; +import org.hibernate.type.SqlTypes; +import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import java.util.UUID; @Entity -@Table(name = "enf_warrant_of_restitution") +@Builder @Getter @Setter +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "enf_warrant_of_restitution") public class WarrantOfRestitutionEntity { @Id @@ -27,4 +38,35 @@ public class WarrantOfRestitutionEntity { @JoinColumn(name = "enf_case_id", nullable = false) @JsonBackReference private EnforcementOrderEntity enforcementOrder; + + // UI Control Flags + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo showPeopleWhoWillBeEvictedPage; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo showPeopleYouWantToEvictPage; + + // PeopleToEvict + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo evictEveryone; + + // Defendants Returned + private String howDefendantsReturned; + + // Additional Information + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo additionalInformationSelect; + + private String additionalInformationDetails; + + // PropertyAccessDetails + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo isDifficultToAccessProperty; + + private String clarificationOnAccessDifficultyText; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/StatementOfTruthService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/StatementOfTruthService.java index 27cfe34cec..2df6999d17 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/StatementOfTruthService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/StatementOfTruthService.java @@ -17,11 +17,12 @@ public StatementOfTruthEntity createStatementOfTruthEntity(PCSCase pcsCase) { || pcsCase.getStatementOfTruth().getCompletedBy() == null) { return null; } + return createStatementOfTruth(pcsCase.getStatementOfTruth()); + } - StatementOfTruthDetails statementOfTruth = pcsCase.getStatementOfTruth(); - StatementOfTruthCompletedBy completedBy = statementOfTruth.getCompletedBy(); + public StatementOfTruthEntity createStatementOfTruth(StatementOfTruthDetails statementOfTruth) { StatementOfTruthEntity statementOfTruthEntity = new StatementOfTruthEntity(); - + StatementOfTruthCompletedBy completedBy = statementOfTruth.getCompletedBy(); statementOfTruthEntity.setCompletedBy(completedBy); if (completedBy == StatementOfTruthCompletedBy.CLAIMANT) { @@ -41,7 +42,6 @@ public StatementOfTruthEntity createStatementOfTruthEntity(PCSCase pcsCase) { statementOfTruthEntity.setFirmName(statementOfTruth.getFirmNameLegalRep()); statementOfTruthEntity.setPositionHeld(statementOfTruth.getPositionLegalRep()); } - return statementOfTruthEntity; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/RiskProfileService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/RiskProfileService.java new file mode 100644 index 0000000000..e849a0d052 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/RiskProfileService.java @@ -0,0 +1,24 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.RiskProfileEntity; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.RiskProfileRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.RiskDetailsMapper; + +@Service +@Slf4j +@AllArgsConstructor +public class RiskProfileService { + + private final RiskDetailsMapper riskProfileMapper; + private final RiskProfileRepository riskProfileRepository; + + public void processRisk(EnforcementOrder enforcementOrder, EnforcementOrderEntity enforcementOrderEntity) { + RiskProfileEntity riskProfile = riskProfileMapper.toEntity(enforcementOrderEntity, enforcementOrder); + riskProfileRepository.save(riskProfile); + } +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapper.java new file mode 100644 index 0000000000..1a9c2585d6 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapper.java @@ -0,0 +1,25 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper; + +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.entity.claim.StatementOfTruthEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.service.StatementOfTruthService; + +@Component +@AllArgsConstructor +public class StatementOfTruthMapper { + + private final StatementOfTruthService statementOfTruthService; + + public void mapStatementOfTruthForWarrantRest(EnforcementOrder enforcementOrder, + EnforcementOrderEntity enforcementOrderEntity) { + if (enforcementOrder.getRawWarrantRestDetails() != null + && enforcementOrder.getRawWarrantRestDetails().getStatementOfTruthWarrantRest() != null) { + StatementOfTruthEntity statementOfTruthEntity = statementOfTruthService.createStatementOfTruth( + enforcementOrder.getRawWarrantRestDetails().getStatementOfTruthWarrantRest()); + enforcementOrderEntity.setStatementOfTruth(statementOfTruthEntity); + } + } +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java index 6eca101e21..ef2fe076bf 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java @@ -1,12 +1,10 @@ package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper; import org.springframework.stereotype.Component; -import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.RepaymentPreference; import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreement; import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementClaimant; import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementLegalRep; -import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LandRegistryFees; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LegalCosts; @@ -19,6 +17,8 @@ import java.util.List; import java.util.stream.Collectors; +import static uk.gov.hmcts.reform.pcs.ccd.util.EnforcementTypeUtil.convertYesOrNoToVerticalYesNo; + @Component public class WarrantDetailsMapper { @@ -178,8 +178,4 @@ private void moneyOwed(WarrantDetails warrantDetails, WarrantEntity warrantEntit warrantEntity.setAmountOwed(warrantDetails.getMoneyOwedByDefendants().getAmountOwed()); } } - - private VerticalYesNo convertYesOrNoToVerticalYesNo(YesOrNo yesOrNo) { - return yesOrNo == YesOrNo.YES ? VerticalYesNo.YES : VerticalYesNo.NO; - } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java index 97ddbdf2a7..97d4169bf2 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java @@ -11,10 +11,14 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RiskDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.PropertyAccessDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RiskCategory; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantOfRestitutionEntity; import java.util.HashSet; import java.util.Set; +import static uk.gov.hmcts.reform.pcs.ccd.util.EnforcementTypeUtil.convertYesOrNoToVerticalYesNo; + @Component public class WarrantOfRestitutionMapper { @@ -75,4 +79,60 @@ public void prePopulateFieldsFromWarrantDetails(EnforcementOrder warrantEnforcem currentEnfOrder.setRawWarrantRestDetails(rawWarrantRestDetails); } + + public WarrantOfRestitutionEntity toEntity(EnforcementOrder enforcementOrder, + EnforcementOrderEntity enforcementOrderEntity) { + WarrantOfRestitutionEntity warrantOfRestitutionEntity = WarrantOfRestitutionEntity.builder() + .enforcementOrder(enforcementOrderEntity).build(); + if (enforcementOrder.getWarrantOfRestitutionDetails() != null) { + WarrantOfRestitutionDetails warrantOfRestitutionDetails = enforcementOrder.getWarrantOfRestitutionDetails(); + controlFlags(warrantOfRestitutionEntity, warrantOfRestitutionDetails); + peopleToEvict(warrantOfRestitutionEntity, warrantOfRestitutionDetails); + defendantReturned(warrantOfRestitutionEntity, warrantOfRestitutionDetails); + additionalInformation(warrantOfRestitutionEntity, warrantOfRestitutionDetails); + propertyAccessDetails(warrantOfRestitutionEntity, warrantOfRestitutionDetails); + } + return warrantOfRestitutionEntity; + } + + private void controlFlags(WarrantOfRestitutionEntity warrantOfRestitutionEntity, + WarrantOfRestitutionDetails warrantOfRestitutionDetails) { + warrantOfRestitutionEntity.setShowPeopleWhoWillBeEvictedPage( + convertYesOrNoToVerticalYesNo(warrantOfRestitutionDetails.getShowPeopleWhoWillBeEvictedPage())); + warrantOfRestitutionEntity.setShowPeopleYouWantToEvictPage( + convertYesOrNoToVerticalYesNo(warrantOfRestitutionDetails.getShowPeopleYouWantToEvictPage())); + } + + private void peopleToEvict(WarrantOfRestitutionEntity warrantOfRestitutionEntity, + WarrantOfRestitutionDetails warrantOfRestitutionDetails) { + if (warrantOfRestitutionDetails.getPeopleToEvict() != null) { + warrantOfRestitutionEntity.setEvictEveryone(warrantOfRestitutionDetails.getPeopleToEvict() + .getEvictEveryone()); + } + } + + private void defendantReturned(WarrantOfRestitutionEntity warrantOfRestitutionEntity, + WarrantOfRestitutionDetails warrantOfRestitutionDetails) { + warrantOfRestitutionEntity.setHowDefendantsReturned(warrantOfRestitutionDetails.getHowDefendantsReturned()); + } + + private void additionalInformation(WarrantOfRestitutionEntity warrantOfRestitutionEntity, + WarrantOfRestitutionDetails warrantOfRestitutionDetails) { + if (warrantOfRestitutionDetails.getAdditionalInformation() != null) { + warrantOfRestitutionEntity.setAdditionalInformationSelect( + warrantOfRestitutionDetails.getAdditionalInformation().getAdditionalInformationSelect()); + warrantOfRestitutionEntity.setAdditionalInformationDetails( + warrantOfRestitutionDetails.getAdditionalInformation().getAdditionalInformationDetails()); + } + } + + private void propertyAccessDetails(WarrantOfRestitutionEntity warrantOfRestitutionEntity, + WarrantOfRestitutionDetails warrantOfRestitutionDetails) { + if (warrantOfRestitutionDetails.getPropertyAccessDetails() != null) { + warrantOfRestitutionEntity.setIsDifficultToAccessProperty( + warrantOfRestitutionDetails.getPropertyAccessDetails().getIsDifficultToAccessProperty()); + warrantOfRestitutionEntity.setClarificationOnAccessDifficultyText( + warrantOfRestitutionDetails.getPropertyAccessDetails().getClarificationOnAccessDifficultyText()); + } + } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java index cd90278639..edefe309f2 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java @@ -6,17 +6,30 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantOfRestitutionEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantOfRestitutionRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.StatementOfTruthMapper; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantOfRestitutionMapper; @Component @AllArgsConstructor public class WarrantOfRestitutionStrategy implements EnforcementTypeStrategy { + private final StatementOfTruthMapper statementOfTruthMapper; + private final WarrantOfRestitutionMapper warrantOfRestitutionMapper; private final WarrantOfRestitutionRepository warrantOfRestitutionRepository; @Override public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { - WarrantOfRestitutionEntity warrantOfRestitutionEntity = new WarrantOfRestitutionEntity(); + processWarrantOfRestitution(enforcementOrder, enforcementOrderEntity); + } + + private void processWarrantOfRestitution(EnforcementOrder enforcementOrder, + EnforcementOrderEntity enforcementOrderEntity) { + WarrantOfRestitutionEntity warrantOfRestitutionEntity = warrantOfRestitutionMapper.toEntity(enforcementOrder, + enforcementOrderEntity); + statementOfTruthMapper.mapStatementOfTruthForWarrantRest(enforcementOrder, enforcementOrderEntity); warrantOfRestitutionEntity.setEnforcementOrder(enforcementOrderEntity); - warrantOfRestitutionRepository.save(warrantOfRestitutionEntity); + + WarrantOfRestitutionEntity saved = warrantOfRestitutionRepository.save(warrantOfRestitutionEntity); + enforcementOrderEntity.setWarrantOfRestitutionDetails(saved); } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java index 8027f6cbd0..9930f71126 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategy.java @@ -6,12 +6,10 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.RiskProfileEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.SelectedDefendantEntity; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.RiskProfileRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.SelectedDefendantRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.RiskProfileService; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantDetailsMapper; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.RiskDetailsMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.SelectedDefendantsMapper; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantRepository; @@ -21,17 +19,17 @@ @AllArgsConstructor public class WarrantStrategy implements EnforcementTypeStrategy { - private final RiskProfileRepository riskProfileRepository; + private final RiskProfileService riskProfileService; private final SelectedDefendantsMapper selectedDefendantsMapper; private final SelectedDefendantRepository selectedDefendantRepository; private final WarrantDetailsMapper warrantDetailsMapper; - private final RiskDetailsMapper riskProfileMapper; + private final WarrantRepository warrantRepository; @Override public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { processWarrant(enforcementOrder, enforcementOrderEntity); - processRisk(enforcementOrder, enforcementOrderEntity); + riskProfileService.processRisk(enforcementOrder, enforcementOrderEntity); processSelectedDefendants(enforcementOrderEntity); } @@ -42,11 +40,6 @@ private void processWarrant(EnforcementOrder enforcementOrder, EnforcementOrderE enforcementOrderEntity.setWarrantDetails(saved); } - private void processRisk(EnforcementOrder enforcementOrder, EnforcementOrderEntity enforcementOrderEntity) { - RiskProfileEntity riskProfile = riskProfileMapper.toEntity(enforcementOrderEntity, enforcementOrder); - riskProfileRepository.save(riskProfile); - } - private void processSelectedDefendants(EnforcementOrderEntity enforcementOrderEntity) { List selectedDefendantsEntities = selectedDefendantsMapper.mapToEntities(enforcementOrderEntity); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/util/EnforcementTypeUtil.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/util/EnforcementTypeUtil.java index 5529336d04..edfd471e54 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/util/EnforcementTypeUtil.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/util/EnforcementTypeUtil.java @@ -2,6 +2,8 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; +import uk.gov.hmcts.ccd.sdk.type.YesOrNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicStringList; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicStringListElement; @@ -30,4 +32,8 @@ public static DynamicStringList createDynamicStringList(List riskProfileCaptor; + + @BeforeEach + void setUp() { + enforcementOrderEntity = mock(EnforcementOrderEntity.class); + + warrantDetails = WarrantDetails.builder().anyRiskToBailiff(YesNoNotSure.YES).riskDetails(riskDetails).build(); + + VulnerableAdultsChildren vulnerableAdultsChildren = VulnerableAdultsChildren.builder() + .vulnerableCategory(VULNERABLE_CHILDREN).vulnerableReasonText("Young children present").build(); + + RawWarrantDetails rawWarrantDetails = RawWarrantDetails.builder() + .vulnerablePeoplePresent(YesNoNotSure.YES).vulnerableAdultsChildren(vulnerableAdultsChildren).build(); + + enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails) + .rawWarrantDetails(rawWarrantDetails).build(); + + riskDetails = RiskDetails.builder() + .violentDetails("Violent behavior reported") + .firearmsDetails("Firearms present") + .criminalDetails("Criminal history") + .verbalThreatsDetails("Verbal threats made") + .protestGroupDetails("Member of protest group") + .policeSocialServicesDetails("Police involvement") + .animalsDetails("Aggressive dogs on premises") + .build(); + } + + @ParameterizedTest + @MethodSource("provideNullWarrantDetailsScenarios") + void shouldHandleNullValuesInWarrantDetails( + RawWarrantDetails rawWarrantDetails, + YesNoNotSure expectedVulnerablePeoplePresent, + boolean expectNullVulnerableFields + ) { + // Given + enforcementOrder.setRawWarrantDetails(rawWarrantDetails); + RiskProfileEntity riskProfileEntity = new RiskProfileEntity(); + if (expectedVulnerablePeoplePresent != null) { + riskProfileEntity.setVulnerablePeoplePresent(expectedVulnerablePeoplePresent); + } + when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + + // When + underTest.processRisk(enforcementOrder, enforcementOrderEntity); + + // Then + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getVulnerablePeoplePresent()).isEqualTo(expectedVulnerablePeoplePresent); + if (expectNullVulnerableFields) { + assertThat(capturedEntity.getVulnerableCategory()).isNull(); + assertThat(capturedEntity.getVulnerableReasonText()).isNull(); + } + } + + private static Stream provideNullWarrantDetailsScenarios() { + RawWarrantDetails withNullVulnerableChildren = RawWarrantDetails.builder() + .vulnerablePeoplePresent(YesNoNotSure.YES) + .vulnerableAdultsChildren(null) + .build(); + + return Stream.of( + Arguments.of(null, null, true), + Arguments.of(withNullVulnerableChildren, YesNoNotSure.YES, true) + ); + } + + @Test + void shouldProcessRiskDetailsSuccessfully() { + // Given + RiskProfileEntity savedEntity = createExpectedRiskProfileEntity(enforcementOrderEntity); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(savedEntity); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(savedEntity); + + // When + underTest.processRisk(enforcementOrder, enforcementOrderEntity); + + // Then + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + assertThat(capturedEntity.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.YES); + assertThat(capturedEntity.getViolentDetails()).isEqualTo("Violent behavior reported"); + assertThat(capturedEntity.getFirearmsDetails()).isEqualTo("Firearms present"); + assertThat(capturedEntity.getCriminalDetails()).isEqualTo("Criminal history"); + assertThat(capturedEntity.getVerbalThreatsDetails()).isEqualTo("Verbal threats made"); + assertThat(capturedEntity.getProtestGroupDetails()).isEqualTo("Member of protest group"); + assertThat(capturedEntity.getPoliceSocialServicesDetails()).isEqualTo("Police involvement"); + assertThat(capturedEntity.getAnimalsDetails()).isEqualTo("Aggressive dogs on premises"); + assertThat(capturedEntity.getVulnerablePeoplePresent()).isEqualTo(YesNoNotSure.YES); + assertThat(capturedEntity.getVulnerableCategory()).isEqualTo(VULNERABLE_CHILDREN); + assertThat(capturedEntity.getVulnerableReasonText()).isEqualTo("Young children present"); + } + + @Test + void shouldHandleWarrantDetailsWithNoRiskToBailiff() { + // Given + warrantDetails.setAnyRiskToBailiff(YesNoNotSure.NO); + RiskProfileEntity riskProfileEntity = new RiskProfileEntity(); + riskProfileEntity.setAnyRiskToBailiff(YesNoNotSure.NO); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + + // When + underTest.processRisk(enforcementOrder, enforcementOrderEntity); + + // Then + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.NO); + } + + @Test + void shouldHandleMinimalEnforcementOrder() { + // Given + RiskProfileEntity riskProfileEntity = createExpectedRiskProfileEntity(enforcementOrderEntity); + riskProfileEntity.setAnyRiskToBailiff(null); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(riskProfileEntity); + EnforcementOrder minimalOrder = EnforcementOrder.builder().build(); + + // When + underTest.processRisk(minimalOrder, enforcementOrderEntity); + + // Then + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + assertThat(capturedEntity.getAnyRiskToBailiff()).isNull(); + } + + @Test + void shouldMapAllRiskDetailsFieldsCorrectly() { + // Given + RiskProfileEntity riskProfileEntity = createExpectedRiskProfileEntity(enforcementOrderEntity); + when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); + when(riskProfileRepository.save(riskProfileEntity)).thenReturn(riskProfileEntity); + + // When + underTest.processRisk(enforcementOrder, enforcementOrderEntity); + + // Then + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); + + assertThat(capturedEntity.getViolentDetails()).isEqualTo(riskDetails.getViolentDetails()); + assertThat(capturedEntity.getFirearmsDetails()).isEqualTo(riskDetails.getFirearmsDetails()); + assertThat(capturedEntity.getCriminalDetails()).isEqualTo(riskDetails.getCriminalDetails()); + assertThat(capturedEntity.getVerbalThreatsDetails()).isEqualTo(riskDetails.getVerbalThreatsDetails()); + assertThat(capturedEntity.getProtestGroupDetails()).isEqualTo(riskDetails.getProtestGroupDetails()); + assertThat(capturedEntity.getPoliceSocialServicesDetails()) + .isEqualTo(riskDetails.getPoliceSocialServicesDetails()); + assertThat(capturedEntity.getAnimalsDetails()).isEqualTo(riskDetails.getAnimalsDetails()); + } + + @Test + void shouldSaveRiskProfileBeforeSelectedDefendants() { + // Given + when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); + when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); + + // When + underTest.processRisk(enforcementOrder, enforcementOrderEntity); + + // Then + verify(riskProfileRepository).save(any(RiskProfileEntity.class)); + } + + @Test + void shouldPersistVulnerabilityDetailsInRiskProfile() { + // Given: order with raw warrant details (vulnerability) + final EnforcementOrder enfOrder = EnforcementDataUtil.buildEnforcementOrderWithVulnerability(); + final RiskProfileEntity stubbedRiskProfile = new RiskProfileEntity(); + stubbedRiskProfile.setVulnerablePeoplePresent(YesNoNotSure.YES); + stubbedRiskProfile.setVulnerableCategory(VulnerableCategory.VULNERABLE_ADULTS); + stubbedRiskProfile.setVulnerableReasonText("Vulnerability reason"); + when(riskProfileMapper.toEntity(any(EnforcementOrderEntity.class), eq(enfOrder))) + .thenReturn(stubbedRiskProfile); + + // When + underTest.processRisk(enfOrder, enforcementOrderEntity); + + // Then: service calls mapper and saves returned risk profile + verify(riskProfileMapper).toEntity(any(), any()); + verify(riskProfileRepository).save(riskProfileCaptor.capture()); + } +} \ No newline at end of file diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapperTest.java new file mode 100644 index 0000000000..5d4fb65732 --- /dev/null +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapperTest.java @@ -0,0 +1,91 @@ +package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper; + +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 uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.RawWarrantRestDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthDetails; +import uk.gov.hmcts.reform.pcs.ccd.entity.claim.StatementOfTruthEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.service.StatementOfTruthService; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class StatementOfTruthMapperTest { + + @Mock + private StatementOfTruthService statementOfTruthService; + @InjectMocks + private StatementOfTruthMapper underTest; + + private EnforcementOrderEntity enforcementOrderEntity; + private StatementOfTruthEntity statementOfTruthEntity; + + @BeforeEach + void setUp() { + enforcementOrderEntity = new EnforcementOrderEntity(); + statementOfTruthEntity = new StatementOfTruthEntity(); + statementOfTruthEntity.setCompletedBy(StatementOfTruthCompletedBy.CLAIMANT); + statementOfTruthEntity.setFullName("John Doe"); + statementOfTruthEntity.setPositionHeld("Owner"); + } + + @Test + void shouldMapStatementOfTruthForWarrantRest() { + // Given + StatementOfTruthDetails statementOfTruth = new StatementOfTruthDetails(); + statementOfTruth.setCompletedBy(StatementOfTruthCompletedBy.CLAIMANT); + statementOfTruth.setFullNameClaimant("John Doe"); + statementOfTruth.setPositionClaimant("Owner"); + + RawWarrantRestDetails rawWarrantRestDetails = RawWarrantRestDetails.builder() + .statementOfTruthWarrantRest(statementOfTruth).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .rawWarrantRestDetails(rawWarrantRestDetails).build(); + when(statementOfTruthService.createStatementOfTruth(statementOfTruth)) + .thenReturn(statementOfTruthEntity); + + // When + underTest.mapStatementOfTruthForWarrantRest(enforcementOrder, enforcementOrderEntity); + StatementOfTruthEntity result = enforcementOrderEntity.getStatementOfTruth(); + + // Then + assertThat(result.getCompletedBy()).isEqualTo(StatementOfTruthCompletedBy.CLAIMANT); + assertThat(result.getFullName()).isEqualTo("John Doe"); + assertThat(result.getPositionHeld()).isEqualTo("Owner"); + } + + @Test + void shouldHandleNullStatementOfTruthForWarrantRest() { + RawWarrantRestDetails rawWarrantRestDetails = RawWarrantRestDetails.builder().build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .rawWarrantRestDetails(rawWarrantRestDetails).build(); + + // When + underTest.mapStatementOfTruthForWarrantRest(enforcementOrder, enforcementOrderEntity); + + // Then + verify(statementOfTruthService, never()).createStatementOfTruth(any()); + } + + @Test + void shouldHandleNullRawWarrantRest() { + EnforcementOrder enforcementOrder = EnforcementOrder.builder().build(); + + // When + underTest.mapStatementOfTruthForWarrantRest(enforcementOrder, enforcementOrderEntity); + + // Then + verify(statementOfTruthService, never()).createStatementOfTruth(any()); + } +} \ No newline at end of file diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java index b1f6757e8c..8e80d8c5ab 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java @@ -1,19 +1,34 @@ package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper; +import org.jetbrains.annotations.NotNull; +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.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LegalCosts; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RiskDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.PropertyAccessDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RiskCategory; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.StatementOfTruthDetailsEnforcement; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableAdultsChildren; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableCategory; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.AdditionalInformation; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PeopleToEvict; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.WarrantOfRestitutionDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreement; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementLegalRep; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantOfRestitutionEntity; +import java.math.BigDecimal; +import java.util.List; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; @@ -21,7 +36,13 @@ @ExtendWith(MockitoExtension.class) class WarrantOfRestitutionMapperTest { - private final WarrantOfRestitutionMapper mapper = new WarrantOfRestitutionMapper(); + private final WarrantOfRestitutionMapper underTest = new WarrantOfRestitutionMapper(); + private EnforcementOrderEntity enforcementOrderEntity; + + @BeforeEach + void setUp() { + enforcementOrderEntity = new EnforcementOrderEntity(); + } @Test void shouldMapWarrantFieldsToWarrantOfRest() { @@ -33,6 +54,10 @@ void shouldMapWarrantFieldsToWarrantOfRest() { .isDifficultToAccessProperty(VerticalYesNo.YES) .clarificationOnAccessDifficultyText("original") .build()) + .additionalInformation(AdditionalInformation.builder() + .additionalInformationDetails("additional details") + .additionalInformationSelect(VerticalYesNo.YES) + .build()) .riskCategories(Set.of(RiskCategory.VIOLENT_OR_AGGRESSIVE)) .riskDetails(RiskDetails.builder() .violentDetails("violent") @@ -54,7 +79,7 @@ void shouldMapWarrantFieldsToWarrantOfRest() { EnforcementOrder target = EnforcementOrder.builder().build(); // When - mapper.prePopulateFieldsFromWarrantDetails(source, target); + underTest.prePopulateFieldsFromWarrantDetails(source, target); // Then - values copied assertThat(target.getWarrantOfRestitutionDetails()).isNotNull(); @@ -97,7 +122,7 @@ void shouldHandleNullFields() { EnforcementOrder target = EnforcementOrder.builder().build(); // When - mapper.prePopulateFieldsFromWarrantDetails(source, target); + underTest.prePopulateFieldsFromWarrantDetails(source, target); // Then assertThat(target.getWarrantOfRestitutionDetails().getRiskCategories()).isNull(); @@ -106,4 +131,175 @@ void shouldHandleNullFields() { assertThat(target.getRawWarrantRestDetails().getVulnerableAdultsChildren()).isNull(); assertThat(target.getRawWarrantRestDetails().getVulnerablePeoplePresent()).isNull(); } + + @Test + void shouldMapToEntityWithNullWarrantOfRestitutionDetails() { + // Given + EnforcementOrder enforcementOrder = EnforcementOrder.builder().build(); + + // When + WarrantOfRestitutionEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result).isNotNull(); + assertThat(result.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + } + + @Test + void shouldMapControlFlags() { + // Given + WarrantOfRestitutionDetails warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder() + .showPeopleWhoWillBeEvictedPage(YesOrNo.NO) + .showPeopleYouWantToEvictPage(YesOrNo.YES) + .build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .warrantOfRestitutionDetails(warrantOfRestitutionDetails).build(); + + // When + WarrantOfRestitutionEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getShowPeopleWhoWillBeEvictedPage()).isEqualTo(VerticalYesNo.NO); + assertThat(result.getShowPeopleYouWantToEvictPage()).isEqualTo(VerticalYesNo.YES); + } + + @Test + void shouldMapControlFlagsWithNullValues() { + // Given + WarrantOfRestitutionDetails warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder() + .showPeopleWhoWillBeEvictedPage(null) + .showPeopleYouWantToEvictPage(null) + .build(); + + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .warrantOfRestitutionDetails(warrantOfRestitutionDetails).build(); + + // When + WarrantOfRestitutionEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getShowPeopleWhoWillBeEvictedPage()).isEqualTo(VerticalYesNo.NO); + assertThat(result.getShowPeopleYouWantToEvictPage()).isEqualTo(VerticalYesNo.NO); + } + + @Test + void shouldMapAdditionalInformation() { + // Given + AdditionalInformation additionalInfo = AdditionalInformation.builder() + .additionalInformationSelect(VerticalYesNo.YES) + .additionalInformationDetails("Additional details") + .build(); + + WarrantOfRestitutionDetails warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder() + .additionalInformation(additionalInfo).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .warrantOfRestitutionDetails(warrantOfRestitutionDetails).build(); + + // When + WarrantOfRestitutionEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getAdditionalInformationSelect()).isEqualTo(VerticalYesNo.YES); + assertThat(result.getAdditionalInformationDetails()).isEqualTo("Additional details"); + } + + @Test + void shouldHandleNullAdditionalInformation() { + // Given + WarrantOfRestitutionDetails warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder() + .additionalInformation(null) + .build(); + + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .warrantOfRestitutionDetails(warrantOfRestitutionDetails) + .build(); + + // When + WarrantOfRestitutionEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getAdditionalInformationSelect()).isNull(); + assertThat(result.getAdditionalInformationDetails()).isNull(); + } + + @Test + void shouldMapPeopleToEvict() { + // Given + PeopleToEvict peopleToEvict = PeopleToEvict.builder().evictEveryone(VerticalYesNo.YES).build(); + WarrantOfRestitutionDetails warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder() + .peopleToEvict(peopleToEvict).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .warrantOfRestitutionDetails(warrantOfRestitutionDetails).build(); + + // When + WarrantOfRestitutionEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getEvictEveryone()).isEqualTo(VerticalYesNo.YES); + } + + @Test + void shouldMapPropertyAccessDetails() { + // Given + PropertyAccessDetails accessDetails = PropertyAccessDetails.builder() + .isDifficultToAccessProperty(VerticalYesNo.YES) + .clarificationOnAccessDifficultyText("Hard to access") + .build(); + + WarrantOfRestitutionDetails warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder() + .propertyAccessDetails(accessDetails).build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .warrantOfRestitutionDetails(warrantOfRestitutionDetails).build(); + + // When + WarrantOfRestitutionEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getIsDifficultToAccessProperty()).isEqualTo(VerticalYesNo.YES); + assertThat(result.getClarificationOnAccessDifficultyText()).isEqualTo("Hard to access"); + } + + @Test + void shouldMapCompleteWarrantDetails() { + // Given + EnforcementOrder enforcementOrder = createCompleteEnforcementOrder(); + + // When + WarrantOfRestitutionEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result).isNotNull(); + assertThat(result.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); + } + + private EnforcementOrder createCompleteEnforcementOrder() { + StatementOfTruthDetailsEnforcement statementOfTruth = getStatementOfTruthDetailsEnforcement(); + + WarrantDetails warrantDetails = WarrantDetails.builder() + .showChangeNameAddressPage(YesOrNo.YES) + .isSuspendedOrder(VerticalYesNo.NO) + .additionalInformation(AdditionalInformation.builder() + .additionalInformationSelect(VerticalYesNo.YES) + .additionalInformationDetails("Details") + .build()) + .legalCosts(LegalCosts.builder() + .areLegalCostsToBeClaimed(VerticalYesNo.YES) + .amountOfLegalCosts(new BigDecimal("1000.00")) + .build()) + .statementOfTruth(statementOfTruth) + .build(); + + return EnforcementOrder.builder().warrantDetails(warrantDetails).build(); + } + + private static @NotNull StatementOfTruthDetailsEnforcement getStatementOfTruthDetailsEnforcement() { + StatementOfTruthDetailsEnforcement statementOfTruth = new StatementOfTruthDetailsEnforcement(); + statementOfTruth.setCompletedBy(StatementOfTruthCompletedBy.LEGAL_REPRESENTATIVE); + statementOfTruth.setFullNameLegalRep("Legal Rep Name"); + statementOfTruth.setFirmNameLegalRep("Law Firm"); + statementOfTruth.setPositionLegalRep("Senior Partner"); + statementOfTruth.setAgreementLegalRep(List.of(StatementOfTruthAgreementLegalRep.AGREED)); + statementOfTruth.setCertification(List.of(StatementOfTruthAgreement.CERTIFY)); + return statementOfTruth; + } } \ No newline at end of file diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java index f17e309b4b..b19dc50b57 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java @@ -6,28 +6,57 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableAdultsChildren; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.RawWarrantRestDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.WarrantOfRestitutionDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantOfRestitutionEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantOfRestitutionRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.StatementOfTruthMapper; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantOfRestitutionMapper; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableCategory.VULNERABLE_CHILDREN; @ExtendWith(MockitoExtension.class) -public class WarrantOfRestitutionStrategyTest { +class WarrantOfRestitutionStrategyTest { @InjectMocks private WarrantOfRestitutionStrategy underTest; @Mock + private WarrantOfRestitutionMapper warrantOfRestitutionMapper; + @Mock private WarrantOfRestitutionRepository warrantOfRestitutionRepository; + @Mock + private StatementOfTruthMapper statementOfTruthMapper; @Test - void shouldProcess() { + void shouldProcessWarrantOfRestitutionDetailsAndSaveToRepository() { // Given - EnforcementOrderEntity enforcementOrderEntity = new EnforcementOrderEntity(); - EnforcementOrder enforcementOrder = new EnforcementOrder(); + EnforcementOrderEntity enforcementOrderEntity; + EnforcementOrder enforcementOrder; + WarrantOfRestitutionDetails warrantOfRestitutionDetails; + enforcementOrderEntity = mock(EnforcementOrderEntity.class); + + warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder().anyRiskToBailiff(YesNoNotSure.YES).build(); + VulnerableAdultsChildren vulnerableAdultsChildren = VulnerableAdultsChildren.builder() + .vulnerableCategory(VULNERABLE_CHILDREN).vulnerableReasonText("Young children present").build(); + + RawWarrantRestDetails rawWarrantRestDetails = RawWarrantRestDetails.builder() + .vulnerablePeoplePresent(YesNoNotSure.YES).vulnerableAdultsChildren(vulnerableAdultsChildren).build(); + + enforcementOrder = EnforcementOrder.builder().warrantOfRestitutionDetails(warrantOfRestitutionDetails) + .rawWarrantRestDetails(rawWarrantRestDetails).build(); + WarrantOfRestitutionEntity warrantOfRestitutionEntity = WarrantOfRestitutionEntity.builder().build(); + when(warrantOfRestitutionMapper.toEntity(enforcementOrder, enforcementOrderEntity)) + .thenReturn(warrantOfRestitutionEntity); + when(warrantOfRestitutionRepository.save(warrantOfRestitutionEntity)).thenReturn(warrantOfRestitutionEntity); // When underTest.process(enforcementOrderEntity, enforcementOrder); ArgumentCaptor captor = @@ -35,9 +64,9 @@ void shouldProcess() { // Then verify(warrantOfRestitutionRepository).save(captor.capture()); + verify(statementOfTruthMapper).mapStatementOfTruthForWarrantRest(enforcementOrder, enforcementOrderEntity); WarrantOfRestitutionEntity saved = captor.getValue(); assertThat(saved).isNotNull(); assertThat(saved.getEnforcementOrder()).isSameAs(enforcementOrderEntity); } - } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java index 6252e72d28..52d5939c44 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantStrategyTest.java @@ -15,23 +15,19 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RiskDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.NameAndAddressForEviction; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PeopleToEvict; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableAdultsChildren; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableCategory; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.RiskProfileEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.SelectedDefendantEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.RiskProfileRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.SelectedDefendantRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantRepository; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.EnforcementDataUtil; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.RiskDetailsMapper; +import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.RiskProfileService; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.SelectedDefendantsMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantDetailsMapper; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicStringListElement; @@ -44,7 +40,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -59,20 +54,17 @@ class WarrantStrategyTest { @Mock - private RiskProfileRepository riskProfileRepository; + private RiskProfileService riskProfileService; @Mock private SelectedDefendantsMapper selectedDefendantsMapper; @Mock private SelectedDefendantRepository selectedDefendantRepository; - @Mock - private RiskDetailsMapper riskProfileMapper; + @Mock private WarrantDetailsMapper warrantDetailsMapper; @Mock private WarrantRepository warrantRepository; @Captor - private ArgumentCaptor riskProfileCaptor; - @Captor private ArgumentCaptor warrantEntityCaptor; @Captor private ArgumentCaptor> selectedDefendantEntityCaptor; @@ -82,24 +74,12 @@ class WarrantStrategyTest { private EnforcementOrderEntity enforcementOrderEntity; private EnforcementOrder enforcementOrder; - private WarrantDetails warrantDetails; - private RiskDetails riskDetails; @BeforeEach void setUp() { enforcementOrderEntity = mock(EnforcementOrderEntity.class); - riskDetails = RiskDetails.builder() - .violentDetails("Violent behavior reported") - .firearmsDetails("Firearms present") - .criminalDetails("Criminal history") - .verbalThreatsDetails("Verbal threats made") - .protestGroupDetails("Member of protest group") - .policeSocialServicesDetails("Police involvement") - .animalsDetails("Aggressive dogs on premises") - .build(); - - warrantDetails = WarrantDetails.builder().anyRiskToBailiff(YesNoNotSure.YES).riskDetails(riskDetails).build(); + WarrantDetails warrantDetails = WarrantDetails.builder().anyRiskToBailiff(YesNoNotSure.YES).build(); VulnerableAdultsChildren vulnerableAdultsChildren = VulnerableAdultsChildren.builder() .vulnerableCategory(VULNERABLE_CHILDREN).vulnerableReasonText("Young children present").build(); @@ -121,11 +101,8 @@ void shouldProcessWarrantDetailsAndSaveToRepository() { when(warrantDetailsMapper.toEntity(enforcementOrder, enforcementOrderEntity)) .thenReturn(warrantEntity); when(warrantRepository.save(warrantEntity)).thenReturn(savedWarrantEntity); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) .thenReturn(Collections.emptyList()); - // When underTest.process(enforcementOrderEntity, enforcementOrder); @@ -133,6 +110,7 @@ void shouldProcessWarrantDetailsAndSaveToRepository() { verify(warrantDetailsMapper).toEntity(enforcementOrder, enforcementOrderEntity); verify(warrantRepository).save(warrantEntity); verify(enforcementOrderEntity).setWarrantDetails(savedWarrantEntity); + verify(riskProfileService).processRisk(enforcementOrder, enforcementOrderEntity); } @Test @@ -146,8 +124,6 @@ void shouldSetSavedWarrantDetailsOnEnforcementOrderEntity() { when(warrantDetailsMapper.toEntity(enforcementOrder, enforcementOrderEntity)) .thenReturn(warrantEntity); when(warrantRepository.save(warrantEntity)).thenReturn(savedWarrantEntity); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) .thenReturn(Collections.emptyList()); @@ -161,29 +137,6 @@ void shouldSetSavedWarrantDetailsOnEnforcementOrderEntity() { verify(enforcementOrderEntity).setWarrantDetails(savedWarrantEntity); } - @Test - void shouldProcessWarrantBeforeRiskProfile() { - // Given - WarrantEntity warrantEntity = new WarrantEntity(); - WarrantEntity savedWarrantEntity = new WarrantEntity(); - - when(warrantDetailsMapper.toEntity(enforcementOrder, enforcementOrderEntity)) - .thenReturn(warrantEntity); - when(warrantRepository.save(warrantEntity)).thenReturn(savedWarrantEntity); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); - when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) - .thenReturn(Collections.emptyList()); - - // When - underTest.process(enforcementOrderEntity, enforcementOrder); - - // Then - InOrder inOrder = inOrder(warrantRepository, riskProfileRepository); - inOrder.verify(warrantRepository).save(warrantEntity); - inOrder.verify(riskProfileRepository).save(any(RiskProfileEntity.class)); - } - @Test void shouldCallWarrantDetailsMapper() { // Given @@ -193,8 +146,6 @@ void shouldCallWarrantDetailsMapper() { when(warrantDetailsMapper.toEntity(enforcementOrder, enforcementOrderEntity)) .thenReturn(warrantEntity); when(warrantRepository.save(warrantEntity)).thenReturn(savedWarrantEntity); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) .thenReturn(Collections.emptyList()); @@ -218,8 +169,6 @@ void shouldProcessAllThreeStepsInCorrectOrder() { when(warrantDetailsMapper.toEntity(enforcementOrder, enforcementOrderEntity)) .thenReturn(warrantEntity); when(warrantRepository.save(warrantEntity)).thenReturn(savedWarrantEntity); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)).thenReturn(defendants); // When @@ -228,95 +177,17 @@ void shouldProcessAllThreeStepsInCorrectOrder() { // Then InOrder inOrder = inOrder( warrantRepository, - riskProfileRepository, selectedDefendantRepository ); inOrder.verify(warrantRepository).save(warrantEntity); - inOrder.verify(riskProfileRepository).save(any(RiskProfileEntity.class)); inOrder.verify(selectedDefendantRepository).saveAll(defendants); } - @Test - void shouldProcessWarrantDetailsSuccessfully() { - // Given - RiskProfileEntity savedEntity = createExpectedRiskProfileEntity(); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(savedEntity); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(savedEntity); - when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) - .thenReturn(Collections.emptyList()); - - // When - underTest.process(enforcementOrderEntity, enforcementOrder); - - // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - - assertThat(capturedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); - assertThat(capturedEntity.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.YES); - assertThat(capturedEntity.getViolentDetails()).isEqualTo("Violent behavior reported"); - assertThat(capturedEntity.getFirearmsDetails()).isEqualTo("Firearms present"); - assertThat(capturedEntity.getCriminalDetails()).isEqualTo("Criminal history"); - assertThat(capturedEntity.getVerbalThreatsDetails()).isEqualTo("Verbal threats made"); - assertThat(capturedEntity.getProtestGroupDetails()).isEqualTo("Member of protest group"); - assertThat(capturedEntity.getPoliceSocialServicesDetails()).isEqualTo("Police involvement"); - assertThat(capturedEntity.getAnimalsDetails()).isEqualTo("Aggressive dogs on premises"); - assertThat(capturedEntity.getVulnerablePeoplePresent()).isEqualTo(YesNoNotSure.YES); - assertThat(capturedEntity.getVulnerableCategory()).isEqualTo(VULNERABLE_CHILDREN); - assertThat(capturedEntity.getVulnerableReasonText()).isEqualTo("Young children present"); - } - - @ParameterizedTest - @MethodSource("provideNullWarrantDetailsScenarios") - void shouldHandleNullValuesInWarrantDetails( - RawWarrantDetails rawWarrantDetails, - YesNoNotSure expectedVulnerablePeoplePresent, - boolean expectNullVulnerableFields - ) { - // Given - enforcementOrder.setRawWarrantDetails(rawWarrantDetails); - RiskProfileEntity riskProfileEntity = new RiskProfileEntity(); - if (expectedVulnerablePeoplePresent != null) { - riskProfileEntity.setVulnerablePeoplePresent(expectedVulnerablePeoplePresent); - } - when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); - when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) - .thenReturn(Collections.emptyList()); - - // When - underTest.process(enforcementOrderEntity, enforcementOrder); - - // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - - assertThat(capturedEntity.getVulnerablePeoplePresent()).isEqualTo(expectedVulnerablePeoplePresent); - if (expectNullVulnerableFields) { - assertThat(capturedEntity.getVulnerableCategory()).isNull(); - assertThat(capturedEntity.getVulnerableReasonText()).isNull(); - } - } - - private static Stream provideNullWarrantDetailsScenarios() { - RawWarrantDetails withNullVulnerableChildren = RawWarrantDetails.builder() - .vulnerablePeoplePresent(YesNoNotSure.YES) - .vulnerableAdultsChildren(null) - .build(); - - return Stream.of( - Arguments.of(null, null, true), - Arguments.of(withNullVulnerableChildren, YesNoNotSure.YES, true) - ); - } - @ParameterizedTest @MethodSource("provideSelectedDefendantScenarios") void shouldHandleSelectedDefendantsBasedOnMapperResult(List defendants, boolean shouldCallSaveAll) { // Given - when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)).thenReturn(defendants); // When @@ -341,111 +212,6 @@ private static Stream provideSelectedDefendantScenarios() { ); } - - @Test - void shouldHandleWarrantDetailsWithNoRiskToBailiff() { - // Given - warrantDetails.setAnyRiskToBailiff(YesNoNotSure.NO); - RiskProfileEntity riskProfileEntity = new RiskProfileEntity(); - riskProfileEntity.setAnyRiskToBailiff(YesNoNotSure.NO); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); - when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) - .thenReturn(Collections.emptyList()); - - // When - underTest.process(enforcementOrderEntity, enforcementOrder); - - // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - - assertThat(capturedEntity.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.NO); - } - - @Test - void shouldHandleMinimalEnforcementOrder() { - // Given - RiskProfileEntity riskProfileEntity = createExpectedRiskProfileEntity(); - riskProfileEntity.setAnyRiskToBailiff(null); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(riskProfileEntity); - when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)).thenReturn(Collections.emptyList()); - EnforcementOrder minimalOrder = EnforcementOrder.builder().build(); - - // When - underTest.process(enforcementOrderEntity, minimalOrder); - - // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - - assertThat(capturedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); - assertThat(capturedEntity.getAnyRiskToBailiff()).isNull(); - } - - @Test - void shouldMapAllRiskDetailsFieldsCorrectly() { - // Given - RiskProfileEntity riskProfileEntity = createExpectedRiskProfileEntity(); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); - when(riskProfileRepository.save(riskProfileEntity)).thenReturn(riskProfileEntity); - when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)) - .thenReturn(Collections.emptyList()); - - // When - underTest.process(enforcementOrderEntity, enforcementOrder); - - // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - - assertThat(capturedEntity.getViolentDetails()).isEqualTo(riskDetails.getViolentDetails()); - assertThat(capturedEntity.getFirearmsDetails()).isEqualTo(riskDetails.getFirearmsDetails()); - assertThat(capturedEntity.getCriminalDetails()).isEqualTo(riskDetails.getCriminalDetails()); - assertThat(capturedEntity.getVerbalThreatsDetails()).isEqualTo(riskDetails.getVerbalThreatsDetails()); - assertThat(capturedEntity.getProtestGroupDetails()).isEqualTo(riskDetails.getProtestGroupDetails()); - assertThat(capturedEntity.getPoliceSocialServicesDetails()) - .isEqualTo(riskDetails.getPoliceSocialServicesDetails()); - assertThat(capturedEntity.getAnimalsDetails()).isEqualTo(riskDetails.getAnimalsDetails()); - } - - @Test - void shouldSaveRiskProfileBeforeSelectedDefendants() { - // Given - List defendants = List.of(new SelectedDefendantEntity()); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); - when(selectedDefendantsMapper.mapToEntities(enforcementOrderEntity)).thenReturn(defendants); - - // When - underTest.process(enforcementOrderEntity, enforcementOrder); - - // Then - InOrder inOrder = inOrder(riskProfileRepository, selectedDefendantRepository); - inOrder.verify(riskProfileRepository).save(any(RiskProfileEntity.class)); - inOrder.verify(selectedDefendantRepository).saveAll(defendants); - } - - @Test - void shouldPersistVulnerabilityDetailsInRiskProfile() { - // Given: order with raw warrant details (vulnerability) - final EnforcementOrder enfOrder = EnforcementDataUtil.buildEnforcementOrderWithVulnerability(); - final RiskProfileEntity stubbedRiskProfile = new RiskProfileEntity(); - stubbedRiskProfile.setVulnerablePeoplePresent(YesNoNotSure.YES); - stubbedRiskProfile.setVulnerableCategory(VulnerableCategory.VULNERABLE_ADULTS); - stubbedRiskProfile.setVulnerableReasonText("Vulnerability reason"); - when(riskProfileMapper.toEntity(any(EnforcementOrderEntity.class), eq(enfOrder))) - .thenReturn(stubbedRiskProfile); - - // When - underTest.process(enforcementOrderEntity, enfOrder); - - // Then: service calls mapper and saves returned risk profile - verify(riskProfileMapper).toEntity(any(), any()); - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - } - @Test void shouldAddMultipleSelectedDefendantsWhenProvided() { // Given @@ -522,22 +288,4 @@ void shouldNotAddAnySelectedDefendantsWhenEvictEveryoneIsYes() { // Then verifyNoInteractions(selectedDefendantRepository); } - - private RiskProfileEntity createExpectedRiskProfileEntity() { - RiskProfileEntity entity = new RiskProfileEntity(); - entity.setEnforcementOrder(enforcementOrderEntity); - entity.setAnyRiskToBailiff(YesNoNotSure.YES); - entity.setViolentDetails("Violent behavior reported"); - entity.setFirearmsDetails("Firearms present"); - entity.setCriminalDetails("Criminal history"); - entity.setVerbalThreatsDetails("Verbal threats made"); - entity.setProtestGroupDetails("Member of protest group"); - entity.setPoliceSocialServicesDetails("Police involvement"); - entity.setAnimalsDetails("Aggressive dogs on premises"); - entity.setVulnerablePeoplePresent(YesNoNotSure.YES); - entity.setVulnerableCategory(VULNERABLE_CHILDREN); - entity.setVulnerableReasonText("Young children present"); - return entity; - } - } From 11b48596c3c2bbd2542ceaa574f9a9063b622cc4 Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Fri, 20 Mar 2026 14:50:55 +0000 Subject: [PATCH 38/54] HDPI-5188 - Unit test fixes --- .../WarrantOfRestitutionStrategy.java | 2 +- .../WarrantOfRestitutionStrategyTest.java | 69 +++++++++++++++++-- 2 files changed, 66 insertions(+), 5 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java index 18430f62a5..11a2891ef9 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java @@ -25,8 +25,8 @@ public class WarrantOfRestitutionStrategy implements EnforcementTypeStrategy { @Override public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { riskProfileService.processRisk(enforcementOrder, enforcementOrderEntity); - processStatementOfTruth(enforcementOrder, enforcementOrderEntity); processWarrantOfRestitution(enforcementOrder, enforcementOrderEntity); + processStatementOfTruth(enforcementOrder, enforcementOrderEntity); } private void processWarrantOfRestitution(EnforcementOrder enforcementOrder, diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java index e225773291..59c9dd7d55 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java @@ -11,15 +11,21 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableAdultsChildren; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.RawWarrantRestDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.WarrantOfRestitutionDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthDetails; +import uk.gov.hmcts.reform.pcs.ccd.entity.claim.StatementOfTruthEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantOfRestitutionEntity; +import uk.gov.hmcts.reform.pcs.ccd.repository.StatementOfTruthRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantOfRestitutionRepository; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.RiskProfileService; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.StatementOfTruthMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantOfRestitutionMapper; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableCategory.VULNERABLE_CHILDREN; @@ -37,14 +43,14 @@ class WarrantOfRestitutionStrategyTest { private WarrantOfRestitutionRepository warrantOfRestitutionRepository; @Mock private StatementOfTruthMapper statementOfTruthMapper; + @Mock + private StatementOfTruthRepository statementOfTruthRepository; @Test void shouldProcessWarrantOfRestitutionDetailsAndSaveToRepository() { // Given - EnforcementOrderEntity enforcementOrderEntity; - EnforcementOrder enforcementOrder; WarrantOfRestitutionDetails warrantOfRestitutionDetails; - enforcementOrderEntity = mock(EnforcementOrderEntity.class); + EnforcementOrderEntity enforcementOrderEntity = mock(EnforcementOrderEntity.class); warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder().anyRiskToBailiff(YesNoNotSure.YES).build(); @@ -55,7 +61,7 @@ void shouldProcessWarrantOfRestitutionDetailsAndSaveToRepository() { .vulnerablePeoplePresentWarrantRest(YesNoNotSure.YES) .vulnerableAdultsChildrenWarrantRest(vulnerableAdultsChildren).build(); - enforcementOrder = EnforcementOrder.builder().warrantOfRestitutionDetails(warrantOfRestitutionDetails) + EnforcementOrder enforcementOrder = EnforcementOrder.builder().warrantOfRestitutionDetails(warrantOfRestitutionDetails) .rawWarrantRestDetails(rawWarrantRestDetails).build(); WarrantOfRestitutionEntity warrantOfRestitutionEntity = WarrantOfRestitutionEntity.builder().build(); when(warrantOfRestitutionMapper.toEntity(enforcementOrder, enforcementOrderEntity)) @@ -74,4 +80,59 @@ void shouldProcessWarrantOfRestitutionDetailsAndSaveToRepository() { assertThat(saved).isNotNull(); assertThat(saved.getEnforcementOrder()).isSameAs(enforcementOrderEntity); } + + @Test + void shouldProcessStatementOfTruthAndSaveToRepository() { + // Given + StatementOfTruthDetails statementOfTruthDetails = StatementOfTruthDetails.builder() + .completedBy(StatementOfTruthCompletedBy.CLAIMANT) + .fullNameClaimant("Claimant name") + .positionClaimant("Claimant position") + .build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .rawWarrantRestDetails(RawWarrantRestDetails.builder() + .statementOfTruthWarrantRest(statementOfTruthDetails) + .build()) + .build(); + EnforcementOrderEntity enforcementOrderEntity = EnforcementOrderEntity.builder().build(); + StatementOfTruthEntity statementOfTruthEntity = StatementOfTruthEntity.builder() + .completedBy(StatementOfTruthCompletedBy.CLAIMANT) + .fullName("Claimant name") + .positionHeld("Claimant position") + .build(); + enforcementOrderEntity.setStatementOfTruth(statementOfTruthEntity); + WarrantOfRestitutionEntity warrantOfRestitutionEntity = WarrantOfRestitutionEntity.builder().build(); + + when(warrantOfRestitutionMapper.toEntity(enforcementOrder, enforcementOrderEntity)) + .thenReturn(warrantOfRestitutionEntity); + when(warrantOfRestitutionRepository.save(warrantOfRestitutionEntity)).thenReturn(warrantOfRestitutionEntity); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(statementOfTruthMapper).mapStatementOfTruthForWarrantRest(enforcementOrder, enforcementOrderEntity); + } + + @Test + void shouldHandleNullStatementOfTruthAndSave() { + // Given + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .rawWarrantRestDetails(RawWarrantRestDetails.builder() + .statementOfTruthWarrantRest(null) + .build()) + .build(); + EnforcementOrderEntity enforcementOrderEntity = mock(EnforcementOrderEntity.class); + WarrantOfRestitutionEntity warrantOfRestitutionEntity = WarrantOfRestitutionEntity.builder().build(); + + when(warrantOfRestitutionMapper.toEntity(enforcementOrder, enforcementOrderEntity)) + .thenReturn(warrantOfRestitutionEntity); + when(warrantOfRestitutionRepository.save(warrantOfRestitutionEntity)).thenReturn(warrantOfRestitutionEntity); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(statementOfTruthRepository, never()).save(any()); + } } From e9994ba9fbdba69c56f68de6d4090e0631991cfb Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Fri, 20 Mar 2026 17:18:18 +0000 Subject: [PATCH 39/54] HDPI-5188 - unit test fixes --- .../mapper/RiskDetailsMapper.java | 45 ++++++++-- .../mapper/RiskDetailsMapperTest.java | 83 ++++++++++++++++++- 2 files changed, 121 insertions(+), 7 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapper.java index 828ee86e90..780da43a95 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapper.java @@ -3,9 +3,12 @@ import org.modelmapper.ModelMapper; import org.springframework.stereotype.Component; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RiskDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.RawWarrantRestDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.WarrantOfRestitutionDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.RiskProfileEntity; @@ -22,18 +25,28 @@ public RiskProfileEntity toEntity(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { RiskProfileEntity riskProfileEntity = new RiskProfileEntity(); riskProfileEntity.setEnforcementOrder(enforcementOrderEntity); - WarrantDetails warrantDetails = enforcementOrder.getWarrantDetails(); + + if (enforcementOrder.getChooseEnforcementType().getValueCode().equals(SelectEnforcementType.WARRANT.name())) { + applyWarrantDetails(enforcementOrder.getWarrantDetails(), riskProfileEntity); + applyRawWarrantDetails(enforcementOrder.getRawWarrantDetails(), riskProfileEntity); + } else if (enforcementOrder.getChooseEnforcementType().getValueCode() + .equals(SelectEnforcementType.WARRANT_OF_RESTITUTION.name())) { + applyWarrantOfRestitutionDetails(enforcementOrder.getWarrantOfRestitutionDetails(), riskProfileEntity); + applyRawWarrantRestDetails(enforcementOrder.getRawWarrantRestDetails(), riskProfileEntity); + } + return riskProfileEntity; + } + + private void applyWarrantDetails(WarrantDetails warrantDetails, RiskProfileEntity riskProfileEntity) { riskProfileEntity.setAnyRiskToBailiff(warrantDetails.getAnyRiskToBailiff()); + RiskDetails riskDetails = warrantDetails.getRiskDetails(); if (riskDetails != null) { modelMapper.map(riskDetails, riskProfileEntity); } - applyRawWarrantDetails(enforcementOrder, riskProfileEntity); - return riskProfileEntity; } - private void applyRawWarrantDetails(EnforcementOrder enforcementOrder, RiskProfileEntity entity) { - RawWarrantDetails rawWarrantDetails = enforcementOrder.getRawWarrantDetails(); + private void applyRawWarrantDetails(RawWarrantDetails rawWarrantDetails, RiskProfileEntity entity) { if (rawWarrantDetails != null) { entity.setVulnerablePeoplePresent(rawWarrantDetails.getVulnerablePeoplePresent()); if (rawWarrantDetails.getVulnerableAdultsChildren() != null) { @@ -44,4 +57,26 @@ private void applyRawWarrantDetails(EnforcementOrder enforcementOrder, RiskProfi } } } + + private void applyWarrantOfRestitutionDetails(WarrantOfRestitutionDetails details, + RiskProfileEntity riskProfileEntity) { + riskProfileEntity.setAnyRiskToBailiff(details.getAnyRiskToBailiff()); + + RiskDetails riskDetails = details.getRiskDetails(); + if (riskDetails != null) { + modelMapper.map(riskDetails, riskProfileEntity); + } + } + + private void applyRawWarrantRestDetails(RawWarrantRestDetails details, RiskProfileEntity entity) { + if (details != null) { + entity.setVulnerablePeoplePresent(details.getVulnerablePeoplePresentWarrantRest()); + if (details.getVulnerableAdultsChildrenWarrantRest() != null) { + entity.setVulnerableCategory( + details.getVulnerableAdultsChildrenWarrantRest().getVulnerableCategory()); + entity.setVulnerableReasonText( + details.getVulnerableAdultsChildrenWarrantRest().getVulnerableReasonText()); + } + } + } } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapperTest.java index 49f9302db7..3b76f9f5ad 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapperTest.java @@ -8,17 +8,21 @@ import org.mockito.junit.jupiter.MockitoExtension; import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RiskDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableAdultsChildren; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableCategory; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.RawWarrantRestDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.WarrantOfRestitutionDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.RiskProfileEntity; import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; +import static uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.EnforcementDataUtil.buildEnforcementTypes; @ExtendWith(MockitoExtension.class) class RiskDetailsMapperTest { @@ -27,8 +31,8 @@ class RiskDetailsMapperTest { new RiskDetailsMapper(new ModelMapper()); @Nested - @DisplayName("toEntity") - class ToEntity { + @DisplayName("warrant") + class Warrant { @Test @DisplayName("maps full warrant and risk details to entity") @@ -36,6 +40,7 @@ void mapsFullWarrantAndRiskDetails() { EnforcementOrderEntity orderEntity = new EnforcementOrderEntity(); orderEntity.setId(UUID.randomUUID()); EnforcementOrder order = EnforcementOrder.builder() + .chooseEnforcementType(buildEnforcementTypes(SelectEnforcementType.WARRANT)) .warrantDetails(WarrantDetails.builder() .anyRiskToBailiff(YesNoNotSure.YES) .riskDetails(RiskDetails.builder() @@ -61,6 +66,7 @@ void mapsVulnerabilityDetails() { EnforcementOrderEntity orderEntity = new EnforcementOrderEntity(); orderEntity.setId(UUID.randomUUID()); EnforcementOrder order = EnforcementOrder.builder() + .chooseEnforcementType(buildEnforcementTypes(SelectEnforcementType.WARRANT)) .warrantDetails(WarrantDetails.builder().build()) .rawWarrantDetails(RawWarrantDetails.builder() .vulnerablePeoplePresent(YesNoNotSure.YES) @@ -84,6 +90,7 @@ void mapsWarrantDetailsWhenRiskDetailsNull() { EnforcementOrderEntity orderEntity = new EnforcementOrderEntity(); orderEntity.setId(UUID.randomUUID()); EnforcementOrder order = EnforcementOrder.builder() + .chooseEnforcementType(buildEnforcementTypes(SelectEnforcementType.WARRANT)) .warrantDetails(WarrantDetails.builder() .anyRiskToBailiff(YesNoNotSure.NO) .build()) @@ -95,4 +102,76 @@ void mapsWarrantDetailsWhenRiskDetailsNull() { assertThat(result.getVerbalThreatsDetails()).isNull(); } } + + @Nested + @DisplayName("warrantOfRestitution") + class WarrantOfRestitution { + @Test + @DisplayName("maps full warrant of restitution and risk details to entity") + void mapsFullWarrantOfRestitutionAndRiskDetails() { + EnforcementOrderEntity orderEntity = new EnforcementOrderEntity(); + orderEntity.setId(UUID.randomUUID()); + EnforcementOrder order = EnforcementOrder.builder() + .chooseEnforcementType(buildEnforcementTypes(SelectEnforcementType.WARRANT_OF_RESTITUTION)) + .warrantOfRestitutionDetails(WarrantOfRestitutionDetails.builder() + .anyRiskToBailiff(YesNoNotSure.YES) + .riskDetails(RiskDetails.builder() + .violentDetails("Violent") + .verbalThreatsDetails("Verbal") + .firearmsDetails("Firearms") + .build()) + .build()) + .build(); + + RiskProfileEntity result = mapper.toEntity(orderEntity, order); + + assertThat(result.getEnforcementOrder()).isEqualTo(orderEntity); + assertThat(result.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.YES); + assertThat(result.getViolentDetails()).isEqualTo("Violent"); + assertThat(result.getVerbalThreatsDetails()).isEqualTo("Verbal"); + assertThat(result.getFirearmsDetails()).isEqualTo("Firearms"); + } + + @Test + @DisplayName("maps vulnerability details from raw warrant details") + void mapsVulnerabilityDetails() { + EnforcementOrderEntity orderEntity = new EnforcementOrderEntity(); + orderEntity.setId(UUID.randomUUID()); + EnforcementOrder order = EnforcementOrder.builder() + .chooseEnforcementType(buildEnforcementTypes(SelectEnforcementType.WARRANT_OF_RESTITUTION)) + .warrantOfRestitutionDetails(WarrantOfRestitutionDetails.builder().build()) + .rawWarrantRestDetails(RawWarrantRestDetails.builder() + .vulnerablePeoplePresentWarrantRest(YesNoNotSure.YES) + .vulnerableAdultsChildrenWarrantRest(VulnerableAdultsChildren.builder() + .vulnerableCategory(VulnerableCategory.VULNERABLE_ADULTS) + .vulnerableReasonText("Vulnerability reason") + .build()) + .build()) + .build(); + + RiskProfileEntity result = mapper.toEntity(orderEntity, order); + + assertThat(result.getVulnerablePeoplePresent()).isEqualTo(YesNoNotSure.YES); + assertThat(result.getVulnerableCategory()).isEqualTo(VulnerableCategory.VULNERABLE_ADULTS); + assertThat(result.getVulnerableReasonText()).isEqualTo("Vulnerability reason"); + } + + @Test + @DisplayName("maps warrant of restitution details when risk details is null") + void mapsWarrantOfRestitutionDetailsWhenRiskDetailsNull() { + EnforcementOrderEntity orderEntity = new EnforcementOrderEntity(); + orderEntity.setId(UUID.randomUUID()); + EnforcementOrder order = EnforcementOrder.builder() + .chooseEnforcementType(buildEnforcementTypes(SelectEnforcementType.WARRANT_OF_RESTITUTION)) + .warrantOfRestitutionDetails(WarrantOfRestitutionDetails.builder() + .anyRiskToBailiff(YesNoNotSure.NO) + .build()) + .build(); + + RiskProfileEntity result = mapper.toEntity(orderEntity, order); + assertThat(result.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.NO); + assertThat(result.getViolentDetails()).isNull(); + assertThat(result.getVerbalThreatsDetails()).isNull(); + } + } } From e1f24689beeb0574f64fecb34c42bec688f469bf Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Mon, 23 Mar 2026 11:12:39 +0000 Subject: [PATCH 40/54] Add default `CURRENT_TIMESTAMP` to the `created` columns in the enforcement data model migration. --- .../db/migration/V070__enforcement_data_model_updates.sql | 8 ++++---- .../Create-Enforcement-Warrant-Basic-Case.json | 2 +- .../Create-Enforcement-Writ-Basic-Case.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/resources/db/migration/V070__enforcement_data_model_updates.sql b/src/main/resources/db/migration/V070__enforcement_data_model_updates.sql index 03b248c86c..648d921153 100644 --- a/src/main/resources/db/migration/V070__enforcement_data_model_updates.sql +++ b/src/main/resources/db/migration/V070__enforcement_data_model_updates.sql @@ -1,8 +1,8 @@ -- Add Timestamps submission date to each of the existing tables -ALTER TABLE public.enf_warrant ADD COLUMN created TIMESTAMP WITHOUT TIME ZONE NOT NULL; -ALTER TABLE public.enf_writ ADD COLUMN created TIMESTAMP WITHOUT TIME ZONE NOT NULL; -ALTER TABLE public.enf_warrant_of_restitution ADD COLUMN created TIMESTAMP WITHOUT TIME ZONE NOT NULL; -ALTER TABLE public.enf_writ_of_restitution ADD COLUMN created TIMESTAMP WITHOUT TIME ZONE NOT NULL; +ALTER TABLE public.enf_warrant ADD COLUMN created TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP; +ALTER TABLE public.enf_writ ADD COLUMN created TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP; +ALTER TABLE public.enf_warrant_of_restitution ADD COLUMN created TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP; +ALTER TABLE public.enf_writ_of_restitution ADD COLUMN created TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP; -- Add Language used to each existing table ALTER TABLE public.enf_warrant ADD COLUMN language_used VARCHAR(30); diff --git a/src/main/resources/test-case-generation/Create-Enforcement-Warrant-Basic-Case.json b/src/main/resources/test-case-generation/Create-Enforcement-Warrant-Basic-Case.json index 0b21e07c3a..2f89989562 100644 --- a/src/main/resources/test-case-generation/Create-Enforcement-Warrant-Basic-Case.json +++ b/src/main/resources/test-case-generation/Create-Enforcement-Warrant-Basic-Case.json @@ -1 +1 @@ -{"writFeeAmount": "£999999.99", "warrantFeeAmount": "£999999.99", "warrantAmountOwed": "123300", "selectedDefendants": {"value": [{"code": "feb27cee-c4be-4a89-820e-d7bbce32f3a9", "label": "Test1 Testing1"}], "list_items": [{"code": "9abf3261-70f6-4a6a-a47b-d6c6ededf472", "label": "TVR HN"}, {"code": "feb27cee-c4be-4a89-820e-d7bbce32f3a9", "label": "Test1 Testing1"}]}, "warrantCompletedBy": "CLAIMANT", "warrantCertification": ["CERTIFY"], "warrantEvictEveryone": "NO", "selectEnforcementType": "WARRANT", "warrantRepaymentChoice": "ALL", "vulnerablePeoplePresent": "NO", "warrantAnyRiskToBailiff": "YES", "warrantFullNameClaimant": "fsfdsdf", "warrantIsSuspendedOrder": "YES", "warrantPositionClaimant": "sdfasfasdfaasdfasfdasdfsadf", "warrantAgreementClaimant": ["BELIEVE_TRUE"], "warrantDefendantsDOBKnown": "NO", "warrantCorrectNameAndAddress": "YES", "warrantEnforcementLanguageUsed": "ENGLISH", "warrantAreLegalCostsToBeClaimed": "NO", "warrantRepaymentSummaryMarkdown": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Total amount that can be repaid
Repayment forAmount
Arrears and other costs\n £1,233
Legal costs£0
Land Registry fees£0
\n Warrant of possession fee\n £999999.99
Total£1,001,232.99
", "warrantEnforcementRiskCategories": ["VERBAL_OR_WRITTEN_THREATS"], "warrantAdditionalInformationSelect": "NO", "warrantIsDifficultToAccessProperty": "NO", "warrantHaveLandRegistryFeesBeenPaid": "NO", "warrantShowPeopleYouWantToEvictPage": "Yes", "warrantShowPeopleWhoWillBeEvictedPage": "Yes", "warrantEnforcementVerbalOrWrittenThreatsDetails": "sxdfgsdefg", "warrantStatementOfTruthRepaymentSummaryMarkdown": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
The payments due
Repayment forAmount
Arrears and other costs\n £1,233
Legal costs£0
Land Registry fees£0
\n Warrant of possession fee\n £999999.99
Total£1,001,232.99
"} +{"parties": [{"value": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}}, {"value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}, {"value": {"address": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "orgName": "pcs-solicitor1@test.com", "emailAddress": "pcs-solicitor1@test.com", "phoneNumberProvided": "NO"}}], "allClaimants": [{"id": "99816c04-7aa5-4e0b-b509-5fda878403c2", "value": {"address": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "orgName": "pcs-solicitor1@test.com", "emailAddress": "pcs-solicitor1@test.com", "phoneNumberProvided": "NO"}}], "allDocuments": [], "claimantType": {"value": {"code": "PROVIDER_OF_SOCIAL_HOUSING", "label": "Registered provider of social housing"}, "valueCode": "PROVIDER_OF_SOCIAL_HOUSING"}, "languageUsed": "ENGLISH", "noticeServed": "No", "userPcqIdSet": "No", "allDefendants": [{"id": "7abd474a-6e4e-48e4-b2bc-a1a3afb14bb4", "value": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}}, {"id": "758e4317-31ee-4e3b-b3e6-928cc48b0a73", "value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}], "writFeeAmount": "£999999.99", "SearchCriteria": {}, "propertyAddress": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "statementOfTruth": {"completedBy": "CLAIMANT", "fullNameClaimant": "wert", "positionClaimant": "ewrt", "agreementClaimant": ["BELIEVE_TRUE"]}, "warrantFeeAmount": "£999999.99", "warrantAmountOwed": "123300", "legislativeCountry": "England", "mediationAttempted": "NO", "selectedDefendants": {"value": [{"code": "7abd474a-6e4e-48e4-b2bc-a1a3afb14bb4", "label": "TVR HN"}], "list_items": [{"code": "7abd474a-6e4e-48e4-b2bc-a1a3afb14bb4", "label": "TVR HN"}, {"code": "758e4317-31ee-4e3b-b3e6-928cc48b0a73", "label": "Test1 Testing1"}]}, "warrantCompletedBy": "CLAIMANT", "addAnotherDefendant": "YES", "claimingCostsWanted": "NO", "settlementAttempted": "NO", "applicationWithClaim": "NO", "claimGroundSummaries": [{"id": "1483147f-6c07-4d40-811a-5c09fa8e5ee8", "value": {"code": "NUISANCE_OR_IMMORAL_USE", "label": "Nuisance, annoyance, illegal or immoral use of the property (ground 2)", "reason": "sfgsdfgsdfg", "category": "SECURE_OR_FLEXIBLE_DISCRETIONARY", "isRentArrears": "No"}}], "warrantCertification": ["CERTIFY"], "warrantEvictEveryone": "NO", "chooseEnforcementType": {"value": {"code": "WARRANT", "label": "Warrant of possession"}, "valueCode": "WARRANT", "list_items": [{"code": "WARRANT", "label": "Warrant of possession"}, {"code": "WRIT", "label": "Writ of possession"}]}, "wantToUploadDocuments": "NO", "suspensionOfRTB_Reason": "asdfasdf", "warrantRepaymentChoice": "ALL", "claimAgainstTrespassers": "NO", "formattedDefendantNames": "TVR HN
\nTest1 Testing1
", "vulnerablePeoplePresent": "NO", "warrantAnyRiskToBailiff": "NO", "warrantFullNameClaimant": "fgsdfg", "warrantIsSuspendedOrder": "NO", "warrantPositionClaimant": "sdfgsdfgsdfg", "formattedPropertyAddress": "1 Rse Way
London
SW11 1PD", "warrantAgreementClaimant": ["BELIEVE_TRUE"], "hasUnderlesseeOrMortgagee": "NO", "warrantDefendantsDOBKnown": "NO", "preActionProtocolCompleted": "NO", "suspensionOfRTB_HousingAct": "SECTION_6A_2", "claimantCircumstancesSelect": "NO", "tenancy_TypeOfTenancyLicence": "SECURE_TENANCY", "warrantCorrectNameAndAddress": "YES", "warrantOfRestitutionInfoText": "", "hasDefendantCircumstancesInfo": "NO", "additionalReasonsForPossession": {"hasReasons": "NO"}, "warrantEnforcementLanguageUsed": "ENGLISH", "warrantAreLegalCostsToBeClaimed": "NO", "warrantRepaymentSummaryMarkdown": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Total amount that can be repaid
Repayment forAmount
Arrears and other costs\n £1,233
Legal costs£0
Land Registry fees£0
Warrant of possession fee£999999.99
Total£1,001,232.99
", "warrantShowChangeNameAddressPage": "No", "warrantAdditionalInformationSelect": "NO", "warrantIsDifficultToAccessProperty": "NO", "warrantHaveLandRegistryFeesBeenPaid": "NO", "warrantShowPeopleYouWantToEvictPage": "Yes", "warrantShowPeopleWhoWillBeEvictedPage": "Yes", "warrantStatementOfTruthRepaymentSummaryMarkdown": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
The payments due
Repayment forAmount
Arrears and other costs\n £1,233
Legal costs£0
Land Registry fees£0
Warrant of possession fee£999999.99
Total£1,001,232.99
"} diff --git a/src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json b/src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json index 4059acd0b3..7eb9c13364 100644 --- a/src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json +++ b/src/main/resources/test-case-generation/Create-Enforcement-Writ-Basic-Case.json @@ -1 +1 @@ -{"parties": [{"value": {"address": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "orgName": "pcs-solicitor1@test.com", "emailAddress": "pcs-solicitor1@test.com", "phoneNumberProvided": "NO"}}, {"value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}, {"value": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}}], "allClaimants": [{"id": "ea700fdb-b710-4326-8b37-24df0f4d2f92", "value": {"address": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "orgName": "pcs-solicitor1@test.com", "emailAddress": "pcs-solicitor1@test.com", "phoneNumberProvided": "NO"}}], "allDocuments": [], "claimantType": {"value": {"code": "PROVIDER_OF_SOCIAL_HOUSING", "label": "Registered provider of social housing"}, "valueCode": "PROVIDER_OF_SOCIAL_HOUSING"}, "languageUsed": "ENGLISH", "noticeServed": "No", "userPcqIdSet": "No", "allDefendants": [{"id": "39d575e6-fed3-4747-a5bb-c85e3931c16e", "value": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}}, {"id": "0ee3acb7-5c81-47dc-b09f-211064f91037", "value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}], "writFeeAmount": "£999999.99", "writAmountOwed": "123300", "propertyAddress": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "statementOfTruth": {"completedBy": "CLAIMANT", "fullNameClaimant": "wert", "positionClaimant": "ewrt", "agreementClaimant": ["BELIEVE_TRUE"]}, "warrantFeeAmount": "£999999.99", "legislativeCountry": "England", "mediationAttempted": "NO", "addAnotherDefendant": "YES", "claimingCostsWanted": "NO", "settlementAttempted": "NO", "writRepaymentChoice": "ALL", "applicationWithClaim": "NO", "claimGroundSummaries": [{"id": "9df0dd7e-8ee2-49d9-9135-2dc33a5a2ff2", "value": {"code": "NUISANCE_OR_IMMORAL_USE", "label": "Nuisance, annoyance, illegal or immoral use of the property (ground 2)", "reason": "sfgsdfgsdfg", "category": "SECURE_OR_FLEXIBLE_DISCRETIONARY", "isRentArrears": "No"}}], "selectEnforcementType": "WRIT", "wantToUploadDocuments": "NO", "suspensionOfRTB_Reason": "asdfasdf", "writAmountOfLegalCosts": "12300", "claimAgainstTrespassers": "NO", "formattedDefendantNames": "TVR HN
\nTest1 Testing1
", "formattedPropertyAddress": "1 Rse Way
London
SW11 1PD", "hasUnderlesseeOrMortgagee": "NO", "writCorrectNameAndAddress": "YES", "preActionProtocolCompleted": "NO", "suspensionOfRTB_HousingAct": "SECTION_6A_2", "claimantCircumstancesSelect": "NO", "writEnforcementLanguageUsed": "ENGLISH", "tenancy_TypeOfTenancyLicence": "SECURE_TENANCY", "writAmountOfLandRegistryFees": "234500", "writAreLegalCostsToBeClaimed": "YES", "writRepaymentSummaryMarkdown": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Total amount that can be repaid
Repayment forAmount
Arrears and other costs\n £1,233
Legal costs£123
Land Registry fees£2,345
Writ of possession fee£999999.99
Total£1,003,700.99
", "hasDefendantCircumstancesInfo": "NO", "writShowChangeNameAddressPage": "No", "additionalReasonsForPossession": {"hasReasons": "NO"}, "writHaveLandRegistryFeesBeenPaid": "YES", "writHasClaimTransferredToHighCourt": "Yes", "writShowPeopleWhoWillBeEvictedPage": "Yes", "writHasHiredHighCourtEnforcementOfficer": "NO", "writStatementOfTruthRepaymentSummaryMarkdown": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
The payments due
Repayment forAmount
Arrears and other costs\n £1,233
Legal costs£123
Land Registry fees£2,345
Writ of possession fee£999999.99
Total£1,003,700.99
\n"} +{"parties": [{"value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}, {"value": {"address": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "orgName": "pcs-solicitor1@test.com", "emailAddress": "pcs-solicitor1@test.com", "phoneNumberProvided": "NO"}}, {"value": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}}], "allClaimants": [{"id": "8d731f23-de9b-476e-b5df-1038864aede9", "value": {"address": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "orgName": "pcs-solicitor1@test.com", "emailAddress": "pcs-solicitor1@test.com", "phoneNumberProvided": "NO"}}], "allDocuments": [], "claimantType": {"value": {"code": "PROVIDER_OF_SOCIAL_HOUSING", "label": "Registered provider of social housing"}, "valueCode": "PROVIDER_OF_SOCIAL_HOUSING"}, "languageUsed": "ENGLISH", "noticeServed": "No", "userPcqIdSet": "No", "allDefendants": [{"id": "8abcc4f8-931d-4132-858c-17811da06ffa", "value": {"lastName": "HN", "firstName": "TVR", "nameKnown": "YES", "addressKnown": "NO"}}, {"id": "d27588bb-8854-4124-96e3-f9ed9cf51a30", "value": {"lastName": "Testing1", "firstName": "Test1", "nameKnown": "YES", "addressKnown": "NO"}}], "writFeeAmount": "£999999.99", "SearchCriteria": {}, "writAmountOwed": "124300", "propertyAddress": {"County": "", "Country": "United Kingdom", "PostCode": "SW11 1PD", "PostTown": "London", "AddressLine1": "1 Rse Way", "AddressLine2": "", "AddressLine3": ""}, "writCompletedBy": "CLAIMANT", "statementOfTruth": {"completedBy": "CLAIMANT", "fullNameClaimant": "wert", "positionClaimant": "ewrt", "agreementClaimant": ["BELIEVE_TRUE"]}, "warrantFeeAmount": "£999999.99", "legislativeCountry": "England", "mediationAttempted": "NO", "addAnotherDefendant": "YES", "claimingCostsWanted": "NO", "settlementAttempted": "NO", "writRepaymentChoice": "ALL", "applicationWithClaim": "NO", "claimGroundSummaries": [{"id": "5a00be37-cd6a-484f-b198-f969670a38f8", "value": {"code": "NUISANCE_OR_IMMORAL_USE", "label": "Nuisance, annoyance, illegal or immoral use of the property (ground 2)", "reason": "sfgsdfgsdfg", "category": "SECURE_OR_FLEXIBLE_DISCRETIONARY", "isRentArrears": "No"}}], "writFullNameClaimant": "dsftsdfg", "writPositionClaimant": "dsfgsdfgsdf", "chooseEnforcementType": {"value": {"code": "WRIT", "label": "Writ of possession"}, "valueCode": "WRIT", "list_items": [{"code": "WARRANT", "label": "Warrant of possession"}, {"code": "WRIT", "label": "Writ of possession"}]}, "wantToUploadDocuments": "NO", "writAgreementClaimant": ["BELIEVE_TRUE"], "suspensionOfRTB_Reason": "asdfasdf", "claimAgainstTrespassers": "NO", "formattedDefendantNames": "TVR HN
\nTest1 Testing1
", "formattedPropertyAddress": "1 Rse Way
London
SW11 1PD", "hasUnderlesseeOrMortgagee": "NO", "writCorrectNameAndAddress": "YES", "preActionProtocolCompleted": "NO", "suspensionOfRTB_HousingAct": "SECTION_6A_2", "claimantCircumstancesSelect": "NO", "writEnforcementLanguageUsed": "ENGLISH", "tenancy_TypeOfTenancyLicence": "SECURE_TENANCY", "warrantOfRestitutionInfoText": "", "writAreLegalCostsToBeClaimed": "NO", "writRepaymentSummaryMarkdown": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Total amount that can be repaid
Repayment forAmount
Arrears and other costs\n £1,243
Legal costs£0
Land Registry fees£0
Writ of possession fee£999999.99
Total£1,001,242.99
", "hasDefendantCircumstancesInfo": "NO", "writShowChangeNameAddressPage": "No", "additionalReasonsForPossession": {"hasReasons": "NO"}, "writHaveLandRegistryFeesBeenPaid": "NO", "writHasClaimTransferredToHighCourt": "Yes", "writShowPeopleWhoWillBeEvictedPage": "Yes", "writHasHiredHighCourtEnforcementOfficer": "NO", "writStatementOfTruthRepaymentSummaryMarkdown": "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
The payments due
Repayment forAmount
Arrears and other costs\n £1,243
Legal costs£0
Land Registry fees£0
Writ of possession fee£999999.99
Total£1,001,242.99
", "writWasGeneralApplicationToTransferToHighCourtSuccessful": "Yes"} From af6cee2cac3a53b283a302707b718a83d14e1367 Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Mon, 23 Mar 2026 13:39:36 +0000 Subject: [PATCH 41/54] HDPI-5188 - static imports --- .../warrantofrestitution/DefendantAtPropertyPage.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/DefendantAtPropertyPage.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/DefendantAtPropertyPage.java index 246cfaead9..43a56b8d72 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/DefendantAtPropertyPage.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/DefendantAtPropertyPage.java @@ -5,8 +5,9 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.PCSCase; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.WarrantOfRestitutionDetails; -import uk.gov.hmcts.reform.pcs.ccd.page.CommonPageContent; -import uk.gov.hmcts.reform.pcs.ccd.page.enforcetheorder.ShowConditionsEnforcementType; + +import static uk.gov.hmcts.reform.pcs.ccd.page.CommonPageContent.SAVE_AND_RETURN; +import static uk.gov.hmcts.reform.pcs.ccd.page.enforcetheorder.ShowConditionsEnforcementType.WARRANT_OF_RESTITUTION_FLOW; public class DefendantAtPropertyPage implements CcdPageConfiguration { @@ -50,7 +51,7 @@ public void addTo(PageBuilder pageBuilder) { pageBuilder .page("defendantAtProperty") .pageLabel("Evidence that the defendants are at the property") - .showCondition(ShowConditionsEnforcementType.WARRANT_OF_RESTITUTION_FLOW) + .showCondition(WARRANT_OF_RESTITUTION_FLOW) .label("defendantAtProperty-line-separator", "---") .label("defendantAtProperty-notice", DEFENDANT_AT_PROPERTY_INFORMATION) .complex(PCSCase::getEnforcementOrder) @@ -58,6 +59,6 @@ public void addTo(PageBuilder pageBuilder) { .mandatory(WarrantOfRestitutionDetails::getAdditionalDocuments) .done() .done() - .label("defendantAtProperty-saveAndReturn", CommonPageContent.SAVE_AND_RETURN); + .label("defendantAtProperty-saveAndReturn", SAVE_AND_RETURN); } } From ebe693867c30bcce803f207b4cc366b6203f231e Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Tue, 24 Mar 2026 09:05:13 +0000 Subject: [PATCH 42/54] HDPI-5188 - Remove check for null Statement of Truth which is expected to be non-null at this stage. Plus some refactoring to replace If blocks with Switch. --- .../mapper/RiskDetailsMapper.java | 20 ++++++++++------ .../WarrantOfRestitutionStrategy.java | 4 +--- .../WarrantOfRestitutionStrategyTest.java | 24 +------------------ 3 files changed, 15 insertions(+), 33 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapper.java index 780da43a95..61c58fe679 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapper.java @@ -26,13 +26,19 @@ public RiskProfileEntity toEntity(EnforcementOrderEntity enforcementOrderEntity, RiskProfileEntity riskProfileEntity = new RiskProfileEntity(); riskProfileEntity.setEnforcementOrder(enforcementOrderEntity); - if (enforcementOrder.getChooseEnforcementType().getValueCode().equals(SelectEnforcementType.WARRANT.name())) { - applyWarrantDetails(enforcementOrder.getWarrantDetails(), riskProfileEntity); - applyRawWarrantDetails(enforcementOrder.getRawWarrantDetails(), riskProfileEntity); - } else if (enforcementOrder.getChooseEnforcementType().getValueCode() - .equals(SelectEnforcementType.WARRANT_OF_RESTITUTION.name())) { - applyWarrantOfRestitutionDetails(enforcementOrder.getWarrantOfRestitutionDetails(), riskProfileEntity); - applyRawWarrantRestDetails(enforcementOrder.getRawWarrantRestDetails(), riskProfileEntity); + SelectEnforcementType enforcementType = + SelectEnforcementType.getSelectEnforcementTypeFromName( + enforcementOrder.getChooseEnforcementType().getValueCode()); + switch (enforcementType) { + case WARRANT -> { + applyWarrantDetails(enforcementOrder.getWarrantDetails(), riskProfileEntity); + applyRawWarrantDetails(enforcementOrder.getRawWarrantDetails(), riskProfileEntity); + } + case WARRANT_OF_RESTITUTION -> { + applyWarrantOfRestitutionDetails(enforcementOrder.getWarrantOfRestitutionDetails(), riskProfileEntity); + applyRawWarrantRestDetails(enforcementOrder.getRawWarrantRestDetails(), riskProfileEntity); + } + default -> {} // Not needed for other enforcement types } return riskProfileEntity; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java index 11a2891ef9..0e34d62f2f 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java @@ -42,8 +42,6 @@ private void processStatementOfTruth(EnforcementOrder enforcementOrder, EnforcementOrderEntity enforcementOrderEntity) { statementOfTruthMapper.mapStatementOfTruthForWarrantRest(enforcementOrder, enforcementOrderEntity); StatementOfTruthEntity statementOfTruthEntity = enforcementOrderEntity.getStatementOfTruth(); - if (statementOfTruthEntity != null) { - statementOfTruthRepository.save(statementOfTruthEntity); - } + statementOfTruthRepository.save(statementOfTruthEntity); } } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java index eda450ec12..fd3448e2a5 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java @@ -25,7 +25,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableCategory.VULNERABLE_CHILDREN; @@ -113,27 +112,6 @@ void shouldProcessStatementOfTruthAndSaveToRepository() { // Then verify(statementOfTruthMapper).mapStatementOfTruthForWarrantRest(enforcementOrder, enforcementOrderEntity); - } - - @Test - void shouldHandleNullStatementOfTruthAndSave() { - // Given - EnforcementOrder enforcementOrder = EnforcementOrder.builder() - .rawWarrantRestDetails(RawWarrantRestDetails.builder() - .statementOfTruthWarrantRest(null) - .build()) - .build(); - EnforcementOrderEntity enforcementOrderEntity = mock(EnforcementOrderEntity.class); - WarrantOfRestitutionEntity warrantOfRestitutionEntity = WarrantOfRestitutionEntity.builder().build(); - - when(warrantOfRestitutionMapper.toEntity(enforcementOrder, enforcementOrderEntity)) - .thenReturn(warrantOfRestitutionEntity); - when(warrantOfRestitutionRepository.save(warrantOfRestitutionEntity)).thenReturn(warrantOfRestitutionEntity); - - // When - underTest.process(enforcementOrderEntity, enforcementOrder); - - // Then - verify(statementOfTruthRepository, never()).save(any()); + verify(statementOfTruthRepository).save(any()); } } From 9ff96f8e81bd734a342dcfd7ccec3b59d970d8f2 Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Wed, 25 Mar 2026 16:34:42 +0000 Subject: [PATCH 43/54] HDPI-5188 - Added unit test for new util method --- .../pcs/ccd/util/EnforcementTypeUtilTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/util/EnforcementTypeUtilTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/util/EnforcementTypeUtilTest.java index 75de1a75fa..6e20bc784c 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/util/EnforcementTypeUtilTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/util/EnforcementTypeUtilTest.java @@ -1,6 +1,8 @@ package uk.gov.hmcts.reform.pcs.ccd.util; import org.junit.jupiter.api.Test; +import uk.gov.hmcts.ccd.sdk.type.YesOrNo; +import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicStringList; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicStringListElement; @@ -54,4 +56,22 @@ void shouldCreateEmptyDynamicStringListWhenGivenEmptyList() { assertThat(list).isNotNull(); assertThat(list.getListItems()).isNotNull().isEmpty(); } + + @Test + void shouldconvertYesOrNoToVerticalYesNoForYes() { + YesOrNo val = YesOrNo.YES; + + VerticalYesNo result = EnforcementTypeUtil.convertYesOrNoToVerticalYesNo(val); + + assertThat(result).isEqualTo(VerticalYesNo.YES); + } + + @Test + void shouldconvertYesOrNoToVerticalYesNoForNo() { + YesOrNo val = YesOrNo.NO; + + VerticalYesNo result = EnforcementTypeUtil.convertYesOrNoToVerticalYesNo(val); + + assertThat(result).isEqualTo(VerticalYesNo.NO); + } } \ No newline at end of file From fb15dd6ebefc9080c9cedbb52c19c1375c1022a0 Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Thu, 26 Mar 2026 10:17:04 +0000 Subject: [PATCH 44/54] HDPI-5188 - Mappers refactored and improved code coverage --- .../enforcetheorder/mapper/StatementOfTruthMapper.java | 8 +++----- .../strategy/WarrantOfRestitutionStrategy.java | 5 +++-- .../enforcetheorder/mapper/RiskDetailsMapperTest.java | 4 ++++ .../mapper/StatementOfTruthMapperTest.java | 10 +++------- .../strategy/WarrantOfRestitutionStrategyTest.java | 9 +++++---- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapper.java index 1a9c2585d6..e8c40564b2 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapper.java @@ -4,7 +4,6 @@ import org.springframework.stereotype.Component; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.entity.claim.StatementOfTruthEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.service.StatementOfTruthService; @Component @@ -13,13 +12,12 @@ public class StatementOfTruthMapper { private final StatementOfTruthService statementOfTruthService; - public void mapStatementOfTruthForWarrantRest(EnforcementOrder enforcementOrder, - EnforcementOrderEntity enforcementOrderEntity) { + public StatementOfTruthEntity mapStatementOfTruthForWarrantRest(EnforcementOrder enforcementOrder) { if (enforcementOrder.getRawWarrantRestDetails() != null && enforcementOrder.getRawWarrantRestDetails().getStatementOfTruthWarrantRest() != null) { - StatementOfTruthEntity statementOfTruthEntity = statementOfTruthService.createStatementOfTruth( + return statementOfTruthService.createStatementOfTruth( enforcementOrder.getRawWarrantRestDetails().getStatementOfTruthWarrantRest()); - enforcementOrderEntity.setStatementOfTruth(statementOfTruthEntity); } + return null; } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java index 0e34d62f2f..38ca7c94d4 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java @@ -40,8 +40,9 @@ private void processWarrantOfRestitution(EnforcementOrder enforcementOrder, private void processStatementOfTruth(EnforcementOrder enforcementOrder, EnforcementOrderEntity enforcementOrderEntity) { - statementOfTruthMapper.mapStatementOfTruthForWarrantRest(enforcementOrder, enforcementOrderEntity); - StatementOfTruthEntity statementOfTruthEntity = enforcementOrderEntity.getStatementOfTruth(); + StatementOfTruthEntity statementOfTruthEntity = + statementOfTruthMapper.mapStatementOfTruthForWarrantRest(enforcementOrder); + enforcementOrderEntity.setStatementOfTruth(statementOfTruthEntity); statementOfTruthRepository.save(statementOfTruthEntity); } } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapperTest.java index 3b76f9f5ad..747d8e2478 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/RiskDetailsMapperTest.java @@ -94,6 +94,8 @@ void mapsWarrantDetailsWhenRiskDetailsNull() { .warrantDetails(WarrantDetails.builder() .anyRiskToBailiff(YesNoNotSure.NO) .build()) + .rawWarrantDetails(RawWarrantDetails.builder() + .build()) .build(); RiskProfileEntity result = mapper.toEntity(orderEntity, order); @@ -166,6 +168,8 @@ void mapsWarrantOfRestitutionDetailsWhenRiskDetailsNull() { .warrantOfRestitutionDetails(WarrantOfRestitutionDetails.builder() .anyRiskToBailiff(YesNoNotSure.NO) .build()) + .rawWarrantRestDetails(RawWarrantRestDetails.builder() + .build()) .build(); RiskProfileEntity result = mapper.toEntity(orderEntity, order); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapperTest.java index 5d4fb65732..d48ecdb59f 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapperTest.java @@ -11,7 +11,6 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.claim.StatementOfTruthEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.service.StatementOfTruthService; import static org.assertj.core.api.Assertions.assertThat; @@ -28,12 +27,10 @@ class StatementOfTruthMapperTest { @InjectMocks private StatementOfTruthMapper underTest; - private EnforcementOrderEntity enforcementOrderEntity; private StatementOfTruthEntity statementOfTruthEntity; @BeforeEach void setUp() { - enforcementOrderEntity = new EnforcementOrderEntity(); statementOfTruthEntity = new StatementOfTruthEntity(); statementOfTruthEntity.setCompletedBy(StatementOfTruthCompletedBy.CLAIMANT); statementOfTruthEntity.setFullName("John Doe"); @@ -56,8 +53,7 @@ void shouldMapStatementOfTruthForWarrantRest() { .thenReturn(statementOfTruthEntity); // When - underTest.mapStatementOfTruthForWarrantRest(enforcementOrder, enforcementOrderEntity); - StatementOfTruthEntity result = enforcementOrderEntity.getStatementOfTruth(); + StatementOfTruthEntity result = underTest.mapStatementOfTruthForWarrantRest(enforcementOrder); // Then assertThat(result.getCompletedBy()).isEqualTo(StatementOfTruthCompletedBy.CLAIMANT); @@ -72,7 +68,7 @@ void shouldHandleNullStatementOfTruthForWarrantRest() { .rawWarrantRestDetails(rawWarrantRestDetails).build(); // When - underTest.mapStatementOfTruthForWarrantRest(enforcementOrder, enforcementOrderEntity); + underTest.mapStatementOfTruthForWarrantRest(enforcementOrder); // Then verify(statementOfTruthService, never()).createStatementOfTruth(any()); @@ -83,7 +79,7 @@ void shouldHandleNullRawWarrantRest() { EnforcementOrder enforcementOrder = EnforcementOrder.builder().build(); // When - underTest.mapStatementOfTruthForWarrantRest(enforcementOrder, enforcementOrderEntity); + underTest.mapStatementOfTruthForWarrantRest(enforcementOrder); // Then verify(statementOfTruthService, never()).createStatementOfTruth(any()); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java index fd3448e2a5..785c4f85e7 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java @@ -23,7 +23,6 @@ import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantOfRestitutionMapper; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -75,7 +74,7 @@ void shouldProcessWarrantOfRestitutionDetailsAndSaveToRepository() { // Then verify(riskProfileService).processRisk(enforcementOrder, enforcementOrderEntity); verify(warrantOfRestitutionRepository).save(captor.capture()); - verify(statementOfTruthMapper).mapStatementOfTruthForWarrantRest(enforcementOrder, enforcementOrderEntity); + verify(statementOfTruthMapper).mapStatementOfTruthForWarrantRest(enforcementOrder); WarrantOfRestitutionEntity saved = captor.getValue(); assertThat(saved).isNotNull(); assertThat(saved.getEnforcementOrder()).isSameAs(enforcementOrderEntity); @@ -106,12 +105,14 @@ void shouldProcessStatementOfTruthAndSaveToRepository() { when(warrantOfRestitutionMapper.toEntity(enforcementOrder, enforcementOrderEntity)) .thenReturn(warrantOfRestitutionEntity); when(warrantOfRestitutionRepository.save(warrantOfRestitutionEntity)).thenReturn(warrantOfRestitutionEntity); + when(statementOfTruthMapper.mapStatementOfTruthForWarrantRest(enforcementOrder)) + .thenReturn(statementOfTruthEntity); // When underTest.process(enforcementOrderEntity, enforcementOrder); // Then - verify(statementOfTruthMapper).mapStatementOfTruthForWarrantRest(enforcementOrder, enforcementOrderEntity); - verify(statementOfTruthRepository).save(any()); + verify(statementOfTruthMapper).mapStatementOfTruthForWarrantRest(enforcementOrder); + verify(statementOfTruthRepository).save(statementOfTruthEntity); } } From bf1ae1b6bac57ce6f28d5b2164a10a075c2d5f29 Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Thu, 26 Mar 2026 11:22:22 +0000 Subject: [PATCH 45/54] HDPI-5188 - Mapper and unit test changes --- .../mapper/WarrantOfRestitutionMapper.java | 30 +++++++++---------- .../WarrantOfRestitutionStrategy.java | 1 - .../WarrantOfRestitutionMapperTest.java | 27 +++++++++++++---- .../WarrantOfRestitutionStrategyTest.java | 4 ++- 4 files changed, 39 insertions(+), 23 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java index da3782d8cb..c4af07b2ad 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java @@ -86,38 +86,38 @@ public WarrantOfRestitutionEntity toEntity(EnforcementOrder enforcementOrder, .enforcementOrder(enforcementOrderEntity).build(); if (enforcementOrder.getWarrantOfRestitutionDetails() != null) { WarrantOfRestitutionDetails warrantOfRestitutionDetails = enforcementOrder.getWarrantOfRestitutionDetails(); - controlFlags(warrantOfRestitutionEntity, warrantOfRestitutionDetails); - peopleToEvict(warrantOfRestitutionEntity, warrantOfRestitutionDetails); - defendantReturned(warrantOfRestitutionEntity, warrantOfRestitutionDetails); - additionalInformation(warrantOfRestitutionEntity, warrantOfRestitutionDetails); - propertyAccessDetails(warrantOfRestitutionEntity, warrantOfRestitutionDetails); + mapControlFlags(warrantOfRestitutionEntity, warrantOfRestitutionDetails); + mapPeopleToEvict(warrantOfRestitutionEntity, warrantOfRestitutionDetails); + mapDefendantReturned(warrantOfRestitutionEntity, warrantOfRestitutionDetails); + mapAdditionalInformation(warrantOfRestitutionEntity, warrantOfRestitutionDetails); + mapPropertyAccessDetails(warrantOfRestitutionEntity, warrantOfRestitutionDetails); } return warrantOfRestitutionEntity; } - private void controlFlags(WarrantOfRestitutionEntity warrantOfRestitutionEntity, - WarrantOfRestitutionDetails warrantOfRestitutionDetails) { + private void mapControlFlags(WarrantOfRestitutionEntity warrantOfRestitutionEntity, + WarrantOfRestitutionDetails warrantOfRestitutionDetails) { warrantOfRestitutionEntity.setShowPeopleWhoWillBeEvictedPage( convertYesOrNoToVerticalYesNo(warrantOfRestitutionDetails.getShowPeopleWhoWillBeEvictedPage())); warrantOfRestitutionEntity.setShowPeopleYouWantToEvictPage( convertYesOrNoToVerticalYesNo(warrantOfRestitutionDetails.getShowPeopleYouWantToEvictPage())); } - private void peopleToEvict(WarrantOfRestitutionEntity warrantOfRestitutionEntity, - WarrantOfRestitutionDetails warrantOfRestitutionDetails) { + private void mapPeopleToEvict(WarrantOfRestitutionEntity warrantOfRestitutionEntity, + WarrantOfRestitutionDetails warrantOfRestitutionDetails) { if (warrantOfRestitutionDetails.getPeopleToEvict() != null) { warrantOfRestitutionEntity.setEvictEveryone(warrantOfRestitutionDetails.getPeopleToEvict() .getEvictEveryone()); } } - private void defendantReturned(WarrantOfRestitutionEntity warrantOfRestitutionEntity, - WarrantOfRestitutionDetails warrantOfRestitutionDetails) { + private void mapDefendantReturned(WarrantOfRestitutionEntity warrantOfRestitutionEntity, + WarrantOfRestitutionDetails warrantOfRestitutionDetails) { warrantOfRestitutionEntity.setHowDefendantsReturned(warrantOfRestitutionDetails.getHowDefendantsReturned()); } - private void additionalInformation(WarrantOfRestitutionEntity warrantOfRestitutionEntity, - WarrantOfRestitutionDetails warrantOfRestitutionDetails) { + private void mapAdditionalInformation(WarrantOfRestitutionEntity warrantOfRestitutionEntity, + WarrantOfRestitutionDetails warrantOfRestitutionDetails) { if (warrantOfRestitutionDetails.getAdditionalInformation() != null) { warrantOfRestitutionEntity.setAdditionalInformationSelect( warrantOfRestitutionDetails.getAdditionalInformation().getAdditionalInformationSelect()); @@ -126,8 +126,8 @@ private void additionalInformation(WarrantOfRestitutionEntity warrantOfRestituti } } - private void propertyAccessDetails(WarrantOfRestitutionEntity warrantOfRestitutionEntity, - WarrantOfRestitutionDetails warrantOfRestitutionDetails) { + private void mapPropertyAccessDetails(WarrantOfRestitutionEntity warrantOfRestitutionEntity, + WarrantOfRestitutionDetails warrantOfRestitutionDetails) { if (warrantOfRestitutionDetails.getPropertyAccessDetails() != null) { warrantOfRestitutionEntity.setIsDifficultToAccessProperty( warrantOfRestitutionDetails.getPropertyAccessDetails().getIsDifficultToAccessProperty()); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java index 38ca7c94d4..ef86ac81c8 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java @@ -33,7 +33,6 @@ private void processWarrantOfRestitution(EnforcementOrder enforcementOrder, EnforcementOrderEntity enforcementOrderEntity) { WarrantOfRestitutionEntity warrantOfRestitutionEntity = warrantOfRestitutionMapper.toEntity(enforcementOrder, enforcementOrderEntity); - warrantOfRestitutionEntity.setEnforcementOrder(enforcementOrderEntity); WarrantOfRestitutionEntity saved = warrantOfRestitutionRepository.save(warrantOfRestitutionEntity); enforcementOrderEntity.setWarrantOfRestitutionDetails(saved); } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java index 11b0ab22a9..34c0e3dc60 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java @@ -146,7 +146,7 @@ void shouldMapToEntityWithNullWarrantOfRestitutionDetails() { } @Test - void shouldMapControlFlags() { + void shouldMapMapControlFlags() { // Given WarrantOfRestitutionDetails warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder() .showPeopleWhoWillBeEvictedPage(YesOrNo.NO) @@ -164,7 +164,7 @@ void shouldMapControlFlags() { } @Test - void shouldMapControlFlagsWithNullValues() { + void shouldMapMapControlFlagsWithNullValues() { // Given WarrantOfRestitutionDetails warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder() .showPeopleWhoWillBeEvictedPage(null) @@ -183,7 +183,7 @@ void shouldMapControlFlagsWithNullValues() { } @Test - void shouldMapAdditionalInformation() { + void shouldMapMapAdditionalInformation() { // Given AdditionalInformation additionalInfo = AdditionalInformation.builder() .additionalInformationSelect(VerticalYesNo.YES) @@ -204,7 +204,7 @@ void shouldMapAdditionalInformation() { } @Test - void shouldHandleNullAdditionalInformation() { + void shouldHandleNullMapAdditionalInformation() { // Given WarrantOfRestitutionDetails warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder() .additionalInformation(null) @@ -223,7 +223,7 @@ void shouldHandleNullAdditionalInformation() { } @Test - void shouldMapPeopleToEvict() { + void shouldMapMapPeopleToEvict() { // Given PeopleToEvict peopleToEvict = PeopleToEvict.builder().evictEveryone(VerticalYesNo.YES).build(); WarrantOfRestitutionDetails warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder() @@ -239,7 +239,22 @@ void shouldMapPeopleToEvict() { } @Test - void shouldMapPropertyAccessDetails() { + void shouldMapDefendantReturned() { + // Given + WarrantOfRestitutionDetails warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder() + .howDefendantsReturned("defendants returned test").build(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .warrantOfRestitutionDetails(warrantOfRestitutionDetails).build(); + + // When + WarrantOfRestitutionEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); + + // Then + assertThat(result.getHowDefendantsReturned()).isEqualTo("defendants returned test"); + } + + @Test + void shouldMapMapPropertyAccessDetails() { // Given PropertyAccessDetails accessDetails = PropertyAccessDetails.builder() .isDifficultToAccessProperty(VerticalYesNo.YES) diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java index 785c4f85e7..be9dda734f 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java @@ -62,7 +62,9 @@ void shouldProcessWarrantOfRestitutionDetailsAndSaveToRepository() { EnforcementOrder enforcementOrder = EnforcementOrder.builder() .warrantOfRestitutionDetails(warrantOfRestitutionDetails) .rawWarrantRestDetails(rawWarrantRestDetails).build(); - WarrantOfRestitutionEntity warrantOfRestitutionEntity = WarrantOfRestitutionEntity.builder().build(); + WarrantOfRestitutionEntity warrantOfRestitutionEntity = WarrantOfRestitutionEntity.builder() + .enforcementOrder(enforcementOrderEntity) + .build(); when(warrantOfRestitutionMapper.toEntity(enforcementOrder, enforcementOrderEntity)) .thenReturn(warrantOfRestitutionEntity); when(warrantOfRestitutionRepository.save(warrantOfRestitutionEntity)).thenReturn(warrantOfRestitutionEntity); From 96e4e0a1251012af42201ea011198584c5701c63 Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Thu, 26 Mar 2026 12:33:56 +0000 Subject: [PATCH 46/54] HDPI-5188 - Removed unnecessary tests --- .../RiskProfileServiceTest.java | 206 +----------------- 1 file changed, 3 insertions(+), 203 deletions(-) diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/RiskProfileServiceTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/RiskProfileServiceTest.java index ea2c8bcc30..f7617b6b35 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/RiskProfileServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/RiskProfileServiceTest.java @@ -1,38 +1,20 @@ package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder; - -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.ArgumentCaptor; -import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RiskDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableAdultsChildren; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableCategory; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.RiskProfileEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.RiskProfileRepository; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.RiskDetailsMapper; -import java.util.stream.Stream; - -import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableCategory.VULNERABLE_CHILDREN; import static uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.EnforcementDataUtil.createExpectedRiskProfileEntity; @ExtendWith(MockitoExtension.class) @@ -45,201 +27,19 @@ class RiskProfileServiceTest { @InjectMocks private RiskProfileService underTest; - private RiskDetails riskDetails; - private EnforcementOrderEntity enforcementOrderEntity; - private EnforcementOrder enforcementOrder; - private WarrantDetails warrantDetails; - @Captor - private ArgumentCaptor riskProfileCaptor; - - @BeforeEach - void setUp() { - enforcementOrderEntity = mock(EnforcementOrderEntity.class); - - warrantDetails = WarrantDetails.builder().anyRiskToBailiff(YesNoNotSure.YES).riskDetails(riskDetails).build(); - - VulnerableAdultsChildren vulnerableAdultsChildren = VulnerableAdultsChildren.builder() - .vulnerableCategory(VULNERABLE_CHILDREN).vulnerableReasonText("Young children present").build(); - - RawWarrantDetails rawWarrantDetails = RawWarrantDetails.builder() - .vulnerablePeoplePresent(YesNoNotSure.YES).vulnerableAdultsChildren(vulnerableAdultsChildren).build(); - - enforcementOrder = EnforcementOrder.builder().warrantDetails(warrantDetails) - .rawWarrantDetails(rawWarrantDetails).build(); - - riskDetails = RiskDetails.builder() - .violentDetails("Violent behavior reported") - .firearmsDetails("Firearms present") - .criminalDetails("Criminal history") - .verbalThreatsDetails("Verbal threats made") - .protestGroupDetails("Member of protest group") - .policeSocialServicesDetails("Police involvement") - .animalsDetails("Aggressive dogs on premises") - .build(); - } - - @ParameterizedTest - @MethodSource("provideNullWarrantDetailsScenarios") - void shouldHandleNullValuesInWarrantDetails( - RawWarrantDetails rawWarrantDetails, - YesNoNotSure expectedVulnerablePeoplePresent, - boolean expectNullVulnerableFields - ) { - // Given - enforcementOrder.setRawWarrantDetails(rawWarrantDetails); - RiskProfileEntity riskProfileEntity = new RiskProfileEntity(); - if (expectedVulnerablePeoplePresent != null) { - riskProfileEntity.setVulnerablePeoplePresent(expectedVulnerablePeoplePresent); - } - when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); - - // When - underTest.processRisk(enforcementOrder, enforcementOrderEntity); - - // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - - assertThat(capturedEntity.getVulnerablePeoplePresent()).isEqualTo(expectedVulnerablePeoplePresent); - if (expectNullVulnerableFields) { - assertThat(capturedEntity.getVulnerableCategory()).isNull(); - assertThat(capturedEntity.getVulnerableReasonText()).isNull(); - } - } - - private static Stream provideNullWarrantDetailsScenarios() { - RawWarrantDetails withNullVulnerableChildren = RawWarrantDetails.builder() - .vulnerablePeoplePresent(YesNoNotSure.YES) - .vulnerableAdultsChildren(null) - .build(); - - return Stream.of( - Arguments.of(null, null, true), - Arguments.of(withNullVulnerableChildren, YesNoNotSure.YES, true) - ); - } - @Test void shouldProcessRiskDetailsSuccessfully() { // Given - RiskProfileEntity savedEntity = createExpectedRiskProfileEntity(enforcementOrderEntity); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(savedEntity); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(savedEntity); - - // When - underTest.processRisk(enforcementOrder, enforcementOrderEntity); - - // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - - assertThat(capturedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); - assertThat(capturedEntity.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.YES); - assertThat(capturedEntity.getViolentDetails()).isEqualTo("Violent behavior reported"); - assertThat(capturedEntity.getFirearmsDetails()).isEqualTo("Firearms present"); - assertThat(capturedEntity.getCriminalDetails()).isEqualTo("Criminal history"); - assertThat(capturedEntity.getVerbalThreatsDetails()).isEqualTo("Verbal threats made"); - assertThat(capturedEntity.getProtestGroupDetails()).isEqualTo("Member of protest group"); - assertThat(capturedEntity.getPoliceSocialServicesDetails()).isEqualTo("Police involvement"); - assertThat(capturedEntity.getAnimalsDetails()).isEqualTo("Aggressive dogs on premises"); - assertThat(capturedEntity.getVulnerablePeoplePresent()).isEqualTo(YesNoNotSure.YES); - assertThat(capturedEntity.getVulnerableCategory()).isEqualTo(VULNERABLE_CHILDREN); - assertThat(capturedEntity.getVulnerableReasonText()).isEqualTo("Young children present"); - } - - @Test - void shouldHandleWarrantDetailsWithNoRiskToBailiff() { - // Given - warrantDetails.setAnyRiskToBailiff(YesNoNotSure.NO); - RiskProfileEntity riskProfileEntity = new RiskProfileEntity(); - riskProfileEntity.setAnyRiskToBailiff(YesNoNotSure.NO); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); - - // When - underTest.processRisk(enforcementOrder, enforcementOrderEntity); - - // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - - assertThat(capturedEntity.getAnyRiskToBailiff()).isEqualTo(YesNoNotSure.NO); - } - - @Test - void shouldHandleMinimalEnforcementOrder() { - // Given - RiskProfileEntity riskProfileEntity = createExpectedRiskProfileEntity(enforcementOrderEntity); - riskProfileEntity.setAnyRiskToBailiff(null); - when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(riskProfileEntity); - EnforcementOrder minimalOrder = EnforcementOrder.builder().build(); + EnforcementOrderEntity enforcementOrderEntity = mock(EnforcementOrderEntity.class); - // When - underTest.processRisk(minimalOrder, enforcementOrderEntity); - - // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - - assertThat(capturedEntity.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); - assertThat(capturedEntity.getAnyRiskToBailiff()).isNull(); - } - - @Test - void shouldMapAllRiskDetailsFieldsCorrectly() { - // Given + EnforcementOrder enforcementOrder = mock(EnforcementOrder.class); RiskProfileEntity riskProfileEntity = createExpectedRiskProfileEntity(enforcementOrderEntity); when(riskProfileMapper.toEntity(any(), any())).thenReturn(riskProfileEntity); - when(riskProfileRepository.save(riskProfileEntity)).thenReturn(riskProfileEntity); // When underTest.processRisk(enforcementOrder, enforcementOrderEntity); // Then - verify(riskProfileRepository).save(riskProfileCaptor.capture()); - RiskProfileEntity capturedEntity = riskProfileCaptor.getValue(); - - assertThat(capturedEntity.getViolentDetails()).isEqualTo(riskDetails.getViolentDetails()); - assertThat(capturedEntity.getFirearmsDetails()).isEqualTo(riskDetails.getFirearmsDetails()); - assertThat(capturedEntity.getCriminalDetails()).isEqualTo(riskDetails.getCriminalDetails()); - assertThat(capturedEntity.getVerbalThreatsDetails()).isEqualTo(riskDetails.getVerbalThreatsDetails()); - assertThat(capturedEntity.getProtestGroupDetails()).isEqualTo(riskDetails.getProtestGroupDetails()); - assertThat(capturedEntity.getPoliceSocialServicesDetails()) - .isEqualTo(riskDetails.getPoliceSocialServicesDetails()); - assertThat(capturedEntity.getAnimalsDetails()).isEqualTo(riskDetails.getAnimalsDetails()); - } - - @Test - void shouldSaveRiskProfileBeforeSelectedDefendants() { - // Given - when(riskProfileMapper.toEntity(any(), any())).thenReturn(new RiskProfileEntity()); - when(riskProfileRepository.save(any(RiskProfileEntity.class))).thenReturn(new RiskProfileEntity()); - - // When - underTest.processRisk(enforcementOrder, enforcementOrderEntity); - - // Then - verify(riskProfileRepository).save(any(RiskProfileEntity.class)); - } - - @Test - void shouldPersistVulnerabilityDetailsInRiskProfile() { - // Given: order with raw warrant details (vulnerability) - final EnforcementOrder enfOrder = EnforcementDataUtil.buildEnforcementOrderWithVulnerability(); - final RiskProfileEntity stubbedRiskProfile = new RiskProfileEntity(); - stubbedRiskProfile.setVulnerablePeoplePresent(YesNoNotSure.YES); - stubbedRiskProfile.setVulnerableCategory(VulnerableCategory.VULNERABLE_ADULTS); - stubbedRiskProfile.setVulnerableReasonText("Vulnerability reason"); - when(riskProfileMapper.toEntity(any(EnforcementOrderEntity.class), eq(enfOrder))) - .thenReturn(stubbedRiskProfile); - - // When - underTest.processRisk(enfOrder, enforcementOrderEntity); - - // Then: service calls mapper and saves returned risk profile - verify(riskProfileMapper).toEntity(any(), any()); - verify(riskProfileRepository).save(riskProfileCaptor.capture()); + verify(riskProfileRepository).save(riskProfileEntity); } } \ No newline at end of file From ed42b6f7cdb8e1b74462807715ec5b90e5d9d6d2 Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Thu, 26 Mar 2026 13:31:32 +0000 Subject: [PATCH 47/54] HDPI-5188 - Removed Evict everyone and changed placeholder to next page in the flow --- .../WarrantOfRestitutionEntity.java | 5 ----- ...leYouWantToEvictWarrantRestPlaceholder.java} | 10 +++++----- .../WarrantOfRestitutionPageConfigurer.java | 2 +- .../mapper/WarrantOfRestitutionMapper.java | 9 --------- ...forcement_warrant_of_restitution_details.sql | 3 --- .../WarrantOfRestitutionPageConfigurerTest.java | 2 +- .../mapper/WarrantOfRestitutionMapperTest.java | 17 ----------------- 7 files changed, 7 insertions(+), 41 deletions(-) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/{PeopleWhoWillBeEvictedWarrantRestPlaceholder.java => PeopleYouWantToEvictWarrantRestPlaceholder.java} (57%) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java index 3e1d20f90a..1deacde8ed 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java @@ -52,11 +52,6 @@ public class WarrantOfRestitutionEntity { @JdbcTypeCode(SqlTypes.NAMED_ENUM) private VerticalYesNo showPeopleYouWantToEvictPage; - // PeopleToEvict - @Enumerated(EnumType.STRING) - @JdbcTypeCode(SqlTypes.NAMED_ENUM) - private VerticalYesNo evictEveryone; - // Defendants Returned private String howDefendantsReturned; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/PeopleWhoWillBeEvictedWarrantRestPlaceholder.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/PeopleYouWantToEvictWarrantRestPlaceholder.java similarity index 57% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/PeopleWhoWillBeEvictedWarrantRestPlaceholder.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/PeopleYouWantToEvictWarrantRestPlaceholder.java index a8b752ad02..c0c6fb1220 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/PeopleWhoWillBeEvictedWarrantRestPlaceholder.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/PeopleYouWantToEvictWarrantRestPlaceholder.java @@ -6,15 +6,15 @@ import static uk.gov.hmcts.reform.pcs.ccd.page.CommonPageContent.SAVE_AND_RETURN; import static uk.gov.hmcts.reform.pcs.ccd.page.enforcetheorder.ShowConditionsEnforcementType.WARRANT_OF_RESTITUTION_FLOW; -public class PeopleWhoWillBeEvictedWarrantRestPlaceholder implements CcdPageConfiguration { +public class PeopleYouWantToEvictWarrantRestPlaceholder implements CcdPageConfiguration { @Override public void addTo(PageBuilder pageBuilder) { pageBuilder - .page("peopleWhoWillBeEvictedWarrantRestitution") - .pageLabel("The people who will be evicted (placeholder)") + .page("peopleYouWantToEvictWarrantRest") + .pageLabel("The people you want to evict (placeholder)") .showCondition(WARRANT_OF_RESTITUTION_FLOW) - .label("peopleWhoWillBeEvictedWarrantRestitution-line-separator", "---") - .label("peopleWhoWillBeEvictedWarrantRestitution-save-and-return", SAVE_AND_RETURN); + .label("peopleYouWantToEvictWarrantRest-line-separator", "---") + .label("peopleYouWantToEvictWarrantRest-save-and-return", SAVE_AND_RETURN); } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/WarrantOfRestitutionPageConfigurer.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/WarrantOfRestitutionPageConfigurer.java index f08c265637..700b5707d1 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/WarrantOfRestitutionPageConfigurer.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/WarrantOfRestitutionPageConfigurer.java @@ -16,7 +16,7 @@ public class WarrantOfRestitutionPageConfigurer implements PageConfigurer { @Override public void configurePages(PageBuilder pageBuilder) { pageBuilder - .add(new PeopleWhoWillBeEvictedWarrantRestPlaceholder()) + .add(new PeopleYouWantToEvictWarrantRestPlaceholder()) .add(new ShareEvidenceWithJudgePage()) .add(explainHowDefendantsReturnedPage) .add(new DefendantAtPropertyPage()) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java index c4af07b2ad..d003931482 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java @@ -87,7 +87,6 @@ public WarrantOfRestitutionEntity toEntity(EnforcementOrder enforcementOrder, if (enforcementOrder.getWarrantOfRestitutionDetails() != null) { WarrantOfRestitutionDetails warrantOfRestitutionDetails = enforcementOrder.getWarrantOfRestitutionDetails(); mapControlFlags(warrantOfRestitutionEntity, warrantOfRestitutionDetails); - mapPeopleToEvict(warrantOfRestitutionEntity, warrantOfRestitutionDetails); mapDefendantReturned(warrantOfRestitutionEntity, warrantOfRestitutionDetails); mapAdditionalInformation(warrantOfRestitutionEntity, warrantOfRestitutionDetails); mapPropertyAccessDetails(warrantOfRestitutionEntity, warrantOfRestitutionDetails); @@ -103,14 +102,6 @@ private void mapControlFlags(WarrantOfRestitutionEntity warrantOfRestitutionEnti convertYesOrNoToVerticalYesNo(warrantOfRestitutionDetails.getShowPeopleYouWantToEvictPage())); } - private void mapPeopleToEvict(WarrantOfRestitutionEntity warrantOfRestitutionEntity, - WarrantOfRestitutionDetails warrantOfRestitutionDetails) { - if (warrantOfRestitutionDetails.getPeopleToEvict() != null) { - warrantOfRestitutionEntity.setEvictEveryone(warrantOfRestitutionDetails.getPeopleToEvict() - .getEvictEveryone()); - } - } - private void mapDefendantReturned(WarrantOfRestitutionEntity warrantOfRestitutionEntity, WarrantOfRestitutionDetails warrantOfRestitutionDetails) { warrantOfRestitutionEntity.setHowDefendantsReturned(warrantOfRestitutionDetails.getHowDefendantsReturned()); diff --git a/src/main/resources/db/migration/V071__enforcement_warrant_of_restitution_details.sql b/src/main/resources/db/migration/V071__enforcement_warrant_of_restitution_details.sql index eeaf9ca732..8826396407 100644 --- a/src/main/resources/db/migration/V071__enforcement_warrant_of_restitution_details.sql +++ b/src/main/resources/db/migration/V071__enforcement_warrant_of_restitution_details.sql @@ -11,9 +11,6 @@ ALTER TABLE public.enf_warrant_of_restitution ADD COLUMN show_people_who_will_be_evicted_page YES_NO, ADD COLUMN show_people_you_want_to_evict_page YES_NO, --- PeopleToEvict -ADD COLUMN evict_everyone YES_NO, - -- How the defendants returned to the property ADD COLUMN how_defendants_returned VARCHAR(6800), diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/WarrantOfRestitutionPageConfigurerTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/WarrantOfRestitutionPageConfigurerTest.java index 35fd408dfc..ba4e38b806 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/WarrantOfRestitutionPageConfigurerTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/enforcetheorder/warrantofrestitution/WarrantOfRestitutionPageConfigurerTest.java @@ -50,7 +50,7 @@ void shouldConfigurePagesInCorrectOrder() { InOrder inOrder = Mockito.inOrder(pageBuilder); Mockito.verify(pageBuilder, Mockito.atLeastOnce()).add(pageCaptor.capture()); AtomicInteger verificationCount = new AtomicInteger(0); - verifyAndCount(inOrder, pageBuilder, PeopleWhoWillBeEvictedWarrantRestPlaceholder.class, + verifyAndCount(inOrder, pageBuilder, PeopleYouWantToEvictWarrantRestPlaceholder.class, verificationCount); verifyAndCount(inOrder, pageBuilder, ShareEvidenceWithJudgePage.class, verificationCount); verifyAndCount(inOrder, pageBuilder, explainHowDefendantsReturnedPage, verificationCount); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java index 34c0e3dc60..659047288a 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java @@ -17,7 +17,6 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableAdultsChildren; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableCategory; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.AdditionalInformation; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PeopleToEvict; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.WarrantOfRestitutionDetails; @@ -222,22 +221,6 @@ void shouldHandleNullMapAdditionalInformation() { assertThat(result.getAdditionalInformationDetails()).isNull(); } - @Test - void shouldMapMapPeopleToEvict() { - // Given - PeopleToEvict peopleToEvict = PeopleToEvict.builder().evictEveryone(VerticalYesNo.YES).build(); - WarrantOfRestitutionDetails warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder() - .peopleToEvict(peopleToEvict).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder() - .warrantOfRestitutionDetails(warrantOfRestitutionDetails).build(); - - // When - WarrantOfRestitutionEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getEvictEveryone()).isEqualTo(VerticalYesNo.YES); - } - @Test void shouldMapDefendantReturned() { // Given From 856c8c619544303111a3ed06a6c53526d67fd640 Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Thu, 26 Mar 2026 13:38:44 +0000 Subject: [PATCH 48/54] HDPI-5188 - Bumped up migration script number --- ...s.sql => V072__enforcement_warrant_of_restitution_details.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V071__enforcement_warrant_of_restitution_details.sql => V072__enforcement_warrant_of_restitution_details.sql} (100%) diff --git a/src/main/resources/db/migration/V071__enforcement_warrant_of_restitution_details.sql b/src/main/resources/db/migration/V072__enforcement_warrant_of_restitution_details.sql similarity index 100% rename from src/main/resources/db/migration/V071__enforcement_warrant_of_restitution_details.sql rename to src/main/resources/db/migration/V072__enforcement_warrant_of_restitution_details.sql From 9b7bfe9aa1bdbae22f29b7febec80458fccce346 Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Thu, 26 Mar 2026 21:10:16 +0000 Subject: [PATCH 49/54] HDPI-5188 - Implemented service class for Warrant of Restitution Document persistence --- .../reform/pcs/ccd/domain/DocumentType.java | 1 + ...ava => EvidenceOfDefendantsDocuments.java} | 2 +- .../WarrantOfRestitutionDetails.java | 2 +- .../reform/pcs/ccd/entity/DocumentEntity.java | 2 +- .../EnforcementOrderEntity.java | 8 ++- .../pcs/ccd/service/DocumentService.java | 71 +++++++++++++++---- .../EnforcementOrderService.java | 5 +- .../WarrantOfRestitutionStrategy.java | 19 +++++ .../pcs/ccd/service/DocumentServiceTest.java | 60 ++++++++++++++++ .../WarrantOfRestitutionStrategyTest.java | 53 ++++++++++++++ 10 files changed, 204 insertions(+), 19 deletions(-) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/{EvidenceOfDefendants.java => EvidenceOfDefendantsDocuments.java} (94%) 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 d3fd6fc7b9..964c3c163b 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 @@ -24,6 +24,7 @@ public enum DocumentType implements HasLabel { INSPECTION_OR_REPORT("Inspection or report"), CERTIFICATE_OF_SUITABILITY_AS_LF("Certificate of suitability as litigation friend"), LEGAL_AID_CERTIFICATE("Legal aid certificate"), + POLICE_REPORT("Police report"), OTHER("Other document"); private final String label; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/EvidenceOfDefendants.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/EvidenceOfDefendantsDocuments.java similarity index 94% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/EvidenceOfDefendants.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/EvidenceOfDefendantsDocuments.java index 61c4b56e5b..b89180406d 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/EvidenceOfDefendants.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/EvidenceOfDefendantsDocuments.java @@ -12,7 +12,7 @@ @Builder @NoArgsConstructor @AllArgsConstructor -public class EvidenceOfDefendants { +public class EvidenceOfDefendantsDocuments { @CCD( label = "Type of document", diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java index 5185967081..4d4ce57a7d 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java @@ -82,7 +82,7 @@ public class WarrantOfRestitutionDetails { label = "Add document", hint = "Upload a document to the system" ) - private List> additionalDocuments; + private List> additionalDocuments; @JsonUnwrapped @CCD diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DocumentEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DocumentEntity.java index fd8432f267..4b80a4d5c9 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DocumentEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DocumentEntity.java @@ -63,5 +63,5 @@ public class DocumentEntity { @ManyToOne(fetch = LAZY) @JoinColumn(name = "enf_case_id") @JsonBackReference - private EnforcementOrderEntity enforcementOrder; + private EnforcementOrderEntity enfCase; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/EnforcementOrderEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/EnforcementOrderEntity.java index 40cf76f73f..994a85814f 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/EnforcementOrderEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/EnforcementOrderEntity.java @@ -64,9 +64,15 @@ public class EnforcementOrderEntity { @JsonBackReference private StatementOfTruthEntity statementOfTruth; - @OneToMany(mappedBy = "enforcementOrder", fetch = LAZY, cascade = ALL, orphanRemoval = true) + @OneToMany(mappedBy = "enfCase", fetch = LAZY, cascade = ALL, orphanRemoval = true) @Builder.Default @JsonManagedReference private List documents = new ArrayList<>(); + public void addDocuments(List documents) { + for (DocumentEntity document : documents) { + document.setEnfCase(this); + this.documents.add(document); + } + } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentService.java index 707fcfea1c..ad34b687f0 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentService.java @@ -3,6 +3,7 @@ import lombok.AllArgsConstructor; import org.apache.commons.lang3.tuple.Pair; import org.springframework.stereotype.Service; +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; @@ -12,6 +13,9 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.PCSCase; import uk.gov.hmcts.reform.pcs.ccd.domain.RentArrearsSection; import uk.gov.hmcts.reform.pcs.ccd.domain.TenancyLicenceDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceDocumentType; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceOfDefendantsDocuments; import uk.gov.hmcts.reform.pcs.ccd.domain.wales.OccupationLicenceDetailsWales; import uk.gov.hmcts.reform.pcs.ccd.entity.DocumentEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.DocumentRepository; @@ -31,37 +35,56 @@ public class DocumentService { public List createAllDocuments(PCSCase pcsCase) { + List> allDocuments = getPcsCaseDocuments(pcsCase); + + return documentRepository.saveAll(createDocumentEntities(allDocuments)); + } + + public List createAllDocuments(EnforcementOrder enforcementOrder) { + + List> allDocuments = getWarrantOfRestitutionDocuments(enforcementOrder); + + return documentRepository.saveAll(createDocumentEntities(allDocuments)); + } + + private List> getPcsCaseDocuments(PCSCase pcsCase) { List> allDocuments = new ArrayList<>(); allDocuments.addAll(mapAdditionalDocumentsWithType(pcsCase.getAdditionalDocuments())); allDocuments.addAll(mapDocumentsWithType( Optional.ofNullable(pcsCase.getRentArrears()) - .map(RentArrearsSection::getStatementDocuments) - .orElse(null), DocumentType.RENT_STATEMENT)); + .map(RentArrearsSection::getStatementDocuments) + .orElse(null), DocumentType.RENT_STATEMENT)); allDocuments.addAll(mapDocumentsWithType( Optional.ofNullable(pcsCase.getTenancyLicenceDetails()) - .map(TenancyLicenceDetails::getTenancyLicenceDocuments) - .orElse(null), DocumentType.TENANCY_LICENCE)); + .map(TenancyLicenceDetails::getTenancyLicenceDocuments) + .orElse(null), DocumentType.TENANCY_LICENCE)); allDocuments.addAll(mapDocumentsWithType( Optional.ofNullable(pcsCase.getOccupationLicenceDetailsWales()) - .map(OccupationLicenceDetailsWales::getLicenceDocuments) - .orElse(null), DocumentType.OCCUPATION_LICENCE)); + .map(OccupationLicenceDetailsWales::getLicenceDocuments) + .orElse(null), DocumentType.OCCUPATION_LICENCE)); allDocuments.addAll(mapDocumentsWithType( Optional.ofNullable(pcsCase.getNoticeServedDetails()) - .map(NoticeServedDetails::getNoticeDocuments) - .orElse(null), DocumentType.NOTICE_SERVED)); + .map(NoticeServedDetails::getNoticeDocuments) + .orElse(null), DocumentType.NOTICE_SERVED)); - return documentRepository.saveAll(createDocumentEntities(allDocuments)); + return allDocuments; + } + + private List> getWarrantOfRestitutionDocuments(EnforcementOrder enforcementOrder) { + + return new ArrayList<>(mapEvidenceOfDefendantsDocumentsWithType( + enforcementOrder.getWarrantOfRestitutionDetails().getAdditionalDocuments())); } private List> mapDocumentsWithType( List> docs, DocumentType type) { - if (docs == null || docs.isEmpty()) { + if (CollectionUtils.isEmpty(docs)) { return Collections.emptyList(); } @@ -75,7 +98,7 @@ private List> mapDocumentsWithType( private List> mapAdditionalDocumentsWithType( List> documents) { - if (documents == null || documents.isEmpty()) { + if (CollectionUtils.isEmpty(documents)) { return Collections.emptyList(); } @@ -87,10 +110,25 @@ private List> mapAdditionalDocumentsWithType( .toList(); } + private List> mapEvidenceOfDefendantsDocumentsWithType( + List> documents) { + + if (CollectionUtils.isEmpty(documents)) { + return Collections.emptyList(); + } + + return ListValueUtils.unwrapListItems(documents).stream() + .map(doc -> Pair.of( + doc.getDocument(), + mapEvidenceDocumentTypeToDocumentType(doc.getDocumentType()) + )) + .toList(); + } + private List createDocumentEntities( List> documents) { - if (documents == null || documents.isEmpty()) { + if (CollectionUtils.isEmpty(documents)) { return List.of(); } @@ -122,4 +160,13 @@ private DocumentType mapAdditionalDocumentTypeToDocumentType(AdditionalDocumentT case OTHER -> DocumentType.OTHER; }; } + + private DocumentType mapEvidenceDocumentTypeToDocumentType(EvidenceDocumentType evidenceDocumentType) { + return switch (evidenceDocumentType) { + case PHOTOGRAPHIC_EVIDENCE -> DocumentType.PHOTOGRAPHIC_EVIDENCE; + case POLICE_REPORT -> DocumentType.POLICE_REPORT; + case WITNESS_STATEMENT -> DocumentType.WITNESS_STATEMENT; + case OTHER -> DocumentType.OTHER; + }; + } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderService.java index b54a25ac9d..c574e34796 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/EnforcementOrderService.java @@ -64,11 +64,11 @@ private void createEnforcementOrder(long caseReference, EnforcementOrder enforce ClaimEntity claimEntity = retrieveClaimEntity(pcsCaseEntity); - EnforcementOrderEntity orderEntity = enforcementOrderRepository + EnforcementOrderEntity savedEntity = enforcementOrderRepository .save(mapToEntity(enforcementOrder, claimEntity)); strategyFactory.getStrategy(SelectEnforcementType.getSelectEnforcementTypeFromName( enforcementOrder.getChooseEnforcementType().getValueCode())) - .process(orderEntity, enforcementOrder); + .process(savedEntity, enforcementOrder); } private EnforcementOrderEntity mapToEntity(EnforcementOrder enforcementOrder, ClaimEntity claimEntity) { @@ -77,5 +77,4 @@ private EnforcementOrderEntity mapToEntity(EnforcementOrder enforcementOrder, Cl enforcementOrderEntity.setEnforcementOrder(enforcementOrder); return enforcementOrderEntity; } - } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java index ef86ac81c8..3af62dbd2e 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java @@ -2,16 +2,22 @@ import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.entity.DocumentEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.claim.StatementOfTruthEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantOfRestitutionEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.StatementOfTruthRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.EnforcementOrderRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantOfRestitutionRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.DocumentService; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.RiskProfileService; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.StatementOfTruthMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantOfRestitutionMapper; +import java.util.List; + @Component @AllArgsConstructor public class WarrantOfRestitutionStrategy implements EnforcementTypeStrategy { @@ -20,13 +26,16 @@ public class WarrantOfRestitutionStrategy implements EnforcementTypeStrategy { private final StatementOfTruthMapper statementOfTruthMapper; private final WarrantOfRestitutionMapper warrantOfRestitutionMapper; private final WarrantOfRestitutionRepository warrantOfRestitutionRepository; + private final EnforcementOrderRepository enforcementOrderRepository; private final StatementOfTruthRepository statementOfTruthRepository; + private final DocumentService documentService; @Override public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { riskProfileService.processRisk(enforcementOrder, enforcementOrderEntity); processWarrantOfRestitution(enforcementOrder, enforcementOrderEntity); processStatementOfTruth(enforcementOrder, enforcementOrderEntity); + processDocuments(enforcementOrder, enforcementOrderEntity); } private void processWarrantOfRestitution(EnforcementOrder enforcementOrder, @@ -44,4 +53,14 @@ private void processStatementOfTruth(EnforcementOrder enforcementOrder, enforcementOrderEntity.setStatementOfTruth(statementOfTruthEntity); statementOfTruthRepository.save(statementOfTruthEntity); } + + private void processDocuments(EnforcementOrder enforcementOrder, EnforcementOrderEntity enforcementOrderEntity) { + if (enforcementOrder.getWarrantOfRestitutionDetails() != null + && !CollectionUtils.isEmpty( + enforcementOrder.getWarrantOfRestitutionDetails().getAdditionalDocuments())) { + List documentEntities = documentService.createAllDocuments(enforcementOrder); + enforcementOrderEntity.addDocuments(documentEntities); + enforcementOrderRepository.save(enforcementOrderEntity); + } + } } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentServiceTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentServiceTest.java index 88e3d3d149..4ccb0f48bf 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentServiceTest.java @@ -18,10 +18,15 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.PCSCase; import uk.gov.hmcts.reform.pcs.ccd.domain.RentArrearsSection; import uk.gov.hmcts.reform.pcs.ccd.domain.TenancyLicenceDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceDocumentType; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceOfDefendantsDocuments; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.WarrantOfRestitutionDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.wales.OccupationLicenceDetailsWales; import uk.gov.hmcts.reform.pcs.ccd.entity.DocumentEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.DocumentRepository; +import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; @@ -260,4 +265,59 @@ void shouldReturnEmptyListIfNoDocuments() { assertThat(entities).isEmpty(); verify(documentRepository).saveAll(anyList()); } + + @ParameterizedTest + @EnumSource(EvidenceDocumentType.class) + void shouldMapAllEvidenceDocumentTypes(EvidenceDocumentType evidenceDocumentType) { + // Given + EvidenceOfDefendantsDocuments evidenceDocument = EvidenceOfDefendantsDocuments.builder() + .document(Document.builder() + .url("url-WITNESS_STATEMENT") + .filename("file-WITNESS_STATEMENT") + .binaryUrl("bin-WITNESS_STATEMENT") + .categoryId("cat-WITNESS_STATEMENT") + .build()) + .documentType(evidenceDocumentType) + .build(); + + List> evidenceDocuments = + List.of(ListValue.builder() + .id("1").value(evidenceDocument).build()); + + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .warrantOfRestitutionDetails(WarrantOfRestitutionDetails.builder() + .additionalDocuments(evidenceDocuments) + .build()) + .build(); + + // When + underTest.createAllDocuments(enforcementOrder); + + // Then + DocumentType expectedDocumentType = DocumentType.valueOf(evidenceDocumentType.name()); + + verify(documentRepository).saveAll(documentEntityListCaptor.capture()); + List capturedEntities = documentEntityListCaptor.getValue(); + + assertThat(capturedEntities) + .extracting(DocumentEntity::getType) + .containsExactly(expectedDocumentType); + } + + @Test + void shouldHandleEmptyEvidenceDocument() { + List> evidenceDocuments = + new ArrayList<>(); + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .warrantOfRestitutionDetails(WarrantOfRestitutionDetails.builder() + .additionalDocuments(evidenceDocuments) + .build()) + .build(); + + // When + underTest.createAllDocuments(enforcementOrder); + + // Then + verify(documentRepository).saveAll(List.of()); + } } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java index be9dda734f..3da3b680f3 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java @@ -6,22 +6,31 @@ import org.mockito.InjectMocks; 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.ListValue; import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableAdultsChildren; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceDocumentType; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceOfDefendantsDocuments; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.RawWarrantRestDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.WarrantOfRestitutionDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthDetails; +import uk.gov.hmcts.reform.pcs.ccd.entity.DocumentEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.claim.StatementOfTruthEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantOfRestitutionEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.StatementOfTruthRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.EnforcementOrderRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantOfRestitutionRepository; +import uk.gov.hmcts.reform.pcs.ccd.service.DocumentService; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.RiskProfileService; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.StatementOfTruthMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantOfRestitutionMapper; +import java.util.List; + import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -43,6 +52,10 @@ class WarrantOfRestitutionStrategyTest { private StatementOfTruthMapper statementOfTruthMapper; @Mock private StatementOfTruthRepository statementOfTruthRepository; + @Mock + private EnforcementOrderRepository enforcementOrderRepository; + @Mock + private DocumentService documentService; @Test void shouldProcessWarrantOfRestitutionDetailsAndSaveToRepository() { @@ -117,4 +130,44 @@ void shouldProcessStatementOfTruthAndSaveToRepository() { verify(statementOfTruthMapper).mapStatementOfTruthForWarrantRest(enforcementOrder); verify(statementOfTruthRepository).save(statementOfTruthEntity); } + + @Test + void shouldProcessDocumentsAndSaveToRepository() { + // Given + EvidenceOfDefendantsDocuments evidenceDocument = EvidenceOfDefendantsDocuments.builder() + .document(Document.builder() + .url("url-WITNESS_STATEMENT") + .filename("file-WITNESS_STATEMENT") + .binaryUrl("bin-WITNESS_STATEMENT") + .categoryId("cat-WITNESS_STATEMENT") + .build()) + .documentType(EvidenceDocumentType.WITNESS_STATEMENT) + .build(); + + List> evidenceDocuments = + List.of(ListValue.builder() + .id("1").value(evidenceDocument).build()); + + EnforcementOrder enforcementOrder = EnforcementOrder.builder() + .warrantOfRestitutionDetails(WarrantOfRestitutionDetails.builder() + .additionalDocuments(evidenceDocuments) + .build()) + .build(); + EnforcementOrderEntity enforcementOrderEntity = EnforcementOrderEntity.builder().build(); + + WarrantOfRestitutionEntity warrantOfRestitutionEntity = WarrantOfRestitutionEntity.builder().build(); + List documentEntities = List.of(DocumentEntity.builder().build()); + enforcementOrderEntity.addDocuments(documentEntities); + + when(warrantOfRestitutionMapper.toEntity(enforcementOrder, enforcementOrderEntity)) + .thenReturn(warrantOfRestitutionEntity); + when(warrantOfRestitutionRepository.save(warrantOfRestitutionEntity)).thenReturn(warrantOfRestitutionEntity); + when(documentService.createAllDocuments(enforcementOrder)).thenReturn(documentEntities); + + // When + underTest.process(enforcementOrderEntity, enforcementOrder); + + // Then + verify(enforcementOrderRepository).save(enforcementOrderEntity); + } } From 5756d4293fc61aedb1d01c967ff901f3658142be Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Fri, 27 Mar 2026 09:39:21 +0000 Subject: [PATCH 50/54] HDPI-5188 - Removed domain fields and mappers for pages not implemented yet. --- ...cuments.java => EvidenceOfDefendants.java} | 2 +- .../RawWarrantRestDetails.java | 4 - .../WarrantOfRestitutionDetails.java | 14 +-- .../WarrantOfRestitutionEntity.java | 9 -- .../StatementOfTruthRepository.java | 9 -- .../pcs/ccd/service/DocumentService.java | 4 +- .../ccd/service/StatementOfTruthService.java | 11 ++- .../mapper/StatementOfTruthMapper.java | 23 ----- .../mapper/WarrantOfRestitutionMapper.java | 11 --- .../WarrantOfRestitutionStrategy.java | 14 --- ...rcement_warrant_of_restitution_details.sql | 3 - .../pcs/ccd/service/DocumentServiceTest.java | 10 +-- .../mapper/StatementOfTruthMapperTest.java | 87 ------------------- .../WarrantOfRestitutionMapperTest.java | 37 -------- .../WarrantOfRestitutionStrategyTest.java | 54 +----------- 15 files changed, 18 insertions(+), 274 deletions(-) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/{EvidenceOfDefendantsDocuments.java => EvidenceOfDefendants.java} (94%) delete mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/StatementOfTruthRepository.java delete mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapper.java delete mode 100644 src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapperTest.java diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/EvidenceOfDefendantsDocuments.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/EvidenceOfDefendants.java similarity index 94% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/EvidenceOfDefendantsDocuments.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/EvidenceOfDefendants.java index b89180406d..61c4b56e5b 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/EvidenceOfDefendantsDocuments.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/EvidenceOfDefendants.java @@ -12,7 +12,7 @@ @Builder @NoArgsConstructor @AllArgsConstructor -public class EvidenceOfDefendantsDocuments { +public class EvidenceOfDefendants { @CCD( label = "Type of document", diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/RawWarrantRestDetails.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/RawWarrantRestDetails.java index 9fd8ad64cb..4a9060aba1 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/RawWarrantRestDetails.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/RawWarrantRestDetails.java @@ -8,7 +8,6 @@ import uk.gov.hmcts.ccd.sdk.api.CCD; import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableAdultsChildren; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthDetails; @Builder @Data @@ -23,7 +22,4 @@ public class RawWarrantRestDetails { private YesNoNotSure vulnerablePeoplePresentWarrantRest; private VulnerableAdultsChildren vulnerableAdultsChildrenWarrantRest; - - @CCD - private StatementOfTruthDetails statementOfTruthWarrantRest; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java index 4d4ce57a7d..69a4589fdb 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/enforcetheorder/warrantofrestitution/WarrantOfRestitutionDetails.java @@ -13,13 +13,11 @@ import uk.gov.hmcts.ccd.sdk.api.CCD; import uk.gov.hmcts.ccd.sdk.type.FieldType; import uk.gov.hmcts.ccd.sdk.type.ListValue; -import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.PropertyAccessDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RiskCategory; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RiskDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.AdditionalInformation; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.PeopleToEvict; import java.util.List; import java.util.Set; @@ -32,16 +30,6 @@ @JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class) public class WarrantOfRestitutionDetails { - @CCD(searchable = false) - private YesOrNo showPeopleWhoWillBeEvictedPage; - - @CCD(searchable = false) - private YesOrNo showPeopleYouWantToEvictPage; - - @JsonUnwrapped - @CCD - private PeopleToEvict peopleToEvict; - public static final String HOW_DEFENDANTS_RETURNED_LABEL = "How did the defendants return to the property?"; @@ -82,7 +70,7 @@ public class WarrantOfRestitutionDetails { label = "Add document", hint = "Upload a document to the system" ) - private List> additionalDocuments; + private List> additionalDocuments; @JsonUnwrapped @CCD diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java index 1deacde8ed..ca47e4d765 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/WarrantOfRestitutionEntity.java @@ -43,15 +43,6 @@ public class WarrantOfRestitutionEntity { @JsonBackReference private EnforcementOrderEntity enforcementOrder; - // UI Control Flags - @Enumerated(EnumType.STRING) - @JdbcTypeCode(SqlTypes.NAMED_ENUM) - private VerticalYesNo showPeopleWhoWillBeEvictedPage; - - @Enumerated(EnumType.STRING) - @JdbcTypeCode(SqlTypes.NAMED_ENUM) - private VerticalYesNo showPeopleYouWantToEvictPage; - // Defendants Returned private String howDefendantsReturned; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/StatementOfTruthRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/StatementOfTruthRepository.java deleted file mode 100644 index f8d9463767..0000000000 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/StatementOfTruthRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package uk.gov.hmcts.reform.pcs.ccd.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import uk.gov.hmcts.reform.pcs.ccd.entity.claim.StatementOfTruthEntity; - -import java.util.UUID; - -public interface StatementOfTruthRepository extends JpaRepository { -} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentService.java index ad34b687f0..c29f455f16 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentService.java @@ -15,7 +15,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.TenancyLicenceDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceDocumentType; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceOfDefendantsDocuments; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceOfDefendants; import uk.gov.hmcts.reform.pcs.ccd.domain.wales.OccupationLicenceDetailsWales; import uk.gov.hmcts.reform.pcs.ccd.entity.DocumentEntity; import uk.gov.hmcts.reform.pcs.ccd.repository.DocumentRepository; @@ -111,7 +111,7 @@ private List> mapAdditionalDocumentsWithType( } private List> mapEvidenceOfDefendantsDocumentsWithType( - List> documents) { + List> documents) { if (CollectionUtils.isEmpty(documents)) { return Collections.emptyList(); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/StatementOfTruthService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/StatementOfTruthService.java index 2df6999d17..f39af857d9 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/StatementOfTruthService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/StatementOfTruthService.java @@ -17,12 +17,11 @@ public StatementOfTruthEntity createStatementOfTruthEntity(PCSCase pcsCase) { || pcsCase.getStatementOfTruth().getCompletedBy() == null) { return null; } - return createStatementOfTruth(pcsCase.getStatementOfTruth()); - } - public StatementOfTruthEntity createStatementOfTruth(StatementOfTruthDetails statementOfTruth) { - StatementOfTruthEntity statementOfTruthEntity = new StatementOfTruthEntity(); + StatementOfTruthDetails statementOfTruth = pcsCase.getStatementOfTruth(); StatementOfTruthCompletedBy completedBy = statementOfTruth.getCompletedBy(); + StatementOfTruthEntity statementOfTruthEntity = new StatementOfTruthEntity(); + statementOfTruthEntity.setCompletedBy(completedBy); if (completedBy == StatementOfTruthCompletedBy.CLAIMANT) { @@ -42,6 +41,7 @@ public StatementOfTruthEntity createStatementOfTruth(StatementOfTruthDetails sta statementOfTruthEntity.setFirmName(statementOfTruth.getFirmNameLegalRep()); statementOfTruthEntity.setPositionHeld(statementOfTruth.getPositionLegalRep()); } + return statementOfTruthEntity; } @@ -58,5 +58,4 @@ private static boolean legalRepAgreed(StatementOfTruthDetails statementOfTruth) .map(StatementOfTruthAgreementLegalRep.AGREED::equals) .orElse(false); } -} - +} \ No newline at end of file diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapper.java deleted file mode 100644 index e8c40564b2..0000000000 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapper.java +++ /dev/null @@ -1,23 +0,0 @@ -package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper; - -import lombok.AllArgsConstructor; -import org.springframework.stereotype.Component; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; -import uk.gov.hmcts.reform.pcs.ccd.entity.claim.StatementOfTruthEntity; -import uk.gov.hmcts.reform.pcs.ccd.service.StatementOfTruthService; - -@Component -@AllArgsConstructor -public class StatementOfTruthMapper { - - private final StatementOfTruthService statementOfTruthService; - - public StatementOfTruthEntity mapStatementOfTruthForWarrantRest(EnforcementOrder enforcementOrder) { - if (enforcementOrder.getRawWarrantRestDetails() != null - && enforcementOrder.getRawWarrantRestDetails().getStatementOfTruthWarrantRest() != null) { - return statementOfTruthService.createStatementOfTruth( - enforcementOrder.getRawWarrantRestDetails().getStatementOfTruthWarrantRest()); - } - return null; - } -} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java index d003931482..8bc0cd9ed7 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapper.java @@ -17,8 +17,6 @@ import java.util.HashSet; import java.util.Set; -import static uk.gov.hmcts.reform.pcs.ccd.util.EnforcementTypeUtil.convertYesOrNoToVerticalYesNo; - @Component public class WarrantOfRestitutionMapper { @@ -86,7 +84,6 @@ public WarrantOfRestitutionEntity toEntity(EnforcementOrder enforcementOrder, .enforcementOrder(enforcementOrderEntity).build(); if (enforcementOrder.getWarrantOfRestitutionDetails() != null) { WarrantOfRestitutionDetails warrantOfRestitutionDetails = enforcementOrder.getWarrantOfRestitutionDetails(); - mapControlFlags(warrantOfRestitutionEntity, warrantOfRestitutionDetails); mapDefendantReturned(warrantOfRestitutionEntity, warrantOfRestitutionDetails); mapAdditionalInformation(warrantOfRestitutionEntity, warrantOfRestitutionDetails); mapPropertyAccessDetails(warrantOfRestitutionEntity, warrantOfRestitutionDetails); @@ -94,14 +91,6 @@ public WarrantOfRestitutionEntity toEntity(EnforcementOrder enforcementOrder, return warrantOfRestitutionEntity; } - private void mapControlFlags(WarrantOfRestitutionEntity warrantOfRestitutionEntity, - WarrantOfRestitutionDetails warrantOfRestitutionDetails) { - warrantOfRestitutionEntity.setShowPeopleWhoWillBeEvictedPage( - convertYesOrNoToVerticalYesNo(warrantOfRestitutionDetails.getShowPeopleWhoWillBeEvictedPage())); - warrantOfRestitutionEntity.setShowPeopleYouWantToEvictPage( - convertYesOrNoToVerticalYesNo(warrantOfRestitutionDetails.getShowPeopleYouWantToEvictPage())); - } - private void mapDefendantReturned(WarrantOfRestitutionEntity warrantOfRestitutionEntity, WarrantOfRestitutionDetails warrantOfRestitutionDetails) { warrantOfRestitutionEntity.setHowDefendantsReturned(warrantOfRestitutionDetails.getHowDefendantsReturned()); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java index 3af62dbd2e..dde754ea2c 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategy.java @@ -5,15 +5,12 @@ import org.springframework.util.CollectionUtils; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.entity.DocumentEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.claim.StatementOfTruthEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantOfRestitutionEntity; -import uk.gov.hmcts.reform.pcs.ccd.repository.StatementOfTruthRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.EnforcementOrderRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantOfRestitutionRepository; import uk.gov.hmcts.reform.pcs.ccd.service.DocumentService; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.RiskProfileService; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.StatementOfTruthMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantOfRestitutionMapper; import java.util.List; @@ -23,18 +20,15 @@ public class WarrantOfRestitutionStrategy implements EnforcementTypeStrategy { private final RiskProfileService riskProfileService; - private final StatementOfTruthMapper statementOfTruthMapper; private final WarrantOfRestitutionMapper warrantOfRestitutionMapper; private final WarrantOfRestitutionRepository warrantOfRestitutionRepository; private final EnforcementOrderRepository enforcementOrderRepository; - private final StatementOfTruthRepository statementOfTruthRepository; private final DocumentService documentService; @Override public void process(EnforcementOrderEntity enforcementOrderEntity, EnforcementOrder enforcementOrder) { riskProfileService.processRisk(enforcementOrder, enforcementOrderEntity); processWarrantOfRestitution(enforcementOrder, enforcementOrderEntity); - processStatementOfTruth(enforcementOrder, enforcementOrderEntity); processDocuments(enforcementOrder, enforcementOrderEntity); } @@ -46,14 +40,6 @@ private void processWarrantOfRestitution(EnforcementOrder enforcementOrder, enforcementOrderEntity.setWarrantOfRestitutionDetails(saved); } - private void processStatementOfTruth(EnforcementOrder enforcementOrder, - EnforcementOrderEntity enforcementOrderEntity) { - StatementOfTruthEntity statementOfTruthEntity = - statementOfTruthMapper.mapStatementOfTruthForWarrantRest(enforcementOrder); - enforcementOrderEntity.setStatementOfTruth(statementOfTruthEntity); - statementOfTruthRepository.save(statementOfTruthEntity); - } - private void processDocuments(EnforcementOrder enforcementOrder, EnforcementOrderEntity enforcementOrderEntity) { if (enforcementOrder.getWarrantOfRestitutionDetails() != null && !CollectionUtils.isEmpty( diff --git a/src/main/resources/db/migration/V072__enforcement_warrant_of_restitution_details.sql b/src/main/resources/db/migration/V072__enforcement_warrant_of_restitution_details.sql index 8826396407..c5a3e29b5e 100644 --- a/src/main/resources/db/migration/V072__enforcement_warrant_of_restitution_details.sql +++ b/src/main/resources/db/migration/V072__enforcement_warrant_of_restitution_details.sql @@ -7,9 +7,6 @@ ALTER TABLE enf_case ADD COLUMN sot_id uuid REFERENCES statement_of_truth(id); ALTER TABLE public.enf_warrant_of_restitution --- UI Control Flags -ADD COLUMN show_people_who_will_be_evicted_page YES_NO, -ADD COLUMN show_people_you_want_to_evict_page YES_NO, -- How the defendants returned to the property ADD COLUMN how_defendants_returned VARCHAR(6800), diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentServiceTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentServiceTest.java index 4ccb0f48bf..c39befba39 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DocumentServiceTest.java @@ -20,7 +20,7 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.TenancyLicenceDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceDocumentType; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceOfDefendantsDocuments; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceOfDefendants; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.WarrantOfRestitutionDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.wales.OccupationLicenceDetailsWales; import uk.gov.hmcts.reform.pcs.ccd.entity.DocumentEntity; @@ -270,7 +270,7 @@ void shouldReturnEmptyListIfNoDocuments() { @EnumSource(EvidenceDocumentType.class) void shouldMapAllEvidenceDocumentTypes(EvidenceDocumentType evidenceDocumentType) { // Given - EvidenceOfDefendantsDocuments evidenceDocument = EvidenceOfDefendantsDocuments.builder() + EvidenceOfDefendants evidenceDocument = EvidenceOfDefendants.builder() .document(Document.builder() .url("url-WITNESS_STATEMENT") .filename("file-WITNESS_STATEMENT") @@ -280,8 +280,8 @@ void shouldMapAllEvidenceDocumentTypes(EvidenceDocumentType evidenceDocumentType .documentType(evidenceDocumentType) .build(); - List> evidenceDocuments = - List.of(ListValue.builder() + List> evidenceDocuments = + List.of(ListValue.builder() .id("1").value(evidenceDocument).build()); EnforcementOrder enforcementOrder = EnforcementOrder.builder() @@ -306,7 +306,7 @@ void shouldMapAllEvidenceDocumentTypes(EvidenceDocumentType evidenceDocumentType @Test void shouldHandleEmptyEvidenceDocument() { - List> evidenceDocuments = + List> evidenceDocuments = new ArrayList<>(); EnforcementOrder enforcementOrder = EnforcementOrder.builder() .warrantOfRestitutionDetails(WarrantOfRestitutionDetails.builder() diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapperTest.java deleted file mode 100644 index d48ecdb59f..0000000000 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/StatementOfTruthMapperTest.java +++ /dev/null @@ -1,87 +0,0 @@ -package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper; - -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 uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.RawWarrantRestDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthDetails; -import uk.gov.hmcts.reform.pcs.ccd.entity.claim.StatementOfTruthEntity; -import uk.gov.hmcts.reform.pcs.ccd.service.StatementOfTruthService; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -class StatementOfTruthMapperTest { - - @Mock - private StatementOfTruthService statementOfTruthService; - @InjectMocks - private StatementOfTruthMapper underTest; - - private StatementOfTruthEntity statementOfTruthEntity; - - @BeforeEach - void setUp() { - statementOfTruthEntity = new StatementOfTruthEntity(); - statementOfTruthEntity.setCompletedBy(StatementOfTruthCompletedBy.CLAIMANT); - statementOfTruthEntity.setFullName("John Doe"); - statementOfTruthEntity.setPositionHeld("Owner"); - } - - @Test - void shouldMapStatementOfTruthForWarrantRest() { - // Given - StatementOfTruthDetails statementOfTruth = new StatementOfTruthDetails(); - statementOfTruth.setCompletedBy(StatementOfTruthCompletedBy.CLAIMANT); - statementOfTruth.setFullNameClaimant("John Doe"); - statementOfTruth.setPositionClaimant("Owner"); - - RawWarrantRestDetails rawWarrantRestDetails = RawWarrantRestDetails.builder() - .statementOfTruthWarrantRest(statementOfTruth).build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder() - .rawWarrantRestDetails(rawWarrantRestDetails).build(); - when(statementOfTruthService.createStatementOfTruth(statementOfTruth)) - .thenReturn(statementOfTruthEntity); - - // When - StatementOfTruthEntity result = underTest.mapStatementOfTruthForWarrantRest(enforcementOrder); - - // Then - assertThat(result.getCompletedBy()).isEqualTo(StatementOfTruthCompletedBy.CLAIMANT); - assertThat(result.getFullName()).isEqualTo("John Doe"); - assertThat(result.getPositionHeld()).isEqualTo("Owner"); - } - - @Test - void shouldHandleNullStatementOfTruthForWarrantRest() { - RawWarrantRestDetails rawWarrantRestDetails = RawWarrantRestDetails.builder().build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder() - .rawWarrantRestDetails(rawWarrantRestDetails).build(); - - // When - underTest.mapStatementOfTruthForWarrantRest(enforcementOrder); - - // Then - verify(statementOfTruthService, never()).createStatementOfTruth(any()); - } - - @Test - void shouldHandleNullRawWarrantRest() { - EnforcementOrder enforcementOrder = EnforcementOrder.builder().build(); - - // When - underTest.mapStatementOfTruthForWarrantRest(enforcementOrder); - - // Then - verify(statementOfTruthService, never()).createStatementOfTruth(any()); - } -} \ No newline at end of file diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java index 659047288a..2bfe7c046c 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java @@ -144,43 +144,6 @@ void shouldMapToEntityWithNullWarrantOfRestitutionDetails() { assertThat(result.getEnforcementOrder()).isEqualTo(enforcementOrderEntity); } - @Test - void shouldMapMapControlFlags() { - // Given - WarrantOfRestitutionDetails warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder() - .showPeopleWhoWillBeEvictedPage(YesOrNo.NO) - .showPeopleYouWantToEvictPage(YesOrNo.YES) - .build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder() - .warrantOfRestitutionDetails(warrantOfRestitutionDetails).build(); - - // When - WarrantOfRestitutionEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getShowPeopleWhoWillBeEvictedPage()).isEqualTo(VerticalYesNo.NO); - assertThat(result.getShowPeopleYouWantToEvictPage()).isEqualTo(VerticalYesNo.YES); - } - - @Test - void shouldMapMapControlFlagsWithNullValues() { - // Given - WarrantOfRestitutionDetails warrantOfRestitutionDetails = WarrantOfRestitutionDetails.builder() - .showPeopleWhoWillBeEvictedPage(null) - .showPeopleYouWantToEvictPage(null) - .build(); - - EnforcementOrder enforcementOrder = EnforcementOrder.builder() - .warrantOfRestitutionDetails(warrantOfRestitutionDetails).build(); - - // When - WarrantOfRestitutionEntity result = underTest.toEntity(enforcementOrder, enforcementOrderEntity); - - // Then - assertThat(result.getShowPeopleWhoWillBeEvictedPage()).isEqualTo(VerticalYesNo.NO); - assertThat(result.getShowPeopleYouWantToEvictPage()).isEqualTo(VerticalYesNo.NO); - } - @Test void shouldMapMapAdditionalInformation() { // Given diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java index 3da3b680f3..1fe823dad4 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/strategy/WarrantOfRestitutionStrategyTest.java @@ -12,21 +12,16 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableAdultsChildren; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceDocumentType; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceOfDefendantsDocuments; +import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.EvidenceOfDefendants; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.RawWarrantRestDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.WarrantOfRestitutionDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthDetails; import uk.gov.hmcts.reform.pcs.ccd.entity.DocumentEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.claim.StatementOfTruthEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantOfRestitutionEntity; -import uk.gov.hmcts.reform.pcs.ccd.repository.StatementOfTruthRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.EnforcementOrderRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.WarrantOfRestitutionRepository; import uk.gov.hmcts.reform.pcs.ccd.service.DocumentService; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.RiskProfileService; -import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.StatementOfTruthMapper; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper.WarrantOfRestitutionMapper; import java.util.List; @@ -49,10 +44,6 @@ class WarrantOfRestitutionStrategyTest { @Mock private WarrantOfRestitutionRepository warrantOfRestitutionRepository; @Mock - private StatementOfTruthMapper statementOfTruthMapper; - @Mock - private StatementOfTruthRepository statementOfTruthRepository; - @Mock private EnforcementOrderRepository enforcementOrderRepository; @Mock private DocumentService documentService; @@ -89,52 +80,15 @@ void shouldProcessWarrantOfRestitutionDetailsAndSaveToRepository() { // Then verify(riskProfileService).processRisk(enforcementOrder, enforcementOrderEntity); verify(warrantOfRestitutionRepository).save(captor.capture()); - verify(statementOfTruthMapper).mapStatementOfTruthForWarrantRest(enforcementOrder); WarrantOfRestitutionEntity saved = captor.getValue(); assertThat(saved).isNotNull(); assertThat(saved.getEnforcementOrder()).isSameAs(enforcementOrderEntity); } - @Test - void shouldProcessStatementOfTruthAndSaveToRepository() { - // Given - StatementOfTruthDetails statementOfTruthDetails = StatementOfTruthDetails.builder() - .completedBy(StatementOfTruthCompletedBy.CLAIMANT) - .fullNameClaimant("Claimant name") - .positionClaimant("Claimant position") - .build(); - EnforcementOrder enforcementOrder = EnforcementOrder.builder() - .rawWarrantRestDetails(RawWarrantRestDetails.builder() - .statementOfTruthWarrantRest(statementOfTruthDetails) - .build()) - .build(); - EnforcementOrderEntity enforcementOrderEntity = EnforcementOrderEntity.builder().build(); - StatementOfTruthEntity statementOfTruthEntity = StatementOfTruthEntity.builder() - .completedBy(StatementOfTruthCompletedBy.CLAIMANT) - .fullName("Claimant name") - .positionHeld("Claimant position") - .build(); - enforcementOrderEntity.setStatementOfTruth(statementOfTruthEntity); - WarrantOfRestitutionEntity warrantOfRestitutionEntity = WarrantOfRestitutionEntity.builder().build(); - - when(warrantOfRestitutionMapper.toEntity(enforcementOrder, enforcementOrderEntity)) - .thenReturn(warrantOfRestitutionEntity); - when(warrantOfRestitutionRepository.save(warrantOfRestitutionEntity)).thenReturn(warrantOfRestitutionEntity); - when(statementOfTruthMapper.mapStatementOfTruthForWarrantRest(enforcementOrder)) - .thenReturn(statementOfTruthEntity); - - // When - underTest.process(enforcementOrderEntity, enforcementOrder); - - // Then - verify(statementOfTruthMapper).mapStatementOfTruthForWarrantRest(enforcementOrder); - verify(statementOfTruthRepository).save(statementOfTruthEntity); - } - @Test void shouldProcessDocumentsAndSaveToRepository() { // Given - EvidenceOfDefendantsDocuments evidenceDocument = EvidenceOfDefendantsDocuments.builder() + EvidenceOfDefendants evidenceDocument = EvidenceOfDefendants.builder() .document(Document.builder() .url("url-WITNESS_STATEMENT") .filename("file-WITNESS_STATEMENT") @@ -144,8 +98,8 @@ void shouldProcessDocumentsAndSaveToRepository() { .documentType(EvidenceDocumentType.WITNESS_STATEMENT) .build(); - List> evidenceDocuments = - List.of(ListValue.builder() + List> evidenceDocuments = + List.of(ListValue.builder() .id("1").value(evidenceDocument).build()); EnforcementOrder enforcementOrder = EnforcementOrder.builder() From 35a90f0bef48a7d4fb4233bcafbc4a73d734bab7 Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Fri, 27 Mar 2026 09:46:08 +0000 Subject: [PATCH 51/54] HDPI-5188 - Removed changes not required --- .../mapper/WarrantDetailsMapper.java | 44 ++++++++++--------- .../pcs/ccd/util/EnforcementTypeUtil.java | 6 --- .../pcs/ccd/util/EnforcementTypeUtilTest.java | 20 --------- 3 files changed, 24 insertions(+), 46 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java index 978b9739c4..82920d2bd3 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java @@ -2,24 +2,24 @@ import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; +import uk.gov.hmcts.ccd.sdk.type.YesOrNo; import uk.gov.hmcts.reform.pcs.ccd.domain.RepaymentPreference; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreement; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementClaimant; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementLegalRep; +import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.EnforcementOrder; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LandRegistryFees; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.LegalCosts; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RepaymentCosts; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.StatementOfTruthDetailsEnforcement; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreement; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementClaimant; +import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementLegalRep; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantEntity; import java.util.List; import java.util.stream.Collectors; -import static uk.gov.hmcts.reform.pcs.ccd.util.EnforcementTypeUtil.convertYesOrNoToVerticalYesNo; - @Component @AllArgsConstructor public class WarrantDetailsMapper { @@ -27,7 +27,7 @@ public class WarrantDetailsMapper { public WarrantEntity toEntity(EnforcementOrder enforcementOrder, EnforcementOrderEntity enforcementOrderEntity) { WarrantEntity warrantEntity = WarrantEntity.builder() - .enforcementOrder(enforcementOrderEntity).build(); + .enforcementOrder(enforcementOrderEntity).build(); if (enforcementOrder.getWarrantDetails() != null) { WarrantDetails warrantDetails = enforcementOrder.getWarrantDetails(); warrantEntity.setLanguageUsed(warrantDetails.getLanguageUsed()); @@ -49,9 +49,9 @@ public WarrantEntity toEntity(EnforcementOrder enforcementOrder, private void controlFlags(WarrantEntity warrantEntity, WarrantDetails warrantDetails) { warrantEntity.setShowPeopleWhoWillBeEvictedPage( - convertYesOrNoToVerticalYesNo(warrantDetails.getShowPeopleWhoWillBeEvictedPage())); + convertYesOrNoToVerticalYesNo(warrantDetails.getShowPeopleWhoWillBeEvictedPage())); warrantEntity.setShowPeopleYouWantToEvictPage( - convertYesOrNoToVerticalYesNo(warrantDetails.getShowPeopleYouWantToEvictPage())); + convertYesOrNoToVerticalYesNo(warrantDetails.getShowPeopleYouWantToEvictPage())); } private void statementOfTruth(WarrantDetails warrantDetails, WarrantEntity warrantEntity) { @@ -75,9 +75,9 @@ private void certification(WarrantEntity warrantEntity, List certification = statementOfTruth.getCertification(); if (certification != null && !certification.isEmpty()) { warrantEntity.setCertification( - certification.stream() - .map(Enum::name) - .collect(Collectors.joining(",")) + certification.stream() + .map(Enum::name) + .collect(Collectors.joining(",")) ); } } @@ -98,9 +98,9 @@ private void agreementClaimant(WarrantEntity warrantEntity, List agreementClaimant = statementOfTruth.getAgreementClaimant(); if (agreementClaimant != null && !agreementClaimant.isEmpty()) { warrantEntity.setAgreementClaimant( - agreementClaimant.stream() - .map(Enum::name) - .collect(Collectors.joining(",")) + agreementClaimant.stream() + .map(Enum::name) + .collect(Collectors.joining(",")) ); } } @@ -118,25 +118,25 @@ private void peopleToEvict(WarrantDetails warrantDetails, WarrantEntity warrantE private void nameAndAddressForEviction(WarrantDetails warrantDetails, WarrantEntity warrantEntity) { if (warrantDetails.getNameAndAddressForEviction() != null) { warrantEntity.setCorrectNameAndAddress( - warrantDetails.getNameAndAddressForEviction().getCorrectNameAndAddress()); + warrantDetails.getNameAndAddressForEviction().getCorrectNameAndAddress()); } } private void additionalInformation(WarrantDetails warrantDetails, WarrantEntity warrantEntity) { if (warrantDetails.getAdditionalInformation() != null) { warrantEntity.setAdditionalInformationSelect( - warrantDetails.getAdditionalInformation().getAdditionalInformationSelect()); + warrantDetails.getAdditionalInformation().getAdditionalInformationSelect()); warrantEntity.setAdditionalInformationDetails( - warrantDetails.getAdditionalInformation().getAdditionalInformationDetails()); + warrantDetails.getAdditionalInformation().getAdditionalInformationDetails()); } } private void propertyAccessDetails(WarrantDetails warrantDetails, WarrantEntity warrantEntity) { if (warrantDetails.getPropertyAccessDetails() != null) { warrantEntity.setIsDifficultToAccessProperty( - warrantDetails.getPropertyAccessDetails().getIsDifficultToAccessProperty()); + warrantDetails.getPropertyAccessDetails().getIsDifficultToAccessProperty()); warrantEntity.setClarificationOnAccessDifficultyText( - warrantDetails.getPropertyAccessDetails().getClarificationOnAccessDifficultyText()); + warrantDetails.getPropertyAccessDetails().getClarificationOnAccessDifficultyText()); } } @@ -170,7 +170,7 @@ private void defendantsDOB(WarrantEntity warrantEntity, WarrantDetails warrantDe warrantEntity.setDefendantsDOBKnown(warrantDetails.getDefendantsDOBKnown()); if (warrantDetails.getDefendantsDOB() != null) { warrantEntity.setDefendantsDOBDetails( - warrantDetails.getDefendantsDOB().getDefendantsDOBDetails()); + warrantDetails.getDefendantsDOB().getDefendantsDOBDetails()); } } @@ -179,4 +179,8 @@ private void moneyOwed(WarrantDetails warrantDetails, WarrantEntity warrantEntit warrantEntity.setAmountOwed(warrantDetails.getMoneyOwedByDefendants().getAmountOwed()); } } + + private VerticalYesNo convertYesOrNoToVerticalYesNo(YesOrNo yesOrNo) { + return yesOrNo == YesOrNo.YES ? VerticalYesNo.YES : VerticalYesNo.NO; + } } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/util/EnforcementTypeUtil.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/util/EnforcementTypeUtil.java index edfd471e54..5529336d04 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/util/EnforcementTypeUtil.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/util/EnforcementTypeUtil.java @@ -2,8 +2,6 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; -import uk.gov.hmcts.ccd.sdk.type.YesOrNo; -import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicStringList; import uk.gov.hmcts.reform.pcs.ccd.type.DynamicStringListElement; @@ -32,8 +30,4 @@ public static DynamicStringList createDynamicStringList(List Date: Fri, 27 Mar 2026 09:51:55 +0000 Subject: [PATCH 52/54] HDPI-5188 - Formatting changes removed --- .../mapper/WarrantDetailsMapper.java | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java index 82920d2bd3..c4762e45c5 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantDetailsMapper.java @@ -27,7 +27,7 @@ public class WarrantDetailsMapper { public WarrantEntity toEntity(EnforcementOrder enforcementOrder, EnforcementOrderEntity enforcementOrderEntity) { WarrantEntity warrantEntity = WarrantEntity.builder() - .enforcementOrder(enforcementOrderEntity).build(); + .enforcementOrder(enforcementOrderEntity).build(); if (enforcementOrder.getWarrantDetails() != null) { WarrantDetails warrantDetails = enforcementOrder.getWarrantDetails(); warrantEntity.setLanguageUsed(warrantDetails.getLanguageUsed()); @@ -49,9 +49,9 @@ public WarrantEntity toEntity(EnforcementOrder enforcementOrder, private void controlFlags(WarrantEntity warrantEntity, WarrantDetails warrantDetails) { warrantEntity.setShowPeopleWhoWillBeEvictedPage( - convertYesOrNoToVerticalYesNo(warrantDetails.getShowPeopleWhoWillBeEvictedPage())); + convertYesOrNoToVerticalYesNo(warrantDetails.getShowPeopleWhoWillBeEvictedPage())); warrantEntity.setShowPeopleYouWantToEvictPage( - convertYesOrNoToVerticalYesNo(warrantDetails.getShowPeopleYouWantToEvictPage())); + convertYesOrNoToVerticalYesNo(warrantDetails.getShowPeopleYouWantToEvictPage())); } private void statementOfTruth(WarrantDetails warrantDetails, WarrantEntity warrantEntity) { @@ -75,9 +75,9 @@ private void certification(WarrantEntity warrantEntity, List certification = statementOfTruth.getCertification(); if (certification != null && !certification.isEmpty()) { warrantEntity.setCertification( - certification.stream() - .map(Enum::name) - .collect(Collectors.joining(",")) + certification.stream() + .map(Enum::name) + .collect(Collectors.joining(",")) ); } } @@ -98,9 +98,9 @@ private void agreementClaimant(WarrantEntity warrantEntity, List agreementClaimant = statementOfTruth.getAgreementClaimant(); if (agreementClaimant != null && !agreementClaimant.isEmpty()) { warrantEntity.setAgreementClaimant( - agreementClaimant.stream() - .map(Enum::name) - .collect(Collectors.joining(",")) + agreementClaimant.stream() + .map(Enum::name) + .collect(Collectors.joining(",")) ); } } @@ -118,25 +118,25 @@ private void peopleToEvict(WarrantDetails warrantDetails, WarrantEntity warrantE private void nameAndAddressForEviction(WarrantDetails warrantDetails, WarrantEntity warrantEntity) { if (warrantDetails.getNameAndAddressForEviction() != null) { warrantEntity.setCorrectNameAndAddress( - warrantDetails.getNameAndAddressForEviction().getCorrectNameAndAddress()); + warrantDetails.getNameAndAddressForEviction().getCorrectNameAndAddress()); } } private void additionalInformation(WarrantDetails warrantDetails, WarrantEntity warrantEntity) { if (warrantDetails.getAdditionalInformation() != null) { warrantEntity.setAdditionalInformationSelect( - warrantDetails.getAdditionalInformation().getAdditionalInformationSelect()); + warrantDetails.getAdditionalInformation().getAdditionalInformationSelect()); warrantEntity.setAdditionalInformationDetails( - warrantDetails.getAdditionalInformation().getAdditionalInformationDetails()); + warrantDetails.getAdditionalInformation().getAdditionalInformationDetails()); } } private void propertyAccessDetails(WarrantDetails warrantDetails, WarrantEntity warrantEntity) { if (warrantDetails.getPropertyAccessDetails() != null) { warrantEntity.setIsDifficultToAccessProperty( - warrantDetails.getPropertyAccessDetails().getIsDifficultToAccessProperty()); + warrantDetails.getPropertyAccessDetails().getIsDifficultToAccessProperty()); warrantEntity.setClarificationOnAccessDifficultyText( - warrantDetails.getPropertyAccessDetails().getClarificationOnAccessDifficultyText()); + warrantDetails.getPropertyAccessDetails().getClarificationOnAccessDifficultyText()); } } @@ -170,7 +170,7 @@ private void defendantsDOB(WarrantEntity warrantEntity, WarrantDetails warrantDe warrantEntity.setDefendantsDOBKnown(warrantDetails.getDefendantsDOBKnown()); if (warrantDetails.getDefendantsDOB() != null) { warrantEntity.setDefendantsDOBDetails( - warrantDetails.getDefendantsDOB().getDefendantsDOBDetails()); + warrantDetails.getDefendantsDOB().getDefendantsDOBDetails()); } } From 2381765604dc9184d6fa888afb9a0bd651e2b50d Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Fri, 27 Mar 2026 10:14:41 +0000 Subject: [PATCH 53/54] HDPI-5188 - Changes not needed removed --- .../ccd/service/StatementOfTruthService.java | 2 +- .../WarrantOfRestitutionMapperTest.java | 20 ------------------- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/StatementOfTruthService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/StatementOfTruthService.java index f39af857d9..5e97e5139d 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/StatementOfTruthService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/StatementOfTruthService.java @@ -58,4 +58,4 @@ private static boolean legalRepAgreed(StatementOfTruthDetails statementOfTruth) .map(StatementOfTruthAgreementLegalRep.AGREED::equals) .orElse(false); } -} \ No newline at end of file +} diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java index 2bfe7c046c..3a6971c372 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/enforcetheorder/mapper/WarrantOfRestitutionMapperTest.java @@ -1,6 +1,5 @@ package uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.mapper; -import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -13,21 +12,16 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RiskDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.PropertyAccessDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.RiskCategory; -import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.StatementOfTruthDetailsEnforcement; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableAdultsChildren; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.common.VulnerableCategory; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.AdditionalInformation; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.RawWarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrant.WarrantDetails; import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.warrantofrestitution.WarrantOfRestitutionDetails; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreement; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthAgreementLegalRep; -import uk.gov.hmcts.reform.pcs.ccd.domain.statementoftruth.StatementOfTruthCompletedBy; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.WarrantOfRestitutionEntity; import java.math.BigDecimal; -import java.util.List; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; @@ -234,8 +228,6 @@ void shouldMapCompleteWarrantDetails() { } private EnforcementOrder createCompleteEnforcementOrder() { - StatementOfTruthDetailsEnforcement statementOfTruth = getStatementOfTruthDetailsEnforcement(); - WarrantDetails warrantDetails = WarrantDetails.builder() .showChangeNameAddressPage(YesOrNo.YES) .isSuspendedOrder(VerticalYesNo.NO) @@ -247,20 +239,8 @@ private EnforcementOrder createCompleteEnforcementOrder() { .areLegalCostsToBeClaimed(VerticalYesNo.YES) .amountOfLegalCosts(new BigDecimal("1000.00")) .build()) - .statementOfTruth(statementOfTruth) .build(); return EnforcementOrder.builder().warrantDetails(warrantDetails).build(); } - - private static @NotNull StatementOfTruthDetailsEnforcement getStatementOfTruthDetailsEnforcement() { - StatementOfTruthDetailsEnforcement statementOfTruth = new StatementOfTruthDetailsEnforcement(); - statementOfTruth.setCompletedBy(StatementOfTruthCompletedBy.LEGAL_REPRESENTATIVE); - statementOfTruth.setFullNameLegalRep("Legal Rep Name"); - statementOfTruth.setFirmNameLegalRep("Law Firm"); - statementOfTruth.setPositionLegalRep("Senior Partner"); - statementOfTruth.setAgreementLegalRep(List.of(StatementOfTruthAgreementLegalRep.AGREED)); - statementOfTruth.setCertification(List.of(StatementOfTruthAgreement.CERTIFY)); - return statementOfTruth; - } } \ No newline at end of file From 7d4067a9f4adc379df4b9bc7598b1377bbcf5bbd Mon Sep 17 00:00:00 2001 From: guygrewal77 Date: Mon, 30 Mar 2026 15:36:05 +0100 Subject: [PATCH 54/54] HDPI-5188 - Flyway script number updated --- ...s.sql => V074__enforcement_warrant_of_restitution_details.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V072__enforcement_warrant_of_restitution_details.sql => V074__enforcement_warrant_of_restitution_details.sql} (100%) diff --git a/src/main/resources/db/migration/V072__enforcement_warrant_of_restitution_details.sql b/src/main/resources/db/migration/V074__enforcement_warrant_of_restitution_details.sql similarity index 100% rename from src/main/resources/db/migration/V072__enforcement_warrant_of_restitution_details.sql rename to src/main/resources/db/migration/V074__enforcement_warrant_of_restitution_details.sql