202 lines
4.6 KiB
Go
202 lines
4.6 KiB
Go
package validator_test
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"fiskerinc.com/modules/common"
|
|
"fiskerinc.com/modules/testhelper"
|
|
"fiskerinc.com/modules/validator"
|
|
|
|
v "github.com/go-playground/validator/v10"
|
|
)
|
|
|
|
type TestCase struct {
|
|
Name string
|
|
Validate interface{}
|
|
ExpectedError string
|
|
}
|
|
|
|
func TestValidateStruct(t *testing.T) {
|
|
tests := []TestCase{
|
|
{
|
|
Name: "Empty Car",
|
|
Validate: common.Car{},
|
|
ExpectedError: "VIN required. Year required. Model required. Trim required",
|
|
},
|
|
{
|
|
Name: "Valid Car VIN",
|
|
Validate: common.Car{
|
|
VIN: "JTKJF5C77E3095776",
|
|
},
|
|
ExpectedError: "Year required. Model required. Trim required",
|
|
},
|
|
{
|
|
Name: "Valid Car",
|
|
Validate: common.Car{
|
|
VIN: "JTKJF5C77E3095776",
|
|
Year: 2022,
|
|
Model: "Ocean",
|
|
Trim: "Basic",
|
|
},
|
|
ExpectedError: "",
|
|
},
|
|
{
|
|
Name: "Invalid Car VIN",
|
|
Validate: common.Car{
|
|
VIN: "JTKJF5C77E3095776X",
|
|
},
|
|
ExpectedError: "VIN 'JTKJF5C77E3095776X' invalid. Year required. Model required. Trim required",
|
|
},
|
|
}
|
|
|
|
validationTestRunner(t, tests, validator.ValidateStruct)
|
|
}
|
|
|
|
func TestValidateSerialStruct(t *testing.T) {
|
|
tests := []TestCase{
|
|
{
|
|
Name: "Empty Cert",
|
|
Validate: common.CertificateRevokeRequest{},
|
|
ExpectedError: "Serial required",
|
|
},
|
|
{
|
|
Name: "Valid Cert Serial",
|
|
Validate: common.CertificateRevokeRequest{
|
|
Serial: "02-89-1f-ec-82-69-8a-ce-59-9c-ab-6a-ad-03-b3-c4-41-bd-0d-26",
|
|
},
|
|
ExpectedError: "",
|
|
},
|
|
{
|
|
Name: "Valid Cert Serial 2",
|
|
Validate: common.CertificateRevokeRequest{
|
|
Serial: "02-89-1f-ec-82-69-8a-ce-59-9c-ab-6a-ad-03-b3-c4-41-bd-0d",
|
|
},
|
|
ExpectedError: "",
|
|
},
|
|
{
|
|
Name: "Wrong Cert Serial",
|
|
Validate: common.CertificateRevokeRequest{
|
|
Serial: "XXXXXXXXXXX",
|
|
},
|
|
ExpectedError: "Serial 'XXXXXXXXXXX' invalid",
|
|
},
|
|
}
|
|
|
|
validationTestRunner(t, tests, validator.ValidateStruct)
|
|
}
|
|
|
|
func TestValidateNonRequired(t *testing.T) {
|
|
tests := []TestCase{
|
|
{
|
|
Name: "Invalid Car VIN",
|
|
Validate: common.Car{
|
|
VIN: "JTKJF5C77E3095776X",
|
|
Model: "Ocean",
|
|
Year: 2021,
|
|
},
|
|
ExpectedError: "VIN 'JTKJF5C77E3095776X' invalid",
|
|
},
|
|
{
|
|
Name: "Empty Car",
|
|
Validate: common.Car{},
|
|
ExpectedError: "",
|
|
},
|
|
{
|
|
Name: "Valid Car VIN",
|
|
Validate: common.Car{
|
|
VIN: "JTKJF5C77E3095776",
|
|
},
|
|
ExpectedError: "",
|
|
},
|
|
{
|
|
Name: "Valid Car",
|
|
Validate: common.Car{
|
|
VIN: "JTKJF5C77E3095776",
|
|
Year: 2022,
|
|
Model: "Ocean",
|
|
},
|
|
ExpectedError: "",
|
|
},
|
|
}
|
|
|
|
validationTestRunner(t, tests, validator.ValidateNonRequired)
|
|
}
|
|
|
|
func validationTestRunner(t *testing.T, tests []TestCase, validatorFunc func(interface{}) error) {
|
|
for _, test := range tests {
|
|
err := validatorFunc(test.Validate)
|
|
if err != nil {
|
|
valerrs, ok := err.(v.ValidationErrors)
|
|
if ok {
|
|
str := validator.GetError(&valerrs)
|
|
if str != test.ExpectedError {
|
|
t.Errorf(testhelper.TestErrorTemplate, test.Name, test.ExpectedError, str)
|
|
}
|
|
} else {
|
|
t.Errorf(testhelper.TestErrorTemplate, test.Name, "ValidationErrors", err)
|
|
}
|
|
} else if test.ExpectedError != "" {
|
|
t.Errorf(testhelper.TestErrorTemplate, test.Name, test.ExpectedError, nil)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestVINValidation(t *testing.T) {
|
|
expected := "VIN '%s' invalid"
|
|
test := common.Car{
|
|
VIN: "1G1FP87S3GN100062",
|
|
Model: "Ocean",
|
|
Year: 2021,
|
|
Trim: "Basic",
|
|
}
|
|
|
|
err := validator.ValidateStruct(test)
|
|
if err != nil {
|
|
t.Errorf(testhelper.TestErrorTemplate, "Good validation", "no errors", err)
|
|
}
|
|
|
|
test.VIN = "1G1FP87S3GN100062XXXXX"
|
|
|
|
err = validator.ValidateStruct(test)
|
|
if err != nil {
|
|
_, msg := validator.GetValidationErrorMsg(err)
|
|
if msg != fmt.Sprintf(expected, test.VIN) {
|
|
t.Errorf(testhelper.TestErrorTemplate, "Bad VIN", fmt.Sprintf(expected, test.VIN), msg)
|
|
}
|
|
}
|
|
|
|
test.VIN = "1G1FP87S3GN10006"
|
|
|
|
err = validator.ValidateStruct(test)
|
|
if err != nil {
|
|
_, msg := validator.GetValidationErrorMsg(err)
|
|
if msg != fmt.Sprintf(expected, test.VIN) {
|
|
t.Errorf(testhelper.TestErrorTemplate, "Bad VIN", fmt.Sprintf(expected, test.VIN), msg)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestUpdatePackageValidation(t *testing.T) {
|
|
up := common.UpdateManifest{}
|
|
|
|
err := validator.ValidateStruct(up)
|
|
if err != nil {
|
|
_, msg := validator.GetValidationErrorMsg(err)
|
|
expected := "Name required"
|
|
if msg != expected {
|
|
t.Errorf(testhelper.TestErrorTemplate, "Empty UpdateManifest", expected, msg)
|
|
}
|
|
}
|
|
|
|
up.ReleaseNotes = "XXXXX"
|
|
err = validator.ValidateStruct(up)
|
|
if err != nil {
|
|
_, msg := validator.GetValidationErrorMsg(err)
|
|
expected := "Name required. ReleaseNotes invalid url"
|
|
if msg != expected {
|
|
t.Errorf(testhelper.TestErrorTemplate, "Empty UpdateManifest", expected, msg)
|
|
}
|
|
}
|
|
}
|