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:** |
**Make sure that you've checked the boxes below before you submit PR:** |
||||||
- [ ] Tests exist or have been written that cover this particular change. |
- [ ] Tests exist or have been written that cover this particular change. |
||||||
|
|
||||||
Change Details: |
@go-playground/validator-maintainers |
||||||
|
|
||||||
- |
|
||||||
- |
|
||||||
- |
|
||||||
|
|
||||||
|
|
||||||
@go-playground/admins |
|
@ -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