From 36983f2644eb17b5d5e7c0b036ee6d6ce317f073 Mon Sep 17 00:00:00 2001 From: arun Date: Tue, 17 Mar 2026 07:37:31 +0000 Subject: [PATCH 1/6] HDPI-3549: Add dispute claim and details fields to defendant response backend --- .../respondpossessionclaim/DefendantResponses.java | 6 ++++++ .../reform/pcs/ccd/entity/DefendantResponseEntity.java | 9 +++++++++ .../reform/pcs/ccd/service/DefendantResponseService.java | 2 ++ .../db/migration/V065__add_dispute_claim_details.sql | 3 +++ 4 files changed, 20 insertions(+) create mode 100644 src/main/resources/db/migration/V065__add_dispute_claim_details.sql diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/DefendantResponses.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/DefendantResponses.java index 964b561fda..7721a8d6af 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/DefendantResponses.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/DefendantResponses.java @@ -59,4 +59,10 @@ public class DefendantResponses { @CCD private YesNoNotSure landlordRegistered; + + @CCD + private VerticalYesNo disputeClaim; + + @CCD + private String disputeDetails; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DefendantResponseEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DefendantResponseEntity.java index b8ca80550a..84729763fb 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DefendantResponseEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DefendantResponseEntity.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.VerticalYesNo; import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure; import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoPreferNotToSay; import uk.gov.hmcts.reform.pcs.ccd.entity.party.PartyEntity; @@ -66,4 +67,12 @@ public class DefendantResponseEntity { @JdbcTypeCode(SqlTypes.NAMED_ENUM) @Column(name = "landlord_registered") private YesNoNotSure landlordRegistered; + + @Enumerated(EnumType.STRING) + @JdbcTypeCode(SqlTypes.NAMED_ENUM) + @Column(name = "dispute_claim") + private VerticalYesNo disputeClaim; + + @Column(name = "dispute_details", columnDefinition = "TEXT") + private String disputeDetails; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseService.java index c21f00831a..e0da3262f3 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseService.java @@ -99,6 +99,8 @@ public void saveDefendantResponse(long caseReference, DefendantResponses respons .party(partyRef) .receivedFreeLegalAdvice(responses.getReceivedFreeLegalAdvice()) .landlordRegistered(responses.getLandlordRegistered()) + .disputeClaim(responses.getDisputeClaim()) + .disputeDetails(responses.getDisputeDetails()) .tenancyStartDateConfirmation(tenancyStartDateConfirmation) .tenancyStartDate( responses.getTenancyStartDate() != null && tenancyStartDateConfirmation != YesNoNotSure.NOT_SURE diff --git a/src/main/resources/db/migration/V065__add_dispute_claim_details.sql b/src/main/resources/db/migration/V065__add_dispute_claim_details.sql new file mode 100644 index 0000000000..b7cea14513 --- /dev/null +++ b/src/main/resources/db/migration/V065__add_dispute_claim_details.sql @@ -0,0 +1,3 @@ +ALTER TABLE defendant_response + ADD COLUMN dispute_claim YES_NO, + ADD COLUMN dispute_details TEXT; From 0def598bf81af044c510490ca474a980be25f58e Mon Sep 17 00:00:00 2001 From: arun Date: Tue, 17 Mar 2026 16:03:01 +0000 Subject: [PATCH 2/6] HDPI-3549: Renumber dispute claim migration from V065 to V067 to resolve conflict with master --- ...pute_claim_details.sql => V067__add_dispute_claim_details.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/resources/db/migration/{V065__add_dispute_claim_details.sql => V067__add_dispute_claim_details.sql} (100%) diff --git a/src/main/resources/db/migration/V065__add_dispute_claim_details.sql b/src/main/resources/db/migration/V067__add_dispute_claim_details.sql similarity index 100% rename from src/main/resources/db/migration/V065__add_dispute_claim_details.sql rename to src/main/resources/db/migration/V067__add_dispute_claim_details.sql From 710cf7d457e24f055351547292eb8b3bf7963182 Mon Sep 17 00:00:00 2001 From: arun Date: Wed, 18 Mar 2026 09:23:59 +0000 Subject: [PATCH 3/6] HDPI-3549: Add unit tests for disputeClaim and disputeDetails fields --- .../service/DefendantResponseServiceTest.java | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseServiceTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseServiceTest.java index 84d8b7d15a..88b1ad8bce 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseServiceTest.java @@ -10,6 +10,7 @@ import org.mockito.Captor; 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.YesNoPreferNotToSay; import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.DefendantResponses; @@ -454,4 +455,87 @@ private static Stream tenancyStartDateConfirmationScenarios() { Arguments.of(null, LocalDate.of(2018, 3, 10), LocalDate.of(2018, 3, 10)) ); } + + @ParameterizedTest(name = "disputeClaim={0}") + @MethodSource("disputeClaimPersistenceScenarios") + void shouldPersistDisputeClaim(VerticalYesNo disputeClaim) { + // Given + when(securityContextService.getCurrentUserId()).thenReturn(USER_ID); + when(defendantResponseRepository.existsByClaimPcsCaseCaseReferenceAndPartyIdamId( + CASE_REFERENCE, USER_ID)).thenReturn(false); + stubPartyLookup(); + stubClaimLookup(); + + DefendantResponses responses = DefendantResponses.builder() + .disputeClaim(disputeClaim) + .build(); + + // When + underTest.saveDefendantResponse(CASE_REFERENCE, responses); + + // Then + verify(defendantResponseRepository).save(responseCaptor.capture()); + DefendantResponseEntity savedResponse = responseCaptor.getValue(); + + assertThat(savedResponse.getDisputeClaim()).isEqualTo(disputeClaim); + } + + private static Stream disputeClaimPersistenceScenarios() { + return Stream.of( + Arguments.of(VerticalYesNo.YES), + Arguments.of(VerticalYesNo.NO), + Arguments.of((VerticalYesNo) null) + ); + } + + @Test + void shouldPersistDisputeDetails() { + // Given + when(securityContextService.getCurrentUserId()).thenReturn(USER_ID); + when(defendantResponseRepository.existsByClaimPcsCaseCaseReferenceAndPartyIdamId( + CASE_REFERENCE, USER_ID)).thenReturn(false); + stubPartyLookup(); + stubClaimLookup(); + + String disputeDetails = "I dispute this claim because the rent has been paid in full"; + DefendantResponses responses = DefendantResponses.builder() + .disputeClaim(VerticalYesNo.YES) + .disputeDetails(disputeDetails) + .build(); + + // When + underTest.saveDefendantResponse(CASE_REFERENCE, responses); + + // Then + verify(defendantResponseRepository).save(responseCaptor.capture()); + DefendantResponseEntity savedResponse = responseCaptor.getValue(); + + assertThat(savedResponse.getDisputeClaim()).isEqualTo(VerticalYesNo.YES); + assertThat(savedResponse.getDisputeDetails()).isEqualTo(disputeDetails); + } + + @Test + void shouldPersistNullDisputeDetails() { + // Given + when(securityContextService.getCurrentUserId()).thenReturn(USER_ID); + when(defendantResponseRepository.existsByClaimPcsCaseCaseReferenceAndPartyIdamId( + CASE_REFERENCE, USER_ID)).thenReturn(false); + stubPartyLookup(); + stubClaimLookup(); + + DefendantResponses responses = DefendantResponses.builder() + .disputeClaim(VerticalYesNo.NO) + .disputeDetails(null) + .build(); + + // When + underTest.saveDefendantResponse(CASE_REFERENCE, responses); + + // Then + verify(defendantResponseRepository).save(responseCaptor.capture()); + DefendantResponseEntity savedResponse = responseCaptor.getValue(); + + assertThat(savedResponse.getDisputeClaim()).isEqualTo(VerticalYesNo.NO); + assertThat(savedResponse.getDisputeDetails()).isNull(); + } } From 01a1b7198f480a6f38734f34b0f8725f8a56d7d7 Mon Sep 17 00:00:00 2001 From: arun Date: Wed, 18 Mar 2026 12:30:43 +0000 Subject: [PATCH 4/6] HDPI-3549: Rename dispute_details to dispute_claim_details VARCHAR(6800) --- .../respondpossessionclaim/DefendantResponses.java | 2 +- .../reform/pcs/ccd/entity/DefendantResponseEntity.java | 4 ++-- .../pcs/ccd/service/DefendantResponseService.java | 2 +- .../db/migration/V067__add_dispute_claim_details.sql | 2 +- .../pcs/ccd/service/DefendantResponseServiceTest.java | 10 +++++----- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/DefendantResponses.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/DefendantResponses.java index 67dfcb34bb..2e4bda5778 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/DefendantResponses.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/domain/respondpossessionclaim/DefendantResponses.java @@ -70,5 +70,5 @@ public class DefendantResponses { private VerticalYesNo disputeClaim; @CCD - private String disputeDetails; + private String disputeClaimDetails; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DefendantResponseEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DefendantResponseEntity.java index 233ab05b3c..1a3f79968e 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DefendantResponseEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DefendantResponseEntity.java @@ -78,6 +78,6 @@ public class DefendantResponseEntity { @Column(name = "dispute_claim") private VerticalYesNo disputeClaim; - @Column(name = "dispute_details", columnDefinition = "TEXT") - private String disputeDetails; + @Column(name = "dispute_claim_details", length = 6800) + private String disputeClaimDetails; } diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseService.java index 028727eb22..764fdad063 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseService.java @@ -101,7 +101,7 @@ public void saveDefendantResponse(long caseReference, DefendantResponses respons .defendantNameConfirmation(responses.getDefendantNameConfirmation()) .landlordRegistered(responses.getLandlordRegistered()) .disputeClaim(responses.getDisputeClaim()) - .disputeDetails(responses.getDisputeDetails()) + .disputeClaimDetails(responses.getDisputeClaimDetails()) .tenancyStartDateConfirmation(tenancyStartDateConfirmation) .tenancyStartDate( responses.getTenancyStartDate() != null && tenancyStartDateConfirmation != YesNoNotSure.NOT_SURE diff --git a/src/main/resources/db/migration/V067__add_dispute_claim_details.sql b/src/main/resources/db/migration/V067__add_dispute_claim_details.sql index b7cea14513..ff2630cd0c 100644 --- a/src/main/resources/db/migration/V067__add_dispute_claim_details.sql +++ b/src/main/resources/db/migration/V067__add_dispute_claim_details.sql @@ -1,3 +1,3 @@ ALTER TABLE defendant_response ADD COLUMN dispute_claim YES_NO, - ADD COLUMN dispute_details TEXT; + ADD COLUMN dispute_claim_details VARCHAR(6800); diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseServiceTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseServiceTest.java index 88b1ad8bce..6e8749abc7 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseServiceTest.java @@ -497,10 +497,10 @@ void shouldPersistDisputeDetails() { stubPartyLookup(); stubClaimLookup(); - String disputeDetails = "I dispute this claim because the rent has been paid in full"; + String disputeClaimDetails = "I dispute this claim because the rent has been paid in full"; DefendantResponses responses = DefendantResponses.builder() .disputeClaim(VerticalYesNo.YES) - .disputeDetails(disputeDetails) + .disputeClaimDetails(disputeClaimDetails) .build(); // When @@ -511,7 +511,7 @@ void shouldPersistDisputeDetails() { DefendantResponseEntity savedResponse = responseCaptor.getValue(); assertThat(savedResponse.getDisputeClaim()).isEqualTo(VerticalYesNo.YES); - assertThat(savedResponse.getDisputeDetails()).isEqualTo(disputeDetails); + assertThat(savedResponse.getDisputeClaimDetails()).isEqualTo(disputeClaimDetails); } @Test @@ -525,7 +525,7 @@ void shouldPersistNullDisputeDetails() { DefendantResponses responses = DefendantResponses.builder() .disputeClaim(VerticalYesNo.NO) - .disputeDetails(null) + .disputeClaimDetails(null) .build(); // When @@ -536,6 +536,6 @@ void shouldPersistNullDisputeDetails() { DefendantResponseEntity savedResponse = responseCaptor.getValue(); assertThat(savedResponse.getDisputeClaim()).isEqualTo(VerticalYesNo.NO); - assertThat(savedResponse.getDisputeDetails()).isNull(); + assertThat(savedResponse.getDisputeClaimDetails()).isNull(); } } From 5aed157807477746ec8be2965cb7a955b104cf78 Mon Sep 17 00:00:00 2001 From: arun Date: Wed, 18 Mar 2026 13:34:29 +0000 Subject: [PATCH 5/6] HDPI-3549: Remove unnecessary @Column annotations and parameterize disputeClaimDetails test --- .../ccd/entity/DefendantResponseEntity.java | 2 -- .../service/DefendantResponseServiceTest.java | 36 +++++-------------- 2 files changed, 8 insertions(+), 30 deletions(-) diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DefendantResponseEntity.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DefendantResponseEntity.java index 1a3f79968e..cc34c2a1a5 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DefendantResponseEntity.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/entity/DefendantResponseEntity.java @@ -75,9 +75,7 @@ public class DefendantResponseEntity { @Enumerated(EnumType.STRING) @JdbcTypeCode(SqlTypes.NAMED_ENUM) - @Column(name = "dispute_claim") private VerticalYesNo disputeClaim; - @Column(name = "dispute_claim_details", length = 6800) private String disputeClaimDetails; } diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseServiceTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseServiceTest.java index 6e8749abc7..4f2c6c2516 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseServiceTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/service/DefendantResponseServiceTest.java @@ -488,8 +488,9 @@ private static Stream disputeClaimPersistenceScenarios() { ); } - @Test - void shouldPersistDisputeDetails() { + @ParameterizedTest(name = "disputeClaimDetails={0}") + @MethodSource("disputeClaimDetailsPersistenceScenarios") + void shouldPersistDisputeClaimDetails(String disputeClaimDetails) { // Given when(securityContextService.getCurrentUserId()).thenReturn(USER_ID); when(defendantResponseRepository.existsByClaimPcsCaseCaseReferenceAndPartyIdamId( @@ -497,9 +498,7 @@ void shouldPersistDisputeDetails() { stubPartyLookup(); stubClaimLookup(); - String disputeClaimDetails = "I dispute this claim because the rent has been paid in full"; DefendantResponses responses = DefendantResponses.builder() - .disputeClaim(VerticalYesNo.YES) .disputeClaimDetails(disputeClaimDetails) .build(); @@ -510,32 +509,13 @@ void shouldPersistDisputeDetails() { verify(defendantResponseRepository).save(responseCaptor.capture()); DefendantResponseEntity savedResponse = responseCaptor.getValue(); - assertThat(savedResponse.getDisputeClaim()).isEqualTo(VerticalYesNo.YES); assertThat(savedResponse.getDisputeClaimDetails()).isEqualTo(disputeClaimDetails); } - @Test - void shouldPersistNullDisputeDetails() { - // Given - when(securityContextService.getCurrentUserId()).thenReturn(USER_ID); - when(defendantResponseRepository.existsByClaimPcsCaseCaseReferenceAndPartyIdamId( - CASE_REFERENCE, USER_ID)).thenReturn(false); - stubPartyLookup(); - stubClaimLookup(); - - DefendantResponses responses = DefendantResponses.builder() - .disputeClaim(VerticalYesNo.NO) - .disputeClaimDetails(null) - .build(); - - // When - underTest.saveDefendantResponse(CASE_REFERENCE, responses); - - // Then - verify(defendantResponseRepository).save(responseCaptor.capture()); - DefendantResponseEntity savedResponse = responseCaptor.getValue(); - - assertThat(savedResponse.getDisputeClaim()).isEqualTo(VerticalYesNo.NO); - assertThat(savedResponse.getDisputeClaimDetails()).isNull(); + private static Stream disputeClaimDetailsPersistenceScenarios() { + return Stream.of( + Arguments.of("I dispute this claim because the rent has been paid in full"), + Arguments.of((String) null) + ); } } From f7790a7a73c18524a9dc686d379db4c941bae6a6 Mon Sep 17 00:00:00 2001 From: arun Date: Thu, 19 Mar 2026 14:39:26 +0000 Subject: [PATCH 6/6] HDPI-3549: Remove duplicate V067 migration for dispute claim fields --- .../resources/db/migration/V067__add_dispute_claim_details.sql | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 src/main/resources/db/migration/V067__add_dispute_claim_details.sql diff --git a/src/main/resources/db/migration/V067__add_dispute_claim_details.sql b/src/main/resources/db/migration/V067__add_dispute_claim_details.sql deleted file mode 100644 index ff2630cd0c..0000000000 --- a/src/main/resources/db/migration/V067__add_dispute_claim_details.sql +++ /dev/null @@ -1,3 +0,0 @@ -ALTER TABLE defendant_response - ADD COLUMN dispute_claim YES_NO, - ADD COLUMN dispute_claim_details VARCHAR(6800);