fix: localize validation errors and polish delivery
Build and publish Docker images / Build and publish images (push) Failing after 25s

This commit is contained in:
2026-09-15 16:28:02 +08:00
parent f79c80519d
commit dc5ace9003
10 changed files with 421 additions and 14 deletions
+46
View File
@@ -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()