Files
junhong_cmp_fiber/pkg/wechat/payment_test.go
2026-01-30 17:25:30 +08:00

94 lines
3.0 KiB
Go

package wechat
import (
"context"
"testing"
"github.com/break/junhong_cmp_fiber/pkg/errors"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
)
func TestPaymentService_ParameterValidation(t *testing.T) {
logger := zap.NewNop()
mockSvc := &MockPaymentService{}
t.Run("CreateJSAPIOrder_参数验证", func(t *testing.T) {
mockSvc.CreateJSAPIOrderFn = func(ctx context.Context, orderNo, description, openID string, amount int) (*JSAPIPayResult, error) {
if orderNo == "" || openID == "" || amount <= 0 {
return nil, errors.New(errors.CodeInvalidParam, "订单号、OpenID 和金额不能为空")
}
return &JSAPIPayResult{PrepayID: "prepay_id_123"}, nil
}
_, err := mockSvc.CreateJSAPIOrder(context.Background(), "", "desc", "openid", 100)
require.Error(t, err)
_, err = mockSvc.CreateJSAPIOrder(context.Background(), "order_123", "desc", "", 100)
require.Error(t, err)
_, err = mockSvc.CreateJSAPIOrder(context.Background(), "order_123", "desc", "openid", 0)
require.Error(t, err)
result, err := mockSvc.CreateJSAPIOrder(context.Background(), "order_123", "desc", "openid", 100)
require.NoError(t, err)
assert.NotNil(t, result)
assert.Equal(t, "prepay_id_123", result.PrepayID)
})
t.Run("CreateH5Order_参数验证", func(t *testing.T) {
mockSvc.CreateH5OrderFn = func(ctx context.Context, orderNo, description string, amount int, sceneInfo *H5SceneInfo) (*H5PayResult, error) {
if orderNo == "" || amount <= 0 {
return nil, errors.New(errors.CodeInvalidParam, "订单号和金额不能为空")
}
return &H5PayResult{H5URL: "https://wx.tenpay.com/..."}, nil
}
_, err := mockSvc.CreateH5Order(context.Background(), "", "desc", 100, nil)
require.Error(t, err)
_, err = mockSvc.CreateH5Order(context.Background(), "order_123", "desc", 0, nil)
require.Error(t, err)
result, err := mockSvc.CreateH5Order(context.Background(), "order_123", "desc", 100, nil)
require.NoError(t, err)
assert.NotNil(t, result)
assert.NotEmpty(t, result.H5URL)
})
t.Run("QueryOrder_参数验证", func(t *testing.T) {
mockSvc.QueryOrderFn = func(ctx context.Context, orderNo string) (*OrderInfo, error) {
if orderNo == "" {
return nil, errors.New(errors.CodeInvalidParam, "订单号不能为空")
}
return &OrderInfo{OutTradeNo: orderNo}, nil
}
_, err := mockSvc.QueryOrder(context.Background(), "")
require.Error(t, err)
result, err := mockSvc.QueryOrder(context.Background(), "order_123")
require.NoError(t, err)
assert.NotNil(t, result)
assert.Equal(t, "order_123", result.OutTradeNo)
})
t.Run("CloseOrder_参数验证", func(t *testing.T) {
mockSvc.CloseOrderFn = func(ctx context.Context, orderNo string) error {
if orderNo == "" {
return errors.New(errors.CodeInvalidParam, "订单号不能为空")
}
return nil
}
err := mockSvc.CloseOrder(context.Background(), "")
require.Error(t, err)
err = mockSvc.CloseOrder(context.Background(), "order_123")
require.NoError(t, err)
})
_ = logger
}