新增撞车订单人工退款

This commit is contained in:
yml2213
2026-07-31 21:57:35 +08:00
parent 8c2431c4f2
commit 9511b580e4
13 changed files with 516 additions and 20 deletions
@@ -3,6 +3,7 @@ package payment
import (
"context"
"encoding/json"
"errors"
"testing"
"time"
@@ -514,6 +515,103 @@ func TestStartRefundDoesNotCreateNewOrderWhenFailedRefundExists(t *testing.T) {
}
}
func TestStartMohongRefundDefaultsFullAmountForCancelledPaidOrder(t *testing.T) {
db := setupPaymentTestDB(t)
if err := db.AutoMigrate(&model.MohongOrder{}); err != nil {
t.Fatalf("migrate mohong order failed: %v", err)
}
repo := NewRepository(db, nil, nil)
order := model.MohongOrder{
OrderNo: "MH202607310001",
UserID: 42,
ProductID: 8,
Quantity: 1,
UnitPriceCent: 13300,
AmountCent: 13300,
Status: model.MohongOrderStatusCancelled,
}
if err := db.Create(&order).Error; err != nil {
t.Fatalf("create mohong order failed: %v", err)
}
original := model.PaymentOrder{
PaymentNo: "PAYMOHONG0001",
OrderID: order.ID,
OrderNo: order.OrderNo,
UserID: order.UserID,
Provider: "mock",
ThirdOrderID: "PAYMOHONG0001",
ProviderOrderID: "MOCKPAYMOHONG0001",
AmountCent: order.AmountCent,
BizType: bizTypeMohongPay,
Status: "paid",
}
if err := db.Create(&original).Error; err != nil {
t.Fatalf("create mohong payment failed: %v", err)
}
dto, err := repo.StartMohongRefund(t.Context(), order.ID, 0, "后台撞车订单人工退款")
if err != nil {
t.Fatalf("StartMohongRefund() error = %v", err)
}
if dto.AmountCent != order.AmountCent {
t.Fatalf("refund amount = %d, want %d", dto.AmountCent, order.AmountCent)
}
if dto.BizType != bizTypeMohongRefund {
t.Fatalf("refund biz_type = %q, want %q", dto.BizType, bizTypeMohongRefund)
}
if dto.Status != "refunded" {
t.Fatalf("refund status = %q, want refunded", dto.Status)
}
var latest model.MohongOrder
if err := db.First(&latest, order.ID).Error; err != nil {
t.Fatalf("find mohong order failed: %v", err)
}
if latest.Status != model.MohongOrderStatusRefunded {
t.Fatalf("mohong order status = %q, want refunded", latest.Status)
}
}
func TestStartMohongRefundRequiresCancelledOrder(t *testing.T) {
db := setupPaymentTestDB(t)
if err := db.AutoMigrate(&model.MohongOrder{}); err != nil {
t.Fatalf("migrate mohong order failed: %v", err)
}
repo := NewRepository(db, nil, nil)
order := model.MohongOrder{
OrderNo: "MH202607310002",
UserID: 42,
ProductID: 8,
Quantity: 1,
UnitPriceCent: 13300,
AmountCent: 13300,
Status: model.MohongOrderStatusPaid,
}
if err := db.Create(&order).Error; err != nil {
t.Fatalf("create mohong order failed: %v", err)
}
original := model.PaymentOrder{
PaymentNo: "PAYMOHONG0002",
OrderID: order.ID,
OrderNo: order.OrderNo,
UserID: order.UserID,
Provider: "mock",
ThirdOrderID: "PAYMOHONG0002",
ProviderOrderID: "MOCKPAYMOHONG0002",
AmountCent: order.AmountCent,
BizType: bizTypeMohongPay,
Status: "paid",
}
if err := db.Create(&original).Error; err != nil {
t.Fatalf("create mohong payment failed: %v", err)
}
_, err := repo.StartMohongRefund(t.Context(), order.ID, 0, "后台撞车订单人工退款")
if !errors.Is(err, ErrRefundCannotStart) {
t.Fatalf("StartMohongRefund() error = %v, want ErrRefundCannotStart", err)
}
}
func TestConfirmPaidUpdatesOrderAndPaymentInOnePath(t *testing.T) {
db := setupPaymentTestDB(t)
orderRepo := ordermodule.NewRepository(db)