浏览代码

Validate Census refactored

Andrew Grant 7 月之前
父节点
当前提交
6444ee641d

+ 22 - 58
src/main/java/scot/carricksoftware/grants/validators/census/CensusEntryCommandValidatorImpl.java

@@ -23,8 +23,12 @@ public class CensusEntryCommandValidatorImpl implements CensusEntryCommandValida
         logger.debug("censusEntryCommandValidator::validate");
         validateCensus(censusEntryCommand, bindingResult);
         validateNameAndPerson(censusEntryCommand, bindingResult);
-        validateBirthYear(censusEntryCommand, bindingResult);
-        validateBirthDay(censusEntryCommand, bindingResult);
+        if (censusEntryCommand.getBirthDay() != null) {
+            validateBirthDay(censusEntryCommand, bindingResult);
+        }
+        if (censusEntryCommand.getBirthYear() != null) {
+            validateBirthYear(censusEntryCommand, bindingResult);
+        }
         validateAgeAndBirthYear(censusEntryCommand, bindingResult);
         validateAgeAndBirthDay(censusEntryCommand, bindingResult);
     }
@@ -58,79 +62,39 @@ public class CensusEntryCommandValidatorImpl implements CensusEntryCommandValida
     }
 
     private void validateBirthDay(CensusEntryCommand censusEntryCommand, BindingResult bindingResult) {
-        if (censusEntryCommand.getBirthDay() != null) {
-            if (!censusEntryCommand.getBirthDay().contains("/")) {
-                bindingResult.rejectValue("birthDay", ApplicationConstants.EMPTY_STRING,
-                        null,
-                        ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
-            } else {
-                String[] parts = censusEntryCommand.getBirthDay().split("/");
-                if (parts.length == 2) {
-                    validateDays(parts[0], bindingResult);
-                    validateYears(parts[1], bindingResult);
-                } else {
-                    bindingResult.rejectValue("birthDay", ApplicationConstants.EMPTY_STRING,
-                            null,
-                            ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
-                }
-            }
-        }
-    }
-
-    private void validateYears(String part, BindingResult bindingResult) {
-        boolean invalidYear = false;
-        try {
-            int year = Integer.parseInt(part);
-            if (year <= 0) {
-                invalidYear = true;
-            }
-        } catch (RuntimeException e) {
-            invalidYear = true;
-        }
-        if (invalidYear) {
+        String[] parts = censusEntryCommand.getBirthDay().split("/");
+        if (parts.length != 2) {
             bindingResult.rejectValue("birthDay", ApplicationConstants.EMPTY_STRING,
                     null,
                     ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
+        } else {
+            validateInteger(parts[0], 1, 31, ValidationConstants.BIRTHDAY_INCORRECT_FORMAT, "birthDay", bindingResult);
+            validateInteger(parts[1], 1, 12, ValidationConstants.BIRTHDAY_INCORRECT_FORMAT, "birthDay", bindingResult);
+
         }
     }
 
-    private void validateDays(String part, BindingResult bindingResult) {
-        boolean invalidDay = false;
+    private void validateInteger(String part, int low, int high, String validationConstant, String field, BindingResult bindingResult) {
+        boolean invalid = false;
         try {
-            int day = Integer.parseInt(part);
-            if (day < 1 || day > 31) {
-                invalidDay = true;
+            int value = Integer.parseInt(part);
+            if (value < low || value > high) {
+                invalid = true;
             }
         } catch (RuntimeException e) {
-            invalidDay = true;
+            invalid = true;
         }
-        if (invalidDay) {
-            bindingResult.rejectValue("birthDay", ApplicationConstants.EMPTY_STRING,
+        if (invalid) {
+            bindingResult.rejectValue(field, ApplicationConstants.EMPTY_STRING,
                     null,
-                    ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
+                    validationConstant);
         }
     }
 
-
     private void validateBirthYear(CensusEntryCommand censusEntryCommand, BindingResult bindingResult) {
-        if (censusEntryCommand.getBirthYear() != null) {
-            if (!isPositiveInteger(censusEntryCommand.getBirthYear())) {
-                bindingResult.rejectValue("birthYear", ApplicationConstants.EMPTY_STRING,
-                        null,
-                        ValidationConstants.FIELD_NOT_NEGATIVE_INTEGER);
-            }
-        }
+        validateInteger(censusEntryCommand.getBirthYear(), 1800, 2050, ValidationConstants.FIELD_NOT_NEGATIVE_INTEGER, "birthYear", bindingResult);
     }
 
-    private boolean isPositiveInteger(String string) {
-        try {
-            int Number;
-            Number = Integer.parseInt(string);
-            return Number > 0;
-        } catch (RuntimeException e) {
-            return false;
-        }
-    }
 
     private void validateNameAndPerson(CensusEntryCommand censusEntryCommand, BindingResult bindingResult) {
         if (censusEntryCommand.getPerson() == null) {

+ 16 - 32
src/test/java/scot/carricksoftware/grants/validators/census/CensusEntryCommandValidatorBirthDayTest.java → src/test/java/scot/carricksoftware/grants/validators/census/CensusEntryCommandValidatorBirthDayDayTest.java

@@ -17,12 +17,12 @@ import scot.carricksoftware.grants.commands.census.CensusEntryCommandImpl;
 import scot.carricksoftware.grants.constants.ApplicationConstants;
 import scot.carricksoftware.grants.constants.ValidationConstants;
 
-import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.*;
 import static scot.carricksoftware.grants.GenerateRandomCensusValues.GetRandomCensus;
 import static scot.carricksoftware.grants.GenerateRandomPeopleValues.GetRandomPerson;
 
 @ExtendWith(MockitoExtension.class)
-class CensusEntryCommandValidatorBirthDayTest {
+class CensusEntryCommandValidatorBirthDayDayTest {
 
     private CensusEntryCommandValidatorImpl validator;
 
@@ -41,69 +41,53 @@ class CensusEntryCommandValidatorBirthDayTest {
     }
 
     @Test
-    public void NoSlashTest() {
+    public void noSlashTest() {
         censusEntryCommand.setBirthDay("2501");
         validator.validate(censusEntryCommand, bindingResultMock);
         verify(bindingResultMock).rejectValue("birthDay", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
     }
 
     @Test
-    public void NoPartsTest() {
+    public void noPartsTest() {
         censusEntryCommand.setBirthDay("/");
         validator.validate(censusEntryCommand, bindingResultMock);
         verify(bindingResultMock).rejectValue("birthDay", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
     }
 
     @Test
-    public void NegativeDaysTest() {
-        censusEntryCommand.setBirthDay("-12/85");
+    public void invalidBirthDayTest() {
+        censusEntryCommand.setBirthDay("z/04");
         validator.validate(censusEntryCommand, bindingResultMock);
         verify(bindingResultMock).rejectValue("birthDay", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
     }
 
     @Test
-    public void TooHighDaysTest() {
-        censusEntryCommand.setBirthDay("32/85");
+    public void tooLowDayTest() {
+        censusEntryCommand.setBirthDay("0/04");
         validator.validate(censusEntryCommand, bindingResultMock);
         verify(bindingResultMock).rejectValue("birthDay", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
     }
 
     @Test
-    public void NonValidDaysTest() {
-        censusEntryCommand.setBirthDay("z/85");
+    public void tooHighDayTest() {
+        censusEntryCommand.setBirthDay("32/04");
         validator.validate(censusEntryCommand, bindingResultMock);
         verify(bindingResultMock).rejectValue("birthDay", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
     }
 
     @Test
-    public void ExcessiveDaysTest() {
-        censusEntryCommand.setBirthDay("55/85");
+    public void lowDayTest() {
+        censusEntryCommand.setBirthDay("1/04");
         validator.validate(censusEntryCommand, bindingResultMock);
-        verify(bindingResultMock).rejectValue("birthDay", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
+        verifyNoInteractions(bindingResultMock);
     }
 
-    @Test
-    public void NegativeYearsTest() {
-        censusEntryCommand.setBirthDay("11/-7");
-        validator.validate(censusEntryCommand, bindingResultMock);
-        verify(bindingResultMock).rejectValue("birthDay", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
-    }
 
     @Test
-    public void NonValidYearsTest() {
-        censusEntryCommand.setBirthDay("11/zz");
+    public void highDayTest() {
+        censusEntryCommand.setBirthDay("31/04");
         validator.validate(censusEntryCommand, bindingResultMock);
-        verify(bindingResultMock).rejectValue("birthDay", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
+        verifyNoInteractions(bindingResultMock);
     }
 
-
-
-
-
-
-
-
-
-
-
 }

+ 80 - 0
src/test/java/scot/carricksoftware/grants/validators/census/CensusEntryCommandValidatorBirthDayMonthTest.java

@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) Andrew Grant of Carrick Software 24/03/2025, 09:07. All rights reserved.
+ *
+ */
+
+package scot.carricksoftware.grants.validators.census;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.springframework.validation.BindingResult;
+import scot.carricksoftware.grants.commands.census.CensusEntryCommand;
+import scot.carricksoftware.grants.commands.census.CensusEntryCommandImpl;
+import scot.carricksoftware.grants.constants.ApplicationConstants;
+import scot.carricksoftware.grants.constants.ValidationConstants;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoInteractions;
+import static scot.carricksoftware.grants.GenerateRandomCensusValues.GetRandomCensus;
+import static scot.carricksoftware.grants.GenerateRandomPeopleValues.GetRandomPerson;
+
+@ExtendWith(MockitoExtension.class)
+class CensusEntryCommandValidatorBirthDayMonthTest {
+
+    private CensusEntryCommandValidatorImpl validator;
+
+    private CensusEntryCommand censusEntryCommand;
+
+
+    @Mock
+    BindingResult bindingResultMock;
+
+    @BeforeEach
+    void setUp() {
+        validator = new CensusEntryCommandValidatorImpl();
+        censusEntryCommand = new CensusEntryCommandImpl();
+        censusEntryCommand.setCensus(GetRandomCensus());
+        censusEntryCommand.setPerson(GetRandomPerson());
+    }
+
+
+    @Test
+    public void invalidMonthTest() {
+        censusEntryCommand.setBirthDay("15/z");
+        validator.validate(censusEntryCommand, bindingResultMock);
+        verify(bindingResultMock).rejectValue("birthDay", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
+    }
+
+    @Test
+    public void tooLowMonthTest() {
+        censusEntryCommand.setBirthDay("15/-3");
+        validator.validate(censusEntryCommand, bindingResultMock);
+        verify(bindingResultMock).rejectValue("birthDay", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
+    }
+
+    @Test
+    public void tooHighMonthTest() {
+        censusEntryCommand.setBirthDay("15/13");
+        validator.validate(censusEntryCommand, bindingResultMock);
+        verify(bindingResultMock).rejectValue("birthDay", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.BIRTHDAY_INCORRECT_FORMAT);
+    }
+
+    @Test
+    public void lowMonthTest() {
+        censusEntryCommand.setBirthDay("1/1");
+        validator.validate(censusEntryCommand, bindingResultMock);
+        verifyNoInteractions(bindingResultMock);
+    }
+
+
+    @Test
+    public void highMonthTest() {
+        censusEntryCommand.setBirthDay("31/12");
+        validator.validate(censusEntryCommand, bindingResultMock);
+        verifyNoInteractions(bindingResultMock);
+    }
+
+}