按实际纯币金额计算租客优惠与积分

This commit is contained in:
yml2213
2026-07-27 10:45:41 +08:00
parent 99e8eb28af
commit 8af7333969
30 changed files with 983 additions and 154 deletions
@@ -9,6 +9,7 @@ import (
"hfb_sys/backend/internal/database"
"hfb_sys/backend/internal/model"
ordermodule "hfb_sys/backend/internal/modules/order"
"hfb_sys/backend/internal/modules/rentergrowth"
"gorm.io/gorm"
)
@@ -388,6 +389,55 @@ func TestRefundAmountMustNotExceedOriginal(t *testing.T) {
}
}
func TestSuccessfulAdminFullRefundRevokesCompletedOrderGrowthPoints(t *testing.T) {
db := setupPaymentTestDB(t)
repo := NewRepository(db, nil, nil)
renter := model.User{Phone: "13900001991", RenterGrowthLevel: "normal"}
if err := db.Create(&renter).Error; err != nil {
t.Fatalf("create renter failed: %v", err)
}
order := model.RentalOrder{
OrderNo: "ORD202607260991",
RenterID: renter.ID,
RentAmountCent: 1000,
Status: "completed",
GrowthPointsBasisCent: 1000,
GrowthPointsPerYuan: 1,
}
if err := db.Create(&order).Error; err != nil {
t.Fatalf("create order failed: %v", err)
}
if err := rentergrowth.AwardOrderCompleted(db, &order, 1000, rentergrowth.SourceOrderCompleted); err != nil {
t.Fatalf("award growth points failed: %v", err)
}
if err := db.Save(&order).Error; err != nil {
t.Fatalf("save awarded order failed: %v", err)
}
if err := repo.updateOrderRefundStatus(t.Context(), order.ID, 1000, "admin_refund"); err != nil {
t.Fatalf("update admin refund status failed: %v", err)
}
if err := repo.updateOrderRefundStatus(t.Context(), order.ID, 1000, "admin_refund"); err != nil {
t.Fatalf("repeat admin refund status failed: %v", err)
}
var savedUser model.User
if err := db.First(&savedUser, renter.ID).Error; err != nil {
t.Fatalf("find renter failed: %v", err)
}
if savedUser.RenterGrowthPoints != 0 || savedUser.RenterGrowthLevel != rentergrowth.DefaultLevelCode {
t.Fatalf("growth after refund = %d/%s, want 0/%s", savedUser.RenterGrowthPoints, savedUser.RenterGrowthLevel, rentergrowth.DefaultLevelCode)
}
var revokeCount int64
if err := db.Model(&model.RenterGrowthLedger{}).
Where("order_id = ? AND source = ?", order.ID, rentergrowth.SourceOrderRefunded).
Count(&revokeCount).Error; err != nil {
t.Fatalf("count revoke ledger failed: %v", err)
}
if revokeCount != 1 {
t.Fatalf("revoke ledger count = %d, want 1", revokeCount)
}
}
// TestPaymentNotifyResultStructure 测试支付回调结果结构
func TestNotifyResultHasRequiredFields(t *testing.T) {
result := NotifyResult{