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, "Please enter your phone number") || !strings.Contains(app.Msg, "Password is required") || !strings.Contains(app.Msg, "Device ID is required") { 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, "at least 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) } }