Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[NFDIV-4671] Revert validation changes #4413

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
import static uk.gov.hmcts.divorce.divorcecase.model.UserRole.LEGAL_ADVISOR;
import static uk.gov.hmcts.divorce.divorcecase.model.UserRole.SUPER_USER;
import static uk.gov.hmcts.divorce.divorcecase.model.access.Permissions.CREATE_READ_UPDATE;
import static uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil.flattenLists;
import static uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil.validateMarriageCertificateNames;
import static uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil.validateMarriageDate;

@Slf4j
Expand Down Expand Up @@ -63,9 +61,7 @@ public AboutToStartOrSubmitResponse<CaseData, State> aboutToSubmit(final CaseDet
CaseData caseData = details.getData();

log.info("Validating Marriage Date for Case Id: {}", details.getId());
final List<String> caseValidationErrors = flattenLists(
validateMarriageDate(caseData, "MarriageDate", true),
validateMarriageCertificateNames(caseData));
final List<String> caseValidationErrors = validateMarriageDate(caseData, "MarriageDate", true);

if (!isEmpty(caseValidationErrors)) {
return AboutToStartOrSubmitResponse.<CaseData, State>builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,6 @@
import static uk.gov.hmcts.divorce.divorcecase.model.UserRole.SUPER_USER;
import static uk.gov.hmcts.divorce.divorcecase.model.access.Permissions.CREATE_READ_UPDATE;
import static uk.gov.hmcts.divorce.divorcecase.validation.ApplicationValidation.validateIssue;
import static uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil.flattenLists;
import static uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil.validateMarriageCertificateNames;
import static uk.gov.hmcts.divorce.systemupdate.event.SystemIssueSolicitorServicePack.SYSTEM_ISSUE_SOLICITOR_SERVICE_PACK;

@Component
Expand Down Expand Up @@ -130,9 +128,7 @@ public AboutToStartOrSubmitResponse<CaseData, State> aboutToSubmit(final CaseDet
log.info("Caseworker issue application about to submit callback invoked for case id: {}", details.getId());

log.info("Validating Issue for Case Id: {}", details.getId());
final List<String> caseValidationErrors = flattenLists(
validateIssue(details.getData()),
validateMarriageCertificateNames(caseData));
final List<String> caseValidationErrors = validateIssue(details.getData());

if (!isEmpty(caseValidationErrors)) {
return AboutToStartOrSubmitResponse.<CaseData, State>builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import static uk.gov.hmcts.ccd.sdk.api.Event.EventBuilder;
import static uk.gov.hmcts.ccd.sdk.api.FieldCollection.FieldCollectionBuilder;
import static uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil.SOT_REQUIRED;
import static uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil.validateAllNamesForAllowedCharacters;

public class CorrectPaperCase implements CcdPageConfiguration {

Expand Down Expand Up @@ -55,8 +54,8 @@ public void addTo(PageBuilder pageBuilder) {
.page("correctPaperCase", this::midEvent)
.pageLabel(TITLE)
.complex(CaseData::getLabelContent)
.readonlyNoSummary(LabelContent::getApplicant2, NEVER_SHOW)
.readonlyNoSummary(LabelContent::getApplicantOrApplicant1UC, NEVER_SHOW)
.readonlyNoSummary(LabelContent::getApplicant2, NEVER_SHOW)
.readonlyNoSummary(LabelContent::getApplicant2UC, NEVER_SHOW)
.readonlyNoSummary(LabelContent::getTheApplicant2, NEVER_SHOW)
.readonlyNoSummary(LabelContent::getTheApplicant2UC, NEVER_SHOW)
Expand Down Expand Up @@ -349,11 +348,6 @@ public AboutToStartOrSubmitResponse<CaseData, State> midEvent(
errors.add("Statement of truth must be accepted by Applicant 2 for joint applications");
}

List<String> nameValidationErrors = validateAllNamesForAllowedCharacters(data);
if (nameValidationErrors != null) {
errors.addAll(nameValidationErrors);
}

return AboutToStartOrSubmitResponse.<CaseData, State>builder()
.data(data)
.errors(errors)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
import static uk.gov.hmcts.divorce.divorcecase.model.MarriageFormation.SAME_SEX_COUPLE;
import static uk.gov.hmcts.divorce.divorcecase.model.WhoDivorcing.HUSBAND;
import static uk.gov.hmcts.divorce.divorcecase.model.WhoDivorcing.WIFE;
import static uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil.validateAllNamesForAllowedCharacters;

@Component
@Slf4j
Expand Down Expand Up @@ -256,13 +255,6 @@ public AboutToStartOrSubmitResponse<CaseData, State> midEvent(final CaseDetails<
.build();
}

List<String> nameValidationErrors = validateAllNamesForAllowedCharacters(caseData);
if (!nameValidationErrors.isEmpty()) {
return AboutToStartOrSubmitResponse.<CaseData, State>builder()
.errors(nameValidationErrors)
.build();
}

return AboutToStartOrSubmitResponse.<CaseData, State>builder()
.data(caseData)
.build();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package uk.gov.hmcts.divorce.divorcecase.validation;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import uk.gov.hmcts.ccd.sdk.api.CaseDetails;
import uk.gov.hmcts.ccd.sdk.type.CaseLink;
import uk.gov.hmcts.ccd.sdk.type.ListValue;
Expand Down Expand Up @@ -38,7 +37,6 @@ public final class ValidationUtil {
public static final String CONNECTION = "Connection ";
public static final String CANNOT_EXIST = " cannot exist";
public static final String SOT_REQUIRED = "Statement of truth must be accepted by the person making the application";
public static final String NAME_REGEX = "^[\\p{Script=Latin}'’_\\-\\s]*$";

private ValidationUtil() {
}
Expand Down Expand Up @@ -224,50 +222,6 @@ public static List<String> validateCitizenResendInvite(CaseDetails<CaseData, Sta
: singletonList("Not possible to update applicant 2 invite email address");
}

public static List<String> validateAllNamesForAllowedCharacters(final CaseData data) {
return flattenLists(
validateApplicant1NameForAllowedCharacters(data),
validateApplicant2NameForAllowedCharacters(data),
validateMarriageCertificateNames(data)
);
}

public static List<String> validateApplicant1NameForAllowedCharacters(final CaseData data) {
return flattenLists(
validName(data.getApplicant1().getFirstName(), "Applicant or Applicant 1 first name"),
validName(data.getApplicant1().getMiddleName(), "Applicant or Applicant 1 middle name"),
validName(data.getApplicant1().getLastName(), "Applicant or Applicant 1 last name")
);
}

public static List<String> validateApplicant2NameForAllowedCharacters(final CaseData data) {
return flattenLists(
validName(data.getApplicant2().getFirstName(), "Respondent or Applicant 2 first name"),
validName(data.getApplicant2().getMiddleName(), "Respondent or Applicant 2 middle name"),
validName(data.getApplicant2().getLastName(), "Respondent or Applicant 2 last name")
);
}

public static List<String> validateMarriageCertificateNames(final CaseData data) {
return flattenLists(
validName(data.getApplication().getMarriageDetails().getApplicant1Name(),
"Applicant or Applicant 1 name on marriage certificate"),
validName(data.getApplication().getMarriageDetails().getApplicant2Name(),
"Respondent or Applicant 2 name on marriage certificate")
);
}

public static List<String> validName(String value, String field) {
if (StringUtils.isEmpty(value)) {
return emptyList();
}
return isNameValid(value) ? emptyList() : List.of(field + " has invalid characters");
}

public static boolean isNameValid(final String value) {
return value.matches(NAME_REGEX);
}

@SafeVarargs
public static <E> List<E> flattenLists(List<E>... lists) {
return Arrays.stream(lists).flatMap(Collection::stream).collect(toList());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@

import java.util.List;

import static uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil.flattenLists;
import static uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil.validateMarriageCertificateNames;
import static uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil.validateMarriageDate;

@Slf4j
Expand Down Expand Up @@ -49,11 +47,8 @@ public AboutToStartOrSubmitResponse<CaseData, State> midEvent(
data.getApplication().getMarriageDetails().setPlaceOfMarriage(UK);
}

log.info("Validating Marriage Date and certificate names for Case Id: {}", details.getId());
final List<String> validationErrors = flattenLists(
validateMarriageDate(data, "MarriageDate"),
validateMarriageCertificateNames(data));

log.info("Validating Marriage Date for Case Id: {}", details.getId());
final List<String> validationErrors = validateMarriageDate(data, "MarriageDate");
if (!validationErrors.isEmpty()) {
State state = details.getState();
return AboutToStartOrSubmitResponse.<CaseData, State>builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

import static uk.gov.hmcts.divorce.caseworker.event.page.UpdateContactDetails.APPLICANT_REFUGE_LABEL;
import static uk.gov.hmcts.divorce.caseworker.event.page.UpdateContactDetails.THE_APPLICANT_OR_APPLICANT1;
import static uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil.validateApplicant1NameForAllowedCharacters;

public class SolAboutApplicant1 implements CcdPageConfiguration {

Expand Down Expand Up @@ -85,13 +84,6 @@ public AboutToStartOrSubmitResponse<CaseData, State> midEvent(CaseDetails<CaseDa
.build();
}

List<String> validationErrors = validateApplicant1NameForAllowedCharacters(caseData);
if (!validationErrors.isEmpty()) {
return AboutToStartOrSubmitResponse.<CaseData, State>builder()
.errors(validationErrors)
.build();
}

return AboutToStartOrSubmitResponse.<CaseData, State>builder()
.data(details.getData())
.errors(null)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,17 @@
package uk.gov.hmcts.divorce.solicitor.event.page;

import uk.gov.hmcts.ccd.sdk.api.CaseDetails;
import uk.gov.hmcts.ccd.sdk.api.callback.AboutToStartOrSubmitResponse;
import uk.gov.hmcts.divorce.common.ccd.CcdPageConfiguration;
import uk.gov.hmcts.divorce.common.ccd.PageBuilder;
import uk.gov.hmcts.divorce.divorcecase.model.Applicant;
import uk.gov.hmcts.divorce.divorcecase.model.CaseData;
import uk.gov.hmcts.divorce.divorcecase.model.State;

import java.util.List;

import static uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil.validateApplicant2NameForAllowedCharacters;

public class SolAboutApplicant2 implements CcdPageConfiguration {

@Override
public void addTo(final PageBuilder pageBuilder) {

pageBuilder
.page("SolAboutApplicant2", this::midEvent)
.page("SolAboutApplicant2")
.pageLabel("About the other party")
.complex(CaseData::getApplicant2)
.mandatoryWithLabel(Applicant::getFirstName,
Expand Down Expand Up @@ -47,21 +40,4 @@ public void addTo(final PageBuilder pageBuilder) {
"If not through marriage or deed poll, please provide details of how they legally changed they name")
.done();
}

public AboutToStartOrSubmitResponse<CaseData, State> midEvent(CaseDetails<CaseData, State> details,
CaseDetails<CaseData, State> detailsBefore) {
CaseData caseData = details.getData();

List<String> validationErrors = validateApplicant2NameForAllowedCharacters(caseData);
if (!validationErrors.isEmpty()) {
return AboutToStartOrSubmitResponse.<CaseData, State>builder()
.errors(validationErrors)
.build();
}

return AboutToStartOrSubmitResponse.<CaseData, State>builder()
.data(details.getData())
.errors(null)
.build();
}
}
12 changes: 6 additions & 6 deletions src/main/resources/data/sole.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
"applicationType": "soleApplication",
"applicant1Offline": "No",
"applicant2Offline": "No",
"applicant1FirstName": "appOne_first_name",
"applicant1MiddleName": "appOne_middle_name",
"applicant1LastName": "appOne_last_name",
"applicant1FirstName": "app1_first_name",
"applicant1MiddleName": "app1_middle_name",
"applicant1LastName": "app1_last_name",
"applicant1Email": "[email protected]",
"applicant1ContactDetailsType": "public",
"applicant2ContactDetailsType": "public",
Expand Down Expand Up @@ -39,9 +39,9 @@
},
"OrgPolicyCaseAssignedRole": "[APPONESOLICITOR]"
},
"applicant2FirstName": "appTwo_first_name",
"applicant2MiddleName": "appTwo_middle_name",
"applicant2LastName": "appTwo_last_name",
"applicant2FirstName": "app2_first_name",
"applicant2MiddleName": "app2_middle_name",
"applicant2LastName": "app2_last_name",
"applicant2Email": "[email protected]",
"applicant2LanguagePreferenceWelsh": "No",
"applicant2KeepContactDetailsConfidential": "No",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import uk.gov.hmcts.ccd.sdk.ConfigBuilderImpl;
import uk.gov.hmcts.ccd.sdk.api.CaseDetails;
Expand All @@ -13,16 +11,12 @@
import uk.gov.hmcts.divorce.divorcecase.model.CaseData;
import uk.gov.hmcts.divorce.divorcecase.model.State;
import uk.gov.hmcts.divorce.divorcecase.model.UserRole;
import uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.anyList;
import static uk.gov.hmcts.divorce.caseworker.event.CaseworkerAmendCase.CASEWORKER_AMEND_CASE;
import static uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil.LESS_THAN_ONE_YEAR_SINCE_SUBMISSION;
import static uk.gov.hmcts.divorce.testutil.ConfigTestUtil.createCaseDataConfigBuilder;
Expand Down Expand Up @@ -75,30 +69,4 @@ void shouldNotReturnErrorIfMarriageDateMoreThanOneYearPriorToApplicationSubmitte
assertThat(response.getErrors()).isNull();
assertThat(response.getWarnings()).isNull();
}

@Test
void shouldCallValidationUtilMethodToValidateMarriageCertificateNames() {
final CaseData caseData = caseDataWithMarriageDate();

final CaseDetails<CaseData, State> caseDetails = new CaseDetails<>();
caseDetails.setData(caseData);
caseDetails.setState(State.Submitted);

List<String> errors = new ArrayList<>();
errors.add("Error");

MockedStatic<ValidationUtil> validationUtilMockedStatic = Mockito.mockStatic(ValidationUtil.class);
validationUtilMockedStatic.when(() -> ValidationUtil.validateMarriageCertificateNames(caseData)).thenReturn(errors);
validationUtilMockedStatic.when(() -> ValidationUtil.validateMarriageDate(
caseData, "MarriageDate", true)).thenReturn(Collections.emptyList());
validationUtilMockedStatic.when(() -> ValidationUtil.flattenLists(anyList(), anyList())).thenReturn(errors);

AboutToStartOrSubmitResponse<CaseData, State> response = caseworkerAmendCase.aboutToSubmit(caseDetails, caseDetails);

assertThat(response.getErrors()).isNotNull();
assertThat(response.getErrors().size()).isEqualTo(1);
assertThat(response.getErrors().get(0)).isEqualTo("Error");

validationUtilMockedStatic.close();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import uk.gov.hmcts.divorce.divorcecase.model.UserRole;
import uk.gov.hmcts.divorce.divorcecase.util.AddressUtil;
import uk.gov.hmcts.divorce.divorcecase.validation.ApplicationValidation;
import uk.gov.hmcts.divorce.divorcecase.validation.ValidationUtil;
import uk.gov.hmcts.divorce.idam.IdamService;
import uk.gov.hmcts.divorce.idam.User;
import uk.gov.hmcts.divorce.systemupdate.service.CcdUpdateService;
Expand All @@ -33,13 +32,10 @@

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoInteractions;
Expand Down Expand Up @@ -242,30 +238,6 @@ void shouldFailCaseDataValidationWhenMandatoryFieldsAreNotPopulatedForIssueAppli
);
}

@Test
void shouldCallValidationUtilMethodToValidateMarriageCertificateNames() {

final var caseData = caseDataWithAllMandatoryFields();
caseData.getApplication().setSolSignStatementOfTruth(YES);

final CaseDetails<CaseData, State> details = new CaseDetails<>();
details.setData(caseData);
details.setId(TEST_CASE_ID);
details.setCreatedDate(LOCAL_DATE_TIME);

List<String> errors = new ArrayList<>();
errors.add("Error");

MockedStatic<ValidationUtil> validationUtilMockedStatic = Mockito.mockStatic(ValidationUtil.class);
validationUtilMockedStatic.when(() -> ValidationUtil.validateMarriageCertificateNames(caseData)).thenReturn(errors);
validationUtilMockedStatic.when(() -> ValidationUtil.flattenLists(anyList(), anyList())).thenReturn(errors);

final AboutToStartOrSubmitResponse<CaseData, State> response = caseworkerIssueApplication.aboutToSubmit(details, null);
assertThat(response.getErrors()).isNotNull();

validationUtilMockedStatic.close();
}

@Test
void shouldSubmitCcdSystemIssueSolicitorServicePackEventOnSubmittedCallbackIfSolicitorService() {
final User user = new User(SYSTEM_UPDATE_AUTH_TOKEN, UserInfo.builder().build());
Expand Down Expand Up @@ -462,9 +434,9 @@ private CaseData caseDataWithAllMandatoryFields() {
caseData.getApplication().getJurisdiction().setConnections(Set.of(JurisdictionConnections.APP_1_APP_2_RESIDENT));
caseData.getApplication().getJurisdiction().setApplicant1Residence(YES);
caseData.getApplication().getJurisdiction().setApplicant2Residence(YES);
caseData.getApplication().getMarriageDetails().setApplicant1Name("appOneName");
caseData.getApplication().getMarriageDetails().setApplicant1Name("app1Name");
caseData.getApplication().getMarriageDetails().setDate(LocalDate.of(2009, 1, 1));
caseData.getApplication().getMarriageDetails().setApplicant2Name("appTwoName");
caseData.getApplication().getMarriageDetails().setApplicant2Name("app2Name");
caseData.getApplication().getMarriageDetails().setPlaceOfMarriage("London");
return caseData;
}
Expand Down
Loading
Loading