parent
faaace938d
commit
1d286c8332
@ -0,0 +1,24 @@ |
||||
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.
|
||||
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