优化结构
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user