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 904b614a22..3551c78e0e 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 @@ -43,6 +43,9 @@ public class DefendantResponses { @JacksonMoneyGBP private BigDecimal rentArrearsAmount; + @CCD + private VerticalYesNo defendantNameConfirmation; + @CCD private YesNoNotSure noticeReceived; @@ -68,10 +71,13 @@ public class DefendantResponses { private LocalDate dateOfBirth; @CCD - private VerticalYesNo defendantNameConfirmation; + private YesNoNotSure landlordRegistered; @CCD - private YesNoNotSure landlordRegistered; + private uk.gov.hmcts.ccd.sdk.type.YesOrNo disputeClaim; + + @CCD + private String disputeClaimDetails; @CCD private YesNoNotSure writtenTerms; diff --git a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/DefendantResponseService.java b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/DefendantResponseService.java index 4e2bceaf15..eb96f9f79e 100644 --- a/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/DefendantResponseService.java +++ b/src/main/java/uk/gov/hmcts/reform/pcs/ccd/service/respondpossessionclaim/DefendantResponseService.java @@ -113,6 +113,7 @@ private DefendantResponseEntity buildDefendantResponseEntity(ClaimEntity claimRe DefendantResponses responses) { YesNoNotSure tenancyStartDateConfirmation = responses.getTenancyStartDateConfirmation(); + // TODO: rentArrearsAmount on final submit will be later stored in party attribute assertion DefendantResponseEntity defendantResponse = DefendantResponseEntity.builder() .claim(claimRef) .party(partyRef) @@ -130,6 +131,8 @@ private DefendantResponseEntity buildDefendantResponseEntity(ClaimEntity claimRe .landlordLicensed(responses.getLandlordLicensed()) .noticeReceivedDate(responses.getNoticeReceivedDate()) .rentArrearsAmountConfirmation(responses.getRentArrearsAmountConfirmation()) + .disputeClaim(responses.getDisputeClaim()) + .disputeClaimDetails(responses.getDisputeClaimDetails()) .build(); //set bidirectional relationship with the pcs case diff --git a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/respondpossessionsclaim/RespondToPossessionDraftSavePageTest.java b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/respondpossessionsclaim/RespondToPossessionDraftSavePageTest.java index ff3f9e4f3a..4af68cf259 100644 --- a/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/respondpossessionsclaim/RespondToPossessionDraftSavePageTest.java +++ b/src/test/java/uk/gov/hmcts/reform/pcs/ccd/page/respondpossessionsclaim/RespondToPossessionDraftSavePageTest.java @@ -344,6 +344,37 @@ void shouldSkipValidationWhenDefendantContactDetailsIsNull() { assertThat(savedDraft.getPossessionClaimResponse().getDefendantResponses()).isEqualTo(responses); } + @Test + void shouldSaveDisputeClaimAndDisputeClaimDetailsInDraft() { + //Given + String disputeDetails = "I dispute the rent arrears amount because the landlord has " + + "not provided accurate records"; + DefendantResponses responses = DefendantResponses.builder() + .disputeClaim(YesOrNo.YES) + .disputeClaimDetails(disputeDetails) + .freeLegalAdvice(YesNoPreferNotToSay.YES) + .build(); + + PCSCase caseData = buildCaseData(PossessionClaimResponse.builder() + .defendantResponses(responses) + .build()); + + //When + AboutToStartOrSubmitResponse response = callMidEventHandler(caseData); + + //Then + assertThat(response.getErrors()).isNull(); + verifyNoInteractions(immutableFieldValidator); + verify(draftCaseDataService).patchUnsubmittedEventData( + eq(TEST_CASE_REFERENCE), pcsCaseCaptor.capture(), eq(respondPossessionClaim) + ); + PCSCase savedDraft = pcsCaseCaptor.getValue(); + DefendantResponses savedResponses = savedDraft.getPossessionClaimResponse().getDefendantResponses(); + assertThat(savedResponses.getDisputeClaim()).isEqualTo(YesOrNo.YES); + assertThat(savedResponses.getDisputeClaimDetails()).isEqualTo(disputeDetails); + assertThat(savedResponses.getFreeLegalAdvice()).isEqualTo(YesNoPreferNotToSay.YES); + } + @Test void shouldReturnErrorWhenDraftSaveFails() { //Given 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 84bd80fdde..f46bf44294 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 @@ -661,4 +661,50 @@ private static Stream tenancyStartDateConfirmationScenarios() { ); } + + @ParameterizedTest(name = "disputeClaim={0}, disputeClaimDetails={1}") + @MethodSource("disputeClaimPersistenceScenarios") + void shouldPersistDisputeClaimAndDisputeClaimDetails( + YesOrNo disputeClaim, + String disputeClaimDetails + ) { + // Given + when(securityContextService.getCurrentUserId()).thenReturn(USER_ID); + when(defendantResponseRepository.existsByClaimPcsCaseCaseReferenceAndPartyIdamId( + CASE_REFERENCE, USER_ID)).thenReturn(false); + + stubPartyLookup(); + stubClaimLookup(); + + DefendantResponses responses = DefendantResponses.builder() + .disputeClaim(disputeClaim) + .disputeClaimDetails(disputeClaimDetails) + .build(); + + PossessionClaimResponse possessionClaimResponse = PossessionClaimResponse.builder() + .defendantResponses(responses) + .build(); + + // When + underTest.saveDefendantResponse(CASE_REFERENCE, possessionClaimResponse); + + // Then + verify(defendantResponseRepository).save(responseCaptor.capture()); + DefendantResponseEntity savedResponse = responseCaptor.getValue(); + + assertThat(savedResponse.getDisputeClaim()).isEqualTo(disputeClaim); + assertThat(savedResponse.getDisputeClaimDetails()).isEqualTo(disputeClaimDetails); + } + + private static Stream disputeClaimPersistenceScenarios() { + return Stream.of( + Arguments.of(YesOrNo.YES, + "I dispute the rent arrears amount because the landlord has not provided accurate records"), + Arguments.of(YesOrNo.NO, null), + Arguments.of(YesOrNo.YES, + "The property has significant disrepair issues that have not been addressed"), + Arguments.of(null, null), + Arguments.of(YesOrNo.YES, null) + ); + } }