92 lines
2.5 KiB
Go
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))
|
|
}
|
|
}
|