Compare commits
1 Commits
master
...
updates-an
Author | SHA1 | Date |
---|---|---|
Dean Karn | 8e998f7f22 | 5 years ago |
@ -1 +0,0 @@ |
|||||||
* @go-playground/validator-maintainers |
|
@ -1,7 +1,13 @@ |
|||||||
## Fixes Or Enhances |
Fixes Or Enhances # . |
||||||
|
|
||||||
|
|
||||||
**Make sure that you've checked the boxes below before you submit PR:** |
**Make sure that you've checked the boxes below before you submit PR:** |
||||||
- [ ] Tests exist or have been written that cover this particular change. |
- [ ] Tests exist or have been written that cover this particular change. |
||||||
|
|
||||||
@go-playground/validator-maintainers |
Change Details: |
||||||
|
|
||||||
|
- |
||||||
|
- |
||||||
|
- |
||||||
|
|
||||||
|
|
||||||
|
@go-playground/admins |
@ -1,51 +0,0 @@ |
|||||||
on: |
|
||||||
push: |
|
||||||
branches: |
|
||||||
- master |
|
||||||
pull_request: |
|
||||||
name: Test |
|
||||||
jobs: |
|
||||||
test: |
|
||||||
strategy: |
|
||||||
matrix: |
|
||||||
go-version: [1.19.x] |
|
||||||
os: [ubuntu-latest, macos-latest, windows-latest] |
|
||||||
runs-on: ${{ matrix.os }} |
|
||||||
steps: |
|
||||||
- name: Install Go |
|
||||||
uses: actions/setup-go@v3 |
|
||||||
with: |
|
||||||
go-version: ${{ matrix.go-version }} |
|
||||||
|
|
||||||
- name: Checkout code |
|
||||||
uses: actions/checkout@v3 |
|
||||||
|
|
||||||
- name: Restore Cache |
|
||||||
uses: actions/cache@v3 |
|
||||||
with: |
|
||||||
path: ~/go/pkg/mod |
|
||||||
key: ${{ runner.os }}-v1-go-${{ hashFiles('**/go.sum') }} |
|
||||||
restore-keys: | |
|
||||||
${{ runner.os }}-v1-go- |
|
||||||
|
|
||||||
- name: Test |
|
||||||
run: go test -race -covermode=atomic -coverprofile="profile.cov" ./... |
|
||||||
|
|
||||||
- name: Send Coverage |
|
||||||
if: matrix.os == 'ubuntu-latest' && matrix.go-version == '1.19.x' |
|
||||||
uses: shogo82148/actions-goveralls@v1 |
|
||||||
with: |
|
||||||
path-to-profile: profile.cov |
|
||||||
|
|
||||||
golangci: |
|
||||||
name: lint |
|
||||||
runs-on: ubuntu-latest |
|
||||||
steps: |
|
||||||
- uses: actions/setup-go@v3 |
|
||||||
with: |
|
||||||
go-version: 1.19.x |
|
||||||
- uses: actions/checkout@v3 |
|
||||||
- name: golangci-lint |
|
||||||
uses: golangci/golangci-lint-action@v3 |
|
||||||
with: |
|
||||||
version: v1.50.1 |
|
@ -1,16 +0,0 @@ |
|||||||
## Maintainers Guide |
|
||||||
|
|
||||||
### Semantic Versioning |
|
||||||
Semantic versioning as defined [here](https://semver.org) must be strictly adhered to. |
|
||||||
|
|
||||||
### External Dependencies |
|
||||||
Any new external dependencies MUST: |
|
||||||
- Have a compatible LICENSE present. |
|
||||||
- Be actively maintained. |
|
||||||
- Be approved by @go-playground/admins |
|
||||||
|
|
||||||
### PR Merge Requirements |
|
||||||
- Up-to-date branch. |
|
||||||
- Passing tests and linting. |
|
||||||
- CODEOWNERS approval. |
|
||||||
- Tests that cover both the Happy and Unhappy paths. |
|
@ -1,87 +0,0 @@ |
|||||||
package main |
|
||||||
|
|
||||||
import ( |
|
||||||
"fmt" |
|
||||||
"github.com/go-playground/validator/v10" |
|
||||||
) |
|
||||||
|
|
||||||
var validate *validator.Validate |
|
||||||
|
|
||||||
func main() { |
|
||||||
validate = validator.New() |
|
||||||
|
|
||||||
validateMap() |
|
||||||
validateNestedMap() |
|
||||||
} |
|
||||||
|
|
||||||
func validateMap() { |
|
||||||
user := map[string]interface{}{"name": "Arshiya Kiani", "email": "zytel3301@gmail.com"} |
|
||||||
|
|
||||||
// Every rule will be applied to the item of the data that the offset of rule is pointing to.
|
|
||||||
// So if you have a field "email": "omitempty,required,email", the validator will apply these
|
|
||||||
// rules to offset of email in user data
|
|
||||||
rules := map[string]interface{}{"name": "required,min=8,max=32", "email": "omitempty,required,email"} |
|
||||||
|
|
||||||
// ValidateMap will return map[string]error.
|
|
||||||
// The offset of every item in errs is the name of invalid field and the value
|
|
||||||
// is the message of error. If there was no error, ValidateMap method will
|
|
||||||
// return an EMPTY map of errors, not nil. If you want to check that
|
|
||||||
// if there was an error or not, you must check the length of the return value
|
|
||||||
errs := validate.ValidateMap(user, rules) |
|
||||||
|
|
||||||
if len(errs) > 0 { |
|
||||||
fmt.Println(errs) |
|
||||||
// The user is invalid
|
|
||||||
} |
|
||||||
|
|
||||||
// The user is valid
|
|
||||||
} |
|
||||||
|
|
||||||
func validateNestedMap() { |
|
||||||
|
|
||||||
data := map[string]interface{}{ |
|
||||||
"name": "Arshiya Kiani", |
|
||||||
"email": "zytel3301@gmail.com", |
|
||||||
"details": map[string]interface{}{ |
|
||||||
"family_members": map[string]interface{}{ |
|
||||||
"father_name": "Micheal", |
|
||||||
"mother_name": "Hannah", |
|
||||||
}, |
|
||||||
"salary": "1000", |
|
||||||
"phones": []map[string]interface{}{ |
|
||||||
{ |
|
||||||
"number": "11-111-1111", |
|
||||||
"remark": "home", |
|
||||||
}, |
|
||||||
{ |
|
||||||
"number": "22-222-2222", |
|
||||||
"remark": "work", |
|
||||||
}, |
|
||||||
}, |
|
||||||
}, |
|
||||||
} |
|
||||||
|
|
||||||
// Rules must be set as the structure as the data itself. If you want to dive into the
|
|
||||||
// map, just declare its rules as a map
|
|
||||||
rules := map[string]interface{}{ |
|
||||||
"name": "min=4,max=32", |
|
||||||
"email": "required,email", |
|
||||||
"details": map[string]interface{}{ |
|
||||||
"family_members": map[string]interface{}{ |
|
||||||
"father_name": "required,min=4,max=32", |
|
||||||
"mother_name": "required,min=4,max=32", |
|
||||||
}, |
|
||||||
"salary": "number", |
|
||||||
"phones": map[string]interface{}{ |
|
||||||
"number": "required,min=4,max=32", |
|
||||||
"remark": "required,min=1,max=32", |
|
||||||
}, |
|
||||||
}, |
|
||||||
} |
|
||||||
|
|
||||||
if len(validate.ValidateMap(data, rules)) == 0 { |
|
||||||
// Data is valid
|
|
||||||
} |
|
||||||
|
|
||||||
// Data is invalid
|
|
||||||
} |
|
@ -1,92 +0,0 @@ |
|||||||
package main |
|
||||||
|
|
||||||
import ( |
|
||||||
"fmt" |
|
||||||
"github.com/go-playground/validator/v10" |
|
||||||
) |
|
||||||
|
|
||||||
type Data struct { |
|
||||||
Name string |
|
||||||
Email string |
|
||||||
Details *Details |
|
||||||
} |
|
||||||
|
|
||||||
type Details struct { |
|
||||||
FamilyMembers *FamilyMembers |
|
||||||
Salary string |
|
||||||
} |
|
||||||
|
|
||||||
type FamilyMembers struct { |
|
||||||
FatherName string |
|
||||||
MotherName string |
|
||||||
} |
|
||||||
|
|
||||||
type Data2 struct { |
|
||||||
Name string |
|
||||||
Age uint32 |
|
||||||
} |
|
||||||
|
|
||||||
var validate = validator.New() |
|
||||||
|
|
||||||
func main() { |
|
||||||
validateStruct() |
|
||||||
// output
|
|
||||||
// Key: 'Data2.Name' Error:Field validation for 'Name' failed on the 'min' tag
|
|
||||||
// Key: 'Data2.Age' Error:Field validation for 'Age' failed on the 'max' tag
|
|
||||||
|
|
||||||
validateStructNested() |
|
||||||
// output
|
|
||||||
// Key: 'Data.Name' Error:Field validation for 'Name' failed on the 'max' tag
|
|
||||||
// Key: 'Data.Details.FamilyMembers' Error:Field validation for 'FamilyMembers' failed on the 'required' tag
|
|
||||||
} |
|
||||||
|
|
||||||
func validateStruct() { |
|
||||||
data := Data2{ |
|
||||||
Name: "leo", |
|
||||||
Age: 1000, |
|
||||||
} |
|
||||||
|
|
||||||
rules := map[string]string{ |
|
||||||
"Name": "min=4,max=6", |
|
||||||
"Age": "min=4,max=6", |
|
||||||
} |
|
||||||
|
|
||||||
validate.RegisterStructValidationMapRules(rules, Data2{}) |
|
||||||
|
|
||||||
err := validate.Struct(data) |
|
||||||
fmt.Println(err) |
|
||||||
fmt.Println() |
|
||||||
} |
|
||||||
|
|
||||||
func validateStructNested() { |
|
||||||
data := Data{ |
|
||||||
Name: "11sdfddd111", |
|
||||||
Email: "zytel3301@mail.com", |
|
||||||
Details: &Details{ |
|
||||||
Salary: "1000", |
|
||||||
}, |
|
||||||
} |
|
||||||
|
|
||||||
rules1 := map[string]string{ |
|
||||||
"Name": "min=4,max=6", |
|
||||||
"Email": "required,email", |
|
||||||
"Details": "required", |
|
||||||
} |
|
||||||
|
|
||||||
rules2 := map[string]string{ |
|
||||||
"Salary": "number", |
|
||||||
"FamilyMembers": "required", |
|
||||||
} |
|
||||||
|
|
||||||
rules3 := map[string]string{ |
|
||||||
"FatherName": "required,min=4,max=32", |
|
||||||
"MotherName": "required,min=4,max=32", |
|
||||||
} |
|
||||||
|
|
||||||
validate.RegisterStructValidationMapRules(rules1, Data{}) |
|
||||||
validate.RegisterStructValidationMapRules(rules2, Details{}) |
|
||||||
validate.RegisterStructValidationMapRules(rules3, FamilyMembers{}) |
|
||||||
err := validate.Struct(data) |
|
||||||
|
|
||||||
fmt.Println(err) |
|
||||||
} |
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,79 +0,0 @@ |
|||||||
package validator |
|
||||||
|
|
||||||
var iso4217 = map[string]bool{ |
|
||||||
"AFN": true, "EUR": true, "ALL": true, "DZD": true, "USD": true, |
|
||||||
"AOA": true, "XCD": true, "ARS": true, "AMD": true, "AWG": true, |
|
||||||
"AUD": true, "AZN": true, "BSD": true, "BHD": true, "BDT": true, |
|
||||||
"BBD": true, "BYN": true, "BZD": true, "XOF": true, "BMD": true, |
|
||||||
"INR": true, "BTN": true, "BOB": true, "BOV": true, "BAM": true, |
|
||||||
"BWP": true, "NOK": true, "BRL": true, "BND": true, "BGN": true, |
|
||||||
"BIF": true, "CVE": true, "KHR": true, "XAF": true, "CAD": true, |
|
||||||
"KYD": true, "CLP": true, "CLF": true, "CNY": true, "COP": true, |
|
||||||
"COU": true, "KMF": true, "CDF": true, "NZD": true, "CRC": true, |
|
||||||
"HRK": true, "CUP": true, "CUC": true, "ANG": true, "CZK": true, |
|
||||||
"DKK": true, "DJF": true, "DOP": true, "EGP": true, "SVC": true, |
|
||||||
"ERN": true, "SZL": true, "ETB": true, "FKP": true, "FJD": true, |
|
||||||
"XPF": true, "GMD": true, "GEL": true, "GHS": true, "GIP": true, |
|
||||||
"GTQ": true, "GBP": true, "GNF": true, "GYD": true, "HTG": true, |
|
||||||
"HNL": true, "HKD": true, "HUF": true, "ISK": true, "IDR": true, |
|
||||||
"XDR": true, "IRR": true, "IQD": true, "ILS": true, "JMD": true, |
|
||||||
"JPY": true, "JOD": true, "KZT": true, "KES": true, "KPW": true, |
|
||||||
"KRW": true, "KWD": true, "KGS": true, "LAK": true, "LBP": true, |
|
||||||
"LSL": true, "ZAR": true, "LRD": true, "LYD": true, "CHF": true, |
|
||||||
"MOP": true, "MKD": true, "MGA": true, "MWK": true, "MYR": true, |
|
||||||
"MVR": true, "MRU": true, "MUR": true, "XUA": true, "MXN": true, |
|
||||||
"MXV": true, "MDL": true, "MNT": true, "MAD": true, "MZN": true, |
|
||||||
"MMK": true, "NAD": true, "NPR": true, "NIO": true, "NGN": true, |
|
||||||
"OMR": true, "PKR": true, "PAB": true, "PGK": true, "PYG": true, |
|
||||||
"PEN": true, "PHP": true, "PLN": true, "QAR": true, "RON": true, |
|
||||||
"RUB": true, "RWF": true, "SHP": true, "WST": true, "STN": true, |
|
||||||
"SAR": true, "RSD": true, "SCR": true, "SLL": true, "SGD": true, |
|
||||||
"XSU": true, "SBD": true, "SOS": true, "SSP": true, "LKR": true, |
|
||||||
"SDG": true, "SRD": true, "SEK": true, "CHE": true, "CHW": true, |
|
||||||
"SYP": true, "TWD": true, "TJS": true, "TZS": true, "THB": true, |
|
||||||
"TOP": true, "TTD": true, "TND": true, "TRY": true, "TMT": true, |
|
||||||
"UGX": true, "UAH": true, "AED": true, "USN": true, "UYU": true, |
|
||||||
"UYI": true, "UYW": true, "UZS": true, "VUV": true, "VES": true, |
|
||||||
"VND": true, "YER": true, "ZMW": true, "ZWL": true, "XBA": true, |
|
||||||
"XBB": true, "XBC": true, "XBD": true, "XTS": true, "XXX": true, |
|
||||||
"XAU": true, "XPD": true, "XPT": true, "XAG": true, |
|
||||||
} |
|
||||||
|
|
||||||
var iso4217_numeric = map[int]bool{ |
|
||||||
8: true, 12: true, 32: true, 36: true, 44: true, |
|
||||||
48: true, 50: true, 51: true, 52: true, 60: true, |
|
||||||
64: true, 68: true, 72: true, 84: true, 90: true, |
|
||||||
96: true, 104: true, 108: true, 116: true, 124: true, |
|
||||||
132: true, 136: true, 144: true, 152: true, 156: true, |
|
||||||
170: true, 174: true, 188: true, 191: true, 192: true, |
|
||||||
203: true, 208: true, 214: true, 222: true, 230: true, |
|
||||||
232: true, 238: true, 242: true, 262: true, 270: true, |
|
||||||
292: true, 320: true, 324: true, 328: true, 332: true, |
|
||||||
340: true, 344: true, 348: true, 352: true, 356: true, |
|
||||||
360: true, 364: true, 368: true, 376: true, 388: true, |
|
||||||
392: true, 398: true, 400: true, 404: true, 408: true, |
|
||||||
410: true, 414: true, 417: true, 418: true, 422: true, |
|
||||||
426: true, 430: true, 434: true, 446: true, 454: true, |
|
||||||
458: true, 462: true, 480: true, 484: true, 496: true, |
|
||||||
498: true, 504: true, 512: true, 516: true, 524: true, |
|
||||||
532: true, 533: true, 548: true, 554: true, 558: true, |
|
||||||
566: true, 578: true, 586: true, 590: true, 598: true, |
|
||||||
600: true, 604: true, 608: true, 634: true, 643: true, |
|
||||||
646: true, 654: true, 682: true, 690: true, 694: true, |
|
||||||
702: true, 704: true, 706: true, 710: true, 728: true, |
|
||||||
748: true, 752: true, 756: true, 760: true, 764: true, |
|
||||||
776: true, 780: true, 784: true, 788: true, 800: true, |
|
||||||
807: true, 818: true, 826: true, 834: true, 840: true, |
|
||||||
858: true, 860: true, 882: true, 886: true, 901: true, |
|
||||||
927: true, 928: true, 929: true, 930: true, 931: true, |
|
||||||
932: true, 933: true, 934: true, 936: true, 938: true, |
|
||||||
940: true, 941: true, 943: true, 944: true, 946: true, |
|
||||||
947: true, 948: true, 949: true, 950: true, 951: true, |
|
||||||
952: true, 953: true, 955: true, 956: true, 957: true, |
|
||||||
958: true, 959: true, 960: true, 961: true, 962: true, |
|
||||||
963: true, 964: true, 965: true, 967: true, 968: true, |
|
||||||
969: true, 970: true, 971: true, 972: true, 973: true, |
|
||||||
975: true, 976: true, 977: true, 978: true, 979: true, |
|
||||||
980: true, 981: true, 984: true, 985: true, 986: true, |
|
||||||
990: true, 994: true, 997: true, 999: true, |
|
||||||
} |
|
@ -0,0 +1,83 @@ |
|||||||
|
package validator_test |
||||||
|
|
||||||
|
// import (
|
||||||
|
// "fmt"
|
||||||
|
|
||||||
|
// "gopkg.in/go-playground/validator.v8"
|
||||||
|
// )
|
||||||
|
|
||||||
|
// func ExampleValidate_new() {
|
||||||
|
// config := &validator.Config{TagName: "validate"}
|
||||||
|
|
||||||
|
// validator.New(config)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// func ExampleValidate_field() {
|
||||||
|
// // This should be stored somewhere globally
|
||||||
|
// var validate *validator.Validate
|
||||||
|
|
||||||
|
// config := &validator.Config{TagName: "validate"}
|
||||||
|
|
||||||
|
// validate = validator.New(config)
|
||||||
|
|
||||||
|
// i := 0
|
||||||
|
// errs := validate.Field(i, "gt=1,lte=10")
|
||||||
|
// err := errs.(validator.ValidationErrors)[""]
|
||||||
|
// fmt.Println(err.Field)
|
||||||
|
// fmt.Println(err.Tag)
|
||||||
|
// fmt.Println(err.Kind) // NOTE: Kind and Type can be different i.e. time Kind=struct and Type=time.Time
|
||||||
|
// fmt.Println(err.Type)
|
||||||
|
// fmt.Println(err.Param)
|
||||||
|
// fmt.Println(err.Value)
|
||||||
|
// //Output:
|
||||||
|
// //
|
||||||
|
// //gt
|
||||||
|
// //int
|
||||||
|
// //int
|
||||||
|
// //1
|
||||||
|
// //0
|
||||||
|
// }
|
||||||
|
|
||||||
|
// func ExampleValidate_struct() {
|
||||||
|
// // This should be stored somewhere globally
|
||||||
|
// var validate *validator.Validate
|
||||||
|
|
||||||
|
// config := &validator.Config{TagName: "validate"}
|
||||||
|
|
||||||
|
// validate = validator.New(config)
|
||||||
|
|
||||||
|
// type ContactInformation struct {
|
||||||
|
// Phone string `validate:"required"`
|
||||||
|
// Street string `validate:"required"`
|
||||||
|
// City string `validate:"required"`
|
||||||
|
// }
|
||||||
|
|
||||||
|
// type User struct {
|
||||||
|
// Name string `validate:"required,excludesall=!@#$%^&*()_+-=:;?/0x2C"` // 0x2C = comma (,)
|
||||||
|
// Age int8 `validate:"required,gt=0,lt=150"`
|
||||||
|
// Email string `validate:"email"`
|
||||||
|
// ContactInformation []*ContactInformation
|
||||||
|
// }
|
||||||
|
|
||||||
|
// contactInfo := &ContactInformation{
|
||||||
|
// Street: "26 Here Blvd.",
|
||||||
|
// City: "Paradeso",
|
||||||
|
// }
|
||||||
|
|
||||||
|
// user := &User{
|
||||||
|
// Name: "Joey Bloggs",
|
||||||
|
// Age: 31,
|
||||||
|
// Email: "joeybloggs@gmail.com",
|
||||||
|
// ContactInformation: []*ContactInformation{contactInfo},
|
||||||
|
// }
|
||||||
|
|
||||||
|
// errs := validate.Struct(user)
|
||||||
|
// for _, v := range errs.(validator.ValidationErrors) {
|
||||||
|
// fmt.Println(v.Field) // Phone
|
||||||
|
// fmt.Println(v.Tag) // required
|
||||||
|
// //... and so forth
|
||||||
|
// //Output:
|
||||||
|
// //Phone
|
||||||
|
// //required
|
||||||
|
// }
|
||||||
|
// }
|
@ -1,14 +0,0 @@ |
|||||||
module github.com/go-playground/validator/v10 |
|
||||||
|
|
||||||
go 1.18 |
|
||||||
|
|
||||||
require ( |
|
||||||
github.com/go-playground/assert/v2 v2.2.0 |
|
||||||
github.com/go-playground/locales v0.14.1 |
|
||||||
github.com/go-playground/universal-translator v0.18.1 |
|
||||||
github.com/leodido/go-urn v1.2.2 |
|
||||||
golang.org/x/crypto v0.7.0 |
|
||||||
golang.org/x/text v0.8.0 |
|
||||||
) |
|
||||||
|
|
||||||
require golang.org/x/sys v0.6.0 // indirect |
|
@ -1,31 +0,0 @@ |
|||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= |
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= |
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= |
|
||||||
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= |
|
||||||
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= |
|
||||||
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= |
|
||||||
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= |
|
||||||
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= |
|
||||||
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= |
|
||||||
github.com/leodido/go-urn v1.2.2 h1:7z68G0FCGvDk646jz1AelTYNYWrTNm0bEcFAo147wt4= |
|
||||||
github.com/leodido/go-urn v1.2.2/go.mod h1:kUaIbLZWttglzwNuG0pgsh5vuV6u2YcGBYz1hIPjtOQ= |
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= |
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= |
|
||||||
github.com/rwtodd/Go.Sed v0.0.0-20210816025313-55464686f9ef/go.mod h1:8AEUvGVi2uQ5b24BIhcr0GCcpd/RNAFWaN2CJFrWIIQ= |
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= |
|
||||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= |
|
||||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= |
|
||||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= |
|
||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= |
|
||||||
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= |
|
||||||
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= |
|
||||||
golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= |
|
||||||
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= |
|
||||||
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= |
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= |
|
||||||
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= |
|
||||||
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= |
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= |
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= |
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= |
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= |
|
@ -1,173 +0,0 @@ |
|||||||
package validator |
|
||||||
|
|
||||||
import "regexp" |
|
||||||
|
|
||||||
var postCodePatternDict = map[string]string{ |
|
||||||
"GB": `^GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\d{1,4}$`, |
|
||||||
"JE": `^JE\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}$`, |
|
||||||
"GG": `^GY\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}$`, |
|
||||||
"IM": `^IM\d[\dA-Z]?[ ]?\d[ABD-HJLN-UW-Z]{2}$`, |
|
||||||
"US": `^\d{5}([ \-]\d{4})?$`, |
|
||||||
"CA": `^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ ]?\d[ABCEGHJ-NPRSTV-Z]\d$`, |
|
||||||
"DE": `^\d{5}$`, |
|
||||||
"JP": `^\d{3}-\d{4}$`, |
|
||||||
"FR": `^\d{2}[ ]?\d{3}$`, |
|
||||||
"AU": `^\d{4}$`, |
|
||||||
"IT": `^\d{5}$`, |
|
||||||
"CH": `^\d{4}$`, |
|
||||||
"AT": `^\d{4}$`, |
|
||||||
"ES": `^\d{5}$`, |
|
||||||
"NL": `^\d{4}[ ]?[A-Z]{2}$`, |
|
||||||
"BE": `^\d{4}$`, |
|
||||||
"DK": `^\d{4}$`, |
|
||||||
"SE": `^\d{3}[ ]?\d{2}$`, |
|
||||||
"NO": `^\d{4}$`, |
|
||||||
"BR": `^\d{5}[\-]?\d{3}$`, |
|
||||||
"PT": `^\d{4}([\-]\d{3})?$`, |
|
||||||
"FI": `^\d{5}$`, |
|
||||||
"AX": `^22\d{3}$`, |
|
||||||
"KR": `^\d{3}[\-]\d{3}$`, |
|
||||||
"CN": `^\d{6}$`, |
|
||||||
"TW": `^\d{3}(\d{2})?$`, |
|
||||||
"SG": `^\d{6}$`, |
|
||||||
"DZ": `^\d{5}$`, |
|
||||||
"AD": `^AD\d{3}$`, |
|
||||||
"AR": `^([A-HJ-NP-Z])?\d{4}([A-Z]{3})?$`, |
|
||||||
"AM": `^(37)?\d{4}$`, |
|
||||||
"AZ": `^\d{4}$`, |
|
||||||
"BH": `^((1[0-2]|[2-9])\d{2})?$`, |
|
||||||
"BD": `^\d{4}$`, |
|
||||||
"BB": `^(BB\d{5})?$`, |
|
||||||
"BY": `^\d{6}$`, |
|
||||||
"BM": `^[A-Z]{2}[ ]?[A-Z0-9]{2}$`, |
|
||||||
"BA": `^\d{5}$`, |
|
||||||
"IO": `^BBND 1ZZ$`, |
|
||||||
"BN": `^[A-Z]{2}[ ]?\d{4}$`, |
|
||||||
"BG": `^\d{4}$`, |
|
||||||
"KH": `^\d{5}$`, |
|
||||||
"CV": `^\d{4}$`, |
|
||||||
"CL": `^\d{7}$`, |
|
||||||
"CR": `^\d{4,5}|\d{3}-\d{4}$`, |
|
||||||
"HR": `^\d{5}$`, |
|
||||||
"CY": `^\d{4}$`, |
|
||||||
"CZ": `^\d{3}[ ]?\d{2}$`, |
|
||||||
"DO": `^\d{5}$`, |
|
||||||
"EC": `^([A-Z]\d{4}[A-Z]|(?:[A-Z]{2})?\d{6})?$`, |
|
||||||
"EG": `^\d{5}$`, |
|
||||||
"EE": `^\d{5}$`, |
|
||||||
"FO": `^\d{3}$`, |
|
||||||
"GE": `^\d{4}$`, |
|
||||||
"GR": `^\d{3}[ ]?\d{2}$`, |
|
||||||
"GL": `^39\d{2}$`, |
|
||||||
"GT": `^\d{5}$`, |
|
||||||
"HT": `^\d{4}$`, |
|
||||||
"HN": `^(?:\d{5})?$`, |
|
||||||
"HU": `^\d{4}$`, |
|
||||||
"IS": `^\d{3}$`, |
|
||||||
"IN": `^\d{6}$`, |
|
||||||
"ID": `^\d{5}$`, |
|
||||||
"IL": `^\d{5}$`, |
|
||||||
"JO": `^\d{5}$`, |
|
||||||
"KZ": `^\d{6}$`, |
|
||||||
"KE": `^\d{5}$`, |
|
||||||
"KW": `^\d{5}$`, |
|
||||||
"LA": `^\d{5}$`, |
|
||||||
"LV": `^\d{4}$`, |
|
||||||
"LB": `^(\d{4}([ ]?\d{4})?)?$`, |
|
||||||
"LI": `^(948[5-9])|(949[0-7])$`, |
|
||||||
"LT": `^\d{5}$`, |
|
||||||
"LU": `^\d{4}$`, |
|
||||||
"MK": `^\d{4}$`, |
|
||||||
"MY": `^\d{5}$`, |
|
||||||
"MV": `^\d{5}$`, |
|
||||||
"MT": `^[A-Z]{3}[ ]?\d{2,4}$`, |
|
||||||
"MU": `^(\d{3}[A-Z]{2}\d{3})?$`, |
|
||||||
"MX": `^\d{5}$`, |
|
||||||
"MD": `^\d{4}$`, |
|
||||||
"MC": `^980\d{2}$`, |
|
||||||
"MA": `^\d{5}$`, |
|
||||||
"NP": `^\d{5}$`, |
|
||||||
"NZ": `^\d{4}$`, |
|
||||||
"NI": `^((\d{4}-)?\d{3}-\d{3}(-\d{1})?)?$`, |
|
||||||
"NG": `^(\d{6})?$`, |
|
||||||
"OM": `^(PC )?\d{3}$`, |
|
||||||
"PK": `^\d{5}$`, |
|
||||||
"PY": `^\d{4}$`, |
|
||||||
"PH": `^\d{4}$`, |
|
||||||
"PL": `^\d{2}-\d{3}$`, |
|
||||||
"PR": `^00[679]\d{2}([ \-]\d{4})?$`, |
|
||||||
"RO": `^\d{6}$`, |
|
||||||
"RU": `^\d{6}$`, |
|
||||||
"SM": `^4789\d$`, |
|
||||||
"SA": `^\d{5}$`, |
|
||||||
"SN": `^\d{5}$`, |
|
||||||
"SK": `^\d{3}[ ]?\d{2}$`, |
|
||||||
"SI": `^\d{4}$`, |
|
||||||
"ZA": `^\d{4}$`, |
|
||||||
"LK": `^\d{5}$`, |
|
||||||
"TJ": `^\d{6}$`, |
|
||||||
"TH": `^\d{5}$`, |
|
||||||
"TN": `^\d{4}$`, |
|
||||||
"TR": `^\d{5}$`, |
|
||||||
"TM": `^\d{6}$`, |
|
||||||
"UA": `^\d{5}$`, |
|
||||||
"UY": `^\d{5}$`, |
|
||||||
"UZ": `^\d{6}$`, |
|
||||||
"VA": `^00120$`, |
|
||||||
"VE": `^\d{4}$`, |
|
||||||
"ZM": `^\d{5}$`, |
|
||||||
"AS": `^96799$`, |
|
||||||
"CC": `^6799$`, |
|
||||||
"CK": `^\d{4}$`, |
|
||||||
"RS": `^\d{6}$`, |
|
||||||
"ME": `^8\d{4}$`, |
|
||||||
"CS": `^\d{5}$`, |
|
||||||
"YU": `^\d{5}$`, |
|
||||||
"CX": `^6798$`, |
|
||||||
"ET": `^\d{4}$`, |
|
||||||
"FK": `^FIQQ 1ZZ$`, |
|
||||||
"NF": `^2899$`, |
|
||||||
"FM": `^(9694[1-4])([ \-]\d{4})?$`, |
|
||||||
"GF": `^9[78]3\d{2}$`, |
|
||||||
"GN": `^\d{3}$`, |
|
||||||
"GP": `^9[78][01]\d{2}$`, |
|
||||||
"GS": `^SIQQ 1ZZ$`, |
|
||||||
"GU": `^969[123]\d([ \-]\d{4})?$`, |
|
||||||
"GW": `^\d{4}$`, |
|
||||||
"HM": `^\d{4}$`, |
|
||||||
"IQ": `^\d{5}$`, |
|
||||||
"KG": `^\d{6}$`, |
|
||||||
"LR": `^\d{4}$`, |
|
||||||
"LS": `^\d{3}$`, |
|
||||||
"MG": `^\d{3}$`, |
|
||||||
"MH": `^969[67]\d([ \-]\d{4})?$`, |
|
||||||
"MN": `^\d{6}$`, |
|
||||||
"MP": `^9695[012]([ \-]\d{4})?$`, |
|
||||||
"MQ": `^9[78]2\d{2}$`, |
|
||||||
"NC": `^988\d{2}$`, |
|
||||||
"NE": `^\d{4}$`, |
|
||||||
"VI": `^008(([0-4]\d)|(5[01]))([ \-]\d{4})?$`, |
|
||||||
"VN": `^[0-9]{1,6}$`, |
|
||||||
"PF": `^987\d{2}$`, |
|
||||||
"PG": `^\d{3}$`, |
|
||||||
"PM": `^9[78]5\d{2}$`, |
|
||||||
"PN": `^PCRN 1ZZ$`, |
|
||||||
"PW": `^96940$`, |
|
||||||
"RE": `^9[78]4\d{2}$`, |
|
||||||
"SH": `^(ASCN|STHL) 1ZZ$`, |
|
||||||
"SJ": `^\d{4}$`, |
|
||||||
"SO": `^\d{5}$`, |
|
||||||
"SZ": `^[HLMS]\d{3}$`, |
|
||||||
"TC": `^TKCA 1ZZ$`, |
|
||||||
"WF": `^986\d{2}$`, |
|
||||||
"XK": `^\d{5}$`, |
|
||||||
"YT": `^976\d{2}$`, |
|
||||||
} |
|
||||||
|
|
||||||
var postCodeRegexDict = map[string]*regexp.Regexp{} |
|
||||||
|
|
||||||
func init() { |
|
||||||
for countryCode, pattern := range postCodePatternDict { |
|
||||||
postCodeRegexDict[countryCode] = regexp.MustCompile(pattern) |
|
||||||
} |
|
||||||
} |
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,658 +0,0 @@ |
|||||||
package es |
|
||||||
|
|
||||||
import ( |
|
||||||
"testing" |
|
||||||
"time" |
|
||||||
|
|
||||||
. "github.com/go-playground/assert/v2" |
|
||||||
spanish "github.com/go-playground/locales/es" |
|
||||||
ut "github.com/go-playground/universal-translator" |
|
||||||
"github.com/go-playground/validator/v10" |
|
||||||
) |
|
||||||
|
|
||||||
func TestTranslations(t *testing.T) { |
|
||||||
|
|
||||||
spa := spanish.New() |
|
||||||
uni := ut.New(spa, spa) |
|
||||||
trans, _ := uni.GetTranslator("es") |
|
||||||
|
|
||||||
validate := validator.New() |
|
||||||
|
|
||||||
err := RegisterDefaultTranslations(validate, trans) |
|
||||||
Equal(t, err, nil) |
|
||||||
|
|
||||||
type Inner struct { |
|
||||||
EqCSFieldString string |
|
||||||
NeCSFieldString string |
|
||||||
GtCSFieldString string |
|
||||||
GteCSFieldString string |
|
||||||
LtCSFieldString string |
|
||||||
LteCSFieldString string |
|
||||||
} |
|
||||||
|
|
||||||
type Test struct { |
|
||||||
Inner Inner |
|
||||||
RequiredString string `validate:"required"` |
|
||||||
RequiredNumber int `validate:"required"` |
|
||||||
RequiredMultiple []string `validate:"required"` |
|
||||||
RequiredIf string `validate:"required_if=Inner.RequiredIf abcd"` |
|
||||||
LenString string `validate:"len=1"` |
|
||||||
LenNumber float64 `validate:"len=1113.00"` |
|
||||||
LenMultiple []string `validate:"len=7"` |
|
||||||
MinString string `validate:"min=1"` |
|
||||||
MinNumber float64 `validate:"min=1113.00"` |
|
||||||
MinMultiple []string `validate:"min=7"` |
|
||||||
MaxString string `validate:"max=3"` |
|
||||||
MaxNumber float64 `validate:"max=1113.00"` |
|
||||||
MaxMultiple []string `validate:"max=7"` |
|
||||||
EqString string `validate:"eq=3"` |
|
||||||
EqNumber float64 `validate:"eq=2.33"` |
|
||||||
EqMultiple []string `validate:"eq=7"` |
|
||||||
NeString string `validate:"ne="` |
|
||||||
NeNumber float64 `validate:"ne=0.00"` |
|
||||||
NeMultiple []string `validate:"ne=0"` |
|
||||||
LtString string `validate:"lt=3"` |
|
||||||
LtNumber float64 `validate:"lt=5.56"` |
|
||||||
LtMultiple []string `validate:"lt=2"` |
|
||||||
LtTime time.Time `validate:"lt"` |
|
||||||
LteString string `validate:"lte=3"` |
|
||||||
LteNumber float64 `validate:"lte=5.56"` |
|
||||||
LteMultiple []string `validate:"lte=2"` |
|
||||||
LteTime time.Time `validate:"lte"` |
|
||||||
GtString string `validate:"gt=3"` |
|
||||||
GtNumber float64 `validate:"gt=5.56"` |
|
||||||
GtMultiple []string `validate:"gt=2"` |
|
||||||
GtTime time.Time `validate:"gt"` |
|
||||||
GteString string `validate:"gte=3"` |
|
||||||
GteNumber float64 `validate:"gte=5.56"` |
|
||||||
GteMultiple []string `validate:"gte=2"` |
|
||||||
GteTime time.Time `validate:"gte"` |
|
||||||
EqFieldString string `validate:"eqfield=MaxString"` |
|
||||||
EqCSFieldString string `validate:"eqcsfield=Inner.EqCSFieldString"` |
|
||||||
NeCSFieldString string `validate:"necsfield=Inner.NeCSFieldString"` |
|
||||||
GtCSFieldString string `validate:"gtcsfield=Inner.GtCSFieldString"` |
|
||||||
GteCSFieldString string `validate:"gtecsfield=Inner.GteCSFieldString"` |
|
||||||
LtCSFieldString string `validate:"ltcsfield=Inner.LtCSFieldString"` |
|
||||||
LteCSFieldString string `validate:"ltecsfield=Inner.LteCSFieldString"` |
|
||||||
NeFieldString string `validate:"nefield=EqFieldString"` |
|
||||||
GtFieldString string `validate:"gtfield=MaxString"` |
|
||||||
GteFieldString string `validate:"gtefield=MaxString"` |
|
||||||
LtFieldString string `validate:"ltfield=MaxString"` |
|
||||||
LteFieldString string `validate:"ltefield=MaxString"` |
|
||||||
AlphaString string `validate:"alpha"` |
|
||||||
AlphanumString string `validate:"alphanum"` |
|
||||||
NumericString string `validate:"numeric"` |
|
||||||
NumberString string `validate:"number"` |
|
||||||
HexadecimalString string `validate:"hexadecimal"` |
|
||||||
HexColorString string `validate:"hexcolor"` |
|
||||||
RGBColorString string `validate:"rgb"` |
|
||||||
RGBAColorString string `validate:"rgba"` |
|
||||||
HSLColorString string `validate:"hsl"` |
|
||||||
HSLAColorString string `validate:"hsla"` |
|
||||||
Email string `validate:"email"` |
|
||||||
URL string `validate:"url"` |
|
||||||
URI string `validate:"uri"` |
|
||||||
Base64 string `validate:"base64"` |
|
||||||
Contains string `validate:"contains=purpose"` |
|
||||||
ContainsAny string `validate:"containsany=!@#$"` |
|
||||||
Excludes string `validate:"excludes=text"` |
|
||||||
ExcludesAll string `validate:"excludesall=!@#$"` |
|
||||||
ExcludesRune string `validate:"excludesrune=☻"` |
|
||||||
ISBN string `validate:"isbn"` |
|
||||||
ISBN10 string `validate:"isbn10"` |
|
||||||
ISBN13 string `validate:"isbn13"` |
|
||||||
UUID string `validate:"uuid"` |
|
||||||
UUID3 string `validate:"uuid3"` |
|
||||||
UUID4 string `validate:"uuid4"` |
|
||||||
UUID5 string `validate:"uuid5"` |
|
||||||
ULID string `validate:"ulid"` |
|
||||||
ASCII string `validate:"ascii"` |
|
||||||
PrintableASCII string `validate:"printascii"` |
|
||||||
MultiByte string `validate:"multibyte"` |
|
||||||
DataURI string `validate:"datauri"` |
|
||||||
Latitude string `validate:"latitude"` |
|
||||||
Longitude string `validate:"longitude"` |
|
||||||
SSN string `validate:"ssn"` |
|
||||||
IP string `validate:"ip"` |
|
||||||
IPv4 string `validate:"ipv4"` |
|
||||||
IPv6 string `validate:"ipv6"` |
|
||||||
CIDR string `validate:"cidr"` |
|
||||||
CIDRv4 string `validate:"cidrv4"` |
|
||||||
CIDRv6 string `validate:"cidrv6"` |
|
||||||
TCPAddr string `validate:"tcp_addr"` |
|
||||||
TCPAddrv4 string `validate:"tcp4_addr"` |
|
||||||
TCPAddrv6 string `validate:"tcp6_addr"` |
|
||||||
UDPAddr string `validate:"udp_addr"` |
|
||||||
UDPAddrv4 string `validate:"udp4_addr"` |
|
||||||
UDPAddrv6 string `validate:"udp6_addr"` |
|
||||||
IPAddr string `validate:"ip_addr"` |
|
||||||
IPAddrv4 string `validate:"ip4_addr"` |
|
||||||
IPAddrv6 string `validate:"ip6_addr"` |
|
||||||
UinxAddr string `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
|
|
||||||
MAC string `validate:"mac"` |
|
||||||
IsColor string `validate:"iscolor"` |
|
||||||
StrPtrMinLen *string `validate:"min=10"` |
|
||||||
StrPtrMaxLen *string `validate:"max=1"` |
|
||||||
StrPtrLen *string `validate:"len=2"` |
|
||||||
StrPtrLt *string `validate:"lt=1"` |
|
||||||
StrPtrLte *string `validate:"lte=1"` |
|
||||||
StrPtrGt *string `validate:"gt=10"` |
|
||||||
StrPtrGte *string `validate:"gte=10"` |
|
||||||
OneOfString string `validate:"oneof=red green"` |
|
||||||
OneOfInt int `validate:"oneof=5 63"` |
|
||||||
UniqueSlice []string `validate:"unique"` |
|
||||||
UniqueArray [3]string `validate:"unique"` |
|
||||||
UniqueMap map[string]string `validate:"unique"` |
|
||||||
} |
|
||||||
|
|
||||||
var test Test |
|
||||||
|
|
||||||
test.Inner.EqCSFieldString = "1234" |
|
||||||
test.Inner.GtCSFieldString = "1234" |
|
||||||
test.Inner.GteCSFieldString = "1234" |
|
||||||
|
|
||||||
test.MaxString = "1234" |
|
||||||
test.MaxNumber = 2000 |
|
||||||
test.MaxMultiple = make([]string, 9) |
|
||||||
|
|
||||||
test.LtString = "1234" |
|
||||||
test.LtNumber = 6 |
|
||||||
test.LtMultiple = make([]string, 3) |
|
||||||
test.LtTime = time.Now().Add(time.Hour * 24) |
|
||||||
|
|
||||||
test.LteString = "1234" |
|
||||||
test.LteNumber = 6 |
|
||||||
test.LteMultiple = make([]string, 3) |
|
||||||
test.LteTime = time.Now().Add(time.Hour * 24) |
|
||||||
|
|
||||||
test.LtFieldString = "12345" |
|
||||||
test.LteFieldString = "12345" |
|
||||||
|
|
||||||
test.LtCSFieldString = "1234" |
|
||||||
test.LteCSFieldString = "1234" |
|
||||||
|
|
||||||
test.AlphaString = "abc3" |
|
||||||
test.AlphanumString = "abc3!" |
|
||||||
test.NumericString = "12E.00" |
|
||||||
test.NumberString = "12E" |
|
||||||
|
|
||||||
test.Excludes = "this is some test text" |
|
||||||
test.ExcludesAll = "This is Great!" |
|
||||||
test.ExcludesRune = "Love it ☻" |
|
||||||
|
|
||||||
test.ASCII = "カタカナ" |
|
||||||
test.PrintableASCII = "カタカナ" |
|
||||||
|
|
||||||
test.MultiByte = "1234feerf" |
|
||||||
|
|
||||||
s := "toolong" |
|
||||||
test.StrPtrMaxLen = &s |
|
||||||
test.StrPtrLen = &s |
|
||||||
|
|
||||||
test.UniqueSlice = []string{"1234", "1234"} |
|
||||||
test.UniqueMap = map[string]string{"key1": "1234", "key2": "1234"} |
|
||||||
|
|
||||||
err = validate.Struct(test) |
|
||||||
NotEqual(t, err, nil) |
|
||||||
|
|
||||||
errs, ok := err.(validator.ValidationErrors) |
|
||||||
Equal(t, ok, true) |
|
||||||
|
|
||||||
tests := []struct { |
|
||||||
ns string |
|
||||||
expected string |
|
||||||
}{ |
|
||||||
{ |
|
||||||
ns: "Test.IsColor", |
|
||||||
expected: "IsColor debe ser un color válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MAC", |
|
||||||
expected: "MAC debe contener una dirección MAC válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddr", |
|
||||||
expected: "IPAddr debe ser una dirección IP resoluble", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddrv4", |
|
||||||
expected: "IPAddrv4 debe ser una dirección IPv4 resoluble", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddrv6", |
|
||||||
expected: "IPAddrv6 debe ser una dirección IPv6 resoluble", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddr", |
|
||||||
expected: "UDPAddr debe ser una dirección UDP válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddrv4", |
|
||||||
expected: "UDPAddrv4 debe ser una dirección IPv4 UDP válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddrv6", |
|
||||||
expected: "UDPAddrv6 debe ser una dirección IPv6 UDP válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddr", |
|
||||||
expected: "TCPAddr debe ser una dirección TCP válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddrv4", |
|
||||||
expected: "TCPAddrv4 debe ser una dirección IPv4 TCP válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddrv6", |
|
||||||
expected: "TCPAddrv6 debe ser una dirección IPv6 TCP válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDR", |
|
||||||
expected: "CIDR debe contener una anotación válida del CIDR", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDRv4", |
|
||||||
expected: "CIDRv4 debe contener una notación CIDR válida para una dirección IPv4", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDRv6", |
|
||||||
expected: "CIDRv6 debe contener una notación CIDR válida para una dirección IPv6", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.SSN", |
|
||||||
expected: "SSN debe ser un número válido de SSN", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IP", |
|
||||||
expected: "IP debe ser una dirección IP válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPv4", |
|
||||||
expected: "IPv4 debe ser una dirección IPv4 válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPv6", |
|
||||||
expected: "IPv6 debe ser una dirección IPv6 válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.DataURI", |
|
||||||
expected: "DataURI debe contener un URI de datos válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Latitude", |
|
||||||
expected: "Latitude debe contener coordenadas de latitud válidas", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Longitude", |
|
||||||
expected: "Longitude debe contener unas coordenadas de longitud válidas", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MultiByte", |
|
||||||
expected: "MultiByte debe contener caracteres multibyte", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ASCII", |
|
||||||
expected: "ASCII debe contener sólo caracteres ascii", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.PrintableASCII", |
|
||||||
expected: "PrintableASCII debe contener sólo caracteres ASCII imprimibles", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID", |
|
||||||
expected: "UUID debe ser un UUID válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID3", |
|
||||||
expected: "UUID3 debe ser una versión válida 3 UUID", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID4", |
|
||||||
expected: "UUID4 debe ser una versión válida 4 UUID", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID5", |
|
||||||
expected: "UUID5 debe ser una versión válida 5 UUID", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ULID", |
|
||||||
expected: "ULID debe ser un ULID válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN", |
|
||||||
expected: "ISBN debe ser un número ISBN válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN10", |
|
||||||
expected: "ISBN10 debe ser un número ISBN-10 válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN13", |
|
||||||
expected: "ISBN13 debe ser un número ISBN-13 válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Excludes", |
|
||||||
expected: "Excludes no puede contener el texto 'text'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ExcludesAll", |
|
||||||
expected: "ExcludesAll no puede contener ninguno de los siguientes caracteres '!@#$'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ExcludesRune", |
|
||||||
expected: "ExcludesRune no puede contener lo siguiente '☻'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ContainsAny", |
|
||||||
expected: "ContainsAny debe contener al menos uno de los siguientes caracteres '!@#$'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Contains", |
|
||||||
expected: "Contains debe contener el texto 'purpose'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Base64", |
|
||||||
expected: "Base64 debe ser una cadena de Base64 válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Email", |
|
||||||
expected: "Email debe ser una dirección de correo electrónico válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.URL", |
|
||||||
expected: "URL debe ser un URL válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.URI", |
|
||||||
expected: "URI debe ser una URI válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RGBColorString", |
|
||||||
expected: "RGBColorString debe ser un color RGB válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RGBAColorString", |
|
||||||
expected: "RGBAColorString debe ser un color RGBA válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HSLColorString", |
|
||||||
expected: "HSLColorString debe ser un color HSL válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HSLAColorString", |
|
||||||
expected: "HSLAColorString debe ser un color HSL válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HexadecimalString", |
|
||||||
expected: "HexadecimalString debe ser un hexadecimal válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HexColorString", |
|
||||||
expected: "HexColorString debe ser un color HEX válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NumberString", |
|
||||||
expected: "NumberString debe ser un número válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NumericString", |
|
||||||
expected: "NumericString debe ser un valor numérico válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.AlphanumString", |
|
||||||
expected: "AlphanumString sólo puede contener caracteres alfanuméricos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.AlphaString", |
|
||||||
expected: "AlphaString sólo puede contener caracteres alfabéticos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtFieldString", |
|
||||||
expected: "LtFieldString debe ser menor que MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteFieldString", |
|
||||||
expected: "LteFieldString debe ser menor o igual a MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtFieldString", |
|
||||||
expected: "GtFieldString debe ser mayor que MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteFieldString", |
|
||||||
expected: "GteFieldString debe ser mayor o igual a MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeFieldString", |
|
||||||
expected: "NeFieldString no puede ser igual a EqFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtCSFieldString", |
|
||||||
expected: "LtCSFieldString debe ser menor que Inner.LtCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteCSFieldString", |
|
||||||
expected: "LteCSFieldString debe ser menor o igual a Inner.LteCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtCSFieldString", |
|
||||||
expected: "GtCSFieldString debe ser mayor que Inner.GtCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteCSFieldString", |
|
||||||
expected: "GteCSFieldString debe ser mayor o igual a Inner.GteCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeCSFieldString", |
|
||||||
expected: "NeCSFieldString no puede ser igual a Inner.NeCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqCSFieldString", |
|
||||||
expected: "EqCSFieldString debe ser igual a Inner.EqCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqFieldString", |
|
||||||
expected: "EqFieldString debe ser igual a MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteString", |
|
||||||
expected: "GteString debe tener al menos 3 caracteres de longitud", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteNumber", |
|
||||||
expected: "GteNumber debe ser 5,56 o mayor", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteMultiple", |
|
||||||
expected: "GteMultiple debe contener al menos 2 elementos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteTime", |
|
||||||
expected: "GteTime debe ser después o durante la fecha y hora actuales", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtString", |
|
||||||
expected: "GtString debe ser mayor que 3 caracteres en longitud", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtNumber", |
|
||||||
expected: "GtNumber debe ser mayor que 5,56", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtMultiple", |
|
||||||
expected: "GtMultiple debe contener más de 2 elementos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtTime", |
|
||||||
expected: "GtTime debe ser después de la fecha y hora actual", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteString", |
|
||||||
expected: "LteString debe tener un máximo de 3 caracteres de longitud", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteNumber", |
|
||||||
expected: "LteNumber debe ser 5,56 o menos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteMultiple", |
|
||||||
expected: "LteMultiple debe contener como máximo 2 elementos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteTime", |
|
||||||
expected: "LteTime debe ser antes o durante la fecha y hora actual", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtString", |
|
||||||
expected: "LtString debe tener menos de 3 caracteres de longitud", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtNumber", |
|
||||||
expected: "LtNumber debe ser menos de 5,56", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtMultiple", |
|
||||||
expected: "LtMultiple debe contener menos de 2 elementos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtTime", |
|
||||||
expected: "LtTime debe ser antes de la fecha y hora actual", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeString", |
|
||||||
expected: "NeString no debería ser igual a ", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeNumber", |
|
||||||
expected: "NeNumber no debería ser igual a 0.00", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeMultiple", |
|
||||||
expected: "NeMultiple no debería ser igual a 0", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqString", |
|
||||||
expected: "EqString no es igual a 3", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqNumber", |
|
||||||
expected: "EqNumber no es igual a 2.33", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqMultiple", |
|
||||||
expected: "EqMultiple no es igual a 7", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxString", |
|
||||||
expected: "MaxString debe tener un máximo de 3 caracteres de longitud", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxNumber", |
|
||||||
expected: "MaxNumber debe ser 1.113,00 o menos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxMultiple", |
|
||||||
expected: "MaxMultiple debe contener como máximo 7 elementos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinString", |
|
||||||
expected: "MinString debe tener al menos 1 carácter de longitud", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinNumber", |
|
||||||
expected: "MinNumber debe ser 1.113,00 o más", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinMultiple", |
|
||||||
expected: "MinMultiple debe contener al menos 7 elementos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenString", |
|
||||||
expected: "LenString debe tener 1 carácter de longitud", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenNumber", |
|
||||||
expected: "LenNumber debe ser igual a 1.113,00", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenMultiple", |
|
||||||
expected: "LenMultiple debe contener 7 elementos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredString", |
|
||||||
expected: "RequiredString es un campo requerido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredNumber", |
|
||||||
expected: "RequiredNumber es un campo requerido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredMultiple", |
|
||||||
expected: "RequiredMultiple es un campo requerido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrMinLen", |
|
||||||
expected: "StrPtrMinLen debe tener al menos 10 caracteres de longitud", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrMaxLen", |
|
||||||
expected: "StrPtrMaxLen debe tener un máximo de 1 carácter de longitud", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLen", |
|
||||||
expected: "StrPtrLen debe tener 2 caracteres de longitud", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLt", |
|
||||||
expected: "StrPtrLt debe tener menos de 1 carácter de longitud", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLte", |
|
||||||
expected: "StrPtrLte debe tener un máximo de 1 carácter de longitud", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrGt", |
|
||||||
expected: "StrPtrGt debe ser mayor que 10 caracteres en longitud", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrGte", |
|
||||||
expected: "StrPtrGte debe tener al menos 10 caracteres de longitud", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.OneOfString", |
|
||||||
expected: "OneOfString debe ser uno de [red green]", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.OneOfInt", |
|
||||||
expected: "OneOfInt debe ser uno de [5 63]", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueSlice", |
|
||||||
expected: "UniqueSlice debe contener valores únicos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueArray", |
|
||||||
expected: "UniqueArray debe contener valores únicos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueMap", |
|
||||||
expected: "UniqueMap debe contener valores únicos", |
|
||||||
}, |
|
||||||
} |
|
||||||
|
|
||||||
for _, tt := range tests { |
|
||||||
|
|
||||||
var fe validator.FieldError |
|
||||||
|
|
||||||
for _, e := range errs { |
|
||||||
if tt.ns == e.Namespace() { |
|
||||||
fe = e |
|
||||||
break |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
NotEqual(t, fe, nil) |
|
||||||
Equal(t, tt.expected, fe.Translate(trans)) |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,725 +0,0 @@ |
|||||||
package it |
|
||||||
|
|
||||||
import ( |
|
||||||
"testing" |
|
||||||
"time" |
|
||||||
|
|
||||||
. "github.com/go-playground/assert/v2" |
|
||||||
italian "github.com/go-playground/locales/it" |
|
||||||
ut "github.com/go-playground/universal-translator" |
|
||||||
"github.com/go-playground/validator/v10" |
|
||||||
) |
|
||||||
|
|
||||||
func TestTranslations(t *testing.T) { |
|
||||||
ita := italian.New() |
|
||||||
uni := ut.New(ita, ita) |
|
||||||
trans, _ := uni.GetTranslator("it") |
|
||||||
|
|
||||||
validate := validator.New() |
|
||||||
|
|
||||||
err := RegisterDefaultTranslations(validate, trans) |
|
||||||
Equal(t, err, nil) |
|
||||||
|
|
||||||
type Inner struct { |
|
||||||
EqCSFieldString string |
|
||||||
NeCSFieldString string |
|
||||||
GtCSFieldString string |
|
||||||
GteCSFieldString string |
|
||||||
LtCSFieldString string |
|
||||||
LteCSFieldString string |
|
||||||
} |
|
||||||
|
|
||||||
type Test struct { |
|
||||||
Inner Inner |
|
||||||
RequiredString string `validate:"required"` |
|
||||||
RequiredNumber int `validate:"required"` |
|
||||||
RequiredMultiple []string `validate:"required"` |
|
||||||
LenString string `validate:"len=1"` |
|
||||||
LenNumber float64 `validate:"len=1113.00"` |
|
||||||
LenMultiple []string `validate:"len=7"` |
|
||||||
MinString string `validate:"min=1"` |
|
||||||
MinNumber float64 `validate:"min=1113.00"` |
|
||||||
MinMultiple []string `validate:"min=7"` |
|
||||||
MaxString string `validate:"max=3"` |
|
||||||
MaxNumber float64 `validate:"max=1113.00"` |
|
||||||
MaxMultiple []string `validate:"max=7"` |
|
||||||
EqString string `validate:"eq=3"` |
|
||||||
EqNumber float64 `validate:"eq=2.33"` |
|
||||||
EqMultiple []string `validate:"eq=7"` |
|
||||||
NeString string `validate:"ne="` |
|
||||||
NeNumber float64 `validate:"ne=0.00"` |
|
||||||
NeMultiple []string `validate:"ne=0"` |
|
||||||
LtString string `validate:"lt=3"` |
|
||||||
LtNumber float64 `validate:"lt=5.56"` |
|
||||||
LtMultiple []string `validate:"lt=2"` |
|
||||||
LtTime time.Time `validate:"lt"` |
|
||||||
LteString string `validate:"lte=3"` |
|
||||||
LteNumber float64 `validate:"lte=5.56"` |
|
||||||
LteMultiple []string `validate:"lte=2"` |
|
||||||
LteTime time.Time `validate:"lte"` |
|
||||||
GtString string `validate:"gt=3"` |
|
||||||
GtNumber float64 `validate:"gt=5.56"` |
|
||||||
GtMultiple []string `validate:"gt=2"` |
|
||||||
GtTime time.Time `validate:"gt"` |
|
||||||
GteString string `validate:"gte=3"` |
|
||||||
GteNumber float64 `validate:"gte=5.56"` |
|
||||||
GteMultiple []string `validate:"gte=2"` |
|
||||||
GteTime time.Time `validate:"gte"` |
|
||||||
EqFieldString string `validate:"eqfield=MaxString"` |
|
||||||
EqCSFieldString string `validate:"eqcsfield=Inner.EqCSFieldString"` |
|
||||||
NeCSFieldString string `validate:"necsfield=Inner.NeCSFieldString"` |
|
||||||
GtCSFieldString string `validate:"gtcsfield=Inner.GtCSFieldString"` |
|
||||||
GteCSFieldString string `validate:"gtecsfield=Inner.GteCSFieldString"` |
|
||||||
LtCSFieldString string `validate:"ltcsfield=Inner.LtCSFieldString"` |
|
||||||
LteCSFieldString string `validate:"ltecsfield=Inner.LteCSFieldString"` |
|
||||||
NeFieldString string `validate:"nefield=EqFieldString"` |
|
||||||
GtFieldString string `validate:"gtfield=MaxString"` |
|
||||||
GteFieldString string `validate:"gtefield=MaxString"` |
|
||||||
LtFieldString string `validate:"ltfield=MaxString"` |
|
||||||
LteFieldString string `validate:"ltefield=MaxString"` |
|
||||||
AlphaString string `validate:"alpha"` |
|
||||||
AlphanumString string `validate:"alphanum"` |
|
||||||
NumericString string `validate:"numeric"` |
|
||||||
NumberString string `validate:"number"` |
|
||||||
HexadecimalString string `validate:"hexadecimal"` |
|
||||||
HexColorString string `validate:"hexcolor"` |
|
||||||
RGBColorString string `validate:"rgb"` |
|
||||||
RGBAColorString string `validate:"rgba"` |
|
||||||
HSLColorString string `validate:"hsl"` |
|
||||||
HSLAColorString string `validate:"hsla"` |
|
||||||
Email string `validate:"email"` |
|
||||||
URL string `validate:"url"` |
|
||||||
URI string `validate:"uri"` |
|
||||||
Base64 string `validate:"base64"` |
|
||||||
Contains string `validate:"contains=purpose"` |
|
||||||
ContainsAny string `validate:"containsany=!@#$"` |
|
||||||
Excludes string `validate:"excludes=text"` |
|
||||||
ExcludesAll string `validate:"excludesall=!@#$"` |
|
||||||
ExcludesRune string `validate:"excludesrune=☻"` |
|
||||||
ISBN string `validate:"isbn"` |
|
||||||
ISBN10 string `validate:"isbn10"` |
|
||||||
ISBN13 string `validate:"isbn13"` |
|
||||||
UUID string `validate:"uuid"` |
|
||||||
UUID3 string `validate:"uuid3"` |
|
||||||
UUID4 string `validate:"uuid4"` |
|
||||||
UUID5 string `validate:"uuid5"` |
|
||||||
ULID string `validate:"ulid"` |
|
||||||
ASCII string `validate:"ascii"` |
|
||||||
PrintableASCII string `validate:"printascii"` |
|
||||||
MultiByte string `validate:"multibyte"` |
|
||||||
DataURI string `validate:"datauri"` |
|
||||||
Latitude string `validate:"latitude"` |
|
||||||
Longitude string `validate:"longitude"` |
|
||||||
SSN string `validate:"ssn"` |
|
||||||
IP string `validate:"ip"` |
|
||||||
IPv4 string `validate:"ipv4"` |
|
||||||
IPv6 string `validate:"ipv6"` |
|
||||||
CIDR string `validate:"cidr"` |
|
||||||
CIDRv4 string `validate:"cidrv4"` |
|
||||||
CIDRv6 string `validate:"cidrv6"` |
|
||||||
TCPAddr string `validate:"tcp_addr"` |
|
||||||
TCPAddrv4 string `validate:"tcp4_addr"` |
|
||||||
TCPAddrv6 string `validate:"tcp6_addr"` |
|
||||||
UDPAddr string `validate:"udp_addr"` |
|
||||||
UDPAddrv4 string `validate:"udp4_addr"` |
|
||||||
UDPAddrv6 string `validate:"udp6_addr"` |
|
||||||
IPAddr string `validate:"ip_addr"` |
|
||||||
IPAddrv4 string `validate:"ip4_addr"` |
|
||||||
IPAddrv6 string `validate:"ip6_addr"` |
|
||||||
UinxAddr string `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
|
|
||||||
MAC string `validate:"mac"` |
|
||||||
IsColor string `validate:"iscolor"` |
|
||||||
StrPtrMinLen *string `validate:"min=10"` |
|
||||||
StrPtrMaxLen *string `validate:"max=1"` |
|
||||||
StrPtrLen *string `validate:"len=2"` |
|
||||||
StrPtrLt *string `validate:"lt=1"` |
|
||||||
StrPtrLte *string `validate:"lte=1"` |
|
||||||
StrPtrGt *string `validate:"gt=10"` |
|
||||||
StrPtrGte *string `validate:"gte=10"` |
|
||||||
OneOfString string `validate:"oneof=red green"` |
|
||||||
OneOfInt int `validate:"oneof=5 63"` |
|
||||||
UniqueSlice []string `validate:"unique"` |
|
||||||
UniqueArray [3]string `validate:"unique"` |
|
||||||
UniqueMap map[string]string `validate:"unique"` |
|
||||||
BooleanString string `validate:"boolean"` |
|
||||||
JSONString string `validate:"json"` |
|
||||||
JWTString string `validate:"jwt"` |
|
||||||
LowercaseString string `validate:"lowercase"` |
|
||||||
UppercaseString string `validate:"uppercase"` |
|
||||||
StartsWithString string `validate:"startswith=foo"` |
|
||||||
StartsNotWithString string `validate:"startsnotwith=foo"` |
|
||||||
EndsWithString string `validate:"endswith=foo"` |
|
||||||
EndsNotWithString string `validate:"endsnotwith=foo"` |
|
||||||
Datetime string `validate:"datetime=2006-01-02"` |
|
||||||
PostCode string `validate:"postcode_iso3166_alpha2=SG"` |
|
||||||
PostCodeCountry string |
|
||||||
PostCodeByField string `validate:"postcode_iso3166_alpha2_field=PostCodeCountry"` |
|
||||||
} |
|
||||||
|
|
||||||
var test Test |
|
||||||
|
|
||||||
test.Inner.EqCSFieldString = "1234" |
|
||||||
test.Inner.GtCSFieldString = "1234" |
|
||||||
test.Inner.GteCSFieldString = "1234" |
|
||||||
|
|
||||||
test.MaxString = "1234" |
|
||||||
test.MaxNumber = 2000 |
|
||||||
test.MaxMultiple = make([]string, 9) |
|
||||||
|
|
||||||
test.LtString = "1234" |
|
||||||
test.LtNumber = 6 |
|
||||||
test.LtMultiple = make([]string, 3) |
|
||||||
test.LtTime = time.Now().Add(time.Hour * 24) |
|
||||||
|
|
||||||
test.LteString = "1234" |
|
||||||
test.LteNumber = 6 |
|
||||||
test.LteMultiple = make([]string, 3) |
|
||||||
test.LteTime = time.Now().Add(time.Hour * 24) |
|
||||||
|
|
||||||
test.LtFieldString = "12345" |
|
||||||
test.LteFieldString = "12345" |
|
||||||
|
|
||||||
test.LtCSFieldString = "1234" |
|
||||||
test.LteCSFieldString = "1234" |
|
||||||
|
|
||||||
test.AlphaString = "abc3" |
|
||||||
test.AlphanumString = "abc3!" |
|
||||||
test.NumericString = "12E.00" |
|
||||||
test.NumberString = "12E" |
|
||||||
|
|
||||||
test.Excludes = "this is some test text" |
|
||||||
test.ExcludesAll = "This is Great!" |
|
||||||
test.ExcludesRune = "Love it ☻" |
|
||||||
|
|
||||||
test.ASCII = "カタカナ" |
|
||||||
test.PrintableASCII = "カタカナ" |
|
||||||
|
|
||||||
test.MultiByte = "1234feerf" |
|
||||||
|
|
||||||
test.LowercaseString = "ABCDEFG" |
|
||||||
test.UppercaseString = "abcdefg" |
|
||||||
|
|
||||||
test.StartsWithString = "hello" |
|
||||||
test.StartsNotWithString = "foo-hello" |
|
||||||
test.EndsWithString = "hello" |
|
||||||
test.EndsNotWithString = "hello-foo" |
|
||||||
|
|
||||||
s := "toolong" |
|
||||||
test.StrPtrMaxLen = &s |
|
||||||
test.StrPtrLen = &s |
|
||||||
|
|
||||||
test.UniqueSlice = []string{"1234", "1234"} |
|
||||||
test.UniqueMap = map[string]string{"key1": "1234", "key2": "1234"} |
|
||||||
test.Datetime = "2008-Feb-01" |
|
||||||
|
|
||||||
err = validate.Struct(test) |
|
||||||
NotEqual(t, err, nil) |
|
||||||
|
|
||||||
errs, ok := err.(validator.ValidationErrors) |
|
||||||
Equal(t, ok, true) |
|
||||||
|
|
||||||
tests := []struct { |
|
||||||
ns string |
|
||||||
expected string |
|
||||||
}{ |
|
||||||
{ |
|
||||||
ns: "Test.IsColor", |
|
||||||
expected: "IsColor deve essere un colore valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MAC", |
|
||||||
expected: "MAC deve contenere un indirizzo MAC valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddr", |
|
||||||
expected: "IPAddr deve essere un indirizzo IP risolvibile", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddrv4", |
|
||||||
expected: "IPAddrv4 deve essere un indirizzo IPv4 risolvibile", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddrv6", |
|
||||||
expected: "IPAddrv6 deve essere un indirizzo IPv6 risolvibile", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddr", |
|
||||||
expected: "UDPAddr deve essere un indirizzo UDP valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddrv4", |
|
||||||
expected: "UDPAddrv4 deve essere un indirizzo IPv4 UDP valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddrv6", |
|
||||||
expected: "UDPAddrv6 deve essere un indirizzo IPv6 UDP valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddr", |
|
||||||
expected: "TCPAddr deve essere un indirizzo TCP valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddrv4", |
|
||||||
expected: "TCPAddrv4 deve essere un indirizzo IPv4 TCP valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddrv6", |
|
||||||
expected: "TCPAddrv6 deve essere un indirizzo IPv6 TCP valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDR", |
|
||||||
expected: "CIDR deve contenere una notazione CIDR valida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDRv4", |
|
||||||
expected: "CIDRv4 deve contenere una notazione CIDR per un indirizzo IPv4 valida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDRv6", |
|
||||||
expected: "CIDRv6 deve contenere una notazione CIDR per un indirizzo IPv6 valida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.SSN", |
|
||||||
expected: "SSN deve essere un numero SSN valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IP", |
|
||||||
expected: "IP deve essere un indirizzo IP valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPv4", |
|
||||||
expected: "IPv4 deve essere un indirizzo IPv4 valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPv6", |
|
||||||
expected: "IPv6 deve essere un indirizzo IPv6 valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.DataURI", |
|
||||||
expected: "DataURI deve contenere un Data URI valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Latitude", |
|
||||||
expected: "Latitude deve contenere una latitudine valida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Longitude", |
|
||||||
expected: "Longitude deve contenere una longitudine valida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MultiByte", |
|
||||||
expected: "MultiByte deve contenere caratteri multibyte", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ASCII", |
|
||||||
expected: "ASCII deve contenere solo caratteri ascii", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.PrintableASCII", |
|
||||||
expected: "PrintableASCII deve contenere solo caratteri ascii stampabili", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID", |
|
||||||
expected: "UUID deve essere un UUID valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID3", |
|
||||||
expected: "UUID3 deve essere un UUID versione 3 valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID4", |
|
||||||
expected: "UUID4 deve essere un UUID versione 4 valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID5", |
|
||||||
expected: "UUID5 deve essere un UUID versione 5 valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ULID", |
|
||||||
expected: "ULID deve essere un ULID valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN", |
|
||||||
expected: "ISBN deve essere un numero ISBN valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN10", |
|
||||||
expected: "ISBN10 deve essere un numero ISBN-10 valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN13", |
|
||||||
expected: "ISBN13 deve essere un numero ISBN-13 valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Excludes", |
|
||||||
expected: "Excludes non deve contenere il testo 'text'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ExcludesAll", |
|
||||||
expected: "ExcludesAll non deve contenere alcuno dei seguenti caratteri '!@#$'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ExcludesRune", |
|
||||||
expected: "ExcludesRune non deve contenere '☻'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ContainsAny", |
|
||||||
expected: "ContainsAny deve contenere almeno uno dei seguenti caratteri '!@#$'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Contains", |
|
||||||
expected: "Contains deve contenere il testo 'purpose'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Base64", |
|
||||||
expected: "Base64 deve essere una stringa Base64 valida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Email", |
|
||||||
expected: "Email deve essere un indirizzo email valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.URL", |
|
||||||
expected: "URL deve essere un URL valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.URI", |
|
||||||
expected: "URI deve essere un URI valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RGBColorString", |
|
||||||
expected: "RGBColorString deve essere un colore RGB valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RGBAColorString", |
|
||||||
expected: "RGBAColorString deve essere un colore RGBA valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HSLColorString", |
|
||||||
expected: "HSLColorString deve essere un colore HSL valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HSLAColorString", |
|
||||||
expected: "HSLAColorString deve essere un colore HSLA valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HexadecimalString", |
|
||||||
expected: "HexadecimalString deve essere un esadecimale valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HexColorString", |
|
||||||
expected: "HexColorString deve essere un colore HEX valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NumberString", |
|
||||||
expected: "NumberString deve essere un numero valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NumericString", |
|
||||||
expected: "NumericString deve essere un valore numerico valido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.AlphanumString", |
|
||||||
expected: "AlphanumString può contenere solo caratteri alfanumerici", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.AlphaString", |
|
||||||
expected: "AlphaString può contenere solo caratteri alfabetici", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtFieldString", |
|
||||||
expected: "LtFieldString deve essere minore di MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteFieldString", |
|
||||||
expected: "LteFieldString deve essere minore o uguale a MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtFieldString", |
|
||||||
expected: "GtFieldString deve essere maggiore di MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteFieldString", |
|
||||||
expected: "GteFieldString deve essere maggiore o uguale a MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeFieldString", |
|
||||||
expected: "NeFieldString deve essere diverso da EqFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtCSFieldString", |
|
||||||
expected: "LtCSFieldString deve essere minore di Inner.LtCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteCSFieldString", |
|
||||||
expected: "LteCSFieldString deve essere minore o uguale a Inner.LteCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtCSFieldString", |
|
||||||
expected: "GtCSFieldString deve essere maggiore di Inner.GtCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteCSFieldString", |
|
||||||
expected: "GteCSFieldString deve essere maggiore o uguale a Inner.GteCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeCSFieldString", |
|
||||||
expected: "NeCSFieldString deve essere diverso da Inner.NeCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqCSFieldString", |
|
||||||
expected: "EqCSFieldString deve essere uguale a Inner.EqCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqFieldString", |
|
||||||
expected: "EqFieldString deve essere uguale a MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteString", |
|
||||||
expected: "GteString deve essere lungo almeno 3 caratteri", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteNumber", |
|
||||||
expected: "GteNumber deve essere maggiore o uguale a 5,56", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteMultiple", |
|
||||||
expected: "GteMultiple deve contenere almeno 2 elementi", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteTime", |
|
||||||
expected: "GteTime deve essere uguale o successivo alla Data/Ora corrente", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtString", |
|
||||||
expected: "GtString deve essere lungo più di 3 caratteri", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtNumber", |
|
||||||
expected: "GtNumber deve essere maggiore di 5,56", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtMultiple", |
|
||||||
expected: "GtMultiple deve contenere più di 2 elementi", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtTime", |
|
||||||
expected: "GtTime deve essere successivo alla Data/Ora corrente", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteString", |
|
||||||
expected: "LteString deve essere lungo al massimo 3 caratteri", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteNumber", |
|
||||||
expected: "LteNumber deve essere minore o uguale a 5,56", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteMultiple", |
|
||||||
expected: "LteMultiple deve contenere al massimo 2 elementi", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteTime", |
|
||||||
expected: "LteTime deve essere uguale o precedente alla Data/Ora corrente", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtString", |
|
||||||
expected: "LtString deve essere lungo meno di 3 caratteri", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtNumber", |
|
||||||
expected: "LtNumber deve essere minore di 5,56", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtMultiple", |
|
||||||
expected: "LtMultiple deve contenere meno di 2 elementi", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtTime", |
|
||||||
expected: "LtTime deve essere precedente alla Data/Ora corrente", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeString", |
|
||||||
expected: "NeString deve essere diverso da ", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeNumber", |
|
||||||
expected: "NeNumber deve essere diverso da 0.00", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeMultiple", |
|
||||||
expected: "NeMultiple deve essere diverso da 0", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqString", |
|
||||||
expected: "EqString non è uguale a 3", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqNumber", |
|
||||||
expected: "EqNumber non è uguale a 2.33", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqMultiple", |
|
||||||
expected: "EqMultiple non è uguale a 7", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxString", |
|
||||||
expected: "MaxString deve essere lungo al massimo 3 caratteri", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxNumber", |
|
||||||
expected: "MaxNumber deve essere minore o uguale a 1.113,00", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxMultiple", |
|
||||||
expected: "MaxMultiple deve contenere al massimo 7 elementi", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinString", |
|
||||||
expected: "MinString deve essere lungo almeno 1 carattere", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinNumber", |
|
||||||
expected: "MinNumber deve essere maggiore o uguale a 1.113,00", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinMultiple", |
|
||||||
expected: "MinMultiple deve contenere almeno 7 elementi", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenString", |
|
||||||
expected: "LenString deve essere lungo 1 carattere", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenNumber", |
|
||||||
expected: "LenNumber deve essere uguale a 1.113,00", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenMultiple", |
|
||||||
expected: "LenMultiple deve contenere 7 elementi", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredString", |
|
||||||
expected: "RequiredString è un campo obbligatorio", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredNumber", |
|
||||||
expected: "RequiredNumber è un campo obbligatorio", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredMultiple", |
|
||||||
expected: "RequiredMultiple è un campo obbligatorio", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrMinLen", |
|
||||||
expected: "StrPtrMinLen deve essere lungo almeno 10 caratteri", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrMaxLen", |
|
||||||
expected: "StrPtrMaxLen deve essere lungo al massimo 1 carattere", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLen", |
|
||||||
expected: "StrPtrLen deve essere lungo 2 caratteri", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLt", |
|
||||||
expected: "StrPtrLt deve essere lungo meno di 1 carattere", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLte", |
|
||||||
expected: "StrPtrLte deve essere lungo al massimo 1 carattere", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrGt", |
|
||||||
expected: "StrPtrGt deve essere lungo più di 10 caratteri", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrGte", |
|
||||||
expected: "StrPtrGte deve essere lungo almeno 10 caratteri", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.OneOfString", |
|
||||||
expected: "OneOfString deve essere uno di [red green]", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.OneOfInt", |
|
||||||
expected: "OneOfInt deve essere uno di [5 63]", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueSlice", |
|
||||||
expected: "UniqueSlice deve contenere valori unici", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueArray", |
|
||||||
expected: "UniqueArray deve contenere valori unici", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueMap", |
|
||||||
expected: "UniqueMap deve contenere valori unici", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.BooleanString", |
|
||||||
expected: "BooleanString deve rappresentare un valore booleano", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.JSONString", |
|
||||||
expected: "JSONString deve essere una stringa json valida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.JWTString", |
|
||||||
expected: "JWTString deve essere una stringa jwt valida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LowercaseString", |
|
||||||
expected: "LowercaseString deve essere una stringa minuscola", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UppercaseString", |
|
||||||
expected: "UppercaseString deve essere una stringa maiuscola", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StartsWithString", |
|
||||||
expected: "StartsWithString deve iniziare con foo", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StartsNotWithString", |
|
||||||
expected: "StartsNotWithString non deve iniziare con foo", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EndsWithString", |
|
||||||
expected: "EndsWithString deve terminare con foo", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EndsNotWithString", |
|
||||||
expected: "EndsNotWithString non deve terminare con foo", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Datetime", |
|
||||||
expected: "Datetime non corrisponde al formato 2006-01-02", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.PostCode", |
|
||||||
expected: "PostCode non corrisponde al formato del codice postale dello stato SG", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.PostCodeByField", |
|
||||||
expected: "PostCodeByField non corrisponde al formato del codice postale dello stato nel campo PostCodeCountry", |
|
||||||
}, |
|
||||||
} |
|
||||||
|
|
||||||
for _, tt := range tests { |
|
||||||
|
|
||||||
var fe validator.FieldError |
|
||||||
|
|
||||||
for _, e := range errs { |
|
||||||
if tt.ns == e.Namespace() { |
|
||||||
fe = e |
|
||||||
break |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
NotEqual(t, fe, nil) |
|
||||||
Equal(t, tt.expected, fe.Translate(trans)) |
|
||||||
} |
|
||||||
} |
|
File diff suppressed because it is too large
Load Diff
@ -1,709 +0,0 @@ |
|||||||
package lv |
|
||||||
|
|
||||||
import ( |
|
||||||
"testing" |
|
||||||
"time" |
|
||||||
|
|
||||||
. "github.com/go-playground/assert/v2" |
|
||||||
english "github.com/go-playground/locales/en" |
|
||||||
ut "github.com/go-playground/universal-translator" |
|
||||||
"github.com/go-playground/validator/v10" |
|
||||||
) |
|
||||||
|
|
||||||
func TestTranslations(t *testing.T) { |
|
||||||
eng := english.New() |
|
||||||
uni := ut.New(eng, eng) |
|
||||||
trans, _ := uni.GetTranslator("en") |
|
||||||
|
|
||||||
validate := validator.New() |
|
||||||
|
|
||||||
err := RegisterDefaultTranslations(validate, trans) |
|
||||||
Equal(t, err, nil) |
|
||||||
|
|
||||||
type Inner struct { |
|
||||||
EqCSFieldString string |
|
||||||
NeCSFieldString string |
|
||||||
GtCSFieldString string |
|
||||||
GteCSFieldString string |
|
||||||
LtCSFieldString string |
|
||||||
LteCSFieldString string |
|
||||||
RequiredIf string |
|
||||||
} |
|
||||||
|
|
||||||
type Test struct { |
|
||||||
Inner Inner |
|
||||||
RequiredString string `validate:"required"` |
|
||||||
RequiredNumber int `validate:"required"` |
|
||||||
RequiredMultiple []string `validate:"required"` |
|
||||||
RequiredIf string `validate:"required_if=Inner.RequiredIf abcd"` |
|
||||||
LenString string `validate:"len=1"` |
|
||||||
LenNumber float64 `validate:"len=1113.00"` |
|
||||||
LenMultiple []string `validate:"len=7"` |
|
||||||
MinString string `validate:"min=1"` |
|
||||||
MinNumber float64 `validate:"min=1113.00"` |
|
||||||
MinMultiple []string `validate:"min=7"` |
|
||||||
MaxString string `validate:"max=3"` |
|
||||||
MaxNumber float64 `validate:"max=1113.00"` |
|
||||||
MaxMultiple []string `validate:"max=7"` |
|
||||||
EqString string `validate:"eq=3"` |
|
||||||
EqNumber float64 `validate:"eq=2.33"` |
|
||||||
EqMultiple []string `validate:"eq=7"` |
|
||||||
NeString string `validate:"ne="` |
|
||||||
NeNumber float64 `validate:"ne=0.00"` |
|
||||||
NeMultiple []string `validate:"ne=0"` |
|
||||||
LtString string `validate:"lt=3"` |
|
||||||
LtNumber float64 `validate:"lt=5.56"` |
|
||||||
LtMultiple []string `validate:"lt=2"` |
|
||||||
LtTime time.Time `validate:"lt"` |
|
||||||
LteString string `validate:"lte=3"` |
|
||||||
LteNumber float64 `validate:"lte=5.56"` |
|
||||||
LteMultiple []string `validate:"lte=2"` |
|
||||||
LteTime time.Time `validate:"lte"` |
|
||||||
GtString string `validate:"gt=3"` |
|
||||||
GtNumber float64 `validate:"gt=5.56"` |
|
||||||
GtMultiple []string `validate:"gt=2"` |
|
||||||
GtTime time.Time `validate:"gt"` |
|
||||||
GteString string `validate:"gte=3"` |
|
||||||
GteNumber float64 `validate:"gte=5.56"` |
|
||||||
GteMultiple []string `validate:"gte=2"` |
|
||||||
GteTime time.Time `validate:"gte"` |
|
||||||
EqFieldString string `validate:"eqfield=MaxString"` |
|
||||||
EqCSFieldString string `validate:"eqcsfield=Inner.EqCSFieldString"` |
|
||||||
NeCSFieldString string `validate:"necsfield=Inner.NeCSFieldString"` |
|
||||||
GtCSFieldString string `validate:"gtcsfield=Inner.GtCSFieldString"` |
|
||||||
GteCSFieldString string `validate:"gtecsfield=Inner.GteCSFieldString"` |
|
||||||
LtCSFieldString string `validate:"ltcsfield=Inner.LtCSFieldString"` |
|
||||||
LteCSFieldString string `validate:"ltecsfield=Inner.LteCSFieldString"` |
|
||||||
NeFieldString string `validate:"nefield=EqFieldString"` |
|
||||||
GtFieldString string `validate:"gtfield=MaxString"` |
|
||||||
GteFieldString string `validate:"gtefield=MaxString"` |
|
||||||
LtFieldString string `validate:"ltfield=MaxString"` |
|
||||||
LteFieldString string `validate:"ltefield=MaxString"` |
|
||||||
AlphaString string `validate:"alpha"` |
|
||||||
AlphanumString string `validate:"alphanum"` |
|
||||||
NumericString string `validate:"numeric"` |
|
||||||
NumberString string `validate:"number"` |
|
||||||
HexadecimalString string `validate:"hexadecimal"` |
|
||||||
HexColorString string `validate:"hexcolor"` |
|
||||||
RGBColorString string `validate:"rgb"` |
|
||||||
RGBAColorString string `validate:"rgba"` |
|
||||||
HSLColorString string `validate:"hsl"` |
|
||||||
HSLAColorString string `validate:"hsla"` |
|
||||||
Email string `validate:"email"` |
|
||||||
URL string `validate:"url"` |
|
||||||
URI string `validate:"uri"` |
|
||||||
Base64 string `validate:"base64"` |
|
||||||
Contains string `validate:"contains=purpose"` |
|
||||||
ContainsAny string `validate:"containsany=!@#$"` |
|
||||||
Excludes string `validate:"excludes=text"` |
|
||||||
ExcludesAll string `validate:"excludesall=!@#$"` |
|
||||||
ExcludesRune string `validate:"excludesrune=☻"` |
|
||||||
ISBN string `validate:"isbn"` |
|
||||||
ISBN10 string `validate:"isbn10"` |
|
||||||
ISBN13 string `validate:"isbn13"` |
|
||||||
UUID string `validate:"uuid"` |
|
||||||
UUID3 string `validate:"uuid3"` |
|
||||||
UUID4 string `validate:"uuid4"` |
|
||||||
UUID5 string `validate:"uuid5"` |
|
||||||
ULID string `validate:"ulid"` |
|
||||||
ASCII string `validate:"ascii"` |
|
||||||
PrintableASCII string `validate:"printascii"` |
|
||||||
MultiByte string `validate:"multibyte"` |
|
||||||
DataURI string `validate:"datauri"` |
|
||||||
Latitude string `validate:"latitude"` |
|
||||||
Longitude string `validate:"longitude"` |
|
||||||
SSN string `validate:"ssn"` |
|
||||||
IP string `validate:"ip"` |
|
||||||
IPv4 string `validate:"ipv4"` |
|
||||||
IPv6 string `validate:"ipv6"` |
|
||||||
CIDR string `validate:"cidr"` |
|
||||||
CIDRv4 string `validate:"cidrv4"` |
|
||||||
CIDRv6 string `validate:"cidrv6"` |
|
||||||
TCPAddr string `validate:"tcp_addr"` |
|
||||||
TCPAddrv4 string `validate:"tcp4_addr"` |
|
||||||
TCPAddrv6 string `validate:"tcp6_addr"` |
|
||||||
UDPAddr string `validate:"udp_addr"` |
|
||||||
UDPAddrv4 string `validate:"udp4_addr"` |
|
||||||
UDPAddrv6 string `validate:"udp6_addr"` |
|
||||||
IPAddr string `validate:"ip_addr"` |
|
||||||
IPAddrv4 string `validate:"ip4_addr"` |
|
||||||
IPAddrv6 string `validate:"ip6_addr"` |
|
||||||
UinxAddr string `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
|
|
||||||
MAC string `validate:"mac"` |
|
||||||
IsColor string `validate:"iscolor"` |
|
||||||
StrPtrMinLen *string `validate:"min=10"` |
|
||||||
StrPtrMaxLen *string `validate:"max=1"` |
|
||||||
StrPtrLen *string `validate:"len=2"` |
|
||||||
StrPtrLt *string `validate:"lt=1"` |
|
||||||
StrPtrLte *string `validate:"lte=1"` |
|
||||||
StrPtrGt *string `validate:"gt=10"` |
|
||||||
StrPtrGte *string `validate:"gte=10"` |
|
||||||
OneOfString string `validate:"oneof=red green"` |
|
||||||
OneOfInt int `validate:"oneof=5 63"` |
|
||||||
UniqueSlice []string `validate:"unique"` |
|
||||||
UniqueArray [3]string `validate:"unique"` |
|
||||||
UniqueMap map[string]string `validate:"unique"` |
|
||||||
JSONString string `validate:"json"` |
|
||||||
JWTString string `validate:"jwt"` |
|
||||||
LowercaseString string `validate:"lowercase"` |
|
||||||
UppercaseString string `validate:"uppercase"` |
|
||||||
Datetime string `validate:"datetime=2006-01-02"` |
|
||||||
PostCode string `validate:"postcode_iso3166_alpha2=SG"` |
|
||||||
PostCodeCountry string |
|
||||||
PostCodeByField string `validate:"postcode_iso3166_alpha2_field=PostCodeCountry"` |
|
||||||
BooleanString string `validate:"boolean"` |
|
||||||
} |
|
||||||
|
|
||||||
var test Test |
|
||||||
|
|
||||||
test.Inner.EqCSFieldString = "1234" |
|
||||||
test.Inner.GtCSFieldString = "1234" |
|
||||||
test.Inner.GteCSFieldString = "1234" |
|
||||||
|
|
||||||
test.MaxString = "1234" |
|
||||||
test.MaxNumber = 2000 |
|
||||||
test.MaxMultiple = make([]string, 9) |
|
||||||
|
|
||||||
test.LtString = "1234" |
|
||||||
test.LtNumber = 6 |
|
||||||
test.LtMultiple = make([]string, 3) |
|
||||||
test.LtTime = time.Now().Add(time.Hour * 24) |
|
||||||
|
|
||||||
test.LteString = "1234" |
|
||||||
test.LteNumber = 6 |
|
||||||
test.LteMultiple = make([]string, 3) |
|
||||||
test.LteTime = time.Now().Add(time.Hour * 24) |
|
||||||
|
|
||||||
test.LtFieldString = "12345" |
|
||||||
test.LteFieldString = "12345" |
|
||||||
|
|
||||||
test.LtCSFieldString = "1234" |
|
||||||
test.LteCSFieldString = "1234" |
|
||||||
|
|
||||||
test.AlphaString = "abc3" |
|
||||||
test.AlphanumString = "abc3!" |
|
||||||
test.NumericString = "12E.00" |
|
||||||
test.NumberString = "12E" |
|
||||||
|
|
||||||
test.Excludes = "this is some test text" |
|
||||||
test.ExcludesAll = "This is Great!" |
|
||||||
test.ExcludesRune = "Love it ☻" |
|
||||||
|
|
||||||
test.ASCII = "カタカナ" |
|
||||||
test.PrintableASCII = "カタカナ" |
|
||||||
|
|
||||||
test.MultiByte = "1234feerf" |
|
||||||
|
|
||||||
test.LowercaseString = "ABCDEFG" |
|
||||||
test.UppercaseString = "abcdefg" |
|
||||||
|
|
||||||
s := "toolong" |
|
||||||
test.StrPtrMaxLen = &s |
|
||||||
test.StrPtrLen = &s |
|
||||||
|
|
||||||
test.UniqueSlice = []string{"1234", "1234"} |
|
||||||
test.UniqueMap = map[string]string{"key1": "1234", "key2": "1234"} |
|
||||||
test.Datetime = "2008-Feb-01" |
|
||||||
test.BooleanString = "A" |
|
||||||
|
|
||||||
test.Inner.RequiredIf = "abcd" |
|
||||||
|
|
||||||
err = validate.Struct(test) |
|
||||||
NotEqual(t, err, nil) |
|
||||||
|
|
||||||
errs, ok := err.(validator.ValidationErrors) |
|
||||||
Equal(t, ok, true) |
|
||||||
|
|
||||||
tests := []struct { |
|
||||||
ns string |
|
||||||
expected string |
|
||||||
}{ |
|
||||||
{ |
|
||||||
ns: "Test.IsColor", |
|
||||||
expected: "IsColor jābūt derīgai krāsai", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MAC", |
|
||||||
expected: "MAC jābūt derīgai MAC adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddr", |
|
||||||
expected: "IPAddr jābūt atrisināmai IP adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddrv4", |
|
||||||
expected: "IPAddrv4 jābūt atrisināmai IPv4 adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddrv6", |
|
||||||
expected: "IPAddrv6 jābūt atrisināmai IPv6 adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddr", |
|
||||||
expected: "UDPAddr jābūt derīgai UDP adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddrv4", |
|
||||||
expected: "UDPAddrv4 jābūt derīgai IPv4 UDP adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddrv6", |
|
||||||
expected: "UDPAddrv6 jābūt derīgai IPv6 UDP adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddr", |
|
||||||
expected: "TCPAddr jābūt derīgai TCP adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddrv4", |
|
||||||
expected: "TCPAddrv4 jābūt derīgai IPv4 TCP adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddrv6", |
|
||||||
expected: "TCPAddrv6 jābūt derīgai IPv6 TCP adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDR", |
|
||||||
expected: "CIDR jāsatur derīgu CIDR notāciju", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDRv4", |
|
||||||
expected: "CIDRv4 jāsatur derīgu CIDR notāciju IPv4 adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDRv6", |
|
||||||
expected: "CIDRv6 jāsatur derīgu CIDR notāciju IPv6 adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.SSN", |
|
||||||
expected: "SSN jābūt derīgam SSN numuram", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IP", |
|
||||||
expected: "IP jābūt derīgai IP adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPv4", |
|
||||||
expected: "IPv4 jābūt derīgai IPv4 adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPv6", |
|
||||||
expected: "IPv6 jābūt derīgai IPv6 adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.DataURI", |
|
||||||
expected: "DataURI jāsatur derīgs Data URI", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Latitude", |
|
||||||
expected: "Latitude jāsatur derīgus platuma grādus", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Longitude", |
|
||||||
expected: "Longitude jāsatur derīgus garuma grādus", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MultiByte", |
|
||||||
expected: "MultiByte jāsatur multibyte rakstu zīmes", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ASCII", |
|
||||||
expected: "ASCII jāsatur tikai ascii rakstu zīmes", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.PrintableASCII", |
|
||||||
expected: "PrintableASCII jāsatur tikai drukājamas ascii rakstu zīmes", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID", |
|
||||||
expected: "UUID jābūt derīgam UUID", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID3", |
|
||||||
expected: "UUID3 jābūt derīgam 3. versijas UUID", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID4", |
|
||||||
expected: "UUID4 jābūt derīgam 4. versijas UUID", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID5", |
|
||||||
expected: "UUID5 jābūt derīgam 5. versijas UUID", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ULID", |
|
||||||
expected: "ULID jābūt derīgam ULID", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN", |
|
||||||
expected: "ISBN jābūt derīgam ISBN numuram", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN10", |
|
||||||
expected: "ISBN10 jābūt derīgam ISBN-10 numuram", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN13", |
|
||||||
expected: "ISBN13 jābūt derīgam ISBN-13 numuram", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Excludes", |
|
||||||
expected: "Excludes nedrīkst saturēt tekstu 'text'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ExcludesAll", |
|
||||||
expected: "ExcludesAll nedrīkst saturēt nevienu no sekojošām rakstu zīmēm '!@#$'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ExcludesRune", |
|
||||||
expected: "ExcludesRune nedrīkst saturēt sekojošo '☻'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ContainsAny", |
|
||||||
expected: "ContainsAny jāsatur minimums 1 no rakstu zīmēm '!@#$'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Contains", |
|
||||||
expected: "Contains jāsatur teksts 'purpose'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Base64", |
|
||||||
expected: "Base64 jābūt derīgai Base64 virknei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Email", |
|
||||||
expected: "Email jābūt derīgai e-pasta adresei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.URL", |
|
||||||
expected: "URL jābūt derīgam URL", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.URI", |
|
||||||
expected: "URI jābūt derīgam URI", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RGBColorString", |
|
||||||
expected: "RGBColorString jābūt derīgai RGB krāsai", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RGBAColorString", |
|
||||||
expected: "RGBAColorString jābūt derīgai RGBA krāsai", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HSLColorString", |
|
||||||
expected: "HSLColorString jābūt derīgai HSL krāsai", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HSLAColorString", |
|
||||||
expected: "HSLAColorString jābūt derīgai HSLA krāsai", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HexadecimalString", |
|
||||||
expected: "HexadecimalString jābūt heksadecimālam skaitlim", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HexColorString", |
|
||||||
expected: "HexColorString jābūt derīgai HEX krāsai", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NumberString", |
|
||||||
expected: "NumberString jāsatur derīgs skaitlis", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NumericString", |
|
||||||
expected: "NumericString jāsatur tikai cipari", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.AlphanumString", |
|
||||||
expected: "AlphanumString jāsatur tikai simboli no alfabēta vai cipari (Alphanumeric)", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.AlphaString", |
|
||||||
expected: "AlphaString jāsatur tikai simboli no alfabēta", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtFieldString", |
|
||||||
expected: "LtFieldString jābūt mazākam par MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteFieldString", |
|
||||||
expected: "LteFieldString jābūt mazākam par MaxString vai vienādam", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtFieldString", |
|
||||||
expected: "GtFieldString jābūt lielākam par MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteFieldString", |
|
||||||
expected: "GteFieldString jābūt lielākam par MaxString vai vienādam", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeFieldString", |
|
||||||
expected: "NeFieldString nedrīkst būt vienāds ar EqFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtCSFieldString", |
|
||||||
expected: "LtCSFieldString jābūt mazākam par Inner.LtCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteCSFieldString", |
|
||||||
expected: "LteCSFieldString jābūt mazākam par Inner.LteCSFieldString vai vienādam", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtCSFieldString", |
|
||||||
expected: "GtCSFieldString jābūt lielākam par Inner.GtCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteCSFieldString", |
|
||||||
expected: "GteCSFieldString jābūt lielākam par Inner.GteCSFieldString vai vienādam", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeCSFieldString", |
|
||||||
expected: "NeCSFieldString nedrīkst būt vienāds ar Inner.NeCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqCSFieldString", |
|
||||||
expected: "EqCSFieldString jābūt vienādam ar Inner.EqCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqFieldString", |
|
||||||
expected: "EqFieldString jābūt vienādam ar MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteString", |
|
||||||
expected: "GteString garumam jābūt minimums 3 rakstu zīmes", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteNumber", |
|
||||||
expected: "GteNumber jābūt 5.56 vai lielākam", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteMultiple", |
|
||||||
expected: "GteMultiple jāsatur minimums 2 elementi", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteTime", |
|
||||||
expected: "GteTime jābūt lielākam par šī brīža Datumu un laiku vai vienādam", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtString", |
|
||||||
expected: "GtString ir jābūt garākam par 3 rakstu zīmēm", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtNumber", |
|
||||||
expected: "GtNumber jābūt lielākam par 5.56", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtMultiple", |
|
||||||
expected: "GtMultiple jāsatur vairāk par 2 elementiem", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtTime", |
|
||||||
expected: "GtTime jābūt lielākam par šī brīža Datumu un laiku", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteString", |
|
||||||
expected: "LteString garumam jābūt maksimums 3 rakstu zīmes", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteNumber", |
|
||||||
expected: "LteNumber jābūt 5.56 vai mazākam", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteMultiple", |
|
||||||
expected: "LteMultiple jāsatur maksimums 2 elementi", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteTime", |
|
||||||
expected: "LteTime jābūt mazākam par šī brīža Datumu un laiku vai vienādam", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtString", |
|
||||||
expected: "LtString garumam jābūt mazākam par 3 rakstu zīmēm", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtNumber", |
|
||||||
expected: "LtNumber jābūt mazākam par 5.56", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtMultiple", |
|
||||||
expected: "LtMultiple jāsatur mazāk par 2 elementiem", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtTime", |
|
||||||
expected: "LtTime jābūt mazākam par šī brīža Datumu un laiku", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeString", |
|
||||||
expected: "NeString nedrīkst būt vienāds ar ", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeNumber", |
|
||||||
expected: "NeNumber nedrīkst būt vienāds ar 0.00", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeMultiple", |
|
||||||
expected: "NeMultiple nedrīkst būt vienāds ar 0", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqString", |
|
||||||
expected: "EqString nav vienāds ar 3", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqNumber", |
|
||||||
expected: "EqNumber nav vienāds ar 2.33", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqMultiple", |
|
||||||
expected: "EqMultiple nav vienāds ar 7", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxString", |
|
||||||
expected: "MaxString vērtība pārsniedz maksimālo garumu 3 rakstu zīmes", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxNumber", |
|
||||||
expected: "MaxNumber vērtībai jābūt 1,113.00 vai mazākai", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxMultiple", |
|
||||||
expected: "MaxMultiple jāsatur maksimums 7 elementi", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinString", |
|
||||||
expected: "MinString garumam jābūt minimums 1 rakstu zīme", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinNumber", |
|
||||||
expected: "MinNumber vērtībai jābūt 1,113.00 vai lielākai", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinMultiple", |
|
||||||
expected: "MinMultiple jāsatur minimums 7 elementi", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenString", |
|
||||||
expected: "LenString garumam jābūt 1 rakstu zīme", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenNumber", |
|
||||||
expected: "LenNumber vērtībai jābūt 1,113.00", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenMultiple", |
|
||||||
expected: "LenMultiple vērtībai jāsatur 7 elementi", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredString", |
|
||||||
expected: "RequiredString ir obligāts lauks", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredIf", |
|
||||||
expected: "RequiredIf ir obligāts lauks", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredNumber", |
|
||||||
expected: "RequiredNumber ir obligāts lauks", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredMultiple", |
|
||||||
expected: "RequiredMultiple ir obligāts lauks", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrMinLen", |
|
||||||
expected: "StrPtrMinLen garumam jābūt minimums 10 rakstu zīmes", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrMaxLen", |
|
||||||
expected: "StrPtrMaxLen vērtība pārsniedz maksimālo garumu 1 rakstu zīme", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLen", |
|
||||||
expected: "StrPtrLen garumam jābūt 2 rakstu zīmes", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLt", |
|
||||||
expected: "StrPtrLt garumam jābūt mazākam par 1 rakstu zīmi", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLte", |
|
||||||
expected: "StrPtrLte garumam jābūt maksimums 1 rakstu zīme", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrGt", |
|
||||||
expected: "StrPtrGt ir jābūt garākam par 10 rakstu zīmēm", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrGte", |
|
||||||
expected: "StrPtrGte garumam jābūt minimums 10 rakstu zīmes", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.OneOfString", |
|
||||||
expected: "OneOfString jābūt vienam no [red green]", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.OneOfInt", |
|
||||||
expected: "OneOfInt jābūt vienam no [5 63]", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueSlice", |
|
||||||
expected: "UniqueSlice jāsatur unikālas vērtības", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueArray", |
|
||||||
expected: "UniqueArray jāsatur unikālas vērtības", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueMap", |
|
||||||
expected: "UniqueMap jāsatur unikālas vērtības", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.JSONString", |
|
||||||
expected: "JSONString jābūt derīgai json virknei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.JWTString", |
|
||||||
expected: "JWTString jābūt derīgai jwt virknei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LowercaseString", |
|
||||||
expected: "LowercaseString jābūt mazo burtu virknei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UppercaseString", |
|
||||||
expected: "UppercaseString jābūt lielo burtu virknei", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Datetime", |
|
||||||
expected: "Datetime neatbilst formātam 2006-01-02", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.PostCode", |
|
||||||
expected: "PostCode neatbilst pasta indeksa formātam valstī SG", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.PostCodeByField", |
|
||||||
expected: "PostCodeByField neatbilst pasta indeksa formātam valstī, kura norādīta laukā PostCodeCountry", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.BooleanString", |
|
||||||
expected: "BooleanString jābūt derīgai boolean vērtībai", |
|
||||||
}, |
|
||||||
} |
|
||||||
|
|
||||||
for _, tt := range tests { |
|
||||||
|
|
||||||
var fe validator.FieldError |
|
||||||
|
|
||||||
for _, e := range errs { |
|
||||||
if tt.ns == e.Namespace() { |
|
||||||
fe = e |
|
||||||
break |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
NotEqual(t, fe, nil) |
|
||||||
Equal(t, tt.expected, fe.Translate(trans)) |
|
||||||
} |
|
||||||
} |
|
File diff suppressed because it is too large
Load Diff
@ -1,682 +0,0 @@ |
|||||||
package pt |
|
||||||
|
|
||||||
import ( |
|
||||||
"testing" |
|
||||||
"time" |
|
||||||
|
|
||||||
. "github.com/go-playground/assert/v2" |
|
||||||
"github.com/go-playground/locales/pt" |
|
||||||
ut "github.com/go-playground/universal-translator" |
|
||||||
|
|
||||||
"github.com/go-playground/validator/v10" |
|
||||||
) |
|
||||||
|
|
||||||
func TestTranslations(t *testing.T) { |
|
||||||
|
|
||||||
pt := pt.New() |
|
||||||
uni := ut.New(pt, pt) |
|
||||||
trans, _ := uni.GetTranslator("pt") |
|
||||||
|
|
||||||
validate := validator.New() |
|
||||||
|
|
||||||
err := RegisterDefaultTranslations(validate, trans) |
|
||||||
Equal(t, err, nil) |
|
||||||
|
|
||||||
type Inner struct { |
|
||||||
EqCSFieldString string |
|
||||||
NeCSFieldString string |
|
||||||
GtCSFieldString string |
|
||||||
GteCSFieldString string |
|
||||||
LtCSFieldString string |
|
||||||
LteCSFieldString string |
|
||||||
} |
|
||||||
|
|
||||||
type Test struct { |
|
||||||
Inner Inner |
|
||||||
RequiredString string `validate:"required"` |
|
||||||
RequiredNumber int `validate:"required"` |
|
||||||
RequiredMultiple []string `validate:"required"` |
|
||||||
LenString string `validate:"len=1"` |
|
||||||
LenNumber float64 `validate:"len=1113.00"` |
|
||||||
LenMultiple []string `validate:"len=7"` |
|
||||||
MinString string `validate:"min=1"` |
|
||||||
MinNumber float64 `validate:"min=1113.00"` |
|
||||||
MinMultiple []string `validate:"min=7"` |
|
||||||
MaxString string `validate:"max=3"` |
|
||||||
MaxNumber float64 `validate:"max=1113.00"` |
|
||||||
MaxMultiple []string `validate:"max=7"` |
|
||||||
EqString string `validate:"eq=3"` |
|
||||||
EqNumber float64 `validate:"eq=2.33"` |
|
||||||
EqMultiple []string `validate:"eq=7"` |
|
||||||
NeString string `validate:"ne="` |
|
||||||
NeNumber float64 `validate:"ne=0.00"` |
|
||||||
NeMultiple []string `validate:"ne=0"` |
|
||||||
LtString string `validate:"lt=3"` |
|
||||||
LtNumber float64 `validate:"lt=5.56"` |
|
||||||
LtMultiple []string `validate:"lt=2"` |
|
||||||
LtTime time.Time `validate:"lt"` |
|
||||||
LteString string `validate:"lte=3"` |
|
||||||
LteNumber float64 `validate:"lte=5.56"` |
|
||||||
LteMultiple []string `validate:"lte=2"` |
|
||||||
LteTime time.Time `validate:"lte"` |
|
||||||
GtString string `validate:"gt=3"` |
|
||||||
GtNumber float64 `validate:"gt=5.56"` |
|
||||||
GtMultiple []string `validate:"gt=2"` |
|
||||||
GtTime time.Time `validate:"gt"` |
|
||||||
GteString string `validate:"gte=3"` |
|
||||||
GteNumber float64 `validate:"gte=5.56"` |
|
||||||
GteMultiple []string `validate:"gte=2"` |
|
||||||
GteTime time.Time `validate:"gte"` |
|
||||||
EqFieldString string `validate:"eqfield=MaxString"` |
|
||||||
EqCSFieldString string `validate:"eqcsfield=Inner.EqCSFieldString"` |
|
||||||
NeCSFieldString string `validate:"necsfield=Inner.NeCSFieldString"` |
|
||||||
GtCSFieldString string `validate:"gtcsfield=Inner.GtCSFieldString"` |
|
||||||
GteCSFieldString string `validate:"gtecsfield=Inner.GteCSFieldString"` |
|
||||||
LtCSFieldString string `validate:"ltcsfield=Inner.LtCSFieldString"` |
|
||||||
LteCSFieldString string `validate:"ltecsfield=Inner.LteCSFieldString"` |
|
||||||
NeFieldString string `validate:"nefield=EqFieldString"` |
|
||||||
GtFieldString string `validate:"gtfield=MaxString"` |
|
||||||
GteFieldString string `validate:"gtefield=MaxString"` |
|
||||||
LtFieldString string `validate:"ltfield=MaxString"` |
|
||||||
LteFieldString string `validate:"ltefield=MaxString"` |
|
||||||
AlphaString string `validate:"alpha"` |
|
||||||
AlphanumString string `validate:"alphanum"` |
|
||||||
NumericString string `validate:"numeric"` |
|
||||||
NumberString string `validate:"number"` |
|
||||||
HexadecimalString string `validate:"hexadecimal"` |
|
||||||
HexColorString string `validate:"hexcolor"` |
|
||||||
RGBColorString string `validate:"rgb"` |
|
||||||
RGBAColorString string `validate:"rgba"` |
|
||||||
HSLColorString string `validate:"hsl"` |
|
||||||
HSLAColorString string `validate:"hsla"` |
|
||||||
Email string `validate:"email"` |
|
||||||
URL string `validate:"url"` |
|
||||||
URI string `validate:"uri"` |
|
||||||
Base64 string `validate:"base64"` |
|
||||||
Contains string `validate:"contains=purpose"` |
|
||||||
ContainsAny string `validate:"containsany=!@#$"` |
|
||||||
Excludes string `validate:"excludes=text"` |
|
||||||
ExcludesAll string `validate:"excludesall=!@#$"` |
|
||||||
ExcludesRune string `validate:"excludesrune=☻"` |
|
||||||
ISBN string `validate:"isbn"` |
|
||||||
ISBN10 string `validate:"isbn10"` |
|
||||||
ISBN13 string `validate:"isbn13"` |
|
||||||
UUID string `validate:"uuid"` |
|
||||||
UUID3 string `validate:"uuid3"` |
|
||||||
UUID4 string `validate:"uuid4"` |
|
||||||
UUID5 string `validate:"uuid5"` |
|
||||||
ULID string `validate:"ulid"` |
|
||||||
ASCII string `validate:"ascii"` |
|
||||||
PrintableASCII string `validate:"printascii"` |
|
||||||
MultiByte string `validate:"multibyte"` |
|
||||||
DataURI string `validate:"datauri"` |
|
||||||
Latitude string `validate:"latitude"` |
|
||||||
Longitude string `validate:"longitude"` |
|
||||||
SSN string `validate:"ssn"` |
|
||||||
IP string `validate:"ip"` |
|
||||||
IPv4 string `validate:"ipv4"` |
|
||||||
IPv6 string `validate:"ipv6"` |
|
||||||
CIDR string `validate:"cidr"` |
|
||||||
CIDRv4 string `validate:"cidrv4"` |
|
||||||
CIDRv6 string `validate:"cidrv6"` |
|
||||||
TCPAddr string `validate:"tcp_addr"` |
|
||||||
TCPAddrv4 string `validate:"tcp4_addr"` |
|
||||||
TCPAddrv6 string `validate:"tcp6_addr"` |
|
||||||
UDPAddr string `validate:"udp_addr"` |
|
||||||
UDPAddrv4 string `validate:"udp4_addr"` |
|
||||||
UDPAddrv6 string `validate:"udp6_addr"` |
|
||||||
IPAddr string `validate:"ip_addr"` |
|
||||||
IPAddrv4 string `validate:"ip4_addr"` |
|
||||||
IPAddrv6 string `validate:"ip6_addr"` |
|
||||||
UinxAddr string `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
|
|
||||||
MAC string `validate:"mac"` |
|
||||||
IsColor string `validate:"iscolor"` |
|
||||||
StrPtrMinLen *string `validate:"min=10"` |
|
||||||
StrPtrMaxLen *string `validate:"max=1"` |
|
||||||
StrPtrLen *string `validate:"len=2"` |
|
||||||
StrPtrLt *string `validate:"lt=1"` |
|
||||||
StrPtrLte *string `validate:"lte=1"` |
|
||||||
StrPtrGt *string `validate:"gt=10"` |
|
||||||
StrPtrGte *string `validate:"gte=10"` |
|
||||||
OneOfString string `validate:"oneof=red green"` |
|
||||||
OneOfInt int `validate:"oneof=5 63"` |
|
||||||
UniqueSlice []string `validate:"unique"` |
|
||||||
UniqueArray [3]string `validate:"unique"` |
|
||||||
UniqueMap map[string]string `validate:"unique"` |
|
||||||
JSONString string `validate:"json"` |
|
||||||
LowercaseString string `validate:"lowercase"` |
|
||||||
UppercaseString string `validate:"uppercase"` |
|
||||||
Datetime string `validate:"datetime=2006-01-02"` |
|
||||||
} |
|
||||||
|
|
||||||
var test Test |
|
||||||
|
|
||||||
test.Inner.EqCSFieldString = "1234" |
|
||||||
test.Inner.GtCSFieldString = "1234" |
|
||||||
test.Inner.GteCSFieldString = "1234" |
|
||||||
|
|
||||||
test.MaxString = "1234" |
|
||||||
test.MaxNumber = 2000 |
|
||||||
test.MaxMultiple = make([]string, 9) |
|
||||||
|
|
||||||
test.LtString = "1234" |
|
||||||
test.LtNumber = 6 |
|
||||||
test.LtMultiple = make([]string, 3) |
|
||||||
test.LtTime = time.Now().Add(time.Hour * 24) |
|
||||||
|
|
||||||
test.LteString = "1234" |
|
||||||
test.LteNumber = 6 |
|
||||||
test.LteMultiple = make([]string, 3) |
|
||||||
test.LteTime = time.Now().Add(time.Hour * 24) |
|
||||||
|
|
||||||
test.LtFieldString = "12345" |
|
||||||
test.LteFieldString = "12345" |
|
||||||
|
|
||||||
test.LtCSFieldString = "1234" |
|
||||||
test.LteCSFieldString = "1234" |
|
||||||
|
|
||||||
test.AlphaString = "abc3" |
|
||||||
test.AlphanumString = "abc3!" |
|
||||||
test.NumericString = "12E.00" |
|
||||||
test.NumberString = "12E" |
|
||||||
|
|
||||||
test.Excludes = "this is some test text" |
|
||||||
test.ExcludesAll = "This is Great!" |
|
||||||
test.ExcludesRune = "Love it ☻" |
|
||||||
|
|
||||||
test.ASCII = "カタカナ" |
|
||||||
test.PrintableASCII = "カタカナ" |
|
||||||
|
|
||||||
test.MultiByte = "1234feerf" |
|
||||||
|
|
||||||
test.LowercaseString = "ABCDEFG" |
|
||||||
test.UppercaseString = "abcdefg" |
|
||||||
|
|
||||||
s := "toolong" |
|
||||||
test.StrPtrMaxLen = &s |
|
||||||
test.StrPtrLen = &s |
|
||||||
|
|
||||||
test.UniqueSlice = []string{"1234", "1234"} |
|
||||||
test.UniqueMap = map[string]string{"key1": "1234", "key2": "1234"} |
|
||||||
test.Datetime = "2008-Feb-01" |
|
||||||
|
|
||||||
err = validate.Struct(test) |
|
||||||
NotEqual(t, err, nil) |
|
||||||
|
|
||||||
errs, ok := err.(validator.ValidationErrors) |
|
||||||
Equal(t, ok, true) |
|
||||||
|
|
||||||
tests := []struct { |
|
||||||
ns string |
|
||||||
expected string |
|
||||||
}{ |
|
||||||
{ |
|
||||||
ns: "Test.IsColor", |
|
||||||
expected: "IsColor deve ser uma cor válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MAC", |
|
||||||
expected: "MAC deve conter um endereço MAC válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddr", |
|
||||||
expected: "IPAddr deve ser um endereço IP resolvível", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddrv4", |
|
||||||
expected: "IPAddrv4 deve ser um endereço IPv4 resolvível", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddrv6", |
|
||||||
expected: "IPAddrv6 deve ser um endereço IPv6 resolvível", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddr", |
|
||||||
expected: "UDPAddr deve ser um endereço UDP válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddrv4", |
|
||||||
expected: "UDPAddrv4 deve ser um endereço UDP IPv4 válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddrv6", |
|
||||||
expected: "UDPAddrv6 deve ser um endereço UDP IPv6 válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddr", |
|
||||||
expected: "TCPAddr deve ser um endereço TCP válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddrv4", |
|
||||||
expected: "TCPAddrv4 deve ser um endereço TCP IPv4 válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddrv6", |
|
||||||
expected: "TCPAddrv6 deve ser um endereço TCP IPv6 válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDR", |
|
||||||
expected: "CIDR não respeita a notação CIDR", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDRv4", |
|
||||||
expected: "CIDRv4 não respeita a notação CIDR para um endereço IPv4", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDRv6", |
|
||||||
expected: "CIDRv6 não respeita a notação CIDR para um endereço IPv6", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.SSN", |
|
||||||
expected: "SSN deve ser um número SSN válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IP", |
|
||||||
expected: "IP deve ser um endereço IP válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPv4", |
|
||||||
expected: "IPv4 deve ser um endereço IPv4 válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPv6", |
|
||||||
expected: "IPv6 deve ser um endereço IPv6 válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.DataURI", |
|
||||||
expected: "DataURI deve conter um Data URI válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Latitude", |
|
||||||
expected: "Latitude deve conter uma coordenada de latitude válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Longitude", |
|
||||||
expected: "Longitude deve conter uma coordenada de longitude válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MultiByte", |
|
||||||
expected: "MultiByte deve conter caracteres multibyte", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ASCII", |
|
||||||
expected: "ASCII deve conter apenas caracteres ascii", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.PrintableASCII", |
|
||||||
expected: "PrintableASCII deve conter apenas caracteres ascii imprimíveis", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID", |
|
||||||
expected: "UUID deve ser um UUID válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID3", |
|
||||||
expected: "UUID3 deve ser um UUID versão 3 válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID4", |
|
||||||
expected: "UUID4 deve ser um UUID versão 4 válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID5", |
|
||||||
expected: "UUID5 deve ser um UUID versão 5 válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ULID", |
|
||||||
expected: "ULID deve ser um ULID válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN", |
|
||||||
expected: "ISBN deve ser um número de ISBN válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN10", |
|
||||||
expected: "ISBN10 deve ser um número ISBN-10 válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN13", |
|
||||||
expected: "ISBN13 deve ser um número ISBN-13 válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Excludes", |
|
||||||
expected: "Excludes não deve conter o texto 'text'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ExcludesAll", |
|
||||||
expected: "ExcludesAll não deve conter os seguintes caracteres '!@#$'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ExcludesRune", |
|
||||||
expected: "ExcludesRune não pode conter o seguinte '☻'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ContainsAny", |
|
||||||
expected: "ContainsAny deve conter pelo menos um dos seguintes caracteres '!@#$'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Contains", |
|
||||||
expected: "Contains deve conter o texto 'purpose'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Base64", |
|
||||||
expected: "Base64 deve ser uma string Base64 válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Email", |
|
||||||
expected: "Email deve ser um endereço de e-mail válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.URL", |
|
||||||
expected: "URL deve ser um URL válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.URI", |
|
||||||
expected: "URI deve ser um URI válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RGBColorString", |
|
||||||
expected: "RGBColorString deve ser uma cor RGB válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RGBAColorString", |
|
||||||
expected: "RGBAColorString deve ser uma cor RGBA válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HSLColorString", |
|
||||||
expected: "HSLColorString deve ser uma cor HSL válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HSLAColorString", |
|
||||||
expected: "HSLAColorString deve ser uma cor HSLA válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HexadecimalString", |
|
||||||
expected: "HexadecimalString deve ser um hexadecimal válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HexColorString", |
|
||||||
expected: "HexColorString deve ser uma cor HEX válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NumberString", |
|
||||||
expected: "NumberString deve ser um número válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NumericString", |
|
||||||
expected: "NumericString deve ser um valor numérico válido", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.AlphanumString", |
|
||||||
expected: "AlphanumString deve conter apenas caracteres alfanuméricos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.AlphaString", |
|
||||||
expected: "AlphaString deve conter apenas caracteres alfabéticos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtFieldString", |
|
||||||
expected: "LtFieldString deve ser menor que MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteFieldString", |
|
||||||
expected: "LteFieldString deve ser menor ou igual que MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtFieldString", |
|
||||||
expected: "GtFieldString deve ser maior que MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteFieldString", |
|
||||||
expected: "GteFieldString deve ser maior ou igual que MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeFieldString", |
|
||||||
expected: "NeFieldString não deve ser igual a EqFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtCSFieldString", |
|
||||||
expected: "LtCSFieldString deve ser menor que Inner.LtCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteCSFieldString", |
|
||||||
expected: "LteCSFieldString deve ser menor ou igual que Inner.LteCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtCSFieldString", |
|
||||||
expected: "GtCSFieldString deve ser maior que Inner.GtCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteCSFieldString", |
|
||||||
expected: "GteCSFieldString deve ser maior ou igual que Inner.GteCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeCSFieldString", |
|
||||||
expected: "NeCSFieldString não deve ser igual a Inner.NeCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqCSFieldString", |
|
||||||
expected: "EqCSFieldString deve ser igual a Inner.EqCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqFieldString", |
|
||||||
expected: "EqFieldString deve ser igual a MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteString", |
|
||||||
expected: "GteString deve ter pelo menos 3 caracteres", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteNumber", |
|
||||||
expected: "GteNumber deve ser maior ou igual a 5,56", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteMultiple", |
|
||||||
expected: "GteMultiple deve conter pelo menos 2 items", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteTime", |
|
||||||
expected: "GteTime deve ser posterior ou igual à data/hora atual", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtString", |
|
||||||
expected: "GtString deve conter mais de 3 caracteres", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtNumber", |
|
||||||
expected: "GtNumber deve ser maior que 5,56", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtMultiple", |
|
||||||
expected: "GtMultiple deve conter mais de 2 items", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtTime", |
|
||||||
expected: "GtTime deve ser posterior à data/hora atual", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteString", |
|
||||||
expected: "LteString deve ter no máximo 3 caracteres", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteNumber", |
|
||||||
expected: "LteNumber deve ser menor ou igual a 5,56", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteMultiple", |
|
||||||
expected: "LteMultiple deve conter no máximo 2 items", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteTime", |
|
||||||
expected: "LteTime deve ser anterior ou igual à data/hora atual", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtString", |
|
||||||
expected: "LtString deve ter menos de 3 caracteres", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtNumber", |
|
||||||
expected: "LtNumber deve ser menor que 5,56", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtMultiple", |
|
||||||
expected: "LtMultiple deve conter menos de 2 items", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtTime", |
|
||||||
expected: "LtTime deve ser anterior à data / hora atual", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeString", |
|
||||||
expected: "NeString não deve ser igual a ", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeNumber", |
|
||||||
expected: "NeNumber não deve ser igual a 0.00", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeMultiple", |
|
||||||
expected: "NeMultiple não deve ser igual a 0", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqString", |
|
||||||
expected: "EqString não é igual a 3", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqNumber", |
|
||||||
expected: "EqNumber não é igual a 2.33", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqMultiple", |
|
||||||
expected: "EqMultiple não é igual a 7", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxString", |
|
||||||
expected: "MaxString deve ter no máximo 3 caracteres", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxNumber", |
|
||||||
expected: "MaxNumber deve ser 1.113,00 ou menos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxMultiple", |
|
||||||
expected: "MaxMultiple deve conter no máximo 7 items", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinString", |
|
||||||
expected: "MinString deve ter pelo menos 1 caractere", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinNumber", |
|
||||||
expected: "MinNumber deve ser 1.113,00 ou superior", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinMultiple", |
|
||||||
expected: "MinMultiple deve conter pelo menos 7 items", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenString", |
|
||||||
expected: "LenString deve ter 1 caractere", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenNumber", |
|
||||||
expected: "LenNumber deve ser igual a 1.113,00", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenMultiple", |
|
||||||
expected: "LenMultiple deve conter 7 items", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredString", |
|
||||||
expected: "RequiredString é obrigatório", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredNumber", |
|
||||||
expected: "RequiredNumber é obrigatório", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredMultiple", |
|
||||||
expected: "RequiredMultiple é obrigatório", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrMinLen", |
|
||||||
expected: "StrPtrMinLen deve ter pelo menos 10 caracteres", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrMaxLen", |
|
||||||
expected: "StrPtrMaxLen deve ter no máximo 1 caractere", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLen", |
|
||||||
expected: "StrPtrLen deve ter 2 caracteres", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLt", |
|
||||||
expected: "StrPtrLt deve ter menos de 1 caractere", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLte", |
|
||||||
expected: "StrPtrLte deve ter no máximo 1 caractere", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrGt", |
|
||||||
expected: "StrPtrGt deve conter mais de 10 caracteres", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrGte", |
|
||||||
expected: "StrPtrGte deve ter pelo menos 10 caracteres", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.OneOfString", |
|
||||||
expected: "OneOfString deve ser um de [red green]", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.OneOfInt", |
|
||||||
expected: "OneOfInt deve ser um de [5 63]", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueSlice", |
|
||||||
expected: "UniqueSlice deve conter valores únicos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueArray", |
|
||||||
expected: "UniqueArray deve conter valores únicos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueMap", |
|
||||||
expected: "UniqueMap deve conter valores únicos", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.JSONString", |
|
||||||
expected: "JSONString deve ser uma string json válida", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LowercaseString", |
|
||||||
expected: "LowercaseString deve estar em minuscúlas", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UppercaseString", |
|
||||||
expected: "UppercaseString deve estar em maiúsculas", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Datetime", |
|
||||||
expected: "Datetime não está no formato 2006-01-02", |
|
||||||
}, |
|
||||||
} |
|
||||||
|
|
||||||
for _, tt := range tests { |
|
||||||
|
|
||||||
var fe validator.FieldError |
|
||||||
|
|
||||||
for _, e := range errs { |
|
||||||
if tt.ns == e.Namespace() { |
|
||||||
fe = e |
|
||||||
break |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
NotEqual(t, fe, nil) |
|
||||||
Equal(t, tt.expected, fe.Translate(trans)) |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,657 +0,0 @@ |
|||||||
package tr |
|
||||||
|
|
||||||
import ( |
|
||||||
"testing" |
|
||||||
"time" |
|
||||||
|
|
||||||
. "github.com/go-playground/assert/v2" |
|
||||||
turkish "github.com/go-playground/locales/tr" |
|
||||||
ut "github.com/go-playground/universal-translator" |
|
||||||
"github.com/go-playground/validator/v10" |
|
||||||
) |
|
||||||
|
|
||||||
func TestTranslations(t *testing.T) { |
|
||||||
|
|
||||||
tr := turkish.New() |
|
||||||
uni := ut.New(tr, tr) |
|
||||||
trans, _ := uni.GetTranslator("tr") |
|
||||||
|
|
||||||
validate := validator.New() |
|
||||||
|
|
||||||
err := RegisterDefaultTranslations(validate, trans) |
|
||||||
Equal(t, err, nil) |
|
||||||
|
|
||||||
type Inner struct { |
|
||||||
EqCSFieldString string |
|
||||||
NeCSFieldString string |
|
||||||
GtCSFieldString string |
|
||||||
GteCSFieldString string |
|
||||||
LtCSFieldString string |
|
||||||
LteCSFieldString string |
|
||||||
} |
|
||||||
|
|
||||||
type Test struct { |
|
||||||
Inner Inner |
|
||||||
RequiredString string `validate:"required"` |
|
||||||
RequiredNumber int `validate:"required"` |
|
||||||
RequiredMultiple []string `validate:"required"` |
|
||||||
LenString string `validate:"len=1"` |
|
||||||
LenNumber float64 `validate:"len=1113.00"` |
|
||||||
LenMultiple []string `validate:"len=7"` |
|
||||||
MinString string `validate:"min=1"` |
|
||||||
MinNumber float64 `validate:"min=1113.00"` |
|
||||||
MinMultiple []string `validate:"min=7"` |
|
||||||
MaxString string `validate:"max=3"` |
|
||||||
MaxNumber float64 `validate:"max=1113.00"` |
|
||||||
MaxMultiple []string `validate:"max=7"` |
|
||||||
EqString string `validate:"eq=3"` |
|
||||||
EqNumber float64 `validate:"eq=2.33"` |
|
||||||
EqMultiple []string `validate:"eq=7"` |
|
||||||
NeString string `validate:"ne="` |
|
||||||
NeNumber float64 `validate:"ne=0.00"` |
|
||||||
NeMultiple []string `validate:"ne=0"` |
|
||||||
LtString string `validate:"lt=3"` |
|
||||||
LtNumber float64 `validate:"lt=5.56"` |
|
||||||
LtMultiple []string `validate:"lt=2"` |
|
||||||
LtTime time.Time `validate:"lt"` |
|
||||||
LteString string `validate:"lte=3"` |
|
||||||
LteNumber float64 `validate:"lte=5.56"` |
|
||||||
LteMultiple []string `validate:"lte=2"` |
|
||||||
LteTime time.Time `validate:"lte"` |
|
||||||
GtString string `validate:"gt=3"` |
|
||||||
GtNumber float64 `validate:"gt=5.56"` |
|
||||||
GtMultiple []string `validate:"gt=2"` |
|
||||||
GtTime time.Time `validate:"gt"` |
|
||||||
GteString string `validate:"gte=3"` |
|
||||||
GteNumber float64 `validate:"gte=5.56"` |
|
||||||
GteMultiple []string `validate:"gte=2"` |
|
||||||
GteTime time.Time `validate:"gte"` |
|
||||||
EqFieldString string `validate:"eqfield=MaxString"` |
|
||||||
EqCSFieldString string `validate:"eqcsfield=Inner.EqCSFieldString"` |
|
||||||
NeCSFieldString string `validate:"necsfield=Inner.NeCSFieldString"` |
|
||||||
GtCSFieldString string `validate:"gtcsfield=Inner.GtCSFieldString"` |
|
||||||
GteCSFieldString string `validate:"gtecsfield=Inner.GteCSFieldString"` |
|
||||||
LtCSFieldString string `validate:"ltcsfield=Inner.LtCSFieldString"` |
|
||||||
LteCSFieldString string `validate:"ltecsfield=Inner.LteCSFieldString"` |
|
||||||
NeFieldString string `validate:"nefield=EqFieldString"` |
|
||||||
GtFieldString string `validate:"gtfield=MaxString"` |
|
||||||
GteFieldString string `validate:"gtefield=MaxString"` |
|
||||||
LtFieldString string `validate:"ltfield=MaxString"` |
|
||||||
LteFieldString string `validate:"ltefield=MaxString"` |
|
||||||
AlphaString string `validate:"alpha"` |
|
||||||
AlphanumString string `validate:"alphanum"` |
|
||||||
NumericString string `validate:"numeric"` |
|
||||||
NumberString string `validate:"number"` |
|
||||||
HexadecimalString string `validate:"hexadecimal"` |
|
||||||
HexColorString string `validate:"hexcolor"` |
|
||||||
RGBColorString string `validate:"rgb"` |
|
||||||
RGBAColorString string `validate:"rgba"` |
|
||||||
HSLColorString string `validate:"hsl"` |
|
||||||
HSLAColorString string `validate:"hsla"` |
|
||||||
Email string `validate:"email"` |
|
||||||
URL string `validate:"url"` |
|
||||||
URI string `validate:"uri"` |
|
||||||
Base64 string `validate:"base64"` |
|
||||||
Contains string `validate:"contains=purpose"` |
|
||||||
ContainsAny string `validate:"containsany=!@#$"` |
|
||||||
Excludes string `validate:"excludes=text"` |
|
||||||
ExcludesAll string `validate:"excludesall=!@#$"` |
|
||||||
ExcludesRune string `validate:"excludesrune=☻"` |
|
||||||
ISBN string `validate:"isbn"` |
|
||||||
ISBN10 string `validate:"isbn10"` |
|
||||||
ISBN13 string `validate:"isbn13"` |
|
||||||
UUID string `validate:"uuid"` |
|
||||||
UUID3 string `validate:"uuid3"` |
|
||||||
UUID4 string `validate:"uuid4"` |
|
||||||
UUID5 string `validate:"uuid5"` |
|
||||||
ULID string `validate:"ulid"` |
|
||||||
ASCII string `validate:"ascii"` |
|
||||||
PrintableASCII string `validate:"printascii"` |
|
||||||
MultiByte string `validate:"multibyte"` |
|
||||||
DataURI string `validate:"datauri"` |
|
||||||
Latitude string `validate:"latitude"` |
|
||||||
Longitude string `validate:"longitude"` |
|
||||||
SSN string `validate:"ssn"` |
|
||||||
IP string `validate:"ip"` |
|
||||||
IPv4 string `validate:"ipv4"` |
|
||||||
IPv6 string `validate:"ipv6"` |
|
||||||
CIDR string `validate:"cidr"` |
|
||||||
CIDRv4 string `validate:"cidrv4"` |
|
||||||
CIDRv6 string `validate:"cidrv6"` |
|
||||||
TCPAddr string `validate:"tcp_addr"` |
|
||||||
TCPAddrv4 string `validate:"tcp4_addr"` |
|
||||||
TCPAddrv6 string `validate:"tcp6_addr"` |
|
||||||
UDPAddr string `validate:"udp_addr"` |
|
||||||
UDPAddrv4 string `validate:"udp4_addr"` |
|
||||||
UDPAddrv6 string `validate:"udp6_addr"` |
|
||||||
IPAddr string `validate:"ip_addr"` |
|
||||||
IPAddrv4 string `validate:"ip4_addr"` |
|
||||||
IPAddrv6 string `validate:"ip6_addr"` |
|
||||||
UinxAddr string `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
|
|
||||||
MAC string `validate:"mac"` |
|
||||||
IsColor string `validate:"iscolor"` |
|
||||||
StrPtrMinLen *string `validate:"min=10"` |
|
||||||
StrPtrMaxLen *string `validate:"max=1"` |
|
||||||
StrPtrLen *string `validate:"len=2"` |
|
||||||
StrPtrLt *string `validate:"lt=1"` |
|
||||||
StrPtrLte *string `validate:"lte=1"` |
|
||||||
StrPtrGt *string `validate:"gt=10"` |
|
||||||
StrPtrGte *string `validate:"gte=10"` |
|
||||||
OneOfString string `validate:"oneof=red green"` |
|
||||||
OneOfInt int `validate:"oneof=5 63"` |
|
||||||
UniqueSlice []string `validate:"unique"` |
|
||||||
UniqueArray [3]string `validate:"unique"` |
|
||||||
UniqueMap map[string]string `validate:"unique"` |
|
||||||
} |
|
||||||
|
|
||||||
var test Test |
|
||||||
|
|
||||||
test.Inner.EqCSFieldString = "1234" |
|
||||||
test.Inner.GtCSFieldString = "1234" |
|
||||||
test.Inner.GteCSFieldString = "1234" |
|
||||||
|
|
||||||
test.MaxString = "1234" |
|
||||||
test.MaxNumber = 2000 |
|
||||||
test.MaxMultiple = make([]string, 9) |
|
||||||
|
|
||||||
test.LtString = "1234" |
|
||||||
test.LtNumber = 6 |
|
||||||
test.LtMultiple = make([]string, 3) |
|
||||||
test.LtTime = time.Now().Add(time.Hour * 24) |
|
||||||
|
|
||||||
test.LteString = "1234" |
|
||||||
test.LteNumber = 6 |
|
||||||
test.LteMultiple = make([]string, 3) |
|
||||||
test.LteTime = time.Now().Add(time.Hour * 24) |
|
||||||
|
|
||||||
test.LtFieldString = "12345" |
|
||||||
test.LteFieldString = "12345" |
|
||||||
|
|
||||||
test.LtCSFieldString = "1234" |
|
||||||
test.LteCSFieldString = "1234" |
|
||||||
|
|
||||||
test.AlphaString = "abc3" |
|
||||||
test.AlphanumString = "abc3!" |
|
||||||
test.NumericString = "12E.00" |
|
||||||
test.NumberString = "12E" |
|
||||||
|
|
||||||
test.Excludes = "this is some test text" |
|
||||||
test.ExcludesAll = "This is Great!" |
|
||||||
test.ExcludesRune = "Love it ☻" |
|
||||||
|
|
||||||
test.ASCII = "カタカナ" |
|
||||||
test.PrintableASCII = "カタカナ" |
|
||||||
|
|
||||||
test.MultiByte = "1234feerf" |
|
||||||
|
|
||||||
s := "toolong" |
|
||||||
test.StrPtrMaxLen = &s |
|
||||||
test.StrPtrLen = &s |
|
||||||
|
|
||||||
test.UniqueSlice = []string{"1234", "1234"} |
|
||||||
test.UniqueMap = map[string]string{"key1": "1234", "key2": "1234"} |
|
||||||
|
|
||||||
err = validate.Struct(test) |
|
||||||
NotEqual(t, err, nil) |
|
||||||
|
|
||||||
errs, ok := err.(validator.ValidationErrors) |
|
||||||
Equal(t, ok, true) |
|
||||||
|
|
||||||
tests := []struct { |
|
||||||
ns string |
|
||||||
expected string |
|
||||||
}{ |
|
||||||
{ |
|
||||||
ns: "Test.IsColor", |
|
||||||
expected: "IsColor geçerli bir renk olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MAC", |
|
||||||
expected: "MAC geçerli bir MAC adresi içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddr", |
|
||||||
expected: "IPAddr çözülebilir bir IP adresi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddrv4", |
|
||||||
expected: "IPAddrv4 çözülebilir bir IPv4 adresi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddrv6", |
|
||||||
expected: "IPAddrv6 çözülebilir bir IPv6 adresi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddr", |
|
||||||
expected: "UDPAddr geçerli bir UDP adresi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddrv4", |
|
||||||
expected: "UDPAddrv4 geçerli bir IPv4 UDP adresi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddrv6", |
|
||||||
expected: "UDPAddrv6 geçerli bir IPv6 UDP adresi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddr", |
|
||||||
expected: "TCPAddr geçerli bir TCP adresi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddrv4", |
|
||||||
expected: "TCPAddrv4 geçerli bir IPv4 TCP adresi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddrv6", |
|
||||||
expected: "TCPAddrv6 geçerli bir IPv6 TCP adresi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDR", |
|
||||||
expected: "CIDR geçerli bir CIDR gösterimi içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDRv4", |
|
||||||
expected: "CIDRv4 bir IPv4 adresi için geçerli bir CIDR gösterimi içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDRv6", |
|
||||||
expected: "CIDRv6 bir IPv6 adresi için geçerli bir CIDR gösterimi içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.SSN", |
|
||||||
expected: "SSN geçerli bir SSN numarası olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IP", |
|
||||||
expected: "IP geçerli bir IP adresi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPv4", |
|
||||||
expected: "IPv4 geçerli bir IPv4 adresi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPv6", |
|
||||||
expected: "IPv6 geçerli bir IPv6 adresi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.DataURI", |
|
||||||
expected: "DataURI geçerli bir Veri URI içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Latitude", |
|
||||||
expected: "Latitude geçerli bir enlem koordinatı içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Longitude", |
|
||||||
expected: "Longitude geçerli bir boylam koordinatı içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MultiByte", |
|
||||||
expected: "MultiByte çok baytlı karakterler içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ASCII", |
|
||||||
expected: "ASCII yalnızca ascii karakterler içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.PrintableASCII", |
|
||||||
expected: "PrintableASCII yalnızca yazdırılabilir ascii karakterleri içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID", |
|
||||||
expected: "UUID geçerli bir UUID olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID3", |
|
||||||
expected: "UUID3 geçerli bir sürüm 3 UUID olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID4", |
|
||||||
expected: "UUID4 geçerli bir sürüm 4 UUID olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID5", |
|
||||||
expected: "UUID5 geçerli bir sürüm 5 UUID olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ULID", |
|
||||||
expected: "ULID geçerli bir ULID olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN", |
|
||||||
expected: "ISBN geçerli bir ISBN numarası olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN10", |
|
||||||
expected: "ISBN10 geçerli bir ISBN-10 numarası olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN13", |
|
||||||
expected: "ISBN13 geçerli bir ISBN-13 numarası olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Excludes", |
|
||||||
expected: "Excludes, 'text' metnini içeremez", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ExcludesAll", |
|
||||||
expected: "ExcludesAll, '!@#$' karakterlerinden hiçbirini içeremez", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ExcludesRune", |
|
||||||
expected: "ExcludesRune, '☻' ifadesini içeremez", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ContainsAny", |
|
||||||
expected: "ContainsAny, '!@#$' karakterlerinden en az birini içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Contains", |
|
||||||
expected: "Contains, 'purpose' metnini içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Base64", |
|
||||||
expected: "Base64 geçerli bir Base64 karakter dizesi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Email", |
|
||||||
expected: "Email geçerli bir e-posta adresi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.URL", |
|
||||||
expected: "URL geçerli bir URL olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.URI", |
|
||||||
expected: "URI geçerli bir URI olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RGBColorString", |
|
||||||
expected: "RGBColorString geçerli bir RGB rengi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RGBAColorString", |
|
||||||
expected: "RGBAColorString geçerli bir RGBA rengi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HSLColorString", |
|
||||||
expected: "HSLColorString geçerli bir HSL rengi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HSLAColorString", |
|
||||||
expected: "HSLAColorString geçerli bir HSLA rengi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HexadecimalString", |
|
||||||
expected: "HexadecimalString geçerli bir onaltılık olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HexColorString", |
|
||||||
expected: "HexColorString geçerli bir HEX rengi olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NumberString", |
|
||||||
expected: "NumberString geçerli bir sayı olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NumericString", |
|
||||||
expected: "NumericString geçerli bir sayısal değer olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.AlphanumString", |
|
||||||
expected: "AlphanumString yalnızca alfanümerik karakterler içerebilir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.AlphaString", |
|
||||||
expected: "AlphaString yalnızca alfabetik karakterler içerebilir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtFieldString", |
|
||||||
expected: "LtFieldString, MaxString değerinden küçük olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteFieldString", |
|
||||||
expected: "LteFieldString, MaxString değerinden küçük veya ona eşit olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtFieldString", |
|
||||||
expected: "GtFieldString, MaxString değerinden büyük olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteFieldString", |
|
||||||
expected: "GteFieldString, MaxString değerinden büyük veya ona eşit olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeFieldString", |
|
||||||
expected: "NeFieldString, EqFieldString değerine eşit olmamalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtCSFieldString", |
|
||||||
expected: "LtCSFieldString, Inner.LtCSFieldString değerinden küçük olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteCSFieldString", |
|
||||||
expected: "LteCSFieldString, Inner.LteCSFieldString değerinden küçük veya ona eşit olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtCSFieldString", |
|
||||||
expected: "GtCSFieldString, Inner.GtCSFieldString değerinden büyük olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteCSFieldString", |
|
||||||
expected: "GteCSFieldString, Inner.GteCSFieldString değerinden küçük veya ona eşit olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeCSFieldString", |
|
||||||
expected: "NeCSFieldString, Inner.NeCSFieldString değerine eşit olmamalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqCSFieldString", |
|
||||||
expected: "EqCSFieldString, Inner.EqCSFieldString değerine eşit olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqFieldString", |
|
||||||
expected: "EqFieldString, MaxString değerine eşit olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteString", |
|
||||||
expected: "GteString en az 3 karakter uzunluğunda olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteNumber", |
|
||||||
expected: "GteNumber, 5,56 veya daha büyük olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteMultiple", |
|
||||||
expected: "GteMultiple en az 2 öğe içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteTime", |
|
||||||
expected: "GteTime geçerli Tarih ve Saatten büyük veya ona eşit olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtString", |
|
||||||
expected: "GtString, 3 karakter uzunluğundan fazla olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtNumber", |
|
||||||
expected: "GtNumber, 5,56 değerinden büyük olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtMultiple", |
|
||||||
expected: "GtMultiple, 2 öğeden daha fazla içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtTime", |
|
||||||
expected: "GtTime geçerli Tarih ve Saatten büyük olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteString", |
|
||||||
expected: "LteString en fazla 3 karakter uzunluğunda olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteNumber", |
|
||||||
expected: "LteNumber, 5,56 veya daha az olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteMultiple", |
|
||||||
expected: "LteMultiple, maksimum 2 öğe içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteTime", |
|
||||||
expected: "LteTime geçerli Tarih ve Saate eşit veya daha küçük olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtString", |
|
||||||
expected: "LtString, 3 karakter uzunluğundan daha az olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtNumber", |
|
||||||
expected: "LtNumber, 5,56 değerinden küçük olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtMultiple", |
|
||||||
expected: "LtMultiple, 2 öğeden daha az içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtTime", |
|
||||||
expected: "LtTime geçerli Tarih ve Saatten daha az olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeString", |
|
||||||
expected: "NeString, değerine eşit olmamalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeNumber", |
|
||||||
expected: "NeNumber, 0.00 değerine eşit olmamalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeMultiple", |
|
||||||
expected: "NeMultiple, 0 değerine eşit olmamalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqString", |
|
||||||
expected: "EqString, 3 değerine eşit değil", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqNumber", |
|
||||||
expected: "EqNumber, 2.33 değerine eşit değil", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqMultiple", |
|
||||||
expected: "EqMultiple, 7 değerine eşit değil", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxString", |
|
||||||
expected: "MaxString uzunluğu en fazla 3 karakter olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxNumber", |
|
||||||
expected: "MaxNumber, 1.113,00 veya daha az olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxMultiple", |
|
||||||
expected: "MaxMultiple maksimum 7 öğe içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinString", |
|
||||||
expected: "MinString en az 1 karakter uzunluğunda olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinNumber", |
|
||||||
expected: "MinNumber, 1.113,00 veya daha büyük olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinMultiple", |
|
||||||
expected: "MinMultiple en az 7 öğe içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenString", |
|
||||||
expected: "LenString uzunluğu 1 karakter olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenNumber", |
|
||||||
expected: "LenNumber, 1.113,00 değerine eşit olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenMultiple", |
|
||||||
expected: "LenMultiple, 7 öğe içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredString", |
|
||||||
expected: "RequiredString zorunlu bir alandır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredNumber", |
|
||||||
expected: "RequiredNumber zorunlu bir alandır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredMultiple", |
|
||||||
expected: "RequiredMultiple zorunlu bir alandır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrMinLen", |
|
||||||
expected: "StrPtrMinLen en az 10 karakter uzunluğunda olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrMaxLen", |
|
||||||
expected: "StrPtrMaxLen uzunluğu en fazla 1 karakter olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLen", |
|
||||||
expected: "StrPtrLen uzunluğu 2 karakter olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLt", |
|
||||||
expected: "StrPtrLt, 1 karakter uzunluğundan daha az olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLte", |
|
||||||
expected: "StrPtrLte en fazla 1 karakter uzunluğunda olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrGt", |
|
||||||
expected: "StrPtrGt, 10 karakter uzunluğundan fazla olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrGte", |
|
||||||
expected: "StrPtrGte en az 10 karakter uzunluğunda olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.OneOfString", |
|
||||||
expected: "OneOfString, [red green]'dan biri olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.OneOfInt", |
|
||||||
expected: "OneOfInt, [5 63]'dan biri olmalıdır", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueSlice", |
|
||||||
expected: "UniqueSlice benzersiz değerler içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueArray", |
|
||||||
expected: "UniqueArray benzersiz değerler içermelidir", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueMap", |
|
||||||
expected: "UniqueMap benzersiz değerler içermelidir", |
|
||||||
}, |
|
||||||
} |
|
||||||
|
|
||||||
for _, tt := range tests { |
|
||||||
|
|
||||||
var fe validator.FieldError |
|
||||||
|
|
||||||
for _, e := range errs { |
|
||||||
if tt.ns == e.Namespace() { |
|
||||||
fe = e |
|
||||||
break |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
NotEqual(t, fe, nil) |
|
||||||
Equal(t, tt.expected, fe.Translate(trans)) |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
File diff suppressed because it is too large
Load Diff
@ -1,690 +0,0 @@ |
|||||||
package vi |
|
||||||
|
|
||||||
import ( |
|
||||||
"testing" |
|
||||||
"time" |
|
||||||
|
|
||||||
. "github.com/go-playground/assert/v2" |
|
||||||
vietnamese "github.com/go-playground/locales/vi" |
|
||||||
ut "github.com/go-playground/universal-translator" |
|
||||||
"github.com/go-playground/validator/v10" |
|
||||||
) |
|
||||||
|
|
||||||
func TestTranslations(t *testing.T) { |
|
||||||
vie := vietnamese.New() |
|
||||||
uni := ut.New(vie, vie) |
|
||||||
trans, _ := uni.GetTranslator("vi") |
|
||||||
|
|
||||||
validate := validator.New() |
|
||||||
|
|
||||||
err := RegisterDefaultTranslations(validate, trans) |
|
||||||
Equal(t, err, nil) |
|
||||||
|
|
||||||
type Inner struct { |
|
||||||
EqCSFieldString string |
|
||||||
NeCSFieldString string |
|
||||||
GtCSFieldString string |
|
||||||
GteCSFieldString string |
|
||||||
LtCSFieldString string |
|
||||||
LteCSFieldString string |
|
||||||
} |
|
||||||
|
|
||||||
type Test struct { |
|
||||||
Inner Inner |
|
||||||
RequiredString string `validate:"required"` |
|
||||||
RequiredNumber int `validate:"required"` |
|
||||||
RequiredMultiple []string `validate:"required"` |
|
||||||
LenString string `validate:"len=1"` |
|
||||||
LenNumber float64 `validate:"len=1113.00"` |
|
||||||
LenMultiple []string `validate:"len=7"` |
|
||||||
MinString string `validate:"min=1"` |
|
||||||
MinNumber float64 `validate:"min=1113.00"` |
|
||||||
MinMultiple []string `validate:"min=7"` |
|
||||||
MaxString string `validate:"max=3"` |
|
||||||
MaxNumber float64 `validate:"max=1113.00"` |
|
||||||
MaxMultiple []string `validate:"max=7"` |
|
||||||
EqString string `validate:"eq=3"` |
|
||||||
EqNumber float64 `validate:"eq=2.33"` |
|
||||||
EqMultiple []string `validate:"eq=7"` |
|
||||||
NeString string `validate:"ne="` |
|
||||||
NeNumber float64 `validate:"ne=0.00"` |
|
||||||
NeMultiple []string `validate:"ne=0"` |
|
||||||
LtString string `validate:"lt=3"` |
|
||||||
LtNumber float64 `validate:"lt=5.56"` |
|
||||||
LtMultiple []string `validate:"lt=2"` |
|
||||||
LtTime time.Time `validate:"lt"` |
|
||||||
LteString string `validate:"lte=3"` |
|
||||||
LteNumber float64 `validate:"lte=5.56"` |
|
||||||
LteMultiple []string `validate:"lte=2"` |
|
||||||
LteTime time.Time `validate:"lte"` |
|
||||||
GtString string `validate:"gt=3"` |
|
||||||
GtNumber float64 `validate:"gt=5.56"` |
|
||||||
GtMultiple []string `validate:"gt=2"` |
|
||||||
GtTime time.Time `validate:"gt"` |
|
||||||
GteString string `validate:"gte=3"` |
|
||||||
GteNumber float64 `validate:"gte=5.56"` |
|
||||||
GteMultiple []string `validate:"gte=2"` |
|
||||||
GteTime time.Time `validate:"gte"` |
|
||||||
EqFieldString string `validate:"eqfield=MaxString"` |
|
||||||
EqCSFieldString string `validate:"eqcsfield=Inner.EqCSFieldString"` |
|
||||||
NeCSFieldString string `validate:"necsfield=Inner.NeCSFieldString"` |
|
||||||
GtCSFieldString string `validate:"gtcsfield=Inner.GtCSFieldString"` |
|
||||||
GteCSFieldString string `validate:"gtecsfield=Inner.GteCSFieldString"` |
|
||||||
LtCSFieldString string `validate:"ltcsfield=Inner.LtCSFieldString"` |
|
||||||
LteCSFieldString string `validate:"ltecsfield=Inner.LteCSFieldString"` |
|
||||||
NeFieldString string `validate:"nefield=EqFieldString"` |
|
||||||
GtFieldString string `validate:"gtfield=MaxString"` |
|
||||||
GteFieldString string `validate:"gtefield=MaxString"` |
|
||||||
LtFieldString string `validate:"ltfield=MaxString"` |
|
||||||
LteFieldString string `validate:"ltefield=MaxString"` |
|
||||||
AlphaString string `validate:"alpha"` |
|
||||||
AlphanumString string `validate:"alphanum"` |
|
||||||
NumericString string `validate:"numeric"` |
|
||||||
NumberString string `validate:"number"` |
|
||||||
HexadecimalString string `validate:"hexadecimal"` |
|
||||||
HexColorString string `validate:"hexcolor"` |
|
||||||
RGBColorString string `validate:"rgb"` |
|
||||||
RGBAColorString string `validate:"rgba"` |
|
||||||
HSLColorString string `validate:"hsl"` |
|
||||||
HSLAColorString string `validate:"hsla"` |
|
||||||
Email string `validate:"email"` |
|
||||||
URL string `validate:"url"` |
|
||||||
URI string `validate:"uri"` |
|
||||||
Base64 string `validate:"base64"` |
|
||||||
Contains string `validate:"contains=purpose"` |
|
||||||
ContainsAny string `validate:"containsany=!@#$"` |
|
||||||
Excludes string `validate:"excludes=text"` |
|
||||||
ExcludesAll string `validate:"excludesall=!@#$"` |
|
||||||
ExcludesRune string `validate:"excludesrune=☻"` |
|
||||||
ISBN string `validate:"isbn"` |
|
||||||
ISBN10 string `validate:"isbn10"` |
|
||||||
ISBN13 string `validate:"isbn13"` |
|
||||||
UUID string `validate:"uuid"` |
|
||||||
UUID3 string `validate:"uuid3"` |
|
||||||
UUID4 string `validate:"uuid4"` |
|
||||||
UUID5 string `validate:"uuid5"` |
|
||||||
ASCII string `validate:"ascii"` |
|
||||||
PrintableASCII string `validate:"printascii"` |
|
||||||
MultiByte string `validate:"multibyte"` |
|
||||||
DataURI string `validate:"datauri"` |
|
||||||
Latitude string `validate:"latitude"` |
|
||||||
Longitude string `validate:"longitude"` |
|
||||||
SSN string `validate:"ssn"` |
|
||||||
IP string `validate:"ip"` |
|
||||||
IPv4 string `validate:"ipv4"` |
|
||||||
IPv6 string `validate:"ipv6"` |
|
||||||
CIDR string `validate:"cidr"` |
|
||||||
CIDRv4 string `validate:"cidrv4"` |
|
||||||
CIDRv6 string `validate:"cidrv6"` |
|
||||||
TCPAddr string `validate:"tcp_addr"` |
|
||||||
TCPAddrv4 string `validate:"tcp4_addr"` |
|
||||||
TCPAddrv6 string `validate:"tcp6_addr"` |
|
||||||
UDPAddr string `validate:"udp_addr"` |
|
||||||
UDPAddrv4 string `validate:"udp4_addr"` |
|
||||||
UDPAddrv6 string `validate:"udp6_addr"` |
|
||||||
IPAddr string `validate:"ip_addr"` |
|
||||||
IPAddrv4 string `validate:"ip4_addr"` |
|
||||||
IPAddrv6 string `validate:"ip6_addr"` |
|
||||||
UinxAddr string `validate:"unix_addr"` // can't fail from within Go's net package currently, but maybe in the future
|
|
||||||
MAC string `validate:"mac"` |
|
||||||
IsColor string `validate:"iscolor"` |
|
||||||
StrPtrMinLen *string `validate:"min=10"` |
|
||||||
StrPtrMaxLen *string `validate:"max=1"` |
|
||||||
StrPtrLen *string `validate:"len=2"` |
|
||||||
StrPtrLt *string `validate:"lt=1"` |
|
||||||
StrPtrLte *string `validate:"lte=1"` |
|
||||||
StrPtrGt *string `validate:"gt=10"` |
|
||||||
StrPtrGte *string `validate:"gte=10"` |
|
||||||
OneOfString string `validate:"oneof=red green"` |
|
||||||
OneOfInt int `validate:"oneof=5 63"` |
|
||||||
UniqueSlice []string `validate:"unique"` |
|
||||||
UniqueArray [3]string `validate:"unique"` |
|
||||||
UniqueMap map[string]string `validate:"unique"` |
|
||||||
JSONString string `validate:"json"` |
|
||||||
JWTString string `validate:"jwt"` |
|
||||||
LowercaseString string `validate:"lowercase"` |
|
||||||
UppercaseString string `validate:"uppercase"` |
|
||||||
Datetime string `validate:"datetime=2006-01-02"` |
|
||||||
PostCode string `validate:"postcode_iso3166_alpha2=SG"` |
|
||||||
PostCodeCountry string |
|
||||||
PostCodeByField string `validate:"postcode_iso3166_alpha2_field=PostCodeCountry"` |
|
||||||
} |
|
||||||
|
|
||||||
var test Test |
|
||||||
|
|
||||||
test.Inner.EqCSFieldString = "1234" |
|
||||||
test.Inner.GtCSFieldString = "1234" |
|
||||||
test.Inner.GteCSFieldString = "1234" |
|
||||||
|
|
||||||
test.MaxString = "1234" |
|
||||||
test.MaxNumber = 2000 |
|
||||||
test.MaxMultiple = make([]string, 9) |
|
||||||
|
|
||||||
test.LtString = "1234" |
|
||||||
test.LtNumber = 6 |
|
||||||
test.LtMultiple = make([]string, 3) |
|
||||||
test.LtTime = time.Now().Add(time.Hour * 24) |
|
||||||
|
|
||||||
test.LteString = "1234" |
|
||||||
test.LteNumber = 6 |
|
||||||
test.LteMultiple = make([]string, 3) |
|
||||||
test.LteTime = time.Now().Add(time.Hour * 24) |
|
||||||
|
|
||||||
test.LtFieldString = "12345" |
|
||||||
test.LteFieldString = "12345" |
|
||||||
|
|
||||||
test.LtCSFieldString = "1234" |
|
||||||
test.LteCSFieldString = "1234" |
|
||||||
|
|
||||||
test.AlphaString = "abc3" |
|
||||||
test.AlphanumString = "abc3!" |
|
||||||
test.NumericString = "12E.00" |
|
||||||
test.NumberString = "12E" |
|
||||||
|
|
||||||
test.Excludes = "this is some test text" |
|
||||||
test.ExcludesAll = "This is Great!" |
|
||||||
test.ExcludesRune = "Love it ☻" |
|
||||||
|
|
||||||
test.ASCII = "カタカナ" |
|
||||||
test.PrintableASCII = "カタカナ" |
|
||||||
|
|
||||||
test.MultiByte = "1234feerf" |
|
||||||
|
|
||||||
test.LowercaseString = "ABCDEFG" |
|
||||||
test.UppercaseString = "abcdefg" |
|
||||||
|
|
||||||
s := "toolong" |
|
||||||
test.StrPtrMaxLen = &s |
|
||||||
test.StrPtrLen = &s |
|
||||||
|
|
||||||
test.UniqueSlice = []string{"1234", "1234"} |
|
||||||
test.UniqueMap = map[string]string{"key1": "1234", "key2": "1234"} |
|
||||||
test.Datetime = "2008-Feb-01" |
|
||||||
|
|
||||||
err = validate.Struct(test) |
|
||||||
NotEqual(t, err, nil) |
|
||||||
|
|
||||||
errs, ok := err.(validator.ValidationErrors) |
|
||||||
Equal(t, ok, true) |
|
||||||
|
|
||||||
tests := []struct { |
|
||||||
ns string |
|
||||||
expected string |
|
||||||
}{ |
|
||||||
{ |
|
||||||
ns: "Test.IsColor", |
|
||||||
expected: "IsColor phải là màu sắc hợp lệ", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MAC", |
|
||||||
expected: "MAC chỉ được chứa địa chỉ MAC", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddr", |
|
||||||
expected: "IPAddr phải là địa chỉ IP có thể phân giải", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddrv4", |
|
||||||
expected: "IPAddrv4 phải là địa chỉ IPv4 có thể phân giải", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPAddrv6", |
|
||||||
expected: "IPAddrv6 phải là địa chỉ IPv6 có thể phân giải", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddr", |
|
||||||
expected: "UDPAddr phải là địa chỉ UDP", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddrv4", |
|
||||||
expected: "UDPAddrv4 phải là địa chỉ IPv4 UDP", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UDPAddrv6", |
|
||||||
expected: "UDPAddrv6 phải là địa chỉ IPv6 UDP", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddr", |
|
||||||
expected: "TCPAddr phải là địa chỉ TCP", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddrv4", |
|
||||||
expected: "TCPAddrv4 phải là địa chỉ IPv4 TCP", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.TCPAddrv6", |
|
||||||
expected: "TCPAddrv6 phải là địa chỉ IPv6 TCP", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDR", |
|
||||||
expected: "CIDR chỉ được chứa CIDR notation", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDRv4", |
|
||||||
expected: "CIDRv4 chỉ được chứa CIDR notation của một địa chỉ IPv4", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.CIDRv6", |
|
||||||
expected: "CIDRv6 chỉ được chứa CIDR notation của một địa chỉ IPv6", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.SSN", |
|
||||||
expected: "SSN phải là SSN number", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IP", |
|
||||||
expected: "IP phải là địa chỉ IP", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPv4", |
|
||||||
expected: "IPv4 phải là địa chỉ IPv4", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.IPv6", |
|
||||||
expected: "IPv6 phải là địa chỉ IPv6", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.DataURI", |
|
||||||
expected: "DataURI chỉ được chứa Data URI", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Latitude", |
|
||||||
expected: "Latitude chỉ được chứa latitude (vỹ độ)", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Longitude", |
|
||||||
expected: "Longitude chỉ được chứa longitude (kinh độ)", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MultiByte", |
|
||||||
expected: "MultiByte chỉ được chứa ký tự multibyte", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ASCII", |
|
||||||
expected: "ASCII chỉ được chứa ký tự ASCII", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.PrintableASCII", |
|
||||||
expected: "PrintableASCII chỉ được chứa ký tự ASCII có thể in ấn", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID", |
|
||||||
expected: "UUID phải là giá trị UUID", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID3", |
|
||||||
expected: "UUID3 phải là giá trị UUID phiên bản 3", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID4", |
|
||||||
expected: "UUID4 phải là giá trị UUID phiên bản 4", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UUID5", |
|
||||||
expected: "UUID5 phải là giá trị UUID phiên bản 5", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN", |
|
||||||
expected: "ISBN phải là số ISBN", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN10", |
|
||||||
expected: "ISBN10 phải là số ISBN-10", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ISBN13", |
|
||||||
expected: "ISBN13 phải là số ISBN-13", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Excludes", |
|
||||||
expected: "Excludes không được chứa chuỗi 'text'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ExcludesAll", |
|
||||||
expected: "ExcludesAll không được chứa bất kỳ ký tự nào trong nhóm ký tự '!@#$'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ExcludesRune", |
|
||||||
expected: "ExcludesRune không được chứa '☻'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.ContainsAny", |
|
||||||
expected: "ContainsAny phải chứa ít nhất 1 trong cách ký tự sau '!@#$'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Contains", |
|
||||||
expected: "Contains phải chứa chuỗi 'purpose'", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Base64", |
|
||||||
expected: "Base64 phải là giá trị chuỗi Base64", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Email", |
|
||||||
expected: "Email phải là giá trị email address", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.URL", |
|
||||||
expected: "URL phải là giá trị URL", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.URI", |
|
||||||
expected: "URI phải là giá trị URI", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RGBColorString", |
|
||||||
expected: "RGBColorString phải là giá trị RGB color", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RGBAColorString", |
|
||||||
expected: "RGBAColorString phải là giá trị RGBA color", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HSLColorString", |
|
||||||
expected: "HSLColorString phải là giá trị HSL color", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HSLAColorString", |
|
||||||
expected: "HSLAColorString phải là giá trị HSLA color", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HexadecimalString", |
|
||||||
expected: "HexadecimalString phải là giá trị hexadecimal", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.HexColorString", |
|
||||||
expected: "HexColorString phải là giá trị HEX color", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NumberString", |
|
||||||
expected: "NumberString chỉ được chứa giá trị số", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NumericString", |
|
||||||
expected: "NumericString chỉ được chứa giá trị số hoặc số dưới dạng chữ", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.AlphanumString", |
|
||||||
expected: "AlphanumString chỉ được chứa ký tự dạng alphanumeric", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.AlphaString", |
|
||||||
expected: "AlphaString chỉ được chứa ký tự dạng alphabetic", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtFieldString", |
|
||||||
expected: "LtFieldString chỉ được nhỏ hơn MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteFieldString", |
|
||||||
expected: "LteFieldString chỉ được nhỏ hơn hoặc bằng MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtFieldString", |
|
||||||
expected: "GtFieldString phải lớn hơn MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteFieldString", |
|
||||||
expected: "GteFieldString phải lớn hơn hoặc bằng MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeFieldString", |
|
||||||
expected: "NeFieldString không được phép bằng EqFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtCSFieldString", |
|
||||||
expected: "LtCSFieldString chỉ được nhỏ hơn Inner.LtCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteCSFieldString", |
|
||||||
expected: "LteCSFieldString chỉ được nhỏ hơn hoặc bằng Inner.LteCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtCSFieldString", |
|
||||||
expected: "GtCSFieldString phải lớn hơn Inner.GtCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteCSFieldString", |
|
||||||
expected: "GteCSFieldString phải lớn hơn hoặc bằng Inner.GteCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeCSFieldString", |
|
||||||
expected: "NeCSFieldString không được phép bằng Inner.NeCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqCSFieldString", |
|
||||||
expected: "EqCSFieldString phải bằng Inner.EqCSFieldString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqFieldString", |
|
||||||
expected: "EqFieldString phải bằng MaxString", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteString", |
|
||||||
expected: "GteString phải có độ dài ít nhất 3 ký tự", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteNumber", |
|
||||||
expected: "GteNumber phải là 5,56 hoặc lớn hơn", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteMultiple", |
|
||||||
expected: "GteMultiple phải chứa ít nhất 2 phần tử", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GteTime", |
|
||||||
expected: "GteTime phải lớn hơn hoặc bằng Ngày & Giờ hiện tại", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtString", |
|
||||||
expected: "GtString phải có độ dài lớn hơn 3 ký tự", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtNumber", |
|
||||||
expected: "GtNumber phải lớn hơn 5,56", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtMultiple", |
|
||||||
expected: "GtMultiple phải chứa nhiều hơn 2 phần tử", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.GtTime", |
|
||||||
expected: "GtTime phải lớn hơn Ngày & Giờ hiện tại", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteString", |
|
||||||
expected: "LteString chỉ được có độ dài tối đa là 3 ký tự", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteNumber", |
|
||||||
expected: "LteNumber phải là 5,56 hoặc nhỏ hơn", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteMultiple", |
|
||||||
expected: "LteMultiple chỉ được chứa nhiều nhất 2 phần tử", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LteTime", |
|
||||||
expected: "LteTime chỉ được nhỏ hơn hoặc bằng Ngày & Giờ hiện tại", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtString", |
|
||||||
expected: "LtString phải có độ dài nhỏ hơn 3 ký tự", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtNumber", |
|
||||||
expected: "LtNumber phải nhỏ hơn 5,56", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtMultiple", |
|
||||||
expected: "LtMultiple chỉ được chứa ít hơn 2 phần tử", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LtTime", |
|
||||||
expected: "LtTime phải nhỏ hơn Ngày & Giờ hiện tại", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeString", |
|
||||||
expected: "NeString không được bằng ", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeNumber", |
|
||||||
expected: "NeNumber không được bằng 0.00", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.NeMultiple", |
|
||||||
expected: "NeMultiple không được bằng 0", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqString", |
|
||||||
expected: "EqString không bằng 3", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqNumber", |
|
||||||
expected: "EqNumber không bằng 2.33", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.EqMultiple", |
|
||||||
expected: "EqMultiple không bằng 7", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxString", |
|
||||||
expected: "MaxString chỉ được chứa tối đa 3 ký tự", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxNumber", |
|
||||||
expected: "MaxNumber phải là 1.113,00 hoặc nhỏ hơn", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MaxMultiple", |
|
||||||
expected: "MaxMultiple chỉ được chứa tối đa 7 phần tử", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinString", |
|
||||||
expected: "MinString phải chứa ít nhất 1 ký tự", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinNumber", |
|
||||||
expected: "MinNumber phải bằng 1.113,00 hoặc lớn hơn", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.MinMultiple", |
|
||||||
expected: "MinMultiple phải chứa ít nhất 7 phần tử", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenString", |
|
||||||
expected: "LenString phải có độ dài là 1 ký tự", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenNumber", |
|
||||||
expected: "LenNumber phải bằng 1.113,00", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LenMultiple", |
|
||||||
expected: "LenMultiple phải chứa 7 phần tử", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredString", |
|
||||||
expected: "RequiredString không được bỏ trống", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredNumber", |
|
||||||
expected: "RequiredNumber không được bỏ trống", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.RequiredMultiple", |
|
||||||
expected: "RequiredMultiple không được bỏ trống", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrMinLen", |
|
||||||
expected: "StrPtrMinLen phải chứa ít nhất 10 ký tự", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrMaxLen", |
|
||||||
expected: "StrPtrMaxLen chỉ được chứa tối đa 1 ký tự", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLen", |
|
||||||
expected: "StrPtrLen phải có độ dài là 2 ký tự", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLt", |
|
||||||
expected: "StrPtrLt phải có độ dài nhỏ hơn 1 ký tự", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrLte", |
|
||||||
expected: "StrPtrLte chỉ được có độ dài tối đa là 1 ký tự", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrGt", |
|
||||||
expected: "StrPtrGt phải có độ dài lớn hơn 10 ký tự", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.StrPtrGte", |
|
||||||
expected: "StrPtrGte phải có độ dài ít nhất 10 ký tự", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.OneOfString", |
|
||||||
expected: "OneOfString phải là trong những giá trị [red green]", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.OneOfInt", |
|
||||||
expected: "OneOfInt phải là trong những giá trị [5 63]", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueSlice", |
|
||||||
expected: "UniqueSlice chỉ được chứa những giá trị không trùng lặp", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueArray", |
|
||||||
expected: "UniqueArray chỉ được chứa những giá trị không trùng lặp", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UniqueMap", |
|
||||||
expected: "UniqueMap chỉ được chứa những giá trị không trùng lặp", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.JSONString", |
|
||||||
expected: "JSONString phải là một chuỗi json hợp lệ", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.JWTString", |
|
||||||
expected: "JWTString phải là một chuỗi jwt hợp lệ", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.LowercaseString", |
|
||||||
expected: "LowercaseString phải được viết thường", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.UppercaseString", |
|
||||||
expected: "UppercaseString phải được viết hoa", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.Datetime", |
|
||||||
expected: "Datetime không trùng định dạng ngày tháng 2006-01-02", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.PostCode", |
|
||||||
expected: "PostCode sai định dạng postcode của quốc gia SG", |
|
||||||
}, |
|
||||||
{ |
|
||||||
ns: "Test.PostCodeByField", |
|
||||||
expected: "PostCodeByField sai định dạng postcode của quốc gia tương ứng thuộc trường PostCodeCountry", |
|
||||||
}, |
|
||||||
} |
|
||||||
|
|
||||||
for _, tt := range tests { |
|
||||||
|
|
||||||
var fe validator.FieldError |
|
||||||
|
|
||||||
for _, e := range errs { |
|
||||||
if tt.ns == e.Namespace() { |
|
||||||
fe = e |
|
||||||
break |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
NotEqual(t, fe, nil) |
|
||||||
Equal(t, tt.expected, fe.Translate(trans)) |
|
||||||
} |
|
||||||
} |
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue