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.
 
 
 
 
 
 

127 lines
4.2 KiB

package comm
import "testing"
func TestCompareVersion(t *testing.T) {
cases := []struct {
a, b string
want int
}{
{"1.0.0", "1.0.0", 0},
{"1.2", "1.2.0", 0}, // 段数不同,短的补 0
{"1.10.0", "1.9.0", 1}, // 字符串比较会判反,必须按整数
{"1.9.0", "1.10.0", -1},
{"2.0.0", "1.99.99", 1},
{"1.0.1", "1.0.0", 1},
{"1.0.0-beta", "1.0.0", 0}, // 非数字后缀取前导数字
{"1.2.3rc1", "1.2.3", 0},
{"", "1.0.0", -1},
{"1.0.0", "", 1},
}
for _, c := range cases {
if got := CompareVersion(c.a, c.b); got != c.want {
t.Fatalf("CompareVersion(%q,%q)=%d, 期望 %d", c.a, c.b, got, c.want)
}
}
}
func TestNeedForceUpdate(t *testing.T) {
on := &ChannelApp{ForceUpdate: true, MinVersion: "2.0.0"}
if !on.NeedForceUpdate("1.9.9") {
t.Fatal("低于最低版本应强更")
}
if on.NeedForceUpdate("2.0.0") || on.NeedForceUpdate("2.1.0") {
t.Fatal("达到或高于最低版本不该强更")
}
if on.NeedForceUpdate("") {
t.Fatal("客户端未上报版本时不该强更,否则老客户端会被全挡在门外")
}
off := &ChannelApp{ForceUpdate: false, MinVersion: "2.0.0"}
if off.NeedForceUpdate("1.0.0") {
t.Fatal("强更开关关闭时不该强更")
}
noMin := &ChannelApp{ForceUpdate: true}
if noMin.NeedForceUpdate("1.0.0") {
t.Fatal("未配最低版本时不该强更")
}
var nilApp *ChannelApp
if nilApp.NeedForceUpdate("1.0.0") {
t.Fatal("nil 配置不该强更")
}
}
func TestIsReviewing(t *testing.T) {
c := &ChannelApp{ReviewVersion: "3.1.0"}
if !c.IsReviewing("3.1.0") {
t.Fatal("送审版本应识别为审核中")
}
if c.IsReviewing("3.0.0") || c.IsReviewing("3.2.0") {
t.Fatal("非送审版本不该识别为审核中")
}
if (&ChannelApp{}).IsReviewing("3.1.0") {
t.Fatal("未配送审版本时恒为 false")
}
}
func TestPickChannelApp(t *testing.T) {
rows := []*ChannelApp{
{AppName: "", Channel: ChannelGlobalApple, Version: "1.0.0"},
{AppName: "voitrans", Channel: ChannelGlobalApple, Version: "2.0.0"},
{AppName: "", Channel: ChannelGlobalGoogle, Version: "1.5.0"},
}
if got := PickChannelApp(rows, ChannelGlobalApple); got == nil || got.Version != "2.0.0" {
t.Fatalf("应用行应覆盖全局行,实际 %+v", got)
}
if got := PickChannelApp(rows, ChannelGlobalGoogle); got == nil || got.Version != "1.5.0" {
t.Fatalf("只有全局行时应回退全局,实际 %+v", got)
}
if got := PickChannelApp(rows, ChannelChinaHuawei); got != nil {
t.Fatalf("该渠道无配置时应返回 nil,实际 %+v", got)
}
}
func TestSplitPayChannels(t *testing.T) {
got := SplitPayChannels(" wxpay , ,apple ")
if len(got) != 2 || got[0] != PayWechat || got[1] != PayApple {
t.Fatalf("SplitPayChannels 结果异常: %#v", got)
}
}
// 游客登录的版本限定:这是应用商店过审期的开关,判错要么违规放行、要么审核员看不到入口被拒,
// 三段语义各钉一条。
func TestShowTourists(t *testing.T) {
// 总开关关掉:无论版本、无论有没有配生效版本,一律隐藏。
off := &ChannelApp{Tourists: false, TouristsVersion: "1.0.2"}
if off.ShowTourists("1.0.2") {
t.Fatal("总开关关掉时不该显示游客登录")
}
// 开关开、但没点名任何版本:一律隐藏。白名单语义,不是「没限定就全放行」——
// 判宽的后果是不该露游客入口的版本露了出去,判严只是入口少显示。
none := &ChannelApp{Tourists: true}
for _, v := range []string{"1.0.2", "9.9.9", ""} {
if none.ShowTourists(v) {
t.Fatalf("未填生效版本时 %q 不该可见", v)
}
}
// 开关开、点名 1.0.2:只有这一版可见,高于/低于/没上报一律隐藏。
only := &ChannelApp{Tourists: true, TouristsVersion: "1.0.2"}
if !only.ShowTourists("1.0.2") {
t.Fatal("被点名的版本应可见")
}
// "1.0.2" == "1.0.2.0":段数不同按 0 补齐,别因为后台填了三段、客户端报四段就判不匹配。
if !only.ShowTourists("1.0.2.0") {
t.Fatal("补零等价的版本应可见")
}
for _, v := range []string{"1.0.1", "1.0.3", "1.0.20", "2.0.0", ""} {
if only.ShowTourists(v) {
t.Fatalf("点名 1.0.2 时 %q 不该可见", v)
}
}
var nilApp *ChannelApp
if nilApp.ShowTourists("1.0.2") {
t.Fatal("未配置渠道不该显示游客登录")
}
}