package dto import ( "strings" "testing" "github.com/go-playground/validator/v10" ) // 换货原因按字符计数,上限 500:从微信复制的多行说明(含换行)不超过 500 字都应通过校验。 func TestCreateExchangeRequest_ExchangeReasonLength(t *testing.T) { validate := validator.New() multiLine := "862639070766110(门店:862639070766110机头,862639070743218后盖)\n\n" + "862639070743218(厂家:862639070766110后盖,862639070743218机头)\n\n这两台后盖机头窜了。" cases := []struct { name string reason string wantErr bool }{ {name: "多行说明124字", reason: multiLine, wantErr: false}, {name: "500个中文字", reason: strings.Repeat("换", 500), wantErr: false}, {name: "501个中文字", reason: strings.Repeat("换", 501), wantErr: true}, {name: "空", reason: "", wantErr: true}, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { req := CreateExchangeRequest{OldAssetType: "device", OldIdentifier: "862639070743218", ExchangeReason: tc.reason} err := validate.Struct(req) if (err != nil) != tc.wantErr { t.Fatalf("wantErr=%v, err=%v", tc.wantErr, err) } }) } }