Files
opsx-licence/backend/internal/service/payment/waffo_test.go
T
Logan.Li 37d9e8ca56 fix: 测试包年商品改用 USD,避免 CNY 不被支持
Waffo 测试侧 Yearly Product 仅支持 USD;按 Product ID 自动选币种。
2026-08-13 00:13:07 +08:00

80 lines
2.2 KiB
Go

package payment
import (
"net/url"
"strings"
"testing"
)
func TestResolveBaseCheckoutURL_YearlyOnetimeUSD(t *testing.T) {
cfg := WaffoConfig{
StoreSlug: "opsxshell-pwsi6m4n",
ProductIDYearly: "PROD_1BIezCi932IbgCzRIV8hcJ",
ProductIDPerpetual: "PROD_0pcnzzT4nalEkkcdyIUoD5",
Currency: "CNY",
CurrencyYearly: "CNY", // 即使配置写 CNY,已知测试商品仍强制 USD // Logan.Li
CurrencyPerpetual: "USD",
Environment: "test",
SuccessURL: "opsxshell://pro/activated",
}
u, err := resolveBaseCheckoutURL(cfg, "yearly")
if err != nil {
t.Fatal(err)
}
if !strings.Contains(u.Path, "PROD_1BIezCi932IbgCzRIV8hcJ") {
t.Fatalf("yearly product missing: %s", u.String())
}
q := u.Query()
if q.Get("type") != "onetime" {
t.Fatalf("type=%s want onetime", q.Get("type"))
}
if q.Get("currency") != "USD" {
t.Fatalf("currency=%s want USD", q.Get("currency"))
}
}
func TestResolveBaseCheckoutURL_PerpetualOnetimeUSD(t *testing.T) {
cfg := WaffoConfig{
StoreSlug: "opsxshell-pwsi6m4n",
ProductIDYearly: "PROD_1BIezCi932IbgCzRIV8hcJ",
ProductIDPerpetual: "PROD_0pcnzzT4nalEkkcdyIUoD5",
Currency: "CNY",
CurrencyYearly: "CNY",
CurrencyPerpetual: "CNY",
Environment: "test",
SuccessURL: "opsxshell://pro/activated",
}
u, err := resolveBaseCheckoutURL(cfg, "perpetual")
if err != nil {
t.Fatal(err)
}
if !strings.Contains(u.Path, "PROD_0pcnzzT4nalEkkcdyIUoD5") {
t.Fatalf("perpetual product missing: %s", u.String())
}
q := u.Query()
if q.Get("type") != "onetime" {
t.Fatalf("type=%s want onetime", q.Get("type"))
}
if q.Get("currency") != "USD" {
t.Fatalf("currency=%s want USD", q.Get("currency"))
}
}
func TestBuildCheckoutURL_HostedFallbackWithoutSlug(t *testing.T) {
cfg := WaffoConfig{
CheckoutURL: "https://pancake.waffo.ai/store/opsxshell-pwsi6m4n/product/PROD_1BIezCi932IbgCzRIV8hcJ?type=onetime&currency=CNY&test=true",
SuccessURL: "http://l123.91ai.io/api/v1/purchase/success",
}
raw, err := BuildCheckoutURL(cfg, "ORD1", "dev-1", "a@b.c", "", "yearly")
if err != nil {
t.Fatal(err)
}
u, err := url.Parse(raw)
if err != nil {
t.Fatal(err)
}
if u.Query().Get("orderNo") != "ORD1" {
t.Fatalf("orderNo missing: %s", raw)
}
}