72 lines
2.1 KiB
Go
72 lines
2.1 KiB
Go
// 功能描述:验证三个管理后台的工作人员写入入口均接入公共错误转换链路。
|
||
// 版本:v1.0
|
||
package common
|
||
|
||
import (
|
||
"go/ast"
|
||
"go/parser"
|
||
"go/token"
|
||
"path/filepath"
|
||
"runtime"
|
||
"testing"
|
||
)
|
||
|
||
// TestStaffHandlersUseWriteErrorConversion 防止任一后台重新绕过工作人员错误转换器。
|
||
// 参数:t 为 Go 测试上下文。
|
||
// 返回值:无。
|
||
func TestStaffHandlersUseWriteErrorConversion(t *testing.T) {
|
||
_, currentFile, _, ok := runtime.Caller(0)
|
||
if !ok {
|
||
t.Fatal("无法定位工作人员接线测试文件")
|
||
}
|
||
logicDirectory := filepath.Dir(filepath.Dir(currentFile))
|
||
targets := []struct {
|
||
name string
|
||
path string
|
||
}{
|
||
{name: "平台总后台", path: filepath.Join(logicDirectory, "platform", "staff", "staff.go")},
|
||
{name: "气站后台", path: filepath.Join(logicDirectory, "gas", "staff.go")},
|
||
{name: "配送点后台", path: filepath.Join(logicDirectory, "delivery", "staff.go")},
|
||
}
|
||
|
||
for _, target := range targets {
|
||
t.Run(target.name, func(t *testing.T) {
|
||
calls := commonCallsInFile(t, target.path)
|
||
if calls["CreateStaffRecord"] == 0 {
|
||
t.Fatalf("%s工作人员创建入口未接入 CreateStaffRecord", target.name)
|
||
}
|
||
if calls["UpdateAllowedByIdentityWithError"] == 0 {
|
||
t.Fatalf("%s工作人员编辑入口未接入错误转换更新函数", target.name)
|
||
}
|
||
})
|
||
}
|
||
}
|
||
|
||
// commonCallsInFile 统计源文件中调用 common 包函数的次数。
|
||
// 参数:t 为测试上下文,path 为待检查的 Go 源文件。
|
||
// 返回值:以函数名为键、调用次数为值的映射。
|
||
func commonCallsInFile(t *testing.T, path string) map[string]int {
|
||
t.Helper()
|
||
file, err := parser.ParseFile(token.NewFileSet(), path, nil, 0)
|
||
if err != nil {
|
||
t.Fatalf("解析工作人员处理器失败:%v", err)
|
||
}
|
||
calls := map[string]int{}
|
||
ast.Inspect(file, func(node ast.Node) bool {
|
||
call, ok := node.(*ast.CallExpr)
|
||
if !ok {
|
||
return true
|
||
}
|
||
selector, ok := call.Fun.(*ast.SelectorExpr)
|
||
if !ok {
|
||
return true
|
||
}
|
||
packageName, ok := selector.X.(*ast.Ident)
|
||
if ok && packageName.Name == "common" {
|
||
calls[selector.Sel.Name]++
|
||
}
|
||
return true
|
||
})
|
||
return calls
|
||
}
|