批量优化
This commit is contained in:
1 parent
e3db229f41
commit
aa92ca40a2
79 files changed
+7495
-1104
No files matched your search
@@ -0,0 +1,91 @@
|
||||
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))
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user