浏览代码

ValidateType::ValidatePastDate

Andrew Grant 6 月之前
父节点
当前提交
2a0e6f932f

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

@@ -19,8 +19,8 @@ public class ApplicationConstants {
 
     public static final int DEFAULT_PAGE_SIZE = 15;
     public static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd/MM/yyyy");
-    public static final String DATE_FORMAT = "dd-MM-yyyy";
-    public static final String DATE_TIME_FORMAT = "dd-MM-yyyy hh:mm";
+    public static final String DATE_FORMAT = "dd/MM/yyyy";
+    public static final String DATE_TIME_FORMAT = "dd/MM/yyyy hh:mm";
     public final static String EMPTY_STRING = "";
 
     public static final int MINIMUM_NAME_LENGTH = 3;

+ 17 - 0
src/main/java/scot/carricksoftware/grants/validators/helpers/ValidateTypesImpl.java

@@ -13,6 +13,9 @@ import scot.carricksoftware.grants.domains.places.Organisation;
 import scot.carricksoftware.grants.enums.censusentry.CensusEntrySex;
 import scot.carricksoftware.grants.enums.certificates.CertificateType;
 
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+
 @Component
 public class ValidateTypesImpl implements ValidateTypes {
 
@@ -53,6 +56,19 @@ public class ValidateTypesImpl implements ValidateTypes {
 
     @Override
     public void validatePastDate(String dateString, String fieldName, String nullMessage, String formatMessage, String pastMessage, BindingResult bindingResult) {
+        if (dateString == null || dateString.trim().isEmpty()) {
+            bindingResult.rejectValue(fieldName, ApplicationConstants.EMPTY_STRING, null, nullMessage);
+        } else {
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(ApplicationConstants.DATE_FORMAT);
+            try {
+                LocalDate date = LocalDate.parse(dateString, formatter);
+                if (date.isAfter(LocalDate.now())) {
+                    bindingResult.rejectValue(fieldName, ApplicationConstants.EMPTY_STRING, null, pastMessage);
+                }
+            } catch (Exception e) {
+                bindingResult.rejectValue(fieldName, ApplicationConstants.EMPTY_STRING, null, formatMessage);
+            }
+        }
     }
 
     @Override
@@ -73,6 +89,7 @@ public class ValidateTypesImpl implements ValidateTypes {
 
     @Override
     public void validatePastDateAndTime(String dateString, String fieldName, String nullMessage, String formatMessage, String pastMessage, BindingResult bindingResult) {
+
     }
 
 }

+ 73 - 0
src/test/java/scot/carricksoftware/grants/validators/helpers/ValidateTypesPastDateTest.java

@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2025.  Andrew Grant Carrick Software. All rights reserved
+ *
+ */
+
+package scot.carricksoftware.grants.validators.helpers;
+
+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.constants.ApplicationConstants;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoInteractions;
+
+
+@ExtendWith(MockitoExtension.class)
+class ValidateTypesPastDateTest {
+
+    private ValidateTypes validateTypes;
+
+    private String field;
+    private String nullMessage;
+    private String formatMessage;
+    private String pastMessage;
+
+    @Mock
+    private BindingResult bindingResultMock;
+
+    @BeforeEach
+    void setUp() {
+        validateTypes = new ValidateTypesImpl();
+        field = "field";
+        nullMessage = "null-message";
+        formatMessage = "format-message";
+        pastMessage = "past-message";
+    }
+
+    @Test
+    void inValidTest() {
+        validateTypes.validatePastDate("xx", field, nullMessage, formatMessage, pastMessage, bindingResultMock);
+        verify(bindingResultMock).rejectValue(field, ApplicationConstants.EMPTY_STRING, null, formatMessage);
+    }
+
+    @Test
+    void validTest() {
+        validateTypes.validatePastDate("25/01/1953", field, nullMessage, formatMessage, pastMessage, bindingResultMock);
+        verifyNoInteractions(bindingResultMock);
+    }
+
+    @Test
+    void nullTest() {
+        validateTypes.validatePastDate(null, field, nullMessage, formatMessage, pastMessage, bindingResultMock);
+        verify(bindingResultMock).rejectValue(field, ApplicationConstants.EMPTY_STRING, null, nullMessage);
+    }
+
+    @Test
+    void emptyTest() {
+        validateTypes.validatePastDate("  ", field, nullMessage, formatMessage, pastMessage, bindingResultMock);
+        verify(bindingResultMock).rejectValue(field, ApplicationConstants.EMPTY_STRING, null, nullMessage);
+    }
+
+    @Test
+    void pastTest() {
+        validateTypes.validatePastDate("25/01/2053", field, nullMessage, formatMessage, pastMessage, bindingResultMock);
+        verify(bindingResultMock).rejectValue(field, ApplicationConstants.EMPTY_STRING, null, pastMessage);
+    }
+
+
+}