feat(v2): fake provider(确定性,验证收款管线;真渠道 P3)
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
package fake_test
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/wangjia/pay/internal/provider"
|
||||
"github.com/wangjia/pay/internal/provider/fake"
|
||||
)
|
||||
|
||||
func TestFakeCreateAndVerify(t *testing.T) {
|
||||
var _ provider.Provider = fake.New() // 编译期断言满足接口
|
||||
|
||||
p := fake.New()
|
||||
ctx := context.Background()
|
||||
|
||||
sess, err := p.Create(ctx, provider.CreateRequest{OutTradeNo: "PAY-1", AmountMinor: 29990000, Currency: "USDT"})
|
||||
if err != nil {
|
||||
t.Fatalf("create: %v", err)
|
||||
}
|
||||
if sess.ProviderRef != "FAKE-PAY-1" || sess.RenderType != provider.RenderCryptoAddress {
|
||||
t.Fatalf("session = %+v", sess)
|
||||
}
|
||||
|
||||
ev, err := p.VerifyCallback(ctx, provider.CallbackInput{
|
||||
Raw: []byte(`{"provider_ref":"FAKE-PAY-1","status":"succeeded","amount_minor":29990000,"currency":"USDT"}`),
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("verify: %v", err)
|
||||
}
|
||||
if ev.ProviderRef != "FAKE-PAY-1" || ev.Status != provider.PaidSucceeded || ev.PaidAmountMinor != 29990000 {
|
||||
t.Fatalf("event = %+v", ev)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFakeQueryPreset(t *testing.T) {
|
||||
p := fake.New()
|
||||
ctx := context.Background()
|
||||
|
||||
ev, _ := p.Query(ctx, provider.QueryRequest{ProviderRef: "FAKE-PAY-2"})
|
||||
if ev.Status != provider.PaidPending {
|
||||
t.Fatalf("默认应 pending, got %v", ev.Status)
|
||||
}
|
||||
|
||||
p.SetQueryResult("FAKE-PAY-2", provider.PaidEvent{
|
||||
ProviderRef: "FAKE-PAY-2", Status: provider.PaidSucceeded, PaidAmountMinor: 100, PaidCurrency: "USDT",
|
||||
})
|
||||
ev2, _ := p.Query(ctx, provider.QueryRequest{ProviderRef: "FAKE-PAY-2"})
|
||||
if ev2.Status != provider.PaidSucceeded || ev2.PaidAmountMinor != 100 {
|
||||
t.Fatalf("预置后应 succeeded, got %+v", ev2)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user