Files
yunzerwebsiteallinone/go/services/display_scope_test.go
T
2026-10-03 23:46:55 +08:00

92 lines
2.5 KiB
Go

package services
import (
"testing"
"server/models"
)
func strPtr(s string) *string { return &s }
func TestParsePlatforms(t *testing.T) {
cases := []struct {
name string
raw *string
want int
}{
{"nil 视为全端", nil, 0},
{"空串视为全端", strPtr(""), 0},
{"空格视为全端", strPtr(" "), 0},
{"单值 web", strPtr(`["web"]`), 1},
{"双值", strPtr(`["web","app"]`), 2},
{"大小写归一化", strPtr(`["WEB"]`), 1},
{"非法 JSON 退化为单值", strPtr("web"), 1},
}
for _, c := range cases {
got := ParsePlatforms(c.raw)
if len(got) != c.want {
t.Errorf("%s: got %d items (%v), want %d", c.name, len(got), got, c.want)
}
}
}
func TestHasPlatform(t *testing.T) {
if !HasPlatform(nil, models.PlatformWeb) || !HasPlatform(nil, models.PlatformApp) {
t.Error("未配置时应当全端可见")
}
web := []string{"web"}
if !HasPlatform(web, "web") {
t.Error("web 配置应在 web 端可见")
}
if HasPlatform(web, "app") {
t.Error("web 配置不应在 app 端可见")
}
both := []string{"web", "app"}
if !HasPlatform(both, "web") || !HasPlatform(both, "app") {
t.Error("双端配置应两端都可见")
}
}
func TestNormalizePlatforms(t *testing.T) {
if got := NormalizePlatforms(nil); got != "" {
t.Errorf("空输入应返回空串(表示全端),got %q", got)
}
if got := NormalizePlatforms([]string{"WEB", " app ", "web"}); got != `["web","app"]` {
t.Errorf("应去重并小写归一化,got %q", got)
}
}
// 模块级过滤:覆盖三种业务场景
func TestFilterModulesByPlatform(t *testing.T) {
web := `["web"]`
app := `["app"]`
both := `["web","app"]`
rows := []models.SystemModules{
{Code: "crm", Platforms: &web}, // 仅 Web
{Code: "oa", Platforms: &app}, // 仅小程序
{Code: "cms", Platforms: &both}, // 双端
{Code: "erp", Platforms: nil}, // 未配置 → 全端
}
got := FilterModulesByPlatform(rows, models.PlatformWeb)
if len(got) != 3 {
t.Errorf("Web 端应看到 crm/cms/erp 共 3 个,got %d", len(got))
}
gotApp := FilterModulesByPlatform(rows, models.PlatformApp)
if len(gotApp) != 3 {
t.Errorf("移动端应看到 oa/cms/erp 共 3 个,got %d", len(gotApp))
}
}
func TestFilterMenusByPlatform(t *testing.T) {
app := `["app"]`
rows := []models.SystemMenu{
{Title: "线索", Platforms: strPtr(`["web"]`)},
{Title: "日程", Platforms: &app},
{Title: "客户", Platforms: nil},
}
if got := FilterMenusByPlatform(rows, models.PlatformApp); len(got) != 2 {
t.Errorf("移动端应看到 日程/客户 共 2 条,got %d", len(got))
}
}