-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample_test.go
88 lines (74 loc) · 2.88 KB
/
example_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package validator_test
import (
"fmt"
"github.com/marksalpeter/validator"
)
func ExampleValidator() {
type User struct {
FirstName string `json:"firstName,omitempty" validate:"name"` // FirstName cannot contain numbers or special characters
LastName string `json:"lastName,omitempty" validate:"name"` // LastName cannot contain numbers or special characters
EmailAddress string `json:"emailAddress,omitempty" validate:"email"` // EmailAddress must be a valid email address
PhoneNumber string `json:"phoneNumber,omitempty" validate:"number:11,15"` // PhoneNumber must be 11-15 numbers e.g 15551234567
}
// displays all validation errors
var user User
v := validator.New()
if err := v.Validate(&user); err != nil {
fmt.Println(err) // prints ["'firstName' must be a valid name","'lastName' must be a valid name","'emailAddress' must be a valid email address","'phoneNumber' must contain only numbers"]
}
// set the properties
user.FirstName = "First"
user.LastName = "Last"
user.EmailAddress = "[email protected]"
user.PhoneNumber = "15551234567"
if err := v.Validate(&user); err != nil {
panic(err)
}
fmt.Println("user data is valid!")
// Output:
// ["'firstName' must be a valid name","'lastName' must be a valid name","'emailAddress' must be a valid email address","'phoneNumber' must contain only numbers"]
// user data is valid!
}
func ExampleXOR() {
// User can either set name or firstName and lastName
type User struct {
Name string `json:"name,omitempty" validate:"name | or:FirstName,LastName"`
FirstName string `json:"firstName,omitempty" validate:"empty | (name & and:LastName)"`
LastName string `json:"lastName,omitempty" validate:"empty | (name & and:FirstName)"`
}
var user User
v := validator.New()
// empty struct fails on `or:FirstName,LastName`
if err := v.Validate(&user); err != nil {
fmt.Println(err) // prints ["either 'name', 'firstName' and/or 'lastName' must be set"]
}
// only first name fails on `(name & and:LastName)`
user.FirstName = "First"
user.LastName = ""
if err := v.Validate(&user); err != nil {
fmt.Println(err) // prints ["'firstName' and 'lastName' must be set"]
}
// only last name fails on (name & and:FirstName)
user.FirstName = ""
user.LastName = "Last"
if err := v.Validate(&user); err != nil {
fmt.Println(err) // prints ["'lastName' and 'firstName' must be set"]
}
// first and last name are set first name passes
user.FirstName = "First"
user.LastName = "Last"
if err := v.Validate(&user); err != nil {
fmt.Println(err) // never reached
}
// name passes
user.Name = "First Last"
user.FirstName = ""
user.LastName = ""
if err := v.Validate(&user); err != nil {
fmt.Println(err) // never reached
}
// Output:
// ["either 'name', 'firstName' and/or 'lastName' must be set"]
// ["'firstName' and 'lastName' must be set"]
// ["'lastName' and 'firstName' must be set"]
}