32 lines
918 B
Go
32 lines
918 B
Go
package reconcile_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/wangjia/pay/internal/model"
|
|
"github.com/wangjia/pay/internal/reconcile"
|
|
"github.com/wangjia/pay/internal/store"
|
|
)
|
|
|
|
func TestOrderExpirerTaskClosesStalePending(t *testing.T) {
|
|
db := model.OpenTestDB(t)
|
|
s := store.NewOrderStore(db)
|
|
now := time.Date(2026, 7, 10, 12, 0, 0, 0, time.UTC)
|
|
|
|
o := &model.OrderV2{OutTradeNo: "OLD", AmountMinor: 100, Currency: "USDT", Status: model.OrderPendingV2}
|
|
_ = s.CreateOrder(o)
|
|
_ = db.Model(&model.OrderV2{}).Where("out_trade_no = ?", "OLD").
|
|
Update("created_at", now.Add(-2*time.Hour)).Error
|
|
|
|
task := reconcile.OrderExpirerTask(s, time.Hour, func() time.Time { return now })
|
|
if err := task(context.Background()); err != nil {
|
|
t.Fatalf("task: %v", err)
|
|
}
|
|
got, _ := s.GetOrder("OLD")
|
|
if got.Status != model.OrderExpiredV2 {
|
|
t.Fatalf("超时 pending 单应 expired, got %v", got.Status)
|
|
}
|
|
}
|