mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-07 15:10:01 +08:00
94 lines
2.9 KiB
Go
94 lines
2.9 KiB
Go
package gogen
|
|
|
|
import (
|
|
_ "embed"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/zeromicro/go-zero/tools/goctl/api/spec"
|
|
"github.com/zeromicro/go-zero/tools/goctl/config"
|
|
"github.com/zeromicro/go-zero/tools/goctl/internal/version"
|
|
"github.com/zeromicro/go-zero/tools/goctl/util/format"
|
|
"github.com/zeromicro/go-zero/tools/goctl/util/pathx"
|
|
)
|
|
|
|
//go:embed logic_test.tpl
|
|
var logicTestTemplate string
|
|
|
|
func genLogicTest(dir, rootPkg, projectPkg string, cfg *config.Config, api *spec.ApiSpec) error {
|
|
for _, g := range api.Service.Groups {
|
|
for _, r := range g.Routes {
|
|
err := genLogicTestByRoute(dir, rootPkg, projectPkg, cfg, g, r)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func genLogicTestByRoute(dir, rootPkg, projectPkg string, cfg *config.Config, group spec.Group, route spec.Route) error {
|
|
logic := getLogicName(route)
|
|
goFile, err := format.FileNamingFormat(cfg.NamingFormat, logic)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
imports := genLogicTestImports(route, rootPkg)
|
|
var responseString string
|
|
var returnString string
|
|
var requestString string
|
|
var requestType string
|
|
if len(route.ResponseTypeName()) > 0 {
|
|
resp := responseGoTypeName(route, typesPacket)
|
|
responseString = "(resp " + resp + ", err error)"
|
|
returnString = "return"
|
|
} else {
|
|
responseString = "error"
|
|
returnString = "return nil"
|
|
}
|
|
if len(route.RequestTypeName()) > 0 {
|
|
requestString = "req *" + requestGoTypeName(route, typesPacket)
|
|
requestType = requestGoTypeName(route, typesPacket)
|
|
}
|
|
|
|
subDir := getLogicFolderPath(group, route)
|
|
return genFile(fileGenConfig{
|
|
dir: dir,
|
|
subdir: subDir,
|
|
filename: goFile + "_test.go",
|
|
templateName: "logicTestTemplate",
|
|
category: category,
|
|
templateFile: logicTestTemplateFile,
|
|
builtinTemplate: logicTestTemplate,
|
|
data: map[string]any{
|
|
"pkgName": subDir[strings.LastIndex(subDir, "/")+1:],
|
|
"imports": imports,
|
|
"logic": strings.Title(logic),
|
|
"function": strings.Title(strings.TrimSuffix(logic, "Logic")),
|
|
"responseType": responseString,
|
|
"returnString": returnString,
|
|
"request": requestString,
|
|
"hasRequest": len(requestType) > 0,
|
|
"hasResponse": len(route.ResponseTypeName()) > 0,
|
|
"requestType": requestType,
|
|
"hasDoc": len(route.JoinedDoc()) > 0,
|
|
"doc": getDoc(route.JoinedDoc()),
|
|
"projectPkg": projectPkg,
|
|
"version": version.BuildVersion,
|
|
},
|
|
})
|
|
}
|
|
|
|
func genLogicTestImports(route spec.Route, parentPkg string) string {
|
|
var imports []string
|
|
//imports = append(imports, `"context"`+"\n")
|
|
imports = append(imports, fmt.Sprintf("\"%s\"", pathx.JoinPackages(parentPkg, contextDir)))
|
|
imports = append(imports, fmt.Sprintf("\"%s\"", pathx.JoinPackages(parentPkg, configDir)))
|
|
if shallImportTypesPackage(route) {
|
|
imports = append(imports, fmt.Sprintf("\"%s\"\n", pathx.JoinPackages(parentPkg, typesDir)))
|
|
}
|
|
//imports = append(imports, fmt.Sprintf("\"%s/core/logx\"", vars.ProjectOpenSourceURL))
|
|
return strings.Join(imports, "\n\t")
|
|
}
|