fix: localize validation errors and polish delivery
Build and publish Docker images / Build and publish images (push) Failing after 25s
Build and publish Docker images / Build and publish images (push) Failing after 25s
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
package validator
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/gin-gonic/gin/binding"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
@@ -137,6 +139,50 @@ func TestVar_AutoInit(t *testing.T) {
|
||||
assert.NotNil(t, validate)
|
||||
}
|
||||
|
||||
func TestValidateStruct_ReturnsLocalizedWrappedError(t *testing.T) {
|
||||
type request struct {
|
||||
Password string `json:"password" validate:"min=6"`
|
||||
}
|
||||
|
||||
err := ValidateStruct(request{Password: "123"})
|
||||
require.Error(t, err)
|
||||
wrapped := fmt.Errorf("validation error: %w", err)
|
||||
assert.True(t, IsValidationError(wrapped))
|
||||
assert.Equal(t, "密码长度不能少于 6 个字符", ValidationMessage(wrapped))
|
||||
}
|
||||
|
||||
func TestValidationMessage_LoginPasswordMin(t *testing.T) {
|
||||
type loginRequest struct {
|
||||
Password string `json:"password" binding:"required,min=6"`
|
||||
}
|
||||
|
||||
err := binding.Validator.ValidateStruct(loginRequest{Password: "123"})
|
||||
require.Error(t, err)
|
||||
assert.True(t, IsValidationError(err))
|
||||
assert.Equal(t, "密码长度不能少于 6 个字符", ValidationMessage(err))
|
||||
assert.NotContains(t, err.Error(), "Field validation")
|
||||
}
|
||||
|
||||
func TestValidationMessage_MultipleFields(t *testing.T) {
|
||||
type request struct {
|
||||
Email string `json:"email" binding:"required,email"`
|
||||
Password string `json:"password" binding:"required,min=6"`
|
||||
}
|
||||
|
||||
err := binding.Validator.ValidateStruct(request{})
|
||||
require.Error(t, err)
|
||||
message := ValidationMessage(err)
|
||||
assert.Contains(t, message, "请填写邮箱")
|
||||
assert.Contains(t, message, "请填写密码")
|
||||
assert.NotContains(t, message, "Key:")
|
||||
}
|
||||
|
||||
func TestValidationMessageText_RemovesRawValidatorDetails(t *testing.T) {
|
||||
raw := "Key: 'LoginRequest.Password' Error:Field validation for 'Password' failed on the 'min' tag"
|
||||
assert.Equal(t, "请求参数不符合要求", ValidationMessageText(raw))
|
||||
assert.Equal(t, "密码长度不能少于 6 个字符", ValidationMessageText("validation: 密码长度不能少于 6 个字符"))
|
||||
}
|
||||
|
||||
func TestValidateStruct_Pointer(t *testing.T) {
|
||||
Init()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user