From 1f53675a579652efd1073267e2beae59e976b444 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Thu, 12 Mar 2026 09:18:29 +0000 Subject: [PATCH 01/13] Add enforcement_confirm_eviction migration: create `enf_confirm_eviction` table to store confirmed eviction details. --- .../V063__enforcement_confirm_eviction.sql | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/main/resources/db/migration/V063__enforcement_confirm_eviction.sql diff --git a/src/main/resources/db/migration/V063__enforcement_confirm_eviction.sql b/src/main/resources/db/migration/V063__enforcement_confirm_eviction.sql new file mode 100644 index 0000000000..ca2d681a02 --- /dev/null +++ b/src/main/resources/db/migration/V063__enforcement_confirm_eviction.sql @@ -0,0 +1,20 @@ +CREATE TABLE enf_confirm_eviction( + id UUID PRIMARY KEY, + enf_case_id UUID NOT NULL REFERENCES enf_case (id) ON DELETE CASCADE, + + -- The eviction date + eviction_date_confirmed YES_NO NOT NULL, + + -- Dates when you can not attend an eviction + has_unavaliable_dates YES_NO NOT NULL, + + + + + + language_used VARCHAR(30), + created TIMESTAMP WITHOUT TIME ZONE NOT NULL, + + CONSTRAINT unique_confirm_eviction_per_enforcement UNIQUE(enf_case_id) +); + From 2cb6480ee999646d4ed27f0c59da0e53b2c8f865 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Tue, 17 Mar 2026 09:17:46 +0000 Subject: [PATCH 02/13] Add confirm eviction entity, repository, and service methods; extend risk profile with physical description fields. --- .../ConfirmEvictionEntity.java | 89 +++++++++++++++++++ .../ConfirmEvictionRepository.java | 9 ++ .../EnforcementOrderService.java | 34 +++++-- .../V063__enforcement_confirm_eviction.sql | 36 ++++++-- 4 files changed, 155 insertions(+), 13 deletions(-) create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/ConfirmEvictionEntity.java create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/ConfirmEvictionRepository.java diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/ConfirmEvictionEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/ConfirmEvictionEntity.java new file mode 100644 index 0000000000..7a4eb0c9d7 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/ConfirmEvictionEntity.java @@ -0,0 +1,89 @@ +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; +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.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.VerticalYesNo; + +import java.time.Instant; +import java.util.UUID; + +@Entity +@Builder +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "enf_confirm_eviction") +public class ConfirmEvictionEntity { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private UUID id; + + @OneToOne + @JoinColumn(name = "enf_case_id", nullable = false) + @JsonBackReference + private EnforcementOrderEntity enforcementOrder; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo evictionDateConfirmed; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo hasUnavaliableDates; + + private String beforeEvictionNameOrDepartment; + + private String beforeEvictionTelephoneNumber; + + private String beforeEvictionEmailAddress; + + private String afterEvictionNameOrDepartment; + + private String afterEvictionTelephoneNumber; + + private String afterEvictionEmailAddress; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo difficultToAccess; + + private String difficultToAccessDetails; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo anythingElse; + + private String anythingElseDetails; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + private VerticalYesNo confirmArrangementForAccess; + + @Enumerated(EnumType.STRING) + private LanguageUsed languageUsed; + + @CreationTimestamp + @Column(updatable = false, nullable = false) + private Instant created; + +} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/ConfirmEvictionRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/ConfirmEvictionRepository.java new file mode 100644 index 0000000000..aeae9a2696 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/ConfirmEvictionRepository.java @@ -0,0 +1,9 @@ +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.ConfirmEvictionEntity; + +import java.util.UUID; + +public interface ConfirmEvictionRepository extends JpaRepository { +} 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 fe2ef094e1..339b80181c 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 @@ -8,9 +8,11 @@ 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.PcsCaseEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.ConfirmEvictionEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.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.ConfirmEvictionRepository; 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; @@ -28,6 +30,7 @@ public class EnforcementOrderService { private final PcsCaseRepository pcsCaseRepository; private final DraftCaseDataService draftCaseDataService; private final EnforcementTypeStrategyFactory strategyFactory; + private final ConfirmEvictionRepository confirmEvictionRepository; @Transactional public void saveAndClearDraftData(long caseReference, EnforcementOrder enforcementOrder) { @@ -36,22 +39,39 @@ public void saveAndClearDraftData(long caseReference, EnforcementOrder enforceme } private void createEnforcementOrder(long caseReference, EnforcementOrder enforcementOrder) { + ClaimEntity claimEntity = getClaimEntity(caseReference); + EnforcementOrderEntity orderEntity = enforcementOrderRepository + .save(mapToEntity(enforcementOrder, claimEntity)); + strategyFactory.getStrategy(enforcementOrder.getSelectEnforcementType()) + .process(orderEntity, enforcementOrder); + } + + private ClaimEntity getClaimEntity(long caseReference) { PcsCaseEntity pcsCaseEntity = pcsCaseRepository.findByCaseReference(caseReference) .orElseThrow(() -> new CaseNotFoundException(caseReference)); - List claimEntities = pcsCaseEntity.getClaims(); - // This should never happen if (CollectionUtils.isEmpty(claimEntities)) { log.error("No claim found for case reference {}", caseReference); throw new ClaimNotFoundException(pcsCaseEntity.getCaseReference()); } - // Assuming 1 claim per PcsCase - ClaimEntity claimEntity = claimEntities.getFirst(); + return claimEntities.getFirst(); + } + + public void confirmEviction(long caseReference, EnforcementOrder enforcementOrder) { + ConfirmEvictionEntity confirmEviction = mapToConfirmEvictionEntity(caseReference, enforcementOrder); + confirmEvictionRepository.save(confirmEviction); + } + + private ConfirmEvictionEntity mapToConfirmEvictionEntity(long caseReference, EnforcementOrder enforcementOrder) { EnforcementOrderEntity orderEntity = enforcementOrderRepository - .save(mapToEntity(enforcementOrder, claimEntity)); - strategyFactory.getStrategy(enforcementOrder.getSelectEnforcementType()) - .process(orderEntity, enforcementOrder); + .save(mapToEntity(enforcementOrder, getClaimEntity(caseReference))); + ConfirmEvictionEntity confirmEviction = new ConfirmEvictionEntity(); + confirmEviction.setEnforcementOrder(orderEntity); + + // ... + + return confirmEviction; } private EnforcementOrderEntity mapToEntity(EnforcementOrder enforcementOrder, ClaimEntity claimEntity) { diff --git a/src/main/resources/db/migration/V063__enforcement_confirm_eviction.sql b/src/main/resources/db/migration/V063__enforcement_confirm_eviction.sql index ca2d681a02..aa9e5257fb 100644 --- a/src/main/resources/db/migration/V063__enforcement_confirm_eviction.sql +++ b/src/main/resources/db/migration/V063__enforcement_confirm_eviction.sql @@ -1,20 +1,44 @@ CREATE TABLE enf_confirm_eviction( - id UUID PRIMARY KEY, - enf_case_id UUID NOT NULL REFERENCES enf_case (id) ON DELETE CASCADE, +id UUID PRIMARY KEY, + enf_case_id UUID NOT NULL REFERENCES enf_case (id) ON DELETE CASCADE, -- The eviction date - eviction_date_confirmed YES_NO NOT NULL, + eviction_date_confirmed YES_NO NOT NULL, -- Dates when you can not attend an eviction - has_unavaliable_dates YES_NO NOT NULL, + has_unavaliable_dates YES_NO NOT NULL, + -- create dates avaliable table !!! + -- Contact for Bailiff + before_eviction_name_or_department VARCHAR(100), + before_eviction_telephone_number VARCHAR(20), + before_eviction_email_address VARCHAR(60), + after_eviction_name_or_department VARCHAR(100), + after_eviction_telephone_number VARCHAR(20), + after_eviction_email_address VARCHAR(60), + -- access to the property + difficult_to_access YES_NO, + difficult_to_access_details VARCHAR(6800), + -- Anything else that could help with the eviction + anything_else YES_NO, + anything_else_details VARCHAR(6800), - language_used VARCHAR(30), - created TIMESTAMP WITHOUT TIME ZONE NOT NULL, + -- Gaining access to and securing the property after the eviction + confirm_arrangement_for_access YES_NO, + + language_used VARCHAR(30), + created TIMESTAMP WITHOUT TIME ZONE NOT NULL, CONSTRAINT unique_confirm_eviction_per_enforcement UNIQUE(enf_case_id) ); +ALTER TABLE enf_risk_profile + ADD COLUMN physical_description_of_risk_defendant YES_NO; + +ALTER TABLE enf_risk_profile + ADD COLUMN physical_description_of_risk_defendant_details VARCHAR(6800); + + From 80abba68795a4cf27e3597d6dbc1c0c7a3922592 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Tue, 17 Mar 2026 13:33:34 +0000 Subject: [PATCH 03/13] =?UTF-8?q?Refactor=20EnforcementOrderService:=20use?= =?UTF-8?q?=20new=20enforcement=20type=20lookup=20and=20replace=20case?= =?UTF-8?q?=E2=80=91not=E2=80=91found=20exception=20with=20clearer=20Illeg?= =?UTF-8?q?alStateException.=20Update=20migration=20V067.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enforcetheorder/EnforcementOrderService.java | 10 ++++++---- ...tion.sql => V067__enforcement_confirm_eviction.sql} | 0 2 files changed, 6 insertions(+), 4 deletions(-) rename src/main/resources/db/migration/{V063__enforcement_confirm_eviction.sql => V067__enforcement_confirm_eviction.sql} (100%) 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 444b342dc4..3fffab6efd 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 @@ -12,7 +12,6 @@ import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.ConfirmEvictionEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.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.ConfirmEvictionRepository; import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.EnforcementOrderRepository; import uk.gov.hmcts.reform.pcs.ccd.service.DraftCaseDataService; @@ -22,6 +21,8 @@ import java.util.List; import java.util.Set; +import static uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType.getSelectEnforcementTypeFromName; + @Service @Slf4j @AllArgsConstructor @@ -75,7 +76,8 @@ private void createEnforcementOrder(long caseReference, EnforcementOrder enforce ClaimEntity claimEntity = getClaimEntity(caseReference); EnforcementOrderEntity orderEntity = enforcementOrderRepository .save(mapToEntity(enforcementOrder, claimEntity)); - strategyFactory.getStrategy(enforcementOrder.getSelectEnforcementType()) + strategyFactory.getStrategy(getSelectEnforcementTypeFromName( + enforcementOrder.getChooseEnforcementType().getValueCode())) .process(orderEntity, enforcementOrder); } @@ -83,8 +85,8 @@ private ClaimEntity getClaimEntity(long caseReference) { PcsCaseEntity pcsCaseEntity = pcsCaseService.loadCase(caseReference); List claimEntities = pcsCaseEntity.getClaims(); if (CollectionUtils.isEmpty(claimEntities)) { - log.error("No claim found for case reference {}", caseReference); - throw new ClaimNotFoundException(pcsCaseEntity.getCaseReference()); + throw new IllegalStateException("Cannot create enforcement order because no claim entity exists for " + + "caseReference=" + caseReference); } // Assuming 1 claim per PcsCase return claimEntities.getFirst(); diff --git a/src/main/resources/db/migration/V063__enforcement_confirm_eviction.sql b/src/main/resources/db/migration/V067__enforcement_confirm_eviction.sql similarity index 100% rename from src/main/resources/db/migration/V063__enforcement_confirm_eviction.sql rename to src/main/resources/db/migration/V067__enforcement_confirm_eviction.sql From 7cf97ae0408866b8697b091f97e533353bb6bda0 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Thu, 19 Mar 2026 10:07:37 +0000 Subject: [PATCH 04/13] [#5213] Branch swithing --- .../EnforcementOrderService.java | 46 +++++++++++++------ .../EnforcementOrderServiceTest.java | 32 +++++++++---- 2 files changed, 57 insertions(+), 21 deletions(-) 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 3fffab6efd..abc0e678e6 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 @@ -35,15 +35,8 @@ public class EnforcementOrderService { private final ConfirmEvictionRepository confirmEvictionRepository; public EnforcementOrder retrieveEnforcementOrder(long caseReference, SelectEnforcementType enforcementType) { - PcsCaseEntity pcsCaseEntity = pcsCaseService.loadCase(caseReference); - ClaimEntity claimEntity = retrieveClaimEntity(pcsCaseEntity); - if (claimEntity == null) { - log.debug("No claim entities found for PCS case when retrieving enforcement order for caseReference={}", - caseReference); - return null; - } - Set enforcementEntitySet = claimEntity.getEnforcementOrders(); - if (CollectionUtils.isEmpty(enforcementEntitySet)) { + Set enforcementEntitySet = getEnforcementOrderEntities(caseReference); + if (enforcementEntitySet == null) { return null; } @@ -56,6 +49,22 @@ public EnforcementOrder retrieveEnforcementOrder(long caseReference, SelectEnfor .orElse(null); } + private Set getEnforcementOrderEntities(long caseReference) { + PcsCaseEntity pcsCaseEntity = pcsCaseService.loadCase(caseReference); + ClaimEntity claimEntity = retrieveClaimEntity(pcsCaseEntity); + if (claimEntity == null) { + log.debug("No claim entities found for PCS case when retrieving enforcement order for caseReference={}", + caseReference + ); + return null; + } + Set enforcementEntitySet = claimEntity.getEnforcementOrders(); + if (CollectionUtils.isEmpty(enforcementEntitySet)) { + return null; + } + return enforcementEntitySet; + } + ClaimEntity retrieveClaimEntity(PcsCaseEntity pcsCaseEntity) { List claimEntities = pcsCaseEntity.getClaims(); @@ -77,7 +86,7 @@ private void createEnforcementOrder(long caseReference, EnforcementOrder enforce EnforcementOrderEntity orderEntity = enforcementOrderRepository .save(mapToEntity(enforcementOrder, claimEntity)); strategyFactory.getStrategy(getSelectEnforcementTypeFromName( - enforcementOrder.getChooseEnforcementType().getValueCode())) + enforcementOrder.getChooseEnforcementType().getValueCode())) .process(orderEntity, enforcementOrder); } @@ -98,16 +107,27 @@ public void confirmEviction(long caseReference, EnforcementOrder enforcementOrde } private ConfirmEvictionEntity mapToConfirmEvictionEntity(long caseReference, EnforcementOrder enforcementOrder) { - EnforcementOrderEntity orderEntity = enforcementOrderRepository - .save(mapToEntity(enforcementOrder, getClaimEntity(caseReference))); ConfirmEvictionEntity confirmEviction = new ConfirmEvictionEntity(); - confirmEviction.setEnforcementOrder(orderEntity); // ... + // confirmEviction.setEnforcementOrder(); + return confirmEviction; } + /** + * Currently this is an assumption that it is the latest EnforcementOrder that is the one we are interested in. + * @return + */ + private EnforcementOrderEntity retrieveMostRecentEnforcementOrderForClaim(long caseReference) { + PcsCaseEntity pcsCaseEntity = pcsCaseService.loadCase(caseReference); + ClaimEntity claimEntity = retrieveClaimEntity(pcsCaseEntity); + + claimEntity.getEnforcementOrders(); + + } + private EnforcementOrderEntity mapToEntity(EnforcementOrder enforcementOrder, ClaimEntity claimEntity) { EnforcementOrderEntity enforcementOrderEntity = new EnforcementOrderEntity(); enforcementOrderEntity.setClaim(claimEntity); 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 dfe0e49613..9e6b09192e 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 @@ -43,7 +43,7 @@ class EnforcementOrderServiceTest { @Mock private EnforcementTypeStrategyFactory strategyFactory; @InjectMocks - private EnforcementOrderService enforcementOrderService; + private EnforcementOrderService underTest; @Captor private ArgumentCaptor enforcementOrderEntityCaptor; @@ -66,7 +66,7 @@ void shouldReturnEnforcementOrderIfFoundInDatabase() { claimEntity.setEnforcementOrders(Set.of(enforcementOrderEntity)); when(pcsCaseService.loadCase(CASE_REFERENCE)).thenReturn(pcsCaseEntity); // When - EnforcementOrder retOrder = enforcementOrderService.retrieveEnforcementOrder(CASE_REFERENCE, WARRANT); + EnforcementOrder retOrder = underTest.retrieveEnforcementOrder(CASE_REFERENCE, WARRANT); // Then assertThat(retOrder).isNotNull(); @@ -81,7 +81,7 @@ void shouldReturnNullIfNotFoundInDatabase() { when(pcsCaseService.loadCase(CASE_REFERENCE)).thenReturn(pcsCaseEntity); // When - EnforcementOrder retOrder = enforcementOrderService.retrieveEnforcementOrder(CASE_REFERENCE, WARRANT); + EnforcementOrder retOrder = underTest.retrieveEnforcementOrder(CASE_REFERENCE, WARRANT); // Then assertThat(retOrder).isNull(); @@ -96,7 +96,7 @@ void shouldReturnFirstClaimFromPcsCaseEntity() { pcsCaseEntity.setClaims(List.of(firstClaim, secondClaim)); // When - ClaimEntity result = enforcementOrderService.retrieveClaimEntity(pcsCaseEntity); + ClaimEntity result = underTest.retrieveClaimEntity(pcsCaseEntity); // Then assertThat(result).isSameAs(firstClaim); @@ -109,7 +109,7 @@ void shouldReturnNullWhenNoClaimEntitiesPresent() { pcsCaseEntity.setClaims(List.of()); // When - ClaimEntity result = enforcementOrderService.retrieveClaimEntity(pcsCaseEntity); + ClaimEntity result = underTest.retrieveClaimEntity(pcsCaseEntity); // Then assertThat(result).isNull(); @@ -123,7 +123,7 @@ void shouldReturnNullWhenNoClaimEntityOnRetrieveEnforcementOrder() { when(pcsCaseService.loadCase(CASE_REFERENCE)).thenReturn(pcsCaseEntity); // When - EnforcementOrder result = enforcementOrderService.retrieveEnforcementOrder(CASE_REFERENCE, WARRANT); + EnforcementOrder result = underTest.retrieveEnforcementOrder(CASE_REFERENCE, WARRANT); // Then assertThat(result).isNull(); @@ -138,7 +138,7 @@ void shouldThrowWhenSavingWithNoClaimEntityPresent() { // When / Then org.assertj.core.api.Assertions.assertThatThrownBy( - () -> enforcementOrderService.saveAndClearDraftData(CASE_REFERENCE, new EnforcementOrder()) + () -> underTest.saveAndClearDraftData(CASE_REFERENCE, new EnforcementOrder()) ).isInstanceOf(IllegalStateException.class) .hasMessageContaining("no claim entity exists"); } @@ -156,7 +156,7 @@ void shouldSaveNewSubmittedEnforcementData() { .thenReturn(mock(EnforcementTypeStrategy.class)); // When - enforcementOrderService.saveAndClearDraftData(CASE_REFERENCE, enforcementOrder); + underTest.saveAndClearDraftData(CASE_REFERENCE, enforcementOrder); // Then verify(enforcementOrderRepository).save(enforcementOrderEntityCaptor.capture()); @@ -165,4 +165,20 @@ void shouldSaveNewSubmittedEnforcementData() { verify(draftCaseDataService).deleteUnsubmittedCaseData(anyLong(), any(EventId.class)); } + @Test + void confirmEviction() { + // Given + final EnforcementOrder enforcementOrder = EnforcementDataUtil.buildEnforcementOrder(); + when(enforcementOrderRepository.save(any(EnforcementOrderE))) + + // When + underTest.confirmEviction(CASE_REFERENCE, enforcementOrder); + + + // Then + + + + } + } From 14cf82fdb5ca1e61419070b4699285d03b0596dd Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Wed, 25 Mar 2026 14:08:43 +0000 Subject: [PATCH 05/13] Adding tests and update to the service for mapping. --- .../EnforcementOrderService.java | 26 ++-- .../EnforcementOrderServiceTest.java | 113 +++++++++++++++++- 2 files changed, 125 insertions(+), 14 deletions(-) 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 dd789ad275..4a0d541cc0 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 @@ -67,7 +67,9 @@ private Set getEnforcementOrderEntities(long caseReferen ClaimEntity retrieveClaimEntity(PcsCaseEntity pcsCaseEntity) { List claimEntities = pcsCaseEntity.getClaims(); - + if (CollectionUtils.isEmpty(claimEntities)) { + return null; + } // Assuming 1 claim per PcsCase return claimEntities.getFirst(); } @@ -105,24 +107,24 @@ public void confirmEviction(long caseReference, EnforcementOrder enforcementOrde private ConfirmEvictionEntity mapToConfirmEvictionEntity(long caseReference, EnforcementOrder enforcementOrder) { ConfirmEvictionEntity confirmEviction = new ConfirmEvictionEntity(); + EnforcementOrderEntity enforcementOrderEntity = retrieveEnforcementOrderEntity(caseReference); + confirmEviction.setEnforcementOrder(enforcementOrderEntity); - // ... - // confirmEviction.setEnforcementOrder(); - + // ... Carry out mapping ... return confirmEviction; } - /** - * Currently this is an assumption that it is the latest EnforcementOrder that is the one we are interested in. - * @return - */ - private EnforcementOrderEntity retrieveMostRecentEnforcementOrderForClaim(long caseReference) { + EnforcementOrderEntity retrieveEnforcementOrderEntity(long caseReference) { PcsCaseEntity pcsCaseEntity = pcsCaseService.loadCase(caseReference); ClaimEntity claimEntity = retrieveClaimEntity(pcsCaseEntity); - - claimEntity.getEnforcementOrders(); - + Set enforcementOrders = claimEntity.getEnforcementOrders(); + return enforcementOrders.stream() + .filter(order -> order.getClaim().getId().equals(claimEntity.getId())) + .findFirst() + .orElseThrow(() -> new IllegalStateException( + "No enforcement order found for claim id=" + claimEntity.getId() + )); } private EnforcementOrderEntity mapToEntity(EnforcementOrder enforcementOrder, ClaimEntity claimEntity) { 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 9e6b09192e..66e65a1f86 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,22 +7,27 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import uk.gov.hmcts.reform.pcs.ccd.domain.Claim; 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.PcsCaseEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.ConfirmEvictionEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.event.EventId; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.ConfirmEvictionRepository; 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.PcsCaseService; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy.EnforcementTypeStrategy; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy.EnforcementTypeStrategyFactory; +import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.AssertionsForClassTypes.catchThrowable; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.mock; @@ -42,6 +47,8 @@ class EnforcementOrderServiceTest { private PcsCaseService pcsCaseService; @Mock private EnforcementTypeStrategyFactory strategyFactory; + @Mock + private ConfirmEvictionRepository confirmEvictionRepository; @InjectMocks private EnforcementOrderService underTest; @@ -168,17 +175,119 @@ void shouldSaveNewSubmittedEnforcementData() { @Test void confirmEviction() { // Given - final EnforcementOrder enforcementOrder = EnforcementDataUtil.buildEnforcementOrder(); - when(enforcementOrderRepository.save(any(EnforcementOrderE))) + UUID id = UUID.randomUUID(); + EnforcementOrder enforcementOrder = EnforcementDataUtil.buildEnforcementOrder(); + PcsCaseEntity pcsCaseEntity = mock(PcsCaseEntity.class); + when(pcsCaseService.loadCase(anyLong())).thenReturn(pcsCaseEntity); + ClaimEntity claimEntity = mock(ClaimEntity.class); + when(claimEntity.getId()).thenReturn(id); + when(pcsCaseEntity.getClaims()).thenReturn(List.of(claimEntity)); + EnforcementOrderEntity enforcementOrderEntity = mock(EnforcementOrderEntity.class); + when(enforcementOrderEntity.getClaim()).thenReturn(claimEntity); + when(claimEntity.getEnforcementOrders()).thenReturn(Set.of(enforcementOrderEntity)); // When underTest.confirmEviction(CASE_REFERENCE, enforcementOrder); + // Then + verify(confirmEvictionRepository).save(any(ConfirmEvictionEntity.class)); + } + + @Test + void shouldReturnEnforcementOrderEntityMatchingClaimId() { + // Given + UUID claimId = UUID.randomUUID(); + ClaimEntity claimEntity = mock(ClaimEntity.class); + when(claimEntity.getId()).thenReturn(claimId); + EnforcementOrderEntity matchingOrder = mock(EnforcementOrderEntity.class); + ClaimEntity matchingClaim = mock(ClaimEntity.class); + when(matchingClaim.getId()).thenReturn(claimId); + when(matchingOrder.getClaim()).thenReturn(matchingClaim); + when(claimEntity.getEnforcementOrders()).thenReturn(Set.of(matchingOrder)); + stubLoadCaseWithClaim(claimEntity); + + // When + EnforcementOrderEntity result = underTest.retrieveEnforcementOrderEntity(CASE_REFERENCE); + + // Then + assertThat(result).isSameAs(matchingOrder); + } + + @Test + void shouldReturnFirstMatchingEnforcementOrderWhenMultipleOrdersExist() { + // Given + UUID claimId = UUID.randomUUID(); + ClaimEntity claimEntity = mock(ClaimEntity.class); + when(claimEntity.getId()).thenReturn(claimId); + EnforcementOrderEntity matchingOrder = getEnforcementOrderEntity(); + matchingOrder.getClaim().setId(claimId); + + Set orders = new LinkedHashSet<>(); + orders.add(matchingOrder); + for (int i = 0; i < 6; i++) { + EnforcementOrderEntity nonMatchingOrder = getEnforcementOrderEntity(); + orders.add(nonMatchingOrder); + } + when(claimEntity.getEnforcementOrders()).thenReturn(orders); + + stubLoadCaseWithClaim(claimEntity); + + // When + EnforcementOrderEntity result = underTest.retrieveEnforcementOrderEntity(CASE_REFERENCE); + + // Then + assertThat(result).isSameAs(matchingOrder); + } + + private EnforcementOrderEntity getEnforcementOrderEntity() { + ClaimEntity otherClaim = new ClaimEntity(); + otherClaim.setId(UUID.randomUUID()); + EnforcementOrderEntity nonMatchingOrder = new EnforcementOrderEntity(); + nonMatchingOrder.setClaim(otherClaim); + return nonMatchingOrder; + } + + @Test + void shouldThrowIllegalStateExceptionWhenNoEnforcementOrderMatchesClaimId() { + // Given + UUID claimId = UUID.randomUUID(); + ClaimEntity claimEntity = mock(ClaimEntity.class); + when(claimEntity.getId()).thenReturn(claimId); + EnforcementOrderEntity nonMatchingOrder = getEnforcementOrderEntity(); + when(claimEntity.getEnforcementOrders()).thenReturn(Set.of(nonMatchingOrder)); + stubLoadCaseWithClaim(claimEntity); + + // When + Throwable throwable = catchThrowable(() -> underTest.retrieveEnforcementOrderEntity(CASE_REFERENCE)); // Then + assertThat(throwable) + .isInstanceOf(IllegalStateException.class) + .hasMessage("No enforcement order found for claim id=" + claimId); + } + @Test + void shouldThrowIllegalStateExceptionWhenEnforcementOrdersSetIsEmpty() { + // Given + UUID claimId = UUID.randomUUID(); + ClaimEntity claimEntity = mock(ClaimEntity.class); + when(claimEntity.getId()).thenReturn(claimId); + when(claimEntity.getEnforcementOrders()).thenReturn(Set.of()); + stubLoadCaseWithClaim(claimEntity); + // When + Throwable throwable = catchThrowable(() -> underTest.retrieveEnforcementOrderEntity(CASE_REFERENCE)); + // Then + assertThat(throwable) + .isInstanceOf(IllegalStateException.class) + .hasMessage("No enforcement order found for claim id=" + claimId); + } + + private void stubLoadCaseWithClaim(ClaimEntity claimEntity) { + PcsCaseEntity pcsCaseEntity = mock(PcsCaseEntity.class); + when(pcsCaseService.loadCase(CASE_REFERENCE)).thenReturn(pcsCaseEntity); + when(pcsCaseEntity.getClaims()).thenReturn(List.of(claimEntity)); } } From adce66d8212e8bf5c19ff137aaa67904cb8edbc0 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Wed, 25 Mar 2026 14:13:07 +0000 Subject: [PATCH 06/13] flyway file rename and test update. --- ...irm_eviction.sql => V071__enforcement_confirm_eviction.sql} | 3 ++- .../service/enforcetheorder/EnforcementOrderServiceTest.java | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) rename src/main/resources/db/migration/{V067__enforcement_confirm_eviction.sql => V071__enforcement_confirm_eviction.sql} (97%) diff --git a/src/main/resources/db/migration/V067__enforcement_confirm_eviction.sql b/src/main/resources/db/migration/V071__enforcement_confirm_eviction.sql similarity index 97% rename from src/main/resources/db/migration/V067__enforcement_confirm_eviction.sql rename to src/main/resources/db/migration/V071__enforcement_confirm_eviction.sql index aa9e5257fb..6e8fcf44c7 100644 --- a/src/main/resources/db/migration/V067__enforcement_confirm_eviction.sql +++ b/src/main/resources/db/migration/V071__enforcement_confirm_eviction.sql @@ -7,7 +7,8 @@ id UUID PRIMARY KEY, -- Dates when you can not attend an eviction has_unavaliable_dates YES_NO NOT NULL, - -- create dates avaliable table !!! + + -- seperate table for dates avaliable table -- Contact for Bailiff before_eviction_name_or_department VARCHAR(100), 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 66e65a1f86..19871a739a 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,7 +7,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import uk.gov.hmcts.reform.pcs.ccd.domain.Claim; 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.PcsCaseEntity; From 49964fdae727b7ce2379cccb277b4fb38edbf694 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Wed, 25 Mar 2026 23:33:02 +0000 Subject: [PATCH 07/13] Add `UnavailableDateEntity` and link it to `ConfirmEvictionEntity`; rename `hasUnavaliableDates` to `hasUnavailableDates`. Simplify `retrieveEnforcementOrderEntity` to return first order or null. Update migration V071 to include `enf_unavailable_date` and adjust schema. Remove obsolete tests and add new ones for the updated model. --- .../ConfirmEvictionEntity.java | 12 +- .../UnavailableDateEntity.java | 41 +++++++ .../EnforcementOrderService.java | 7 +- .../V071__enforcement_confirm_eviction.sql | 12 +- .../EnforcementOrderServiceTest.java | 104 +----------------- 5 files changed, 60 insertions(+), 116 deletions(-) create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/UnavailableDateEntity.java diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/ConfirmEvictionEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/ConfirmEvictionEntity.java index 7a4eb0c9d7..298b1dd8f1 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/ConfirmEvictionEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/ConfirmEvictionEntity.java @@ -1,6 +1,6 @@ package uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder; -import com.fasterxml.jackson.annotation.JsonBackReference; +import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -9,6 +9,7 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToMany; import jakarta.persistence.OneToOne; import jakarta.persistence.Table; import lombok.AllArgsConstructor; @@ -23,6 +24,8 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.VerticalYesNo; import java.time.Instant; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; @Entity @@ -40,7 +43,6 @@ public class ConfirmEvictionEntity { @OneToOne @JoinColumn(name = "enf_case_id", nullable = false) - @JsonBackReference private EnforcementOrderEntity enforcementOrder; @Enumerated(EnumType.STRING) @@ -49,7 +51,11 @@ public class ConfirmEvictionEntity { @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) - private VerticalYesNo hasUnavaliableDates; + private VerticalYesNo hasUnavailableDates; + + @OneToMany(mappedBy = "confirmEviction", cascade = CascadeType.ALL, orphanRemoval = true) + @Builder.Default + private List unavailableDates = new ArrayList<>(); private String beforeEvictionNameOrDepartment; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/UnavailableDateEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/UnavailableDateEntity.java new file mode 100644 index 0000000000..9f414b3b0e --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/UnavailableDateEntity.java @@ -0,0 +1,41 @@ +package uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder; + +import com.fasterxml.jackson.annotation.JsonBackReference; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.time.LocalDate; +import java.util.UUID; + +@Entity +@Builder +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Table(name = "enf_unavailable_date") +public class UnavailableDateEntity { + + @Id + @GeneratedValue(strategy = GenerationType.UUID) + private UUID id; + + @ManyToOne + @JoinColumn(name = "enf_confirm_eviction_id", nullable = false) + @JsonBackReference + private ConfirmEvictionEntity confirmEviction; + + private LocalDate unavailableDate; + +} + 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 4a0d541cc0..d82fa3a8c2 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 @@ -119,12 +119,7 @@ EnforcementOrderEntity retrieveEnforcementOrderEntity(long caseReference) { PcsCaseEntity pcsCaseEntity = pcsCaseService.loadCase(caseReference); ClaimEntity claimEntity = retrieveClaimEntity(pcsCaseEntity); Set enforcementOrders = claimEntity.getEnforcementOrders(); - return enforcementOrders.stream() - .filter(order -> order.getClaim().getId().equals(claimEntity.getId())) - .findFirst() - .orElseThrow(() -> new IllegalStateException( - "No enforcement order found for claim id=" + claimEntity.getId() - )); + return !enforcementOrders.isEmpty() ? enforcementOrders.stream().findFirst().get() : null; } private EnforcementOrderEntity mapToEntity(EnforcementOrder enforcementOrder, ClaimEntity claimEntity) { diff --git a/src/main/resources/db/migration/V071__enforcement_confirm_eviction.sql b/src/main/resources/db/migration/V071__enforcement_confirm_eviction.sql index 6e8fcf44c7..a4ab353395 100644 --- a/src/main/resources/db/migration/V071__enforcement_confirm_eviction.sql +++ b/src/main/resources/db/migration/V071__enforcement_confirm_eviction.sql @@ -1,14 +1,14 @@ CREATE TABLE enf_confirm_eviction( -id UUID PRIMARY KEY, + id UUID PRIMARY KEY, enf_case_id UUID NOT NULL REFERENCES enf_case (id) ON DELETE CASCADE, -- The eviction date eviction_date_confirmed YES_NO NOT NULL, -- Dates when you can not attend an eviction - has_unavaliable_dates YES_NO NOT NULL, + has_unavailable_dates YES_NO NOT NULL, - -- seperate table for dates avaliable table + -- separate table for dates unavailable table -- Contact for Bailiff before_eviction_name_or_department VARCHAR(100), @@ -42,4 +42,8 @@ ALTER TABLE enf_risk_profile ALTER TABLE enf_risk_profile ADD COLUMN physical_description_of_risk_defendant_details VARCHAR(6800); - +CREATE TABLE enf_unavailable_date ( + id UUID PRIMARY KEY, + enf_confirm_eviction_id UUID NOT NULL REFERENCES enf_confirm_eviction (id) ON DELETE CASCADE, + unavailable_date DATE NOT NULL +); 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 19871a739a..35ad05fdb5 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 @@ -20,13 +20,11 @@ import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy.EnforcementTypeStrategy; import uk.gov.hmcts.reform.pcs.ccd.service.enforcetheorder.strategy.EnforcementTypeStrategyFactory; -import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.AssertionsForClassTypes.catchThrowable; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.mock; @@ -174,16 +172,13 @@ void shouldSaveNewSubmittedEnforcementData() { @Test void confirmEviction() { // Given - UUID id = UUID.randomUUID(); - EnforcementOrder enforcementOrder = EnforcementDataUtil.buildEnforcementOrder(); PcsCaseEntity pcsCaseEntity = mock(PcsCaseEntity.class); when(pcsCaseService.loadCase(anyLong())).thenReturn(pcsCaseEntity); ClaimEntity claimEntity = mock(ClaimEntity.class); - when(claimEntity.getId()).thenReturn(id); when(pcsCaseEntity.getClaims()).thenReturn(List.of(claimEntity)); EnforcementOrderEntity enforcementOrderEntity = mock(EnforcementOrderEntity.class); - when(enforcementOrderEntity.getClaim()).thenReturn(claimEntity); when(claimEntity.getEnforcementOrders()).thenReturn(Set.of(enforcementOrderEntity)); + EnforcementOrder enforcementOrder = EnforcementDataUtil.buildEnforcementOrder(); // When underTest.confirmEviction(CASE_REFERENCE, enforcementOrder); @@ -192,101 +187,4 @@ void confirmEviction() { verify(confirmEvictionRepository).save(any(ConfirmEvictionEntity.class)); } - @Test - void shouldReturnEnforcementOrderEntityMatchingClaimId() { - // Given - UUID claimId = UUID.randomUUID(); - ClaimEntity claimEntity = mock(ClaimEntity.class); - when(claimEntity.getId()).thenReturn(claimId); - EnforcementOrderEntity matchingOrder = mock(EnforcementOrderEntity.class); - ClaimEntity matchingClaim = mock(ClaimEntity.class); - when(matchingClaim.getId()).thenReturn(claimId); - when(matchingOrder.getClaim()).thenReturn(matchingClaim); - when(claimEntity.getEnforcementOrders()).thenReturn(Set.of(matchingOrder)); - stubLoadCaseWithClaim(claimEntity); - - // When - EnforcementOrderEntity result = underTest.retrieveEnforcementOrderEntity(CASE_REFERENCE); - - // Then - assertThat(result).isSameAs(matchingOrder); - } - - @Test - void shouldReturnFirstMatchingEnforcementOrderWhenMultipleOrdersExist() { - // Given - UUID claimId = UUID.randomUUID(); - ClaimEntity claimEntity = mock(ClaimEntity.class); - when(claimEntity.getId()).thenReturn(claimId); - EnforcementOrderEntity matchingOrder = getEnforcementOrderEntity(); - matchingOrder.getClaim().setId(claimId); - - Set orders = new LinkedHashSet<>(); - orders.add(matchingOrder); - for (int i = 0; i < 6; i++) { - EnforcementOrderEntity nonMatchingOrder = getEnforcementOrderEntity(); - orders.add(nonMatchingOrder); - } - when(claimEntity.getEnforcementOrders()).thenReturn(orders); - - stubLoadCaseWithClaim(claimEntity); - - // When - EnforcementOrderEntity result = underTest.retrieveEnforcementOrderEntity(CASE_REFERENCE); - - // Then - assertThat(result).isSameAs(matchingOrder); - } - - private EnforcementOrderEntity getEnforcementOrderEntity() { - ClaimEntity otherClaim = new ClaimEntity(); - otherClaim.setId(UUID.randomUUID()); - EnforcementOrderEntity nonMatchingOrder = new EnforcementOrderEntity(); - nonMatchingOrder.setClaim(otherClaim); - return nonMatchingOrder; - } - - @Test - void shouldThrowIllegalStateExceptionWhenNoEnforcementOrderMatchesClaimId() { - // Given - UUID claimId = UUID.randomUUID(); - ClaimEntity claimEntity = mock(ClaimEntity.class); - when(claimEntity.getId()).thenReturn(claimId); - EnforcementOrderEntity nonMatchingOrder = getEnforcementOrderEntity(); - when(claimEntity.getEnforcementOrders()).thenReturn(Set.of(nonMatchingOrder)); - stubLoadCaseWithClaim(claimEntity); - - // When - Throwable throwable = catchThrowable(() -> underTest.retrieveEnforcementOrderEntity(CASE_REFERENCE)); - - // Then - assertThat(throwable) - .isInstanceOf(IllegalStateException.class) - .hasMessage("No enforcement order found for claim id=" + claimId); - } - - @Test - void shouldThrowIllegalStateExceptionWhenEnforcementOrdersSetIsEmpty() { - // Given - UUID claimId = UUID.randomUUID(); - ClaimEntity claimEntity = mock(ClaimEntity.class); - when(claimEntity.getId()).thenReturn(claimId); - when(claimEntity.getEnforcementOrders()).thenReturn(Set.of()); - stubLoadCaseWithClaim(claimEntity); - - // When - Throwable throwable = catchThrowable(() -> underTest.retrieveEnforcementOrderEntity(CASE_REFERENCE)); - - // Then - assertThat(throwable) - .isInstanceOf(IllegalStateException.class) - .hasMessage("No enforcement order found for claim id=" + claimId); - } - - private void stubLoadCaseWithClaim(ClaimEntity claimEntity) { - PcsCaseEntity pcsCaseEntity = mock(PcsCaseEntity.class); - when(pcsCaseService.loadCase(CASE_REFERENCE)).thenReturn(pcsCaseEntity); - when(pcsCaseEntity.getClaims()).thenReturn(List.of(claimEntity)); - } - } From 3a585fbc9bbbb99635808a42d9d08fb4fdd557ff Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Thu, 26 Mar 2026 09:59:13 +0000 Subject: [PATCH 08/13] Rename of flyway script to update the numbering following merge from master. --- ...onfirm_eviction.sql => V072__enforcement_confirm_eviction.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V071__enforcement_confirm_eviction.sql => V072__enforcement_confirm_eviction.sql} (100%) diff --git a/src/main/resources/db/migration/V071__enforcement_confirm_eviction.sql b/src/main/resources/db/migration/V072__enforcement_confirm_eviction.sql similarity index 100% rename from src/main/resources/db/migration/V071__enforcement_confirm_eviction.sql rename to src/main/resources/db/migration/V072__enforcement_confirm_eviction.sql From b951c3746d8e5eb10b5ac9a4620b34cba025c980 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Thu, 26 Mar 2026 12:03:12 +0000 Subject: [PATCH 09/13] Refactor EnforcementOrderService: expose getEnforcementOrderEntities, change confirmEviction to only require caseReference, return an empty set instead of null, simplify enforcement order retrieval. Update related tests accordingly. --- .../EnforcementOrderService.java | 24 ++++-------- .../EnforcementOrderServiceTest.java | 38 +++++++++++++++++-- 2 files changed, 43 insertions(+), 19 deletions(-) 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 d82fa3a8c2..1637ed8cd6 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 @@ -49,20 +49,16 @@ public EnforcementOrder retrieveEnforcementOrder(long caseReference, SelectEnfor .orElse(null); } - private Set getEnforcementOrderEntities(long caseReference) { + Set getEnforcementOrderEntities(long caseReference) { PcsCaseEntity pcsCaseEntity = pcsCaseService.loadCase(caseReference); ClaimEntity claimEntity = retrieveClaimEntity(pcsCaseEntity); if (claimEntity == null) { log.debug("No claim entities found for PCS case when retrieving enforcement order for caseReference={}", caseReference ); - return null; - } - Set enforcementEntitySet = claimEntity.getEnforcementOrders(); - if (CollectionUtils.isEmpty(enforcementEntitySet)) { - return null; + return Set.of(); } - return enforcementEntitySet; + return claimEntity.getEnforcementOrders(); } ClaimEntity retrieveClaimEntity(PcsCaseEntity pcsCaseEntity) { @@ -100,25 +96,21 @@ private ClaimEntity getClaimEntity(long caseReference) { return claimEntities.getFirst(); } - public void confirmEviction(long caseReference, EnforcementOrder enforcementOrder) { - ConfirmEvictionEntity confirmEviction = mapToConfirmEvictionEntity(caseReference, enforcementOrder); + public void confirmEviction(long caseReference) { + ConfirmEvictionEntity confirmEviction = mapToConfirmEvictionEntity(caseReference); confirmEvictionRepository.save(confirmEviction); } - private ConfirmEvictionEntity mapToConfirmEvictionEntity(long caseReference, EnforcementOrder enforcementOrder) { + private ConfirmEvictionEntity mapToConfirmEvictionEntity(long caseReference) { ConfirmEvictionEntity confirmEviction = new ConfirmEvictionEntity(); EnforcementOrderEntity enforcementOrderEntity = retrieveEnforcementOrderEntity(caseReference); confirmEviction.setEnforcementOrder(enforcementOrderEntity); - // ... Carry out mapping ... - return confirmEviction; } - EnforcementOrderEntity retrieveEnforcementOrderEntity(long caseReference) { - PcsCaseEntity pcsCaseEntity = pcsCaseService.loadCase(caseReference); - ClaimEntity claimEntity = retrieveClaimEntity(pcsCaseEntity); - Set enforcementOrders = claimEntity.getEnforcementOrders(); + private EnforcementOrderEntity retrieveEnforcementOrderEntity(long caseReference) { + Set enforcementOrders = getEnforcementOrderEntities(caseReference); return !enforcementOrders.isEmpty() ? enforcementOrders.stream().findFirst().get() : null; } 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 35ad05fdb5..0e155ba58a 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 @@ -170,7 +170,7 @@ void shouldSaveNewSubmittedEnforcementData() { } @Test - void confirmEviction() { + void shouldConfirmEviction() { // Given PcsCaseEntity pcsCaseEntity = mock(PcsCaseEntity.class); when(pcsCaseService.loadCase(anyLong())).thenReturn(pcsCaseEntity); @@ -178,13 +178,45 @@ void confirmEviction() { when(pcsCaseEntity.getClaims()).thenReturn(List.of(claimEntity)); EnforcementOrderEntity enforcementOrderEntity = mock(EnforcementOrderEntity.class); when(claimEntity.getEnforcementOrders()).thenReturn(Set.of(enforcementOrderEntity)); - EnforcementOrder enforcementOrder = EnforcementDataUtil.buildEnforcementOrder(); // When - underTest.confirmEviction(CASE_REFERENCE, enforcementOrder); + underTest.confirmEviction(CASE_REFERENCE); // Then verify(confirmEvictionRepository).save(any(ConfirmEvictionEntity.class)); } + @Test + void shouldReturnEmptySetWhenNoClaimEntityFound() { + // Given + final PcsCaseEntity pcsCaseEntity = new PcsCaseEntity(); + pcsCaseEntity.setClaims(List.of()); + when(pcsCaseService.loadCase(CASE_REFERENCE)).thenReturn(pcsCaseEntity); + + // When + Set result = underTest.getEnforcementOrderEntities(CASE_REFERENCE); + + // Then + assertThat(result).isEmpty(); + } + + @Test + void shouldReturnEnforcementOrdersFromClaimEntity() { + // Given + final PcsCaseEntity pcsCaseEntity = new PcsCaseEntity(); + ClaimEntity claimEntity = new ClaimEntity(); + EnforcementOrderEntity enforcementOrderEntity1 = new EnforcementOrderEntity(); + EnforcementOrderEntity enforcementOrderEntity2 = new EnforcementOrderEntity(); + Set enforcementOrders = Set.of(enforcementOrderEntity1, enforcementOrderEntity2); + claimEntity.setEnforcementOrders(enforcementOrders); + pcsCaseEntity.setClaims(List.of(claimEntity)); + when(pcsCaseService.loadCase(CASE_REFERENCE)).thenReturn(pcsCaseEntity); + + // When + Set result = underTest.getEnforcementOrderEntities(CASE_REFERENCE); + + // Then + assertThat(result).containsExactlyInAnyOrder(enforcementOrderEntity1, enforcementOrderEntity2); + } + } From 30527c596df0b9852471fb780c59a97a7ab4a290 Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Thu, 26 Mar 2026 12:27:49 +0000 Subject: [PATCH 10/13] Alteration for Sonar --- .../ccd/service/enforcetheorder/EnforcementOrderService.java | 5 ++++- .../service/enforcetheorder/EnforcementOrderServiceTest.java | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) 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 1637ed8cd6..9dc7135b73 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 @@ -111,7 +111,10 @@ private ConfirmEvictionEntity mapToConfirmEvictionEntity(long caseReference) { private EnforcementOrderEntity retrieveEnforcementOrderEntity(long caseReference) { Set enforcementOrders = getEnforcementOrderEntities(caseReference); - return !enforcementOrders.isEmpty() ? enforcementOrders.stream().findFirst().get() : null; + if (enforcementOrders.isEmpty()) { + return null; + } + return enforcementOrders.stream().findFirst().orElse(null); } private EnforcementOrderEntity mapToEntity(EnforcementOrder enforcementOrder, ClaimEntity claimEntity) { 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 0e155ba58a..a4850f4ffd 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 @@ -25,6 +25,7 @@ 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.ArgumentMatchers.anyLong; import static org.mockito.Mockito.mock; @@ -141,7 +142,7 @@ void shouldThrowWhenSavingWithNoClaimEntityPresent() { when(pcsCaseService.loadCase(CASE_REFERENCE)).thenReturn(pcsCaseEntity); // When / Then - org.assertj.core.api.Assertions.assertThatThrownBy( + assertThatThrownBy( () -> underTest.saveAndClearDraftData(CASE_REFERENCE, new EnforcementOrder()) ).isInstanceOf(IllegalStateException.class) .hasMessageContaining("no claim entity exists"); From 5605d27fb9664c7aa251194802c508d23e756eca Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Mon, 30 Mar 2026 10:53:35 +0100 Subject: [PATCH 11/13] [#5213] As per PR comments. Renamed to just Eviction --- .../EvictionEntity.java} | 10 ++++++---- .../enforcetheorder/UnavailableDateEntity.java | 3 ++- .../enforcetheorder/ConfirmEvictionRepository.java | 9 --------- .../enforcetheorder/EvictionRepository.java | 9 +++++++++ .../enforcetheorder/EnforcementOrderService.java | 14 +++++++------- .../V072__enforcement_confirm_eviction.sql | 4 ++-- .../EnforcementOrderServiceTest.java | 8 ++++---- 7 files changed, 30 insertions(+), 27 deletions(-) rename src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/{enforcetheorder/ConfirmEvictionEntity.java => confirmeviction/EvictionEntity.java} (87%) delete mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/ConfirmEvictionRepository.java create mode 100644 src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/EvictionRepository.java diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/ConfirmEvictionEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/confirmeviction/EvictionEntity.java similarity index 87% rename from src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/ConfirmEvictionEntity.java rename to src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/confirmeviction/EvictionEntity.java index 298b1dd8f1..283f84c3f7 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/ConfirmEvictionEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/confirmeviction/EvictionEntity.java @@ -1,4 +1,4 @@ -package uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder; +package uk.gov.hmcts.reform.pcs.ccd.entity.confirmeviction; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; @@ -22,6 +22,8 @@ import org.hibernate.type.SqlTypes; 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.entity.enforcetheorder.EnforcementOrderEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.UnavailableDateEntity; import java.time.Instant; import java.util.ArrayList; @@ -34,8 +36,8 @@ @Setter @NoArgsConstructor @AllArgsConstructor -@Table(name = "enf_confirm_eviction") -public class ConfirmEvictionEntity { +@Table(name = "enf_eviction") +public class EvictionEntity { @Id @GeneratedValue(strategy = GenerationType.UUID) @@ -53,7 +55,7 @@ public class ConfirmEvictionEntity { @JdbcTypeCode(SqlTypes.NAMED_ENUM) private VerticalYesNo hasUnavailableDates; - @OneToMany(mappedBy = "confirmEviction", cascade = CascadeType.ALL, orphanRemoval = true) + @OneToMany(mappedBy = "eviction", cascade = CascadeType.ALL, orphanRemoval = true) @Builder.Default private List unavailableDates = new ArrayList<>(); diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/UnavailableDateEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/UnavailableDateEntity.java index 9f414b3b0e..0f489a713a 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/UnavailableDateEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/UnavailableDateEntity.java @@ -13,6 +13,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import uk.gov.hmcts.reform.pcs.ccd.entity.confirmeviction.EvictionEntity; import java.time.LocalDate; import java.util.UUID; @@ -33,7 +34,7 @@ public class UnavailableDateEntity { @ManyToOne @JoinColumn(name = "enf_confirm_eviction_id", nullable = false) @JsonBackReference - private ConfirmEvictionEntity confirmEviction; + private EvictionEntity confirmEviction; private LocalDate unavailableDate; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/ConfirmEvictionRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/ConfirmEvictionRepository.java deleted file mode 100644 index aeae9a2696..0000000000 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/ConfirmEvictionRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -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.ConfirmEvictionEntity; - -import java.util.UUID; - -public interface ConfirmEvictionRepository extends JpaRepository { -} diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/EvictionRepository.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/EvictionRepository.java new file mode 100644 index 0000000000..9ec1310f92 --- /dev/null +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/repository/enforcetheorder/EvictionRepository.java @@ -0,0 +1,9 @@ +package uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder; + +import org.springframework.data.jpa.repository.JpaRepository; +import uk.gov.hmcts.reform.pcs.ccd.entity.confirmeviction.EvictionEntity; + +import java.util.UUID; + +public interface EvictionRepository extends JpaRepository { +} 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 9dc7135b73..e85dceef23 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 @@ -9,10 +9,10 @@ import uk.gov.hmcts.reform.pcs.ccd.domain.enforcetheorder.SelectEnforcementType; 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.ConfirmEvictionEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.confirmeviction.EvictionEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.event.EventId; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.ConfirmEvictionRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.EvictionRepository; 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.PcsCaseService; @@ -32,7 +32,7 @@ public class EnforcementOrderService { private final PcsCaseService pcsCaseService; private final DraftCaseDataService draftCaseDataService; private final EnforcementTypeStrategyFactory strategyFactory; - private final ConfirmEvictionRepository confirmEvictionRepository; + private final EvictionRepository evictionRepository; public EnforcementOrder retrieveEnforcementOrder(long caseReference, SelectEnforcementType enforcementType) { Set enforcementEntitySet = getEnforcementOrderEntities(caseReference); @@ -97,12 +97,12 @@ private ClaimEntity getClaimEntity(long caseReference) { } public void confirmEviction(long caseReference) { - ConfirmEvictionEntity confirmEviction = mapToConfirmEvictionEntity(caseReference); - confirmEvictionRepository.save(confirmEviction); + EvictionEntity confirmEviction = mapToConfirmEvictionEntity(caseReference); + evictionRepository.save(confirmEviction); } - private ConfirmEvictionEntity mapToConfirmEvictionEntity(long caseReference) { - ConfirmEvictionEntity confirmEviction = new ConfirmEvictionEntity(); + private EvictionEntity mapToConfirmEvictionEntity(long caseReference) { + EvictionEntity confirmEviction = new EvictionEntity(); EnforcementOrderEntity enforcementOrderEntity = retrieveEnforcementOrderEntity(caseReference); confirmEviction.setEnforcementOrder(enforcementOrderEntity); diff --git a/src/main/resources/db/migration/V072__enforcement_confirm_eviction.sql b/src/main/resources/db/migration/V072__enforcement_confirm_eviction.sql index a4ab353395..89252c06ab 100644 --- a/src/main/resources/db/migration/V072__enforcement_confirm_eviction.sql +++ b/src/main/resources/db/migration/V072__enforcement_confirm_eviction.sql @@ -1,4 +1,4 @@ -CREATE TABLE enf_confirm_eviction( +CREATE TABLE enf_eviction( id UUID PRIMARY KEY, enf_case_id UUID NOT NULL REFERENCES enf_case (id) ON DELETE CASCADE, @@ -44,6 +44,6 @@ ALTER TABLE enf_risk_profile CREATE TABLE enf_unavailable_date ( id UUID PRIMARY KEY, - enf_confirm_eviction_id UUID NOT NULL REFERENCES enf_confirm_eviction (id) ON DELETE CASCADE, + enf_confirm_eviction_id UUID NOT NULL REFERENCES enf_eviction (id) ON DELETE CASCADE, unavailable_date DATE NOT NULL ); 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 a4850f4ffd..b11f20c2ad 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 @@ -10,10 +10,10 @@ 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.PcsCaseEntity; -import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.ConfirmEvictionEntity; +import uk.gov.hmcts.reform.pcs.ccd.entity.confirmeviction.EvictionEntity; import uk.gov.hmcts.reform.pcs.ccd.entity.enforcetheorder.EnforcementOrderEntity; import uk.gov.hmcts.reform.pcs.ccd.event.EventId; -import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.ConfirmEvictionRepository; +import uk.gov.hmcts.reform.pcs.ccd.repository.enforcetheorder.EvictionRepository; 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.PcsCaseService; @@ -46,7 +46,7 @@ class EnforcementOrderServiceTest { @Mock private EnforcementTypeStrategyFactory strategyFactory; @Mock - private ConfirmEvictionRepository confirmEvictionRepository; + private EvictionRepository evictionRepository; @InjectMocks private EnforcementOrderService underTest; @@ -184,7 +184,7 @@ void shouldConfirmEviction() { underTest.confirmEviction(CASE_REFERENCE); // Then - verify(confirmEvictionRepository).save(any(ConfirmEvictionEntity.class)); + verify(evictionRepository).save(any(EvictionEntity.class)); } @Test From bf2dab01b6eeb65d72101db396a41edc224a561b Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Mon, 30 Mar 2026 12:02:30 +0100 Subject: [PATCH 12/13] [#5213] Renaming as per PR comment to just be Eviction --- .../ccd/entity/enforcetheorder/UnavailableDateEntity.java | 4 ++-- .../service/enforcetheorder/EnforcementOrderService.java | 4 ---- .../db/migration/V072__enforcement_confirm_eviction.sql | 6 +++--- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/UnavailableDateEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/UnavailableDateEntity.java index 0f489a713a..da89202f48 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/UnavailableDateEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/enforcetheorder/UnavailableDateEntity.java @@ -32,9 +32,9 @@ public class UnavailableDateEntity { private UUID id; @ManyToOne - @JoinColumn(name = "enf_confirm_eviction_id", nullable = false) + @JoinColumn(name = "enf_eviction_id", nullable = false) @JsonBackReference - private EvictionEntity confirmEviction; + private EvictionEntity eviction; private LocalDate unavailableDate; 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 e85dceef23..f09db29d5b 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 @@ -36,10 +36,6 @@ public class EnforcementOrderService { public EnforcementOrder retrieveEnforcementOrder(long caseReference, SelectEnforcementType enforcementType) { Set enforcementEntitySet = getEnforcementOrderEntities(caseReference); - if (enforcementEntitySet == null) { - return null; - } - return enforcementEntitySet .stream() .map(EnforcementOrderEntity::getEnforcementOrder) diff --git a/src/main/resources/db/migration/V072__enforcement_confirm_eviction.sql b/src/main/resources/db/migration/V072__enforcement_confirm_eviction.sql index 89252c06ab..33e1555df3 100644 --- a/src/main/resources/db/migration/V072__enforcement_confirm_eviction.sql +++ b/src/main/resources/db/migration/V072__enforcement_confirm_eviction.sql @@ -43,7 +43,7 @@ ALTER TABLE enf_risk_profile ADD COLUMN physical_description_of_risk_defendant_details VARCHAR(6800); CREATE TABLE enf_unavailable_date ( - id UUID PRIMARY KEY, - enf_confirm_eviction_id UUID NOT NULL REFERENCES enf_eviction (id) ON DELETE CASCADE, - unavailable_date DATE NOT NULL + id UUID PRIMARY KEY, + enf_eviction_id UUID NOT NULL REFERENCES enf_eviction (id) ON DELETE CASCADE, + unavailable_date DATE NOT NULL ); From 5ec995424773405b7a809e013b5fac78452026cb Mon Sep 17 00:00:00 2001 From: tvr-solirius Date: Tue, 31 Mar 2026 09:43:50 +0100 Subject: [PATCH 13/13] Flyway version update. --- ...onfirm_eviction.sql => V075__enforcement_confirm_eviction.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V072__enforcement_confirm_eviction.sql => V075__enforcement_confirm_eviction.sql} (100%) diff --git a/src/main/resources/db/migration/V072__enforcement_confirm_eviction.sql b/src/main/resources/db/migration/V075__enforcement_confirm_eviction.sql similarity index 100% rename from src/main/resources/db/migration/V072__enforcement_confirm_eviction.sql rename to src/main/resources/db/migration/V075__enforcement_confirm_eviction.sql