You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

33 lines
1.2 KiB

package alipay
import (
"context"
"errors"
"net/url"
"testing"
)
// 与 wechat 同型:alipay 的 newSys 出错时 sys 仍是非 nil 的 *Alipay(client 可能为 nil),
// 若直接 `defsys, err = newSys(...)` 会得到「非 nil 接口 + 半初始化对象」,守卫失效、调用时 nil 解引用。
// OnInit 失败必须保持 defsys 为 nil,包级函数返回 ErrNotInited 而不是 panic。
func TestOnInitFailure_GuardsHold(t *testing.T) {
defsys = nil
t.Cleanup(func() { defsys = nil })
if err := OnInit(map[string]interface{}{}); err == nil {
t.Fatal("空配置下 OnInit 应返回错误")
}
if defsys != nil {
t.Fatal("OnInit 失败后 defsys 必须保持 nil")
}
if got := GenerateOrderNo("Alipay"); got != "" {
t.Errorf("未初始化时 GenerateOrderNo 应返回空串,实际=%q", got)
}
if _, e := CreateAppOrder(context.Background(), "no1", 1, "d", "u"); !errors.Is(e, ErrNotInited) {
t.Errorf("未初始化时 CreateAppOrder 应返回 ErrNotInited,实际=%v", e)
}
if ok, e := DecryptWxPayNotify(url.Values{}); ok || !errors.Is(e, ErrNotInited) {
t.Errorf("未初始化时 DecryptWxPayNotify 应返回 (false, ErrNotInited),实际=(%v,%v)", ok, e)
}
}