commit
38f91ec1a1
@ -0,0 +1,25 @@ |
|||||||
|
package validators |
||||||
|
|
||||||
|
import ( |
||||||
|
"reflect" |
||||||
|
"strings" |
||||||
|
|
||||||
|
"github.com/andreiavrammsd/validator" |
||||||
|
) |
||||||
|
|
||||||
|
// NotBlank is the validation function for validating if the current field
|
||||||
|
// has a value or length greater than zero, or is not a space only string.
|
||||||
|
func NotBlank(fl validator.FieldLevel) bool { |
||||||
|
field := fl.Field() |
||||||
|
|
||||||
|
switch field.Kind() { |
||||||
|
case reflect.String: |
||||||
|
return len(strings.TrimSpace(field.String())) > 0 |
||||||
|
case reflect.Chan, reflect.Map, reflect.Slice, reflect.Array: |
||||||
|
return field.Len() > 0 |
||||||
|
case reflect.Ptr, reflect.Interface, reflect.Func: |
||||||
|
return !field.IsNil() |
||||||
|
default: |
||||||
|
return field.IsValid() && field.Interface() != reflect.Zero(field.Type()).Interface() |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,65 @@ |
|||||||
|
package validators |
||||||
|
|
||||||
|
import ( |
||||||
|
"testing" |
||||||
|
|
||||||
|
"github.com/andreiavrammsd/validator" |
||||||
|
"gopkg.in/go-playground/assert.v1" |
||||||
|
) |
||||||
|
|
||||||
|
type test struct { |
||||||
|
String string `validate:"notblank"` |
||||||
|
Array []int `validate:"notblank"` |
||||||
|
Pointer *int `validate:"notblank"` |
||||||
|
Number int `validate:"notblank"` |
||||||
|
Interface interface{} `validate:"notblank"` |
||||||
|
Func func() `validate:"notblank"` |
||||||
|
} |
||||||
|
|
||||||
|
func TestNotBlank(t *testing.T) { |
||||||
|
v := validator.New() |
||||||
|
err := v.RegisterValidation("notblank", NotBlank) |
||||||
|
assert.Equal(t, nil, err) |
||||||
|
|
||||||
|
// Errors
|
||||||
|
var x *int |
||||||
|
invalid := test{ |
||||||
|
String: " ", |
||||||
|
Array: []int{}, |
||||||
|
Pointer: x, |
||||||
|
Number: 0, |
||||||
|
Interface: nil, |
||||||
|
Func: nil, |
||||||
|
} |
||||||
|
fieldsWithError := []string{ |
||||||
|
"String", |
||||||
|
"Array", |
||||||
|
"Pointer", |
||||||
|
"Number", |
||||||
|
"Interface", |
||||||
|
"Func", |
||||||
|
} |
||||||
|
|
||||||
|
errors := v.Struct(invalid).(validator.ValidationErrors) |
||||||
|
var fields []string |
||||||
|
for _, err := range errors { |
||||||
|
fields = append(fields, err.Field()) |
||||||
|
} |
||||||
|
|
||||||
|
assert.Equal(t, fieldsWithError, fields) |
||||||
|
|
||||||
|
// No errors
|
||||||
|
y := 1 |
||||||
|
x = &y |
||||||
|
valid := test{ |
||||||
|
String: "str", |
||||||
|
Array: []int{1}, |
||||||
|
Pointer: x, |
||||||
|
Number: 1, |
||||||
|
Interface: "value", |
||||||
|
Func: func() {}, |
||||||
|
} |
||||||
|
|
||||||
|
err = v.Struct(valid) |
||||||
|
assert.Equal(t, nil, err) |
||||||
|
} |
Loading…
Reference in new issue