Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
import lombok.NoArgsConstructor;
import uk.gov.hmcts.ccd.sdk.api.CCD;
import uk.gov.hmcts.ccd.sdk.type.YesOrNo;
import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure;

import java.time.LocalDate;

@Builder
@Data
Expand All @@ -17,4 +20,16 @@ public class HouseholdCircumstances {
@CCD
private YesOrNo dependantChildren;

@CCD
private YesOrNo otherTenants;

@CCD(max = 500)
private String otherTenantsDetails;

@CCD
private YesNoNotSure alternativeAccommodation;

@CCD
private LocalDate alternativeAccommodationTransferDate;

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package uk.gov.hmcts.reform.pcs.ccd.service.respondpossessionclaim;

import org.springframework.stereotype.Service;
import uk.gov.hmcts.ccd.sdk.type.YesOrNo;
import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure;
import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.HouseholdCircumstances;
import uk.gov.hmcts.reform.pcs.ccd.entity.respondpossessionclaim.HouseholdCircumstancesEntity;

Expand All @@ -12,11 +14,16 @@ public HouseholdCircumstancesEntity createHouseholdCircumstancesEntity(Household
if (circumstances == null) {
return null;
}
YesOrNo otherTenants = circumstances.getOtherTenants();
YesNoNotSure alternativeAccommodation = circumstances.getAlternativeAccommodation();

HouseholdCircumstancesEntity householdCircumstancesEntity = HouseholdCircumstancesEntity.builder()
return HouseholdCircumstancesEntity.builder()
.dependantChildren(circumstances.getDependantChildren())
.otherTenants(otherTenants)
.otherTenantsDetails(otherTenants == YesOrNo.YES ? circumstances.getOtherTenantsDetails() : null)
.alternativeAccommodation(alternativeAccommodation)
.alternativeAccommodationTransferDate(alternativeAccommodation == YesNoNotSure.YES
? circumstances.getAlternativeAccommodationTransferDate() : null)
.build();

return householdCircumstancesEntity;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,21 @@

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.EnumSource;
import org.junit.jupiter.params.provider.MethodSource;
import org.mockito.junit.jupiter.MockitoExtension;
import org.junit.jupiter.params.provider.NullSource;
import uk.gov.hmcts.ccd.sdk.type.YesOrNo;
import uk.gov.hmcts.reform.pcs.ccd.domain.YesNoNotSure;
import uk.gov.hmcts.reform.pcs.ccd.domain.respondpossessionclaim.HouseholdCircumstances;
import uk.gov.hmcts.reform.pcs.ccd.entity.respondpossessionclaim.HouseholdCircumstancesEntity;

import java.time.LocalDate;
import java.util.stream.Stream;

import static org.assertj.core.api.Assertions.assertThat;

@ExtendWith(MockitoExtension.class)
class HouseholdCircumstancesServiceTest {

private HouseholdCircumstancesService underTest;
Expand All @@ -26,37 +27,121 @@ void setUp() {
}

@ParameterizedTest
@MethodSource("dependantChildrenScenarios")
@NullSource
@EnumSource(YesOrNo.class)
void shouldMapDependantChildrenField(YesOrNo expected) {
//Given
// Given
HouseholdCircumstances householdCircumstances = HouseholdCircumstances.builder()
.dependantChildren(expected)
.build();

//When
// When
HouseholdCircumstancesEntity entity = underTest.createHouseholdCircumstancesEntity(householdCircumstances);

//Then
assertThat(entity).isNotNull();
// Then
assertThat(entity.getDependantChildren()).isEqualTo(expected);
}

private static Stream<Arguments> dependantChildrenScenarios() {
@Test
void shouldReturnNullWhenPaymentAgreementIsNull() {
// When
HouseholdCircumstancesEntity entity = underTest.createHouseholdCircumstancesEntity(null);

// Then
assertThat(entity).isNull();
}

@ParameterizedTest
@NullSource
@EnumSource(YesOrNo.class)
void shouldMapOtherTenantsField(YesOrNo expected) {
// Given
HouseholdCircumstances householdCircumstances = HouseholdCircumstances.builder()
.otherTenants(expected)
.build();

// When
HouseholdCircumstancesEntity entity = underTest.createHouseholdCircumstancesEntity(householdCircumstances);

// Then
assertThat(entity.getOtherTenants()).isEqualTo(expected);
}

@ParameterizedTest
@MethodSource("otherTenantsDetailsScenarios")
void shouldMapOtherTenantsDetailsOnlyWhenOtherTenantsIsYes(
YesOrNo expectedOtherTenants,
String draftDetails,
String expectedDetailsOnEntity
) {
// Given
HouseholdCircumstances householdCircumstances = HouseholdCircumstances.builder()
.otherTenants(expectedOtherTenants)
.otherTenantsDetails(draftDetails)
.build();

// When
HouseholdCircumstancesEntity entity = underTest.createHouseholdCircumstancesEntity(householdCircumstances);

// Then
assertThat(entity.getOtherTenants()).isEqualTo(expectedOtherTenants);
assertThat(entity.getOtherTenantsDetails()).isEqualTo(expectedDetailsOnEntity);
}

private static Stream<Arguments> otherTenantsDetailsScenarios() {
return Stream.of(
Arguments.of(YesOrNo.YES),
Arguments.of(YesOrNo.NO),
Arguments.of((YesOrNo) null)
Arguments.of(YesOrNo.YES, "Two other adults", "Two other adults"),
Arguments.of(YesOrNo.YES, null, null),
Arguments.of(YesOrNo.NO, "Draft still has text", null),
Arguments.of(null, "Draft still has text", null)
);
}

@Test
void shouldReturnNullWhenHouseholdCircumstancesIsNull() {
@ParameterizedTest
@NullSource
@EnumSource(YesNoNotSure.class)
void shouldMapAlternativeAccommodationField(YesNoNotSure expected) {
// Given
HouseholdCircumstances householdCircumstances = HouseholdCircumstances.builder()
.alternativeAccommodation(expected)
.build();

// When
HouseholdCircumstancesEntity entity = underTest.createHouseholdCircumstancesEntity(null);
HouseholdCircumstancesEntity entity = underTest.createHouseholdCircumstancesEntity(householdCircumstances);

// Then
assertThat(entity).isNull();
assertThat(entity.getAlternativeAccommodation()).isEqualTo(expected);
}

}
@ParameterizedTest
@MethodSource("alternativeAccommodationTransferDateScenarios")
void shouldMapAlternativeAccommodationTransferDateAccordingToAccommodationAnswer(
YesNoNotSure expectedAlternativeAccommodation,
LocalDate draftDate,
LocalDate expectedDate
) {
// Given
HouseholdCircumstances householdCircumstances = HouseholdCircumstances.builder()
.alternativeAccommodation(expectedAlternativeAccommodation)
.alternativeAccommodationTransferDate(draftDate)
.build();

// When
HouseholdCircumstancesEntity entity = underTest.createHouseholdCircumstancesEntity(householdCircumstances);

// Then
assertThat(entity.getAlternativeAccommodation()).isEqualTo(expectedAlternativeAccommodation);
assertThat(entity.getAlternativeAccommodationTransferDate()).isEqualTo(expectedDate);
}

private static Stream<Arguments> alternativeAccommodationTransferDateScenarios() {
LocalDate transferDate = LocalDate.of(2025, 6, 1);
return Stream.of(
Arguments.of(YesNoNotSure.YES, transferDate, transferDate),
Arguments.of(YesNoNotSure.YES, null, null),
Arguments.of(YesNoNotSure.NO, transferDate, null),
Arguments.of(YesNoNotSure.NOT_SURE, transferDate, null),
Arguments.of(null, transferDate, null)
);
}
}
Loading