优化结构

This commit is contained in:
Yvan
2026-08-29 02:58:00 +08:00
parent 3d108ebdfe
commit b6d25c1a0f
24 changed files with 1657 additions and 224 deletions
+55 -1
View File
@@ -13,7 +13,7 @@ func newPaymentOrderRepoForTest(t *testing.T) *paymentOrderRepo {
if err != nil {
t.Fatal(err)
}
if err = db.AutoMigrate(&paymentOrderPO{}); err != nil {
if err = db.AutoMigrate(&paymentOrderPO{}, &paymentEventPO{}); err != nil {
t.Fatal(err)
}
return &paymentOrderRepo{data: &Data{gormDB: newReloadableDB(db, nil)}}
@@ -114,3 +114,57 @@ func TestPaymentOrderRepositoryListsWithFilters(t *testing.T) {
t.Fatalf("filtered orders = %#v total=%d", items, total)
}
}
func TestPaymentOrderRepositorySummarizesAndListsEvents(t *testing.T) {
repo := newPaymentOrderRepoForTest(t)
ctx := bizpayment.WithPaymentOperation(context.Background(), bizpayment.PaymentOperation{
Source: "admin", Reason: "客户重复购买", OperatorID: 7, OperatorName: "operator",
ClientIP: "127.0.0.1", DeviceID: "device-1",
})
order := testPaymentOrder()
order.ClientIP = "10.0.0.8"
order.UserAgent = "payment-client/1.0"
if _, _, err := repo.CreatePaymentOrder(ctx, order); err != nil {
t.Fatal(err)
}
if _, err := repo.ApplyPaymentResult(ctx, bizpayment.PaymentAlipay, order.TradeNo, &bizpayment.PaymentProviderUpdate{
Status: "success", ProviderStatus: "TRADE_SUCCESS", ProviderTradeNo: "provider-summary-1",
Amount: 100, Currency: "CNY", EventType: bizpayment.PaymentEventPaymentSynchronized,
}); err != nil {
t.Fatal(err)
}
current, token, err := repo.BeginPaymentRefund(ctx, bizpayment.PaymentAlipay, order.TradeNo, 40, time.Minute)
if err != nil {
t.Fatal(err)
}
if current, err = repo.CompletePaymentRefundRequest(ctx, bizpayment.PaymentAlipay, order.TradeNo, token, true, ""); err != nil {
t.Fatal(err)
}
if _, err = repo.ConfirmPaymentRefund(ctx, bizpayment.PaymentAlipay, order.TradeNo, current.RefundNo, 40, true, ""); err != nil {
t.Fatal(err)
}
summary, err := repo.SummarizePaymentOrders(ctx, bizpayment.PaymentOrderFilter{ProviderTradeNo: "summary-1"})
if err != nil {
t.Fatal(err)
}
if summary.OrderCount != 1 || summary.PaidCount != 1 || summary.RefundedCount != 1 || len(summary.Currencies) != 1 || summary.Currencies[0].NetAmount != 60 {
t.Fatalf("unexpected summary: %#v", summary)
}
events, err := repo.ListPaymentEvents(ctx, bizpayment.PaymentAlipay, order.TradeNo, 100)
if err != nil {
t.Fatal(err)
}
if len(events) < 5 {
t.Fatalf("event count = %d, want at least 5", len(events))
}
var foundRefund bool
for _, event := range events {
if event.Type == bizpayment.PaymentEventRefundStarted {
foundRefund = event.Message == "客户重复购买" && event.OperatorID == 7 && event.DeviceID == "device-1"
}
}
if !foundRefund {
t.Fatalf("refund audit event missing operation context: %#v", events)
}
}