浏览代码

CensusEntry BirthYear Validation

Andrew Grant 7 月之前
父节点
当前提交
5d8af98241

+ 21 - 0
src/main/java/scot/carricksoftware/grants/validators/census/CensusEntryCommandValidator.java

@@ -23,6 +23,27 @@ public class CensusEntryCommandValidator {
         logger.debug("censusEntryCommandValidator::validate");
         validateCensus(censusEntryCommand, bindingResult);
         validateNameAndPerson(censusEntryCommand, bindingResult);
+        validateBirthYear(censusEntryCommand, bindingResult);
+    }
+
+    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);
+            }
+        }
+    }
+
+    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) {

+ 2 - 2
src/main/resources/templates/censusentry/form.html

@@ -149,7 +149,7 @@ rounded-3 text-center p-4">
             <div class="col-md-2">
                 <label for="birthDay">Birthday (dd/mm)</label>
                 <input class="form-control" id="birthDay"
-                       th:field="*{whereBorn}" type="text">
+                       th:field="*{birthDay}" type="text">
                 <div th:if="${#fields.hasErrors('birthDay')}">
                     <ul class="text-danger">
                         <li th:each="err : ${#fields.errors('birthDay')}" th:text="${err}" style="width: 300px;"/>
@@ -162,7 +162,7 @@ rounded-3 text-center p-4">
                        th:field="*{birthYear}" type="text">
                 <div th:if="${#fields.hasErrors('birthYear')}">
                     <ul class="text-danger">
-                        <li th:each="err : ${#fields.errors('name')}" th:text="${err}" style="width: 300px;"/>
+                        <li th:each="err : ${#fields.errors('birthYear')}" th:text="${err}" style="width: 300px;"/>
                     </ul>
                 </div>
             </div>

+ 71 - 0
src/test/java/scot/carricksoftware/grants/validators/census/CensusEntryCommandValidatorBirthYearTest.java

@@ -0,0 +1,71 @@
+/*
+ * 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 scot.carricksoftware.grants.GenerateRandomCensusValues.GetRandomCensus;
+
+@ExtendWith(MockitoExtension.class)
+class CensusEntryCommandValidatorBirthYearTest {
+
+    private CensusEntryCommandValidator validator;
+
+    private CensusEntryCommand censusEntryCommand;
+
+
+    @Mock
+    BindingResult bindingResultMock;
+
+    @BeforeEach
+    void setUp() {
+        validator = new CensusEntryCommandValidator();
+        censusEntryCommand = new CensusEntryCommandImpl();
+        censusEntryCommand.setCensus(GetRandomCensus());
+    }
+
+    @Test
+    public void NegativeTest() {
+        censusEntryCommand.setBirthYear("-5");
+        validator.validate(censusEntryCommand, bindingResultMock);
+        verify(bindingResultMock).rejectValue("birthYear", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.FIELD_NOT_NEGATIVE_INTEGER);
+    }
+
+    @Test
+    public void ZeroTest() {
+        censusEntryCommand.setBirthYear("0");
+        validator.validate(censusEntryCommand, bindingResultMock);
+        verify(bindingResultMock).rejectValue("birthYear", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.FIELD_NOT_NEGATIVE_INTEGER);
+    }
+
+    @Test
+    public void NotIntegerTest() {
+        censusEntryCommand.setBirthYear("3.14");
+        validator.validate(censusEntryCommand, bindingResultMock);
+        verify(bindingResultMock).rejectValue("birthYear", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.FIELD_NOT_NEGATIVE_INTEGER);
+    }
+
+    @Test
+    public void NotANumberTest() {
+        censusEntryCommand.setBirthYear("zzz");
+        validator.validate(censusEntryCommand, bindingResultMock);
+        verify(bindingResultMock).rejectValue("birthYear", ApplicationConstants.EMPTY_STRING, null, ValidationConstants.FIELD_NOT_NEGATIVE_INTEGER);
+    }
+
+
+
+}