Browse Source

In Region Country is checked for null
Closes #57

Andrew Grant 6 months ago
parent
commit
227da6368e

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

@@ -25,7 +25,9 @@ public class ValidationConstants {
     public static final String CENSUS_NAME_IS_NOT_NULL = "Both Person and Untracked Person cannot be given";
 
     public static final String PERSON_IS_NULL = "The person cannot be null.";
+
     public static final String PLACE_IS_NULL = "The place cannot be null.";
+    public static final String COUNTRY_IS_NULL = "The country cannot be null.";
 
     public static final String BRIDE_IS_NULL = "The bride cannot be null.";
     public static final String GROOM_IS_NULL = "The groom cannot be null.";

+ 13 - 0
src/main/java/scot/carricksoftware/grants/validators/places/RegionCommandValidator.java

@@ -15,6 +15,19 @@ import scot.carricksoftware.grants.constants.ValidationConstants;
 public class RegionCommandValidator {
 
     public void validate(RegionCommand regionCommand, BindingResult bindingResult) {
+        validateName(regionCommand, bindingResult);
+        validateCountry(regionCommand, bindingResult);
+    }
+
+    private void validateCountry(RegionCommand regionCommand, BindingResult bindingResult) {
+        if (regionCommand.getCountry() == null) {
+            bindingResult.rejectValue("country", ApplicationConstants.EMPTY_STRING,
+                    null,
+                    ValidationConstants.COUNTRY_IS_NULL);
+        }
+    }
+
+    public void validateName(RegionCommand regionCommand, BindingResult bindingResult) {
         if (regionCommand.getName().length() < ApplicationConstants.MINIMUM_NAME_LENGTH) {
             bindingResult.rejectValue("name", ApplicationConstants.EMPTY_STRING,
                     null,

+ 1 - 1
src/main/resources/application.properties

@@ -2,7 +2,7 @@ spring.application.name=grants
 server.port=8086
 server.servlet.context-path=/grants
 spring.mvc.format.date=dd-MM-yyyy
-spring.profiles.active=uat
+spring.profiles.active=dev
 logging.level.scot.carricksoftware=trace
 
 

+ 5 - 0
src/main/resources/templates/region/form.html

@@ -53,6 +53,11 @@ rounded-3 text-center p-4">
                         <option th:each="country : ${countries}"
                                 th:value="${country.id}" th:text="${country.name}"></option>
                     </select>
+                    <div th:if="${#fields.hasErrors('country')}">
+                        <ul class="text-danger">
+                            <li th:each="err : ${#fields.errors('country')}" th:text="${err}"/>
+                        </ul>
+                    </div>
                 </div>
             </div>
         </div>

+ 22 - 0
src/test/java/scot/carricksoftware/grants/validators/places/RegionCensusCommandValidatorImplTest.java

@@ -21,6 +21,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoInteractions;
+import static scot.carricksoftware.grants.GenerateCertificateRandomValues.GetRandomString;
+import static scot.carricksoftware.grants.GenerateRandomPlaceValues.GetRandomCountry;
 
 @ExtendWith(MockitoExtension.class)
 class RegionCensusCommandValidatorImplTest {
@@ -42,6 +44,7 @@ class RegionCensusCommandValidatorImplTest {
     public void minimumSizeIsAllowedTest() {
         String repeated = new String(new char[ApplicationConstants.MINIMUM_NAME_LENGTH]).replace("\0", "x");
         regionCommand.setName(repeated);
+        regionCommand.setCountry(GetRandomCountry());
         validator.validate(regionCommand, bindingResultMock);
         verifyNoInteractions(bindingResultMock);
     }
@@ -50,6 +53,7 @@ class RegionCensusCommandValidatorImplTest {
     public void maximumSizeIsAllowedTest() {
         String repeated = new String(new char[ApplicationConstants.MAXIMUM_NAME_LENGTH]).replace("\0", "x");
         regionCommand.setName(repeated);
+        regionCommand.setCountry(GetRandomCountry());
         validator.validate(regionCommand, bindingResultMock);
         verifyNoInteractions(bindingResultMock);
     }
@@ -61,6 +65,7 @@ class RegionCensusCommandValidatorImplTest {
 
         String repeated = new String(new char[ApplicationConstants.MAXIMUM_NAME_LENGTH + 1]).replace("\0", "x");
         regionCommand.setName(repeated);
+        regionCommand.setCountry(GetRandomCountry());
         validator.validate(regionCommand, bindingResultMock);
         verify(bindingResultMock).rejectValue(stringArgumentCaptor.capture(), stringArgumentCaptor.capture(), objectArgumentCaptor.capture(), stringArgumentCaptor.capture());
         assertEquals("name", stringArgumentCaptor.getAllValues().get(0));
@@ -76,6 +81,7 @@ class RegionCensusCommandValidatorImplTest {
 
         String repeated = new String(new char[ApplicationConstants.MINIMUM_NAME_LENGTH - 1]).replace("\0", "x");
         regionCommand.setName(repeated);
+        regionCommand.setCountry(GetRandomCountry());
         validator.validate(regionCommand, bindingResultMock);
         verify(bindingResultMock).rejectValue(stringArgumentCaptor.capture(), stringArgumentCaptor.capture(), objectArgumentCaptor.capture(), stringArgumentCaptor.capture());
         assertEquals("name", stringArgumentCaptor.getAllValues().get(0));
@@ -83,4 +89,20 @@ class RegionCensusCommandValidatorImplTest {
         assertEquals(ValidationConstants.NAME_IS_TOO_SHORT, stringArgumentCaptor.getAllValues().get(2));
         assertNull(objectArgumentCaptor.getAllValues().get(0));
     }
+
+    @Test
+    public void nullCountryTest() {
+        ArgumentCaptor<String> stringArgumentCaptor = ArgumentCaptor.forClass(String.class);
+        ArgumentCaptor<Object[]> objectArgumentCaptor = ArgumentCaptor.forClass(Object[].class);
+        regionCommand.setCountry(null);
+        regionCommand.setName(GetRandomString());
+        validator.validate(regionCommand, bindingResultMock);
+
+        verify(bindingResultMock).rejectValue(stringArgumentCaptor.capture(), stringArgumentCaptor.capture(), objectArgumentCaptor.capture(), stringArgumentCaptor.capture());
+        assertEquals("country", stringArgumentCaptor.getAllValues().get(0));
+        assertEquals(ApplicationConstants.EMPTY_STRING, stringArgumentCaptor.getAllValues().get(1));
+        assertEquals(ValidationConstants.COUNTRY_IS_NULL, stringArgumentCaptor.getAllValues().get(2));
+        assertNull(objectArgumentCaptor.getAllValues().get(0));
+
+    }
 }