优化结构
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
package payment
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestSeedDemoOrdersIsRepeatableAndCoversOperationalStates(t *testing.T) {
|
||||
repo := newPaymentOrderRepoForTest(t)
|
||||
db := repo.data.DB()
|
||||
now := time.Date(2026, 8, 29, 2, 0, 0, 0, time.UTC)
|
||||
for attempt := 0; attempt < 2; attempt++ {
|
||||
result, err := SeedDemoOrders(db, now)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if result.Orders != 8 || result.Events < 16 {
|
||||
t.Fatalf("seed result = %#v", result)
|
||||
}
|
||||
}
|
||||
var orders int64
|
||||
if err := db.Model(&paymentOrderPO{}).Where("trade_no LIKE ?", DemoTradePrefix+"%").Count(&orders).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if orders != 8 {
|
||||
t.Fatalf("demo orders = %d, want 8", orders)
|
||||
}
|
||||
for _, status := range []string{"pending", "failed", "paid", "partially_refunded", "refunded"} {
|
||||
var count int64
|
||||
if err := db.Model(&paymentOrderPO{}).Where("trade_no LIKE ? AND payment_status = ?", DemoTradePrefix+"%", status).Count(&count).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if count == 0 {
|
||||
t.Fatalf("demo status %q is missing", status)
|
||||
}
|
||||
}
|
||||
var partialRefund paymentEventPO
|
||||
if err := db.Where("trade_no = ? AND type = ?", DemoTradePrefix+"05", "refund_confirmed").First(&partialRefund).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if partialRefund.Amount != 1200 {
|
||||
t.Fatalf("partial refund event amount = %d, want 1200", partialRefund.Amount)
|
||||
}
|
||||
var created paymentEventPO
|
||||
if err := db.Where("trade_no = ? AND type = ?", DemoTradePrefix+"01", "order_created").First(&created).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if created.ProviderStatus != "" || created.ClientIP == "" || created.DeviceID == "" {
|
||||
t.Fatalf("created event metadata = %#v", created)
|
||||
}
|
||||
var paid paymentOrderPO
|
||||
if err := db.Where("trade_no = ?", DemoTradePrefix+"01").First(&paid).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if paid.ProviderTradeNo == nil || !strings.Contains(*paid.ProviderTradeNo, "20260829") {
|
||||
t.Fatalf("provider trade number = %#v", paid.ProviderTradeNo)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user