49 lines
2.0 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|