From d9f22a26bec8bfa476f72e2d7ba11d9c30f58bd8 Mon Sep 17 00:00:00 2001 From: JohnElnaugh Date: Fri, 26 Jan 2024 21:39:28 +0000 Subject: [PATCH] wip: tests and optimisation --- rules.go | 22 ++++++++++ validator.go | 4 +- validator_test.go | 108 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 131 insertions(+), 3 deletions(-) diff --git a/rules.go b/rules.go index 61b6ca5..f208324 100644 --- a/rules.go +++ b/rules.go @@ -127,3 +127,25 @@ func Regex(pattern string) *RuleConfig { }, } } + +func IsAlpha() *RuleConfig { + return &RuleConfig{ + MessageFunc: func(r RuleConfig) string { + return fmt.Sprintf("'%s' is not alphabetic", r.Value) + }, + ValidateFunc: func(r RuleConfig) bool { + return regexp.MustCompile(`^[a-zA-Z]+$`).MatchString(r.Value.(string)) + }, + } +} + +func IsAlphaNumeric() *RuleConfig { + return &RuleConfig{ + MessageFunc: func(r RuleConfig) string { + return fmt.Sprintf("'%s' is not alphanumeric", r.Value) + }, + ValidateFunc: func(r RuleConfig) bool { + return regexp.MustCompile(`^[a-zA-Z0-9]+$`).MatchString(r.Value.(string)) + }, + } +} diff --git a/validator.go b/validator.go index 06ecd75..b1d7f74 100644 --- a/validator.go +++ b/validator.go @@ -76,9 +76,7 @@ func (r *MultipleRules) Validate() *ValidationResult { res := &ValidationResult{} for _, rule := range *r { - for _, err := range rule.Validate().Errors { - res.Errors = append(res.Errors, err) - } + res.Errors = append(res.Errors, rule.Validate().Errors...) } return res diff --git a/validator_test.go b/validator_test.go index 8bc04a1..49f5485 100644 --- a/validator_test.go +++ b/validator_test.go @@ -196,3 +196,111 @@ func Test_RegexWithInvalidValue_ReturnsFalse(t *testing.T) { assert.Equal(t, false, rule.Validate().IsValid()) } + +func Test_RegexWithInvalidValueAndCustomMessage_ReturnsFalse(t *testing.T) { + + user := User{ + Firstname: "john", + } + + rule := validator.RuleFor(user.Firstname, validator.Regex("^[0-9]+$").WithMessage("Only numbers allowed")) + + assert.Equal(t, false, rule.Validate().IsValid()) + +} + +func Test_RegexWithInvalidValueAndCustomMessage_ReturnsCustomMessage(t *testing.T) { + + user := User{ + Firstname: "john", + } + + rule := validator.RuleFor(user.Firstname, validator.Regex("^[0-9]+$").WithMessage("Only numbers allowed")) + + assert.Equal(t, "Only numbers allowed", rule.Validate().Errors[0].Error()) + +} + +func Test_RegexWithValidValueAndCustomMessage_ReturnsTrue(t *testing.T) { + + user := User{ + Firstname: "john", + } + + rule := validator.RuleFor(user.Firstname, validator.Regex("^[a-z]+$").WithMessage("Only letters allowed")) + + assert.Equal(t, true, rule.Validate().IsValid()) + +} + +func Test_IsAlphaWithValidValue_ReturnsTrue(t *testing.T) { + + user := User{ + Firstname: "john", + } + + rule := validator.RuleFor(user.Firstname, validator.IsAlpha()) + + assert.Equal(t, true, rule.Validate().IsValid()) + +} + +func Test_IsAlphaWithInvalidValue_ReturnsFalse(t *testing.T) { + + user := User{ + Firstname: "21", + } + + rule := validator.RuleFor(user.Age, validator.IsAlpha()) + + assert.Equal(t, false, rule.Validate().IsValid()) + +} + +func Test_IsAlphaNumericWithValidValue_ReturnsTrue(t *testing.T) { + + user := User{ + Firstname: "john21", + } + + rule := validator.RuleFor(user.Firstname, validator.IsAlphaNumeric()) + + assert.Equal(t, true, rule.Validate().IsValid()) + +} + +func Test_IsAlphaNumericWithInvalidValue_ReturnsFalse(t *testing.T) { + + user := User{ + Firstname: "john21!", + } + + rule := validator.RuleFor(user.Firstname, validator.IsAlphaNumeric()) + + assert.Equal(t, false, rule.Validate().IsValid()) + +} + +func Test_IsAlphaNumericWithInvalidValueAndCustomMessage_ReturnsFalse(t *testing.T) { + + user := User{ + Firstname: "john21!", + } + + rule := validator.RuleFor(user.Firstname, validator.IsAlphaNumeric().WithMessage("Only letters and numbers allowed")) + + assert.Equal(t, false, rule.Validate().IsValid()) + +} + +func Test_IsAlphaNumericWithInvalidValueAndCustomMessage_ReturnsCustomMessage(t *testing.T) { + + user := User{ + Firstname: "john21!", + } + + rule := validator.RuleFor(user.Firstname, validator.IsAlphaNumeric().WithMessage("Only letters and numbers allowed")) + + assert.Equal(t, "Only letters and numbers allowed", rule.Validate().Errors[0].Error()) + +}