From 247043d8700681f77c2989f2e00f8962b9d8da05 Mon Sep 17 00:00:00 2001 From: Jake Esser Date: Tue, 5 Jul 2022 11:58:47 +0200 Subject: [PATCH 1/2] Added allowEmptyStrings option to required rule. --- .../validator/rule/RequiredRule.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/javawebstack/validator/rule/RequiredRule.java b/src/main/java/org/javawebstack/validator/rule/RequiredRule.java index f20ca60..928e356 100644 --- a/src/main/java/org/javawebstack/validator/rule/RequiredRule.java +++ b/src/main/java/org/javawebstack/validator/rule/RequiredRule.java @@ -15,13 +15,28 @@ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface RequiredRule { + boolean allowEmptyStrings() default false; + class Validator implements ValidationRule { - public Validator(RequiredRule rule) {} // needed + private final boolean allowEmptyStrings; + public Validator(RequiredRule rule) { + this.allowEmptyStrings = rule.allowEmptyStrings(); + } - public Validator() {} + public Validator(boolean allowEmptyStrings) { + this.allowEmptyStrings = allowEmptyStrings; + } + + public Validator() { + this.allowEmptyStrings = false; + } public String validate(ValidationContext context, Field field, AbstractElement value) { - return !value.isNull() ? null : "Missing required field"; + if (value.isNull()) + return "Missing required field"; + if (value.getType() == AbstractElement.Type.STRING && !allowEmptyStrings && value.string().length() == 0) + return "Missing required field"; + return null; } } } From ef779bef299c6cf93f5b3a34f98c5512d418baa4 Mon Sep 17 00:00:00 2001 From: Jake Esser Date: Tue, 5 Jul 2022 12:02:53 +0200 Subject: [PATCH 2/2] Added test with new functionality --- .../javawebstack/validator/RequiredRuleTest.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/test/java/test/org/javawebstack/validator/RequiredRuleTest.java b/src/test/java/test/org/javawebstack/validator/RequiredRuleTest.java index 6f038a5..fd7d2b2 100644 --- a/src/test/java/test/org/javawebstack/validator/RequiredRuleTest.java +++ b/src/test/java/test/org/javawebstack/validator/RequiredRuleTest.java @@ -4,6 +4,7 @@ import org.javawebstack.validator.Rule; import org.javawebstack.validator.ValidationContext; import org.javawebstack.validator.Validator; +import org.javawebstack.validator.rule.RequiredRule; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -21,6 +22,17 @@ public void testSimpleRequiredRule() { assertTrue(validator.validate(new ValidationContext(), new AbstractMapper().toAbstract(test)).isValid()); } + @Test + public void testEmptyStringOption() { + Validator validator = Validator.getValidator(TestObject1.class); + TestObject1 test = new TestObject1(); + test.name = ""; + assertFalse(validator.validate(new ValidationContext(), new AbstractMapper().toAbstract(test)).isValid()); + test.name = "Test"; + test.password = ""; + assertTrue(validator.validate(new ValidationContext(), new AbstractMapper().toAbstract(test)).isValid()); + } + @Test public void testInnerRequiredRule() { Validator validator = Validator.getValidator(TestObject2.class); @@ -36,10 +48,11 @@ public void testInnerRequiredRule() { assertTrue(validator.validate(new ValidationContext(), new AbstractMapper().toAbstract(test)).isValid()); } + private static class TestObject1 { @Rule("required") String name; - @Rule("req") + @RequiredRule(allowEmptyStrings = true) String password; }