Skip to content

Commit 90418a1

Browse files
authored
DIAC-1312 fixing data clearing on edit appeal (#2678)
* testing * wip * wip
1 parent b0f52b5 commit 90418a1

File tree

5 files changed

+100
-3
lines changed

5 files changed

+100
-3
lines changed

src/functionalTest/resources/scenarios/DIAC-1141-set-detained-individual-flag-by-when-detained-appeal-marked-as-detained.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"caseData": {
1111
"template": "minimal-appeal-submitted.json",
1212
"replacements": {
13-
"appellantInDetention": "No"
13+
"appellantInDetention": "No",
14+
"detentionFacility": "immigrationRemovalCentre"
1415
}
1516
}
1617
}

src/main/java/uk/gov/hmcts/reform/iacaseapi/domain/handlers/presubmit/DetainedEditAppealHandler.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static java.util.Objects.requireNonNull;
44
import static uk.gov.hmcts.reform.iacaseapi.domain.entities.AsylumCaseFieldDefinition.*;
5+
import static uk.gov.hmcts.reform.iacaseapi.domain.entities.DetentionFacility.OTHER;
56
import static uk.gov.hmcts.reform.iacaseapi.domain.entities.ccd.field.YesOrNo.NO;
67
import static uk.gov.hmcts.reform.iacaseapi.domain.entities.ccd.field.YesOrNo.YES;
78

@@ -51,7 +52,13 @@ public PreSubmitCallbackResponse<AsylumCase> handle(
5152
if (appellantInDetention.equals(YES)) {
5253
//Clear all 'non-detained' fields when switching to a detained case
5354
asylumCase.clear(APPELLANT_HAS_FIXED_ADDRESS);
54-
asylumCase.clear(APPELLANT_ADDRESS);
55+
String detentionFacility = asylumCase.read(DETENTION_FACILITY, String.class)
56+
.orElseThrow(() -> new IllegalStateException("detentionFacility missing for appellant in detention"));
57+
58+
if (!detentionFacility.equals(OTHER.getValue())) {
59+
// We use this to store "Other" detention facility address
60+
asylumCase.clear(APPELLANT_ADDRESS);
61+
}
5562
asylumCase.clear(SEARCH_POSTCODE);
5663

5764
asylumCase.clear(HAS_CORRESPONDENCE_ADDRESS);

src/main/java/uk/gov/hmcts/reform/iacaseapi/domain/handlers/presubmit/MarkAppealAsDetainedHandler.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static java.util.Objects.requireNonNull;
44
import static uk.gov.hmcts.reform.iacaseapi.domain.entities.AsylumCaseFieldDefinition.*;
5+
import static uk.gov.hmcts.reform.iacaseapi.domain.entities.DetentionFacility.*;
56
import static uk.gov.hmcts.reform.iacaseapi.domain.entities.ccd.Event.MARK_APPEAL_AS_DETAINED;
67
import static uk.gov.hmcts.reform.iacaseapi.domain.entities.ccd.field.YesOrNo.YES;
78

@@ -49,8 +50,14 @@ public PreSubmitCallbackResponse<AsylumCase> handle(
4950
.ifPresent(dateAo -> asylumCase.write(DATE_CUSTODIAL_SENTENCE, dateAo));
5051

5152
// clearing non-detention related fields
53+
String detentionFacility = asylumCase.read(DETENTION_FACILITY, String.class)
54+
.orElseThrow(() -> new IllegalStateException("detentionFacility missing on when marking as detained"));
55+
56+
if (!detentionFacility.equals(OTHER.getValue())) {
57+
// We use this to store "Other" detention facility address
58+
asylumCase.clear(APPELLANT_ADDRESS);
59+
}
5260
asylumCase.clear(APPELLANT_HAS_FIXED_ADDRESS);
53-
asylumCase.clear(APPELLANT_ADDRESS);
5461
asylumCase.clear(CONTACT_PREFERENCE);
5562
asylumCase.clear(EMAIL);
5663
asylumCase.clear(MOBILE_NUMBER);

src/test/java/uk/gov/hmcts/reform/iacaseapi/domain/handlers/presubmit/DetainedEditAppealHandlerTest.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static org.assertj.core.api.Assertions.assertThatThrownBy;
44
import static org.junit.jupiter.api.Assertions.*;
5+
import static org.mockito.Mockito.never;
56
import static org.mockito.Mockito.times;
67
import static org.mockito.Mockito.verify;
78
import static org.mockito.Mockito.when;
@@ -47,6 +48,7 @@ void setUp() {
4748
void should_remove_appellant_address_and_contact_info() {
4849
when(asylumCase.read(AsylumCaseFieldDefinition.APPELLANT_IN_DETENTION, YesOrNo.class))
4950
.thenReturn(Optional.of(YES));
51+
when(asylumCase.read(DETENTION_FACILITY, String.class)).thenReturn(Optional.of("prison"));
5052
PreSubmitCallbackResponse<AsylumCase> response = detainedEditAppealHandler.handle(PreSubmitCallbackStage.ABOUT_TO_SUBMIT, callback);
5153
assertNotNull(response);
5254
verify(asylumCase, times(1))
@@ -133,6 +135,7 @@ void handling_should_throw_if_argument_null() {
133135
void should_remove_ada_suitability_fields_when_editing_to_detained_non_ada() {
134136
when(asylumCase.read(AsylumCaseFieldDefinition.APPELLANT_IN_DETENTION, YesOrNo.class)).thenReturn(Optional.of(YES));
135137
when(asylumCase.read(IS_ACCELERATED_DETAINED_APPEAL, YesOrNo.class)).thenReturn(Optional.of(YesOrNo.NO));
138+
when(asylumCase.read(DETENTION_FACILITY, String.class)).thenReturn(Optional.of("prison"));
136139
PreSubmitCallbackResponse<AsylumCase> response = detainedEditAppealHandler.handle(PreSubmitCallbackStage.ABOUT_TO_SUBMIT, callback);
137140

138141
assertNotNull(response);
@@ -149,6 +152,7 @@ void should_remove_ada_suitability_appellant_attendance_fields_when_editing_hear
149152
when(asylumCase.read(AsylumCaseFieldDefinition.APPELLANT_IN_DETENTION, YesOrNo.class)).thenReturn(Optional.of(YES));
150153
when(asylumCase.read(IS_ACCELERATED_DETAINED_APPEAL, YesOrNo.class)).thenReturn(Optional.of(YES));
151154
when(asylumCase.read(SUITABILITY_HEARING_TYPE_YES_OR_NO, YesOrNo.class)).thenReturn(Optional.of(yesOrNo));
155+
when(asylumCase.read(DETENTION_FACILITY, String.class)).thenReturn(Optional.of("prison"));
152156
PreSubmitCallbackResponse<AsylumCase> response = detainedEditAppealHandler.handle(PreSubmitCallbackStage.ABOUT_TO_SUBMIT, callback);
153157

154158
assertNotNull(response);
@@ -168,6 +172,7 @@ void should_remove_ada_suitability_interpreter_services_fields_when_attendance_a
168172
when(asylumCase.read(SUITABILITY_HEARING_TYPE_YES_OR_NO, YesOrNo.class)).thenReturn(Optional.of(YES));
169173
when(asylumCase.read(SUITABILITY_APPELLANT_ATTENDANCE_YES_OR_NO_1, YesOrNo.class)).thenReturn(Optional.of(NO));
170174
when(asylumCase.read(SUITABILITY_APPELLANT_ATTENDANCE_YES_OR_NO_2, YesOrNo.class)).thenReturn(Optional.of(NO));
175+
when(asylumCase.read(DETENTION_FACILITY, String.class)).thenReturn(Optional.of("prison"));
171176
PreSubmitCallbackResponse<AsylumCase> response = detainedEditAppealHandler.handle(PreSubmitCallbackStage.ABOUT_TO_SUBMIT, callback);
172177

173178
assertNotNull(response);
@@ -176,4 +181,36 @@ void should_remove_ada_suitability_interpreter_services_fields_when_attendance_a
176181
verify(asylumCase, times(1)).clear(AsylumCaseFieldDefinition.SUITABILITY_INTERPRETER_SERVICES_YES_OR_NO);
177182
verify(asylumCase, times(1)).clear(AsylumCaseFieldDefinition.SUITABILITY_INTERPRETER_SERVICES_LANGUAGE);
178183
}
184+
185+
@Test
186+
void should_not_clear_appellant_address_when_detention_facility_is_other() {
187+
when(asylumCase.read(AsylumCaseFieldDefinition.APPELLANT_IN_DETENTION, YesOrNo.class))
188+
.thenReturn(Optional.of(YES));
189+
when(asylumCase.read(DETENTION_FACILITY, String.class)).thenReturn(Optional.of("other"));
190+
PreSubmitCallbackResponse<AsylumCase> response = detainedEditAppealHandler.handle(PreSubmitCallbackStage.ABOUT_TO_SUBMIT, callback);
191+
192+
assertNotNull(response);
193+
verify(asylumCase, times(1))
194+
.clear(AsylumCaseFieldDefinition.APPELLANT_HAS_FIXED_ADDRESS);
195+
verify(asylumCase, never()).clear(AsylumCaseFieldDefinition.APPELLANT_ADDRESS);
196+
verify(asylumCase, times(1)).clear(AsylumCaseFieldDefinition.SEARCH_POSTCODE);
197+
verify(asylumCase, times(1))
198+
.clear(AsylumCaseFieldDefinition.HAS_CORRESPONDENCE_ADDRESS);
199+
verify(asylumCase, times(1))
200+
.clear(AsylumCaseFieldDefinition.APPELLANT_OUT_OF_COUNTRY_ADDRESS);
201+
verify(asylumCase, times(1)).clear(AsylumCaseFieldDefinition.CONTACT_PREFERENCE);
202+
verify(asylumCase, times(1)).clear(AsylumCaseFieldDefinition.EMAIL);
203+
verify(asylumCase, times(1)).clear(AsylumCaseFieldDefinition.MOBILE_NUMBER);
204+
}
205+
206+
@Test
207+
void should_throw_exception_when_detention_facility_missing_for_detained_appellant() {
208+
when(asylumCase.read(AsylumCaseFieldDefinition.APPELLANT_IN_DETENTION, YesOrNo.class))
209+
.thenReturn(Optional.of(YES));
210+
when(asylumCase.read(DETENTION_FACILITY, String.class)).thenReturn(Optional.empty());
211+
212+
assertThatThrownBy(() -> detainedEditAppealHandler.handle(PreSubmitCallbackStage.ABOUT_TO_SUBMIT, callback))
213+
.hasMessage("detentionFacility missing for appellant in detention")
214+
.isExactlyInstanceOf(IllegalStateException.class);
215+
}
179216
}

src/test/java/uk/gov/hmcts/reform/iacaseapi/domain/handlers/presubmit/MarkAppealAsDetainedHandlerTest.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import static org.junit.jupiter.api.Assertions.assertFalse;
66
import static org.junit.jupiter.api.Assertions.assertNotNull;
77
import static org.junit.jupiter.api.Assertions.assertTrue;
8+
import static org.mockito.Mockito.never;
89
import static org.mockito.Mockito.verify;
910
import static org.mockito.Mockito.when;
1011
import static uk.gov.hmcts.reform.iacaseapi.domain.entities.AsylumCaseFieldDefinition.*;
@@ -59,6 +60,7 @@ void should_mark_appeal_as_detained_and_update_case_data() {
5960
when(asylumCase.read(PRISON_NOMS_AO, PrisonNomsNumber.class)).thenReturn(Optional.of(prisonNomsNumber));
6061
when(asylumCase.read(DATE_CUSTODIAL_SENTENCE_AO, CustodialSentenceDate.class))
6162
.thenReturn(Optional.of(custodialSentenceDate));
63+
when(asylumCase.read(DETENTION_FACILITY, String.class)).thenReturn(Optional.of("prison"));
6264

6365
PreSubmitCallbackResponse<AsylumCase> callbackResponse =
6466
markAppealAsDetainedHandler.handle(PreSubmitCallbackStage.ABOUT_TO_SUBMIT, callback);
@@ -113,4 +115,47 @@ void should_not_allow_null_arguments() {
113115
.isExactlyInstanceOf(NullPointerException.class);
114116
}
115117

118+
@Test
119+
void should_not_clear_appellant_address_when_detention_facility_is_other() {
120+
when(callback.getCaseDetails()).thenReturn(caseDetails);
121+
when(caseDetails.getCaseData()).thenReturn(asylumCase);
122+
when(callback.getEvent()).thenReturn(Event.MARK_APPEAL_AS_DETAINED);
123+
124+
when(asylumCase.read(PRISON_NOMS_AO, PrisonNomsNumber.class)).thenReturn(Optional.of(prisonNomsNumber));
125+
when(asylumCase.read(DATE_CUSTODIAL_SENTENCE_AO, CustodialSentenceDate.class))
126+
.thenReturn(Optional.of(custodialSentenceDate));
127+
when(asylumCase.read(DETENTION_FACILITY, String.class)).thenReturn(Optional.of("other"));
128+
129+
PreSubmitCallbackResponse<AsylumCase> callbackResponse =
130+
markAppealAsDetainedHandler.handle(PreSubmitCallbackStage.ABOUT_TO_SUBMIT, callback);
131+
132+
assertNotNull(callbackResponse);
133+
assertEquals(asylumCase, callbackResponse.getData());
134+
135+
verify(asylumCase).write(PRISON_NOMS, prisonNomsNumber);
136+
verify(asylumCase).write(DATE_CUSTODIAL_SENTENCE, custodialSentenceDate);
137+
verify(asylumCase).write(APPELLANT_IN_DETENTION, YES);
138+
verify(asylumCase).clear(APPELLANT_HAS_FIXED_ADDRESS);
139+
verify(asylumCase, never()).clear(APPELLANT_ADDRESS);
140+
verify(asylumCase).clear(CONTACT_PREFERENCE);
141+
verify(asylumCase).clear(EMAIL);
142+
verify(asylumCase).clear(MOBILE_NUMBER);
143+
}
144+
145+
@Test
146+
void should_throw_exception_when_detention_facility_is_missing() {
147+
when(callback.getCaseDetails()).thenReturn(caseDetails);
148+
when(caseDetails.getCaseData()).thenReturn(asylumCase);
149+
when(callback.getEvent()).thenReturn(Event.MARK_APPEAL_AS_DETAINED);
150+
151+
when(asylumCase.read(PRISON_NOMS_AO, PrisonNomsNumber.class)).thenReturn(Optional.of(prisonNomsNumber));
152+
when(asylumCase.read(DATE_CUSTODIAL_SENTENCE_AO, CustodialSentenceDate.class))
153+
.thenReturn(Optional.of(custodialSentenceDate));
154+
when(asylumCase.read(DETENTION_FACILITY, String.class)).thenReturn(Optional.empty());
155+
156+
assertThatThrownBy(() -> markAppealAsDetainedHandler.handle(PreSubmitCallbackStage.ABOUT_TO_SUBMIT, callback))
157+
.hasMessage("detentionFacility missing on when marking as detained")
158+
.isExactlyInstanceOf(IllegalStateException.class);
159+
}
160+
116161
}

0 commit comments

Comments
 (0)