Add HTTP /v1 MVC, TCP send path, groups with server-side member-avatar collage, object-storage upload, and friends/favorites around the architecture-v3 layout. Co-authored-by: Cursor <cursoragent@cursor.com>
51 lines
1.6 KiB
Go
51 lines
1.6 KiB
Go
package validate
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"spark-server/internal/pkg/errs"
|
|
"spark-server/internal/pkg/i18n"
|
|
)
|
|
|
|
type sample struct {
|
|
Phone string `json:"phone" validate:"required" label:"field.phone" errmsg:"required:validate.login.phone_required"`
|
|
Password string `json:"password" validate:"required,min=6" label:"field.password"`
|
|
DeviceID uint64 `json:"device_id" validate:"required" label:"field.device_id"`
|
|
}
|
|
|
|
func TestStructCustomAndDefaultMessages(t *testing.T) {
|
|
err := Struct(sample{})
|
|
app, ok := errs.AsAppError(err)
|
|
if !ok {
|
|
t.Fatalf("type %T", err)
|
|
}
|
|
if app.Code != errs.ErrInvalidArgument.Code {
|
|
t.Fatalf("code %s", app.Code)
|
|
}
|
|
if !strings.Contains(app.Msg, "请填写手机号") || !strings.Contains(app.Msg, "密码不能为空") || !strings.Contains(app.Msg, "设备ID不能为空") {
|
|
t.Fatalf("msg %s", app.Msg)
|
|
}
|
|
err = Struct(sample{Phone: "1", Password: "123", DeviceID: 1})
|
|
app, ok = errs.AsAppError(err)
|
|
if !ok || !strings.Contains(app.Msg, "密码不能少于6") {
|
|
t.Fatalf("min %v", err)
|
|
}
|
|
if err := Struct(sample{Phone: "1", Password: "123456", DeviceID: 1}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestStructLangEnglish(t *testing.T) {
|
|
err := StructLang(i18n.En, sample{})
|
|
app, ok := errs.AsAppError(err)
|
|
if !ok || !strings.Contains(app.Msg, "Please enter your phone number") || !strings.Contains(app.Msg, "Password is required") {
|
|
t.Fatalf("en %v", err)
|
|
}
|
|
err = StructLang(i18n.ZhTW, sample{Phone: "1", Password: "123", DeviceID: 1})
|
|
app, ok = errs.AsAppError(err)
|
|
if !ok || !strings.Contains(app.Msg, "密碼不能少於6") {
|
|
t.Fatalf("zh-TW %v", err)
|
|
}
|
|
}
|