new-api/model/option_payment_test.go
zizi 9264873e2c fix: load direct payment options
Register Alipay and WxPay option keys and sync option updates into runtime payment settings.
2026-05-20 15:41:36 +08:00

142 lines
7.4 KiB
Go

package model
import (
"testing"
"github.com/QuantumNous/new-api/common"
"github.com/QuantumNous/new-api/setting"
"github.com/stretchr/testify/require"
)
func TestPaymentOptionsUpdateRuntimeSettings(t *testing.T) {
originalAlipay := setting.Alipay
originalWxpay := setting.Wxpay
common.OptionMapRWMutex.RLock()
originalOptionMap := common.OptionMap
common.OptionMapRWMutex.RUnlock()
t.Cleanup(func() {
setting.Alipay = originalAlipay
setting.Wxpay = originalWxpay
common.OptionMapRWMutex.Lock()
common.OptionMap = originalOptionMap
common.OptionMapRWMutex.Unlock()
})
common.OptionMapRWMutex.Lock()
common.OptionMap = map[string]string{}
common.OptionMapRWMutex.Unlock()
require.NoError(t, updateOptionMap(setting.AlipayEnabledOption, "true"))
require.NoError(t, updateOptionMap(setting.AlipayAppIDOption, "alipay-app"))
require.NoError(t, updateOptionMap(setting.AlipayPrivateKeyOption, "alipay-private"))
require.NoError(t, updateOptionMap(setting.AlipayPublicKeyOption, "alipay-public"))
require.NoError(t, updateOptionMap(setting.AlipayGatewayUrlOption, "https://alipay-gateway.test"))
require.NoError(t, updateOptionMap(setting.AlipayNotifyURLOption, "https://example.test/alipay/notify"))
require.NoError(t, updateOptionMap(setting.AlipayReturnURLOption, "https://example.test/alipay/return"))
require.True(t, setting.Alipay.Enabled)
require.Equal(t, "alipay-app", setting.Alipay.AppID)
require.Equal(t, "alipay-private", setting.Alipay.PrivateKey)
require.Equal(t, "alipay-public", setting.Alipay.PublicKey)
require.Equal(t, "https://alipay-gateway.test", setting.Alipay.GatewayUrl)
require.Equal(t, "https://example.test/alipay/notify", setting.Alipay.NotifyURL)
require.Equal(t, "https://example.test/alipay/return", setting.Alipay.ReturnURL)
require.NoError(t, updateOptionMap(setting.WxpayEnabledOption, "true"))
require.NoError(t, updateOptionMap(setting.WxpayAppIDOption, "wxpay-app"))
require.NoError(t, updateOptionMap(setting.WxpayMchIDOption, "wxpay-mch"))
require.NoError(t, updateOptionMap(setting.WxpayPrivateKeyOption, "wxpay-private"))
require.NoError(t, updateOptionMap(setting.WxpayMerchantSerialNoOption, "merchant-serial"))
require.NoError(t, updateOptionMap(setting.WxpayAPIv3KeyOption, "12345678901234567890123456789012"))
require.NoError(t, updateOptionMap(setting.WxpayPlatformPublicKeyOption, "wxpay-platform-public"))
require.NoError(t, updateOptionMap(setting.WxpayPlatformCertificateOption, "wxpay-platform-cert"))
require.NoError(t, updateOptionMap(setting.WxpayPlatformSerialNoOption, "platform-serial"))
require.NoError(t, updateOptionMap(setting.WxpayGatewayURLOption, "https://wxpay-gateway.test"))
require.NoError(t, updateOptionMap(setting.WxpayNotifyURLOption, "https://example.test/wxpay/notify"))
require.NoError(t, updateOptionMap(setting.WxpayReturnURLOption, "https://example.test/wxpay/return"))
require.NoError(t, updateOptionMap(setting.WxpayH5AppNameOption, "new-api"))
require.NoError(t, updateOptionMap(setting.WxpayH5AppURLOption, "https://example.test"))
require.True(t, setting.Wxpay.Enabled)
require.Equal(t, "wxpay-app", setting.Wxpay.AppID)
require.Equal(t, "wxpay-mch", setting.Wxpay.MchID)
require.Equal(t, "wxpay-private", setting.Wxpay.PrivateKey)
require.Equal(t, "merchant-serial", setting.Wxpay.MerchantSerialNo)
require.Equal(t, "12345678901234567890123456789012", setting.Wxpay.APIv3Key)
require.Equal(t, "wxpay-platform-public", setting.Wxpay.PlatformPublicKey)
require.Equal(t, "wxpay-platform-cert", setting.Wxpay.PlatformCertificate)
require.Equal(t, "platform-serial", setting.Wxpay.PlatformSerialNo)
require.Equal(t, "https://wxpay-gateway.test", setting.Wxpay.GatewayURL)
require.Equal(t, "https://example.test/wxpay/notify", setting.Wxpay.NotifyURL)
require.Equal(t, "https://example.test/wxpay/return", setting.Wxpay.ReturnURL)
require.Equal(t, "new-api", setting.Wxpay.H5AppName)
require.Equal(t, "https://example.test", setting.Wxpay.H5AppURL)
}
func TestInitOptionMapIncludesDirectPaymentOptions(t *testing.T) {
originalAlipay := setting.Alipay
originalWxpay := setting.Wxpay
common.OptionMapRWMutex.RLock()
originalOptionMap := common.OptionMap
common.OptionMapRWMutex.RUnlock()
t.Cleanup(func() {
setting.Alipay = originalAlipay
setting.Wxpay = originalWxpay
common.OptionMapRWMutex.Lock()
common.OptionMap = originalOptionMap
common.OptionMapRWMutex.Unlock()
})
setting.Alipay = setting.AlipaySetting{
Enabled: true,
AppID: "init-alipay-app",
PrivateKey: "init-alipay-private",
PublicKey: "init-alipay-public",
GatewayUrl: "https://init-alipay-gateway.test",
NotifyURL: "https://example.test/init-alipay/notify",
ReturnURL: "https://example.test/init-alipay/return",
}
setting.Wxpay = setting.WxpaySetting{
Enabled: true,
AppID: "init-wxpay-app",
MchID: "init-wxpay-mch",
PrivateKey: "init-wxpay-private",
MerchantSerialNo: "init-merchant-serial",
APIv3Key: "12345678901234567890123456789012",
PlatformPublicKey: "init-platform-public",
PlatformCertificate: "init-platform-cert",
PlatformSerialNo: "init-platform-serial",
GatewayURL: "https://init-wxpay-gateway.test",
NotifyURL: "https://example.test/init-wxpay/notify",
ReturnURL: "https://example.test/init-wxpay/return",
H5AppName: "init-new-api",
H5AppURL: "https://init.example.test",
}
InitOptionMap()
common.OptionMapRWMutex.RLock()
defer common.OptionMapRWMutex.RUnlock()
require.Equal(t, "true", common.OptionMap[setting.AlipayEnabledOption])
require.Equal(t, "init-alipay-app", common.OptionMap[setting.AlipayAppIDOption])
require.Equal(t, "init-alipay-private", common.OptionMap[setting.AlipayPrivateKeyOption])
require.Equal(t, "init-alipay-public", common.OptionMap[setting.AlipayPublicKeyOption])
require.Equal(t, "https://init-alipay-gateway.test", common.OptionMap[setting.AlipayGatewayUrlOption])
require.Equal(t, "https://example.test/init-alipay/notify", common.OptionMap[setting.AlipayNotifyURLOption])
require.Equal(t, "https://example.test/init-alipay/return", common.OptionMap[setting.AlipayReturnURLOption])
require.Equal(t, "true", common.OptionMap[setting.WxpayEnabledOption])
require.Equal(t, "init-wxpay-app", common.OptionMap[setting.WxpayAppIDOption])
require.Equal(t, "init-wxpay-mch", common.OptionMap[setting.WxpayMchIDOption])
require.Equal(t, "init-wxpay-private", common.OptionMap[setting.WxpayPrivateKeyOption])
require.Equal(t, "init-merchant-serial", common.OptionMap[setting.WxpayMerchantSerialNoOption])
require.Equal(t, "12345678901234567890123456789012", common.OptionMap[setting.WxpayAPIv3KeyOption])
require.Equal(t, "init-platform-public", common.OptionMap[setting.WxpayPlatformPublicKeyOption])
require.Equal(t, "init-platform-cert", common.OptionMap[setting.WxpayPlatformCertificateOption])
require.Equal(t, "init-platform-serial", common.OptionMap[setting.WxpayPlatformSerialNoOption])
require.Equal(t, "https://init-wxpay-gateway.test", common.OptionMap[setting.WxpayGatewayURLOption])
require.Equal(t, "https://example.test/init-wxpay/notify", common.OptionMap[setting.WxpayNotifyURLOption])
require.Equal(t, "https://example.test/init-wxpay/return", common.OptionMap[setting.WxpayReturnURLOption])
require.Equal(t, "init-new-api", common.OptionMap[setting.WxpayH5AppNameOption])
require.Equal(t, "https://init.example.test", common.OptionMap[setting.WxpayH5AppURLOption])
}