Răsfoiți Sursa

Death certificate validators

Andrew Grant 3 luni în urmă
părinte
comite
56d18077d7

+ 1 - 0
src/main/java/scot/carricksoftware/grants/constants/ValidationConstants.java

@@ -76,6 +76,7 @@ public class ValidationConstants {
     public static final String USUAL_RESIDENCE_AND_UNTRACKED_USUAL_RESIDENCE = "Only one usual residence and untracked usual residence may be specified.";
     public static final String WHEN_BORN_INCORRECT_FORMAT = "The format should be dd/MM/yyyy hh:mm.";
     public static final String WHEN_BORN_IS_NULL = "When born cannot be null.";
+    public static final String WHEN_DIED_IS_INVALID = "The format should be dd/MM/yyyy.";
     public static final String WHEN_MARRIED_IS_NULL = "When married cannot be null.";
     public static final String WHEN_MARRIED_INCORRECT_FORMAT = "The format should be dd/MM/yyyy.";
     public static final String WHEN_DIED_IS_NULL = "When died cannot be null.";

+ 5 - 1
src/main/java/scot/carricksoftware/grants/validators/certificates/deathcertificate/DeathCertificateCommandValidatorImpl.java

@@ -17,9 +17,12 @@ public class DeathCertificateCommandValidatorImpl implements DeathCertificateCom
 
     final DeathCertificateUntrackedFieldsValidator deathCertificateUntrackedFieldsValidator;
 
-    public DeathCertificateCommandValidatorImpl(DeathCertificateNullFieldsValidator deathCertificateNullFieldsValidator, DeathCertificateUntrackedFieldsValidator deathCertificateUntrackedFieldsValidator) {
+    final DeathCertificateDateFieldsValidator deathCertificateDateFieldsValidator;
+
+    public DeathCertificateCommandValidatorImpl(DeathCertificateNullFieldsValidator deathCertificateNullFieldsValidator, DeathCertificateUntrackedFieldsValidator deathCertificateUntrackedFieldsValidator, DeathCertificateDateFieldsValidator deathCertificateDateFieldsValidator) {
         this.deathCertificateNullFieldsValidator = deathCertificateNullFieldsValidator;
         this.deathCertificateUntrackedFieldsValidator = deathCertificateUntrackedFieldsValidator;
+        this.deathCertificateDateFieldsValidator = deathCertificateDateFieldsValidator;
     }
 
 
@@ -27,6 +30,7 @@ public class DeathCertificateCommandValidatorImpl implements DeathCertificateCom
     public void validate(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult) {
         deathCertificateNullFieldsValidator.validate(deathCertificateCommand, bindingResult);
         deathCertificateUntrackedFieldsValidator.validate(deathCertificateCommand, bindingResult);
+        deathCertificateDateFieldsValidator.validate(deathCertificateCommand, bindingResult);
     }
 
 

+ 17 - 0
src/main/java/scot/carricksoftware/grants/validators/certificates/deathcertificate/DeathCertificateDateFieldsValidator.java

@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.validators.certificates.deathcertificate;
+
+
+import org.springframework.validation.BindingResult;
+import scot.carricksoftware.grants.commands.certificates.deathcertificates.DeathCertificateCommand;
+
+public interface DeathCertificateDateFieldsValidator {
+
+    @SuppressWarnings("unused")
+    void validate(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult);
+}
+

+ 65 - 0
src/main/java/scot/carricksoftware/grants/validators/certificates/deathcertificate/DeathCertificateDateFieldsValidatorImpl.java

@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.validators.certificates.deathcertificate;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.stereotype.Component;
+import org.springframework.validation.BindingResult;
+import scot.carricksoftware.grants.commands.certificates.deathcertificates.DeathCertificateCommand;
+import scot.carricksoftware.grants.constants.ValidationConstants;
+import scot.carricksoftware.grants.validators.helpers.ValidateDateTypes;
+import scot.carricksoftware.grants.validators.helpers.ValidateTypesImpl;
+
+@Component
+public class DeathCertificateDateFieldsValidatorImpl implements DeathCertificateDateFieldsValidator {
+
+    private static final Logger logger = LogManager.getLogger(DeathCertificateDateFieldsValidatorImpl.class);
+
+    private final ValidateDateTypes validateDateTypes;
+
+    public DeathCertificateDateFieldsValidatorImpl(ValidateDateTypes validateDateTypes) {
+        this.validateDateTypes = validateDateTypes;
+    }
+
+    @Override
+    public void validate(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult) {
+        validateCertificateDate(deathCertificateCommand, bindingResult);
+        validateWhenBorn(deathCertificateCommand, bindingResult);
+        validateWhenDied(deathCertificateCommand, bindingResult);
+    }
+
+    private void validateCertificateDate(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult) {
+        logger.debug("DeathCertificateNullFieldsValidator::validateCertificateDate");
+        validateDateTypes.validatePastDate(deathCertificateCommand.getCertificateDate(),
+                "certificateDate",
+                ValidationConstants.CERTIFICATE_DATE_IS_NULL,
+                ValidationConstants.DATE_IS_INVALID,
+                ValidationConstants.DATE_IN_FUTURE,
+                bindingResult);
+    }
+
+    private void validateWhenBorn(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult) {
+        logger.debug("DeathCertificateDateFieldsValidator::validateWhenBorn");
+        validateDateTypes.validatePastDate(deathCertificateCommand.getWhenBorn(),
+                "whenBorn",
+                ValidationConstants.WHEN_BORN_IS_NULL,
+                ValidationConstants.WHEN_BORN_INCORRECT_FORMAT,
+                ValidationConstants.DATE_IN_FUTURE,
+                bindingResult);
+    }
+
+    private void validateWhenDied(DeathCertificateCommand deathCertificateCommand, BindingResult bindingResult) {
+        logger.debug("DeathCertificateNullFieldsValidator::validateWhenDied");
+        validateDateTypes.validatePastDate(deathCertificateCommand.getWhenDied(),
+                "whenDied",
+                ValidationConstants.WHEN_DIED_IS_NULL,
+                ValidationConstants.WHEN_DIED_IS_INVALID,
+                ValidationConstants.DATE_IN_FUTURE,
+                bindingResult);
+    }
+
+}

+ 5 - 1
src/test/java/scot/carricksoftware/grants/validators/certificates/deathcertificate/DeathCertificateCommandValidatorTest.java

@@ -26,6 +26,9 @@ class DeathCertificateCommandValidatorTest {
     @Mock
     private DeathCertificateUntrackedFieldsValidator deathCertificateUntrackedFieldsValidatorMock;
 
+    @Mock
+    private DeathCertificateDateFieldsValidator deathCertificateDateFieldsValidatorMock;
+
     @Mock
     private DeathCertificateCommand deathCertificateCommandMock;
 
@@ -36,7 +39,8 @@ class DeathCertificateCommandValidatorTest {
     void setUp() {
         deathCertificateCommandValidator = new DeathCertificateCommandValidatorImpl(
                 deathCertificateNullFieldsValidatorMock,
-                deathCertificateUntrackedFieldsValidatorMock);
+                deathCertificateUntrackedFieldsValidatorMock,
+                deathCertificateDateFieldsValidatorMock);
     }
 
     @Test

+ 34 - 7
src/test/java/scot/carricksoftware/grants/validators/certificates/deathcertificate/DeathCertificateDateFieldsValidatorImplTest.java

@@ -22,10 +22,7 @@ import static scot.carricksoftware.grants.GenerateCertificateRandomValues.GetRan
 @ExtendWith(MockitoExtension.class)
 class DeathCertificateDateFieldsValidatorImplTest {
 
-    DeathCertificateNullFieldsValidator deathCertificateNullFieldsValidator;
-
-    @Mock
-    private ValidateTypesImpl validateTypesMock;
+    DeathCertificateDateFieldsValidator deathCertificateDateFieldsValidator;
 
     @Mock
     private ValidateDateTypes validateDateTypesMock;
@@ -35,19 +32,25 @@ class DeathCertificateDateFieldsValidatorImplTest {
 
     DeathCertificateCommand deathCertificateCommand;
     String certificateDate;
+    String whenBorn;
+    String whenDied;
 
     @BeforeEach
     void setUp() {
-        deathCertificateNullFieldsValidator = new DeathCertificateNullFieldsValidatorImpl(validateTypesMock, validateDateTypesMock);
+        deathCertificateDateFieldsValidator = new DeathCertificateDateFieldsValidatorImpl(validateDateTypesMock);
         deathCertificateCommand = new DeathCertificateCommandImpl();
         certificateDate = GetRandomString();
+        whenBorn = GetRandomString();
+        whenDied = GetRandomString();
 
         deathCertificateCommand.setCertificateDate(certificateDate);
+        deathCertificateCommand.setWhenBorn(whenBorn);
+        deathCertificateCommand.setWhenDied(whenDied);
     }
 
     @Test
-    void validateDateTypesIsCalledTest() {
-        deathCertificateNullFieldsValidator.validate(deathCertificateCommand, bindingResultMock);
+    void validateCertificateDateIsCalledTest() {
+        deathCertificateDateFieldsValidator.validate(deathCertificateCommand, bindingResultMock);
 
         verify(validateDateTypesMock).validatePastDate(certificateDate,
                 "certificateDate",
@@ -57,4 +60,28 @@ class DeathCertificateDateFieldsValidatorImplTest {
                 bindingResultMock);
     }
 
+    @Test
+    void validateWhenBornIsCalledTest() {
+        deathCertificateDateFieldsValidator.validate(deathCertificateCommand, bindingResultMock);
+
+        verify(validateDateTypesMock).validatePastDate(whenBorn,
+                "whenBorn",
+                "When born cannot be null.",
+                "The format should be dd/MM/yyyy hh:mm.",
+                "Date should not be in the future.",
+                bindingResultMock);
+    }
+
+    @Test
+    void validateWhenDiedIsCalledTest() {
+        deathCertificateDateFieldsValidator.validate(deathCertificateCommand, bindingResultMock);
+
+        verify(validateDateTypesMock).validatePastDate(whenDied,
+                "whenDied",
+                "When died cannot be null.",
+                "The format should be dd/MM/yyyy.",
+                "Date should not be in the future.",
+                bindingResultMock);
+    }
+
 }

+ 0 - 5
src/test/java/scot/carricksoftware/grants/validators/certificates/deathcertificate/DeathCertificateFieldsValidatorImplTest.java

@@ -79,9 +79,6 @@ class DeathCertificateFieldsValidatorImplTest {
         deathCertificateCommand.setSex(sex);
         deathCertificateCommand.setCertificateSource(certificateSource);
         deathCertificateCommand.setRegistrationAuthority(registrationAuthority);
-        deathCertificateCommand.setCertificateType(certificateType);
-        deathCertificateCommand.setCertificateDate(certificateDate);
-        deathCertificateCommand.setWhenDied(whenDied);
     }
 
     @Test
@@ -97,8 +94,6 @@ class DeathCertificateFieldsValidatorImplTest {
         verify(validateTypesMock).validateSex(sex, "sex", "Sex cannot be null.", bindingResultMock);
         verify(validateTypesMock).validateOrganisation(certificateSource, "certificateSource", "The certificate source cannot be null.", bindingResultMock);
         verify(validateTypesMock).validateOrganisation(registrationAuthority, "registrationAuthority", "The registration authority cannot be null.", bindingResultMock);
-        verify(validateTypesMock).validateCertificateType(certificateType, "certificateType", "The certificate type cannot be null.", bindingResultMock);
-        verify(validateTypesMock).validateNullOrEmptyString(whenDied, "whenDied", "When died cannot be null.", bindingResultMock);
     }
 
 }