feat(points): 增加积分兑换联系信息

This commit is contained in:
yml2213
2026-11-04 19:51:17 +08:00
parent 95aeee7eb3
commit f439e23eb8
9 changed files with 425 additions and 25 deletions
@@ -27,13 +27,29 @@ func TestRedeemDeductsAvailablePointsAndStock(t *testing.T) {
t.Fatalf("create product failed: %v", err)
}
repo := NewRepository(db)
redemption, err := repo.Redeem(t.Context(), user.ID, product.ID, 2)
req := RedeemRequest{
Quantity: 2,
ContactName: "张三",
ContactPhone: "13800138000",
CustomerRemark: "请发送到邮箱",
}
invalidReq := req
invalidReq.ContactPhone = "123"
if _, err := repo.Redeem(t.Context(), user.ID, product.ID, invalidReq); !errors.Is(err, ErrInvalidInput) {
t.Fatalf("invalid contact phone error = %v, want ErrInvalidInput", err)
}
redemption, err := repo.Redeem(t.Context(), user.ID, product.ID, req)
if err != nil {
t.Fatalf("redeem failed: %v", err)
}
if redemption.TotalPoints != 200 {
t.Fatalf("total points = %d, want 200", redemption.TotalPoints)
}
if redemption.ContactName != req.ContactName ||
redemption.ContactPhone != req.ContactPhone ||
redemption.CustomerRemark != req.CustomerRemark {
t.Fatalf("redemption contact = %+v, want %+v", redemption, req)
}
var savedUser model.User
if err := db.First(&savedUser, user.ID).Error; err != nil {
t.Fatalf("find user failed: %v", err)
@@ -48,7 +64,8 @@ func TestRedeemDeductsAvailablePointsAndStock(t *testing.T) {
if savedProduct.Stock != 0 || savedProduct.RedeemedCount != 2 {
t.Fatalf("product stock/redeemed = %d/%d", savedProduct.Stock, savedProduct.RedeemedCount)
}
if _, err := repo.Redeem(t.Context(), user.ID, product.ID, 1); !errors.Is(err, ErrRedeemLimitExceeded) && !errors.Is(err, ErrProductUnavailable) {
req.Quantity = 1
if _, err := repo.Redeem(t.Context(), user.ID, product.ID, req); !errors.Is(err, ErrRedeemLimitExceeded) && !errors.Is(err, ErrProductUnavailable) {
t.Fatalf("repeat redeem error = %v, want limit or unavailable", err)
}
completed, err := repo.CompleteRedemption(t.Context(), 99, redemption.ID, "已发放")