Merge pull request #29 from RecentRunner/desktop---validator-fixes

added null checks to validator, created a bunch of junit tests
This commit was merged in pull request #29.
This commit is contained in:
2026-03-24 20:43:54 -06:00
committed by GitHub
3 changed files with 253 additions and 5 deletions

View File

@@ -76,6 +76,14 @@
<release>25</release>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
<configuration>
<argLine>--add-opens org.example.petshopdesktop/org.example.petshopdesktop=ALL-UNNAMED</argLine>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>

View File

@@ -13,6 +13,7 @@ public class Validator {
if (value == null || value.isBlank()){
msg += name + " is required. \n";
}
return msg;
}
@@ -24,6 +25,11 @@ public class Validator {
*/
public static String isNonNegativeDouble(String value, String name){
String msg ="";
if (value == null) {
msg += name + " must be a number.\n";
return msg;
}
double result;
try {
result = Double.parseDouble(value);
@@ -34,6 +40,7 @@ public class Validator {
catch (NumberFormatException e){
msg += name + " must be a number.\n";
}
return msg;
}
@@ -47,6 +54,11 @@ public class Validator {
*/
public static String isDoubleInRange(String value, String name, double minValue, double maxValue){
String msg ="";
if (value == null) {
msg += name + " must be a number.\n";
return msg;
}
double result;
try {
result = Double.parseDouble(value);
@@ -57,6 +69,7 @@ public class Validator {
catch (NumberFormatException e){
msg += name + " must be a number.\n";
}
return msg;
}
@@ -78,6 +91,7 @@ public class Validator {
catch (NumberFormatException e){
msg += name + " must be a whole number.\n";
}
return msg;
}
@@ -90,9 +104,10 @@ public class Validator {
*/
public static String isLessThanVarChars(String value, String name, int length){
String msg ="";
if (value.length() > length){
if (value == null || value.length() > length){
msg += name + " must be less than " + length + " characters. \n";
}
return msg;
}
@@ -104,11 +119,17 @@ public class Validator {
*/
public static String isValidEmail(String value, String name){
String msg = "";
if (value == null) {
msg += name + " is not in a valid format. \n";
return msg;
}
String regex = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$";
if (!value.matches(regex)){
msg += name + " is not in a valid format. \n";
}
return msg;
}
@@ -120,11 +141,17 @@ public class Validator {
*/
public static String isValidPhoneNumber(String value, String name){
String msg = "";
if (value == null) {
msg += name + " must be in format XXX-XXX-XXXX. \n";
return msg;
}
String regex = "^\\d{3}-\\d{3}-\\d{4}$";
if (!value.matches(regex)){
msg += name + " must be in format XXX-XXX-XXXX. \n";
}
return msg;
}
}

View File

@@ -0,0 +1,213 @@
//Validator JUnits tests
package org.example.petshopdesktop;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class ValidatorTest {
//isPresent
@Test
void isPresent_nullValue_returnsError() {
String result = Validator.isPresent(null, "Name");
assertFalse(result.isEmpty(), "null value should produce an error message");
}
@Test
void isPresent_blankValue_returnsError() {
assertFalse(Validator.isPresent(" ", "Name").isEmpty());
}
@Test
void isPresent_emptyString_returnsError() {
assertFalse(Validator.isPresent("", "Name").isEmpty());
}
@Test
void isPresent_validValue_returnsEmpty() {
assertTrue(Validator.isPresent("Leon", "Name").isEmpty());
}
//isNonNegativeDouble
@Test
void isNonNegativeDouble_positiveValue_returnsEmpty() {
assertTrue(Validator.isNonNegativeDouble("5.5", "Price").isEmpty());
}
@Test
void isNonNegativeDouble_zero_returnsEmpty() {
assertTrue(Validator.isNonNegativeDouble("0", "Price").isEmpty());
}
@Test
void isNonNegativeDouble_negativeValue_returnsError() {
assertFalse(Validator.isNonNegativeDouble("-1.0", "Price").isEmpty());
}
@Test
void isNonNegativeDouble_nonNumeric_returnsError() {
assertFalse(Validator.isNonNegativeDouble("abc", "Price").isEmpty());
}
@Test
void isNonNegativeDouble_nullInput_returnsError() {
assertFalse(Validator.isNonNegativeDouble(null, "Price").isEmpty());
}
//isDoubleInRange
@Test
void isDoubleInRange_withinRange_returnsEmpty() {
assertTrue(Validator.isDoubleInRange("5.0", "Discount", 0.0, 10.0).isEmpty());
}
@Test
void isDoubleInRange_atMinBoundary_returnsEmpty() {
assertTrue(Validator.isDoubleInRange("0.0", "Discount", 0.0, 10.0).isEmpty());
}
@Test
void isDoubleInRange_atMaxBoundary_returnsEmpty() {
assertTrue(Validator.isDoubleInRange("10.0", "Discount", 0.0, 10.0).isEmpty());
}
@Test
void isDoubleInRange_belowMin_returnsError() {
assertFalse(Validator.isDoubleInRange("-1.0", "Discount", 0.0, 10.0).isEmpty());
}
@Test
void isDoubleInRange_aboveMax_returnsError() {
assertFalse(Validator.isDoubleInRange("11.0", "Discount", 0.0, 10.0).isEmpty());
}
@Test
void isDoubleInRange_nonNumeric_returnsError() {
assertFalse(Validator.isDoubleInRange("abc", "Discount", 0.0, 10.0).isEmpty());
}
@Test
void isDoubleInRange_nullInput_returnsError() {
assertFalse(Validator.isDoubleInRange(null, "Discount", 0.0, 10.0).isEmpty());
}
//isNonNegativeInteger
@Test
void isNonNegativeInteger_positiveValue_returnsEmpty() {
assertTrue(Validator.isNonNegativeInteger("10", "Quantity").isEmpty());
}
@Test
void isNonNegativeInteger_zero_returnsEmpty() {
assertTrue(Validator.isNonNegativeInteger("0", "Quantity").isEmpty());
}
@Test
void isNonNegativeInteger_negativeValue_returnsError() {
assertFalse(Validator.isNonNegativeInteger("-1", "Quantity").isEmpty());
}
@Test
void isNonNegativeInteger_decimal_returnsError() {
assertFalse(Validator.isNonNegativeInteger("1.5", "Quantity").isEmpty());
}
@Test
void isNonNegativeInteger_nonNumeric_returnsError() {
assertFalse(Validator.isNonNegativeInteger("abc", "Quantity").isEmpty());
}
@Test
void isNonNegativeInteger_nullInput_returnsError() {
assertFalse(Validator.isNonNegativeInteger(null, "Quantity").isEmpty());
}
//isLessThanVarChars
@Test
void isLessThanVarChars_withinLimit_returnsEmpty() {
assertTrue(Validator.isLessThanVarChars("Hello", "Name", 10).isEmpty());
}
@Test
void isLessThanVarChars_exactlyAtLimit_returnsEmpty() {
assertTrue(Validator.isLessThanVarChars("Hello", "Name", 5).isEmpty());
}
@Test
void isLessThanVarChars_exceedsLimit_returnsError() {
assertFalse(Validator.isLessThanVarChars("Hello World", "Name", 5).isEmpty());
}
@Test
void isLessThanVarChars_nullInput_returnsError() {
assertFalse(Validator.isLessThanVarChars(null, "Name", 10).isEmpty());
}
@Test
void isLessThanVarChars_emptyString_returnsEmpty() {
assertTrue(Validator.isLessThanVarChars("", "Name", 5).isEmpty());
}
//isValidEmail
@Test
void isValidEmail_validEmail_returnsEmpty() {
assertTrue(Validator.isValidEmail("user@example.com", "Email").isEmpty());
}
@Test
void isValidEmail_missingAtSign_returnsError() {
assertFalse(Validator.isValidEmail("userexample.com", "Email").isEmpty());
}
@Test
void isValidEmail_missingDomain_returnsError() {
assertFalse(Validator.isValidEmail("user@", "Email").isEmpty());
}
@Test
void isValidEmail_shortTld_returnsError() {
assertFalse(Validator.isValidEmail("user@example.c", "Email").isEmpty());
}
@Test
void isValidEmail_nullInput_returnsError() {
assertFalse(Validator.isValidEmail(null, "Email").isEmpty());
}
@Test
void isValidEmail_emptyString_returnsError() {
assertFalse(Validator.isValidEmail("", "Email").isEmpty());
}
//isValidPhoneNumber
@Test
void isValidPhoneNumber_validFormat_returnsEmpty() {
assertTrue(Validator.isValidPhoneNumber("403-555-1234", "Phone").isEmpty());
}
@Test
void isValidPhoneNumber_missingDashes_returnsError() {
assertFalse(Validator.isValidPhoneNumber("4035551234", "Phone").isEmpty());
}
@Test
void isValidPhoneNumber_lettersPresent_returnsError() {
assertFalse(Validator.isValidPhoneNumber("abc-def-ghij", "Phone").isEmpty());
}
@Test
void isValidPhoneNumber_wrongSegmentLength_returnsError() {
assertFalse(Validator.isValidPhoneNumber("40-5551-234", "Phone").isEmpty());
}
@Test
void isValidPhoneNumber_nullInput_returnsError() {
assertFalse(Validator.isValidPhoneNumber(null, "Phone").isEmpty());
}
@Test
void isValidPhoneNumber_emptyString_returnsError() {
assertFalse(Validator.isValidPhoneNumber("", "Phone").isEmpty());
}
}