test(backend): 补下单后查单失败金额留 0 的兜底分支用例

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-07-10 20:38:28 +08:00
parent a5d7a1dc00
commit f5a70d08cc
+29
View File
@@ -278,6 +278,35 @@ func TestCreatePurchase_HappyPath(t *testing.T) {
assert.Equal(t, strconv.FormatUint(p.ID, 10), gotBizRef, "biz_ref 应为购买记录 id")
}
// TestCreatePurchase_QueryOrderFailKeepsZeroAmount 覆盖 D1 金额兜底:下单 POST 成功但
// best-effort 查单 GET 失败时,不阻断下单,金额留 0PayURL/OutTradeNo 等仍正常落库)。
func TestCreatePurchase_QueryOrderFailKeepsZeroAmount(t *testing.T) {
db := testutil.SetupTestDB()
shop := testutil.CreateTestShop(db, "PAY007")
mux := http.NewServeMux()
mux.HandleFunc("POST /api/v2/orders", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, `{"data":{"order_no":"pay-test-qf","session":{"render_type":"redirect","payload":{"url":"https://pay.test/cashier"}}}}`)
})
mux.HandleFunc("GET /api/v2/orders/pay-test-qf", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusInternalServerError)
})
payServer := httptest.NewServer(mux)
defer payServer.Close()
svc := newTestPaySvc(db, payServer.URL)
res, err := svc.CreatePurchase(shop.ID, 1, "annual_standard", "mobile")
require.NoError(t, err, "查单失败不应阻断下单")
assert.Equal(t, int64(0), res.AmountMinor, "查单失败金额留 0")
assert.Equal(t, "", res.Amount, "查单失败金额留 0")
assert.Equal(t, "https://pay.test/cashier", res.PayURL)
var p model.LicensePurchase
require.NoError(t, db.Where("out_trade_no = ?", "pay-test-qf").First(&p).Error)
assert.Equal(t, "https://pay.test/cashier", p.PayURL)
assert.Equal(t, int64(0), p.AmountMinor)
}
func TestCreatePurchase_UnknownPlanAndUnconfigured(t *testing.T) {
db := testutil.SetupTestDB()
svc := newTestPaySvc(db, "http://pay.invalid")