Compare commits
243 Commits
updates-an
...
master
Author | SHA1 | Date |
---|---|---|
Dean Karn | f5e5146b31 | 2 years ago |
Cyro Dubeux | 56e2f31322 | 2 years ago |
Joselito Viveiros Nogueira Filho | e9f2d9f21a | 2 years ago |
Eduardo Mello | b43d437012 | 2 years ago |
João Fonseca | 58d420de41 | 2 years ago |
Aleksander Dejewski | c6f8637983 | 2 years ago |
Gatis Rīders | f6f934c4e9 | 2 years ago |
konstantin | ae3e728763 | 2 years ago |
Tanryberdi | 0665b9518a | 2 years ago |
jnst | 21b88d1a25 | 2 years ago |
jnst | 4f5cf1d499 | 2 years ago |
Kmilo Denis González | 2f3efda84f | 2 years ago |
brent s | 2e43671001 | 2 years ago |
just Alan | f560fd4e07 | 2 years ago |
Yasoob Haider | 29d50ba963 | 2 years ago |
zemzale | 1c1f70d35b | 2 years ago |
Yann Salaün | cc768b176d | 2 years ago |
Alberto Forcato | 3ee65f8c59 | 2 years ago |
Owen Gong | 89b91cea99 | 2 years ago |
Vijay Nallagatla | f2078f7696 | 2 years ago |
Arthur Jenoudet | ef342b6f7c | 2 years ago |
Dean Karn | f3086daf63 | 2 years ago |
Vitor Hugo | 75ba9f6a84 | 2 years ago |
Dean Karn | 13ad6f5b30 | 2 years ago |
Simon Tremblay | c242c49c02 | 2 years ago |
Dean Karn | f17b3458fa | 2 years ago |
Dean Karn | d1178535f7 | 2 years ago |
sgallizia | 72a3e75460 | 2 years ago |
Phil Porada | c0b3430b1f | 2 years ago |
Mohamed Sohail | b95730fb11 | 2 years ago |
Dean Karn | 8f07b03682 | 2 years ago |
Roberto Ramírez | 7edc63a0be | 2 years ago |
Marc Brugger | 3201fe42fe | 2 years ago |
wjl110 | 5aa5f93593 | 2 years ago |
tomaisthorpe | f036dd475d | 2 years ago |
Dean Karn | c7e0172e0f | 2 years ago |
Vaibhav Dighe | 1e8c614c2a | 2 years ago |
Dean Karn | 9e2ea40380 | 3 years ago |
Dean Karn | 29bf2a5bd0 | 3 years ago |
Dean Karn | 02c12dd7ef | 3 years ago |
Leo Liang | d0d0c355aa | 3 years ago |
Jason.Zhang | d3e4be3e44 | 3 years ago |
gosua | 99922fccc7 | 3 years ago |
Sec Cake | 4f55647bd7 | 3 years ago |
mrkongo | 39aa2e3a27 | 3 years ago |
Vuong | 7fa836dc0a | 3 years ago |
Ayoob Mohammed | 21a103f428 | 3 years ago |
Eduardo Mello | e3f29bf088 | 3 years ago |
Renato Alves Torres | d37da5e53c | 3 years ago |
Ciprian | 0a26ee57e4 | 3 years ago |
Lauris BH | f09500fca7 | 3 years ago |
Massimo Costa | 090afeb8ac | 3 years ago |
XIE Long | af72f63d39 | 3 years ago |
Stefan Dillenburg | f2d3ff7f98 | 3 years ago |
hehe.bu | aea8782168 | 3 years ago |
Sol | 24b5175a34 | 3 years ago |
NgeKaworu | bc9f9dd2eb | 3 years ago |
alessmar | dd2857a4cb | 3 years ago |
Dean Karn | bb30072b48 | 3 years ago |
Jacob Hochstetler | c0195b2b40 | 3 years ago |
Dean Karn | 58d5778b18 | 3 years ago |
Johannes | 3e49fe4eb8 | 3 years ago |
Anmar85 | dd2de9c1f7 | 3 years ago |
Dean Karn | 88976f39f6 | 3 years ago |
jtseng-godaddy | 06ec79d987 | 3 years ago |
Markus Tenghamn | 8fe074c546 | 3 years ago |
Kazuki Onishi | ec2071b383 | 3 years ago |
nesty92 | c67d01d610 | 3 years ago |
Markus Tenghamn | 19f8e61dba | 3 years ago |
Dean Karn | ce34f361cc | 3 years ago |
Metin Oğurlu | d4271985b4 | 3 years ago |
András Czigány | 42525d89ab | 3 years ago |
Xavier Vello | a67baa74f1 | 3 years ago |
Dmitriy | 14221d02a5 | 3 years ago |
Dean Karn | 6dbf61e046 | 3 years ago |
Dean Karn | 9a5bce3253 | 3 years ago |
Dean Karn | b03f1f453e | 3 years ago |
cokezhang | 61a982014e | 3 years ago |
Oleg Nikachev | 44c2696cbd | 3 years ago |
steveorourke | e40bece342 | 3 years ago |
Brian Leishman | 8cfa1e93b6 | 3 years ago |
Saed SayedAhmed | f1befad848 | 3 years ago |
Dean Karn | 65bb123677 | 3 years ago |
amir | e3e38634b1 | 3 years ago |
N/A | af8b8d1c88 | 3 years ago |
Levani | 8bfa88a462 | 3 years ago |
Dean Karn | 9104fe2461 | 3 years ago |
masafumi-i | 90ab42ba67 | 3 years ago |
Alonso Villegas | b1b32b2064 | 3 years ago |
Dean Karn | 76b917f432 | 4 years ago |
Dean Karn | 95ac68b6d7 | 4 years ago |
Dean Karn | d07eb88fb0 | 4 years ago |
ѵµσɳɠ | a53d64fc35 | 4 years ago |
Oleksii Kulikov | c2066206fe | 4 years ago |
zytell3301 | b95d43b789 | 4 years ago |
Zane DeGraffenried | 31dd62f1c9 | 4 years ago |
Dean Karn | b926bf0df9 | 4 years ago |
Josh Slate | add373fff7 | 4 years ago |
Dean Karn | 68248183b4 | 4 years ago |
Deri Herdianto | 526b0968b3 | 4 years ago |
Sergei Isaev | 2b75c46052 | 4 years ago |
frederikhors | 3c8db83c19 | 4 years ago |
Peperoncino | 5b8f3b8a0b | 4 years ago |
Torwang | 882ec0def4 | 4 years ago |
Qalifah | 0e674563ff | 4 years ago |
Michał Treter | ec1baac93d | 4 years ago |
João Francisco | 514c9dbd77 | 4 years ago |
Jake-Convictional | 9c415c4565 | 4 years ago |
Dean Karn | f6584a41c8 | 4 years ago |
Dean Karn | 3bb4866602 | 4 years ago |
Dean Karn | 456221b630 | 4 years ago |
Flávio CF Oliveira | d6b17fd90b | 4 years ago |
krhubert | f32fea830e | 4 years ago |
Brandon Lee | 704a814277 | 4 years ago |
Elias Rodrigues | 4407f4dea0 | 4 years ago |
Dean Karn | 8941cbd00e | 4 years ago |
Dean Karn | 8154ee6ca8 | 4 years ago |
Dean Karn | f0805c61ba | 4 years ago |
Dean Karn | 76981ccf75 | 4 years ago |
Dean Karn | 57b4fab34b | 4 years ago |
Dean Karn | d9e95d55e9 | 4 years ago |
Dean Karn | 2a5412a1bc | 4 years ago |
Dean Karn | 839d050f74 | 4 years ago |
Dean Karn | e6eee3ea88 | 4 years ago |
Dean Karn | b1ccceeb11 | 4 years ago |
Dean Karn | 4cd2e40256 | 4 years ago |
Dean Karn | ace513eddd | 4 years ago |
Dean Karn | 0d657b4731 | 4 years ago |
Dean Karn | 0e7e593daa | 4 years ago |
Takeshi Kaneko | f2ce6a4f92 | 4 years ago |
David Ketch | 1bf11c9299 | 4 years ago |
root | ca0533bb97 | 4 years ago |
root | 490e253792 | 4 years ago |
root | 742006d126 | 4 years ago |
hzw | 44a150f359 | 4 years ago |
nigelis | 6f81b7d8d0 | 4 years ago |
math-nao | 7dbe685a02 | 4 years ago |
Long Bui | 67c4fdf0de | 4 years ago |
Elias Rodrigues | 1cbd3081e4 | 4 years ago |
Elias Rodrigues | 33ffa4a31f | 4 years ago |
Elias Rodrigues | 55e0f418d6 | 4 years ago |
Elias Rodrigues | 04749bc4d4 | 4 years ago |
Elias Rodrigues | fc1b28803a | 4 years ago |
Elias Rodrigues | f525f0b64f | 4 years ago |
Elias Rodrigues | 48684f91aa | 4 years ago |
Elias Rodrigues | 0c71d5cc08 | 4 years ago |
Elias Rodrigues | 94470e68f3 | 4 years ago |
Elias Rodrigues | 1c4e56307b | 4 years ago |
math-nao | 44f3347f13 | 4 years ago |
Taylor | 07a4b7aa38 | 4 years ago |
Taylor | 0bfda52ce1 | 4 years ago |
Dean Karn | ea924ce89a | 5 years ago |
Dean Karn | 059510c3bf | 5 years ago |
Dean Karn | 50166a5a06 | 5 years ago |
Dean Karn | ab4e67f050 | 5 years ago |
Dean Karn | ae8ecbca8a | 5 years ago |
Dean Karn | 0ab8e0351d | 5 years ago |
Dean Karn | 7e978ff872 | 5 years ago |
Dean Karn | 957a452839 | 5 years ago |
Dean Karn | 257f202dd1 | 5 years ago |
Dean Karn | dbfcad250f | 5 years ago |
Dean Karn | 07f2314af2 | 5 years ago |
Dean Karn | a5e9e63a9a | 5 years ago |
Dean Karn | 8203121676 | 5 years ago |
Dean Karn | 175275dfea | 5 years ago |
Giuliano Scaglioni | b610155475 | 5 years ago |
Giuliano Scaglioni | 7d6236a898 | 5 years ago |
Giuliano Scaglioni | ee37674003 | 5 years ago |
Kiyan Gauss | b15bf1dead | 5 years ago |
John Bailon | 198646cbd1 | 5 years ago |
John Bailon | 7807a1f36f | 5 years ago |
amiraliucsc | c7dc8812a2 | 5 years ago |
amiraliucsc | 1611f1e72c | 5 years ago |
amiraliucsc | 18fba4ba8a | 5 years ago |
cncal | 85098861d3 | 5 years ago |
erikaleigh | 3909783b73 | 5 years ago |
Milan Divkovic | f3b347cc29 | 5 years ago |
alfonsoprado | a98911a366 | 5 years ago |
alfonsoprado | c1b73a784d | 5 years ago |
Pantelis Sampaziotis | afacb47f2b | 5 years ago |
Pantelis Sampaziotis | 9f175c7ece | 5 years ago |
Pantelis Sampaziotis | 8a19420dcf | 5 years ago |
Dean Karn | c68441b7f4 | 5 years ago |
Pantelis Sampaziotis | 912fcd16a8 | 5 years ago |
Pantelis Sampaziotis | 14f963703b | 5 years ago |
Dean Karn | b7430f8e39 | 5 years ago |
Dean Karn | 0c80f876cd | 5 years ago |
Dean Karn | 68e8e137fa | 5 years ago |
Dean Karn | 1f676c755a | 5 years ago |
Dean Karn | fa149de298 | 5 years ago |
Dean Karn | fdd54d3fc2 | 5 years ago |
Dean Karn | b541462b5a | 5 years ago |
Pantelis Sampaziotis | 2109f86248 | 5 years ago |
Pantelis Sampaziotis | 9e58bcdee1 | 5 years ago |
shenyiling | 6d2c659585 | 5 years ago |
Pantelis Sampaziotis | 5b51bff4e6 | 5 years ago |
Pantelis Sampaziotis | 581d2698d5 | 5 years ago |
Rustam | eb11afd9a8 | 5 years ago |
Ravi Terala | a1ac82a865 | 5 years ago |
Ravi Terala | 893747e5ee | 5 years ago |
Dean Karn | fb6c45823a | 5 years ago |
Dean Karn | 5b97da4cbf | 5 years ago |
Dean Karn | c2546fb355 | 5 years ago |
richi | f8a081fd83 | 5 years ago |
Shi Han NG | e73ec5f5ab | 5 years ago |
Shi Han NG | 8f604265e0 | 5 years ago |
Jean-Philippe Moal | 1effcb06a7 | 5 years ago |
Jean-Philippe Moal | 703c0b681a | 5 years ago |
Taylor | e7c70798c9 | 5 years ago |
Dean Karn | a6a294bfeb | 5 years ago |
Dean Karn | c067a8f197 | 5 years ago |
Dean Karn | 1d93fb999e | 5 years ago |
Dean Karn | 5356060ec3 | 5 years ago |
Dean Karn | 361bf41fb9 | 5 years ago |
Dean Karn | ae15ced5e1 | 5 years ago |
Nguyễn Văn Hưng | da6897303a | 5 years ago |
Streppel | 0849b1840e | 5 years ago |
Jonathan Thom | bb5fd36827 | 5 years ago |
Jonathan Thom | 685d3e21f3 | 5 years ago |
Dmitry M. Gavrovsky | d149847e8a | 5 years ago |
Dmitry M. Gavrovsky | dfc652373a | 5 years ago |
Dean Karn | 691a5f5f25 | 5 years ago |
Dean Karn | bec732e9de | 5 years ago |
Dean Karn | a346f2eea4 | 5 years ago |
Dean Karn | b11fb5f16e | 5 years ago |
Dean Karn | c0f05c7b3d | 5 years ago |
Dean Karn | fe89c745f6 | 5 years ago |
Kaelan Thijs Fouwels | 8678802a39 | 5 years ago |
Jonathan Thom | 432c17028a | 5 years ago |
sclaire-1 | 4be5d19c39 | 5 years ago |
Dean Karn | dbbe6958b3 | 5 years ago |
Dean Karn | 7e57ca0cf5 | 5 years ago |
Dean Karn | cd1bd58169 | 5 years ago |
Dean Karn | 883a9e06c8 | 5 years ago |
Dean Karn | 9593a0f77e | 5 years ago |
Dean Karn | 06f92248de | 5 years ago |
Dean Karn | 6484d9f2fb | 5 years ago |
Dean Karn | cc25246f01 | 5 years ago |
Dean Karn | 51fcc303b3 | 5 years ago |
Dean Karn | 205b733988 | 5 years ago |
Talha Ansari | 4e2a13b9bf | 5 years ago |
Talha Ansari | 2367d307c5 | 5 years ago |
baran.asaner | 80a8449877 | 5 years ago |
@ -0,0 +1 @@ |
||||
* @go-playground/validator-maintainers |
@ -1,13 +1,7 @@ |
||||
Fixes Or Enhances # . |
||||
## Fixes Or Enhances |
||||
|
||||
|
||||
**Make sure that you've checked the boxes below before you submit PR:** |
||||
- [ ] Tests exist or have been written that cover this particular change. |
||||
|
||||
Change Details: |
||||
|
||||
- |
||||
- |
||||
- |
||||
|
||||
|
||||
@go-playground/admins |
||||
@go-playground/validator-maintainers |
@ -0,0 +1,51 @@ |
||||
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 |
@ -0,0 +1,16 @@ |
||||
## 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. |
@ -0,0 +1,87 @@ |
||||
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
|
||||
} |
@ -0,0 +1,92 @@ |
||||
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
@ -0,0 +1,79 @@ |
||||
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, |
||||
} |
@ -1,83 +0,0 @@ |
||||
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
|
||||
// }
|
||||
// }
|
@ -0,0 +1,14 @@ |
||||
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 |
@ -0,0 +1,31 @@ |
||||
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= |
@ -0,0 +1,173 @@ |
||||
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
@ -0,0 +1,658 @@ |
||||
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
@ -0,0 +1,725 @@ |
||||
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
@ -0,0 +1,709 @@ |
||||
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
@ -0,0 +1,682 @@ |
||||
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
@ -0,0 +1,657 @@ |
||||
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
@ -0,0 +1,690 @@ |
||||
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