Files
NianAIGC/backend/internal/application/payments_test.go
T
2026-10-12 13:57:23 +08:00

49 lines
2.0 KiB
Go

package application
import (
"fmt"
"strings"
"testing"
)
func TestPaymentConfigDisabledDoesNotRequireCredentials(t *testing.T) {
c, err := paymentConfig(func(string) string { return "" }, nil)
if err != nil || c.Enabled {
t.Fatalf("config=%+v err=%v", c, err)
}
}
func TestPaymentConfigLoadsOnlyServerCredentialsAndValidatesLimits(t *testing.T) {
values := map[string]string{
"WECHAT_PAY_ENABLED": "true", "WECHAT_PAY_MCH_ID": "merchant", "WECHAT_PAY_APP_ID": "wxapp",
"WECHAT_PAY_NOTIFY_URL": "https://pay.example.test/api/payments/wechat/notify",
"WECHAT_PAY_MERCHANT_SERIAL": "serial", "WECHAT_PAY_API_V3_KEY": strings.Repeat("a", 32),
"WECHAT_PAY_PUBLIC_KEY_ID": "PUB_KEY_ID_test", "WECHAT_PAY_PRIVATE_KEY_FILE": "/private/key.pem",
"WECHAT_PAY_PUBLIC_KEY_PEM": "PUBLIC\\nKEY", "WECHAT_PAY_MIN_AMOUNT_FEN": "1",
"WECHAT_PAY_PRESET_AMOUNTS_FEN": "1,10000,50000",
}
read := func(path string) ([]byte, error) {
if path != "/private/key.pem" {
return nil, fmt.Errorf("unexpected file")
}
return []byte("PRIVATE"), nil
}
c, err := paymentConfig(func(key string) string { return values[key] }, read)
if err != nil || c.MinAmountFen != 1 || c.PrivateKeyPEM != "PRIVATE" || c.WechatPublicKeyPEM != "PUBLIC\nKEY" || len(c.PresetAmountsFen) != 3 {
t.Fatalf("config load err=%v", err)
}
for _, test := range []struct{ key, value string }{
{"WECHAT_PAY_NOTIFY_URL", "http://pay.example.test/api/payments/wechat/notify"},
{"WECHAT_PAY_NOTIFY_URL", "https://user:secret@pay.example.test/api/payments/wechat/notify"},
{"WECHAT_PAY_API_V3_KEY", "secret"}, {"WECHAT_PAY_MAX_AMOUNT_FEN", "1000001"},
{"WECHAT_PAY_PRESET_AMOUNTS_FEN", "100,100"}, {"WECHAT_PAY_PRESET_AMOUNTS_FEN", "1.50"},
} {
old := values[test.key]
values[test.key] = test.value
_, err := paymentConfig(func(key string) string { return values[key] }, read)
values[test.key] = old
if err == nil || strings.Contains(err.Error(), "user:secret") {
t.Fatalf("key=%s err=%v", test.key, err)
}
}
}