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.
 
 
 
 
 
 

57 lines
2.4 KiB

package user
import (
"testing"
"yunyan/comm"
)
// 客户端拿到的就是这三个布尔值,各端据此决定「提示更新 / 阻断使用 / 隐藏未过审功能」,
// 判定错了直接表现为线上事故,故逐个组合固化。
func TestEvalChannelUpgrade(t *testing.T) {
cfg := &comm.ChannelApp{Version: "1.10.0", MinVersion: "1.5.0", ForceUpdate: true, ReviewVersion: "1.11.0"}
cases := []struct {
name string
cfg *comm.ChannelApp
client string
need, force, reviewing bool
}{
{"低于最低支持版本:强更", cfg, "1.4.9", true, true, false},
{"高于最低支持、低于线上:只提示更新", cfg, "1.9.0", true, false, false},
{"已是线上最新:什么都不提示", cfg, "1.10.0", false, false, false},
{"高于线上版本(内测包):不提示", cfg, "1.11.0", false, false, true},
{"送审版本:标记审核期", cfg, "1.11.0", false, false, true},
{"客户端未上报版本:一律 false,不能把老客户端全挡住", cfg, "", false, false, false},
{"该渠道未配置:一律 false", nil, "1.0.0", false, false, false},
{"字符串比较陷阱:1.9 < 1.10 应判定为需更新", cfg, "1.9.9", true, false, false},
}
for _, c := range cases {
t.Run(c.name, func(t *testing.T) {
need, force, reviewing := evalChannelUpgrade(c.cfg, c.client)
if need != c.need || force != c.force || reviewing != c.reviewing {
t.Fatalf("client=%q 得到 need=%v force=%v reviewing=%v,期望 need=%v force=%v reviewing=%v",
c.client, need, force, reviewing, c.need, c.force, c.reviewing)
}
})
}
}
// 运营把最低支持版本填得比线上版本还高时,不能出现「必须更新但没有更新可用」这种客户端无解的组合。
func TestEvalChannelUpgradeForceImpliesNeed(t *testing.T) {
cfg := &comm.ChannelApp{Version: "1.0.0", MinVersion: "2.0.0", ForceUpdate: true}
need, force, _ := evalChannelUpgrade(cfg, "1.5.0")
if !force {
t.Fatal("低于最低支持版本应强更")
}
if !need {
t.Fatal("强更时 needupdate 必须同时为 true,否则客户端会收到「必须更新但无更新」")
}
}
// 停用/草稿的渠道由 model 层过滤成 nil,这里确认 nil 不会 panic 也不会误判。
func TestEvalChannelUpgradeNilSafe(t *testing.T) {
if need, force, reviewing := evalChannelUpgrade(nil, "1.0.0"); need || force || reviewing {
t.Fatal("nil 配置必须全 false")
}
}