120 lines
4.3 KiB
Go
120 lines
4.3 KiB
Go
package payment
|
|
|
|
import (
|
|
"context"
|
|
bizpayment "kra/internal/biz/payment"
|
|
"strings"
|
|
"testing"
|
|
|
|
gopayDouyin "github.com/go-pay/gopay/douyin"
|
|
gopayWechatV3 "github.com/go-pay/gopay/wechat/v3"
|
|
)
|
|
|
|
func TestWechatV3RefundRejectsBlankIdentityBeforeClient(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
name string
|
|
req *bizpayment.PaymentRefundRequest
|
|
want string
|
|
}{
|
|
{name: "blank trade number", req: &bizpayment.PaymentRefundRequest{TradeNo: " ", RefundNo: "R1"}, want: "out_trade_no"},
|
|
{name: "blank refund number", req: &bizpayment.PaymentRefundRequest{TradeNo: "T1", RefundNo: " "}, want: "out_refund_no"},
|
|
{name: "invalid amount", req: &bizpayment.PaymentRefundRequest{TradeNo: "T1", RefundNo: "R1", Amount: 2, TotalAmount: 1}, want: "金额"},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
_, err := (&wechatV3Adapter{}).Refund(context.Background(), tc.req, nil)
|
|
if err == nil || !strings.Contains(err.Error(), tc.want) {
|
|
t.Fatalf("Refund() error = %v, want %q", err, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestWechatV3RefundIdentityValidation(t *testing.T) {
|
|
valid := func() *gopayWechatV3.RefundOrderResponse {
|
|
return &gopayWechatV3.RefundOrderResponse{
|
|
OutTradeNo: " T1 ",
|
|
OutRefundNo: " R1 ",
|
|
RefundId: " WX-R1 ",
|
|
}
|
|
}
|
|
refundID, err := validateWechatV3RefundIdentity(valid(), " T1 ", " R1 ")
|
|
if err != nil {
|
|
t.Fatalf("valid refund response: %v", err)
|
|
}
|
|
if refundID != "WX-R1" {
|
|
t.Fatalf("refund id = %q, want %q", refundID, "WX-R1")
|
|
}
|
|
for _, tc := range []struct {
|
|
name string
|
|
edit func(*gopayWechatV3.RefundOrderResponse)
|
|
}{
|
|
{name: "trade number missing", edit: func(r *gopayWechatV3.RefundOrderResponse) { r.OutTradeNo = " " }},
|
|
{name: "trade number mismatch", edit: func(r *gopayWechatV3.RefundOrderResponse) { r.OutTradeNo = "OTHER" }},
|
|
{name: "refund number missing", edit: func(r *gopayWechatV3.RefundOrderResponse) { r.OutRefundNo = " " }},
|
|
{name: "refund number mismatch", edit: func(r *gopayWechatV3.RefundOrderResponse) { r.OutRefundNo = "OTHER" }},
|
|
{name: "provider refund id missing", edit: func(r *gopayWechatV3.RefundOrderResponse) { r.RefundId = " " }},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
refund := valid()
|
|
tc.edit(refund)
|
|
if _, err := validateWechatV3RefundIdentity(refund, "T1", "R1"); err == nil {
|
|
t.Fatal("accepted invalid refund identity")
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestDouyinRefundRejectsBlankIdentityBeforeClient(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
name string
|
|
req *bizpayment.PaymentRefundRequest
|
|
want string
|
|
}{
|
|
{name: "blank trade number", req: &bizpayment.PaymentRefundRequest{TradeNo: " ", RefundNo: "R1"}, want: "out_trade_no"},
|
|
{name: "blank refund number", req: &bizpayment.PaymentRefundRequest{TradeNo: "T1", RefundNo: " "}, want: "out_refund_no"},
|
|
{name: "invalid amount", req: &bizpayment.PaymentRefundRequest{TradeNo: "T1", RefundNo: "R1", Amount: 2, TotalAmount: 1}, want: "金额"},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
_, err := (&douyinAdapter{}).Refund(context.Background(), tc.req, nil)
|
|
if err == nil || !strings.Contains(err.Error(), tc.want) {
|
|
t.Fatalf("Refund() error = %v, want %q", err, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestDouyinRefundIdentityValidation(t *testing.T) {
|
|
valid := func() *gopayDouyin.Refund {
|
|
return &gopayDouyin.Refund{
|
|
OutTradeNo: " T1 ",
|
|
OutRefundNo: " R1 ",
|
|
RefundId: " DY-R1 ",
|
|
}
|
|
}
|
|
refundID, err := validateDouyinRefundIdentity(valid(), " T1 ", " R1 ")
|
|
if err != nil {
|
|
t.Fatalf("valid refund response: %v", err)
|
|
}
|
|
if refundID != "DY-R1" {
|
|
t.Fatalf("refund id = %q, want %q", refundID, "DY-R1")
|
|
}
|
|
for _, tc := range []struct {
|
|
name string
|
|
edit func(*gopayDouyin.Refund)
|
|
}{
|
|
{name: "trade number missing", edit: func(r *gopayDouyin.Refund) { r.OutTradeNo = " " }},
|
|
{name: "trade number mismatch", edit: func(r *gopayDouyin.Refund) { r.OutTradeNo = "OTHER" }},
|
|
{name: "refund number missing", edit: func(r *gopayDouyin.Refund) { r.OutRefundNo = " " }},
|
|
{name: "refund number mismatch", edit: func(r *gopayDouyin.Refund) { r.OutRefundNo = "OTHER" }},
|
|
{name: "provider refund id missing", edit: func(r *gopayDouyin.Refund) { r.RefundId = " " }},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
refund := valid()
|
|
tc.edit(refund)
|
|
if _, err := validateDouyinRefundIdentity(refund, "T1", "R1"); err == nil {
|
|
t.Fatal("accepted invalid refund identity")
|
|
}
|
|
})
|
|
}
|
|
}
|