From 47eaa513c090fd4333160e10917cae7990e2618e Mon Sep 17 00:00:00 2001 From: oldme <45782393+oldme-git@users.noreply.github.com> Date: Wed, 1 Nov 2023 19:23:03 +0800 Subject: [PATCH] add unit testing cases for command `gen ctrl` (#3090) --- cmd/gf/internal/cmd/cmd__test.go | 11 +++ cmd/gf/internal/cmd/cmd_gen_ctrl_test.go | 86 +++++++++++++++++++ cmd/gf/internal/cmd/cmd_gen_dao_test.go | 3 - .../cmd/genctrl/genctrl_generate_ctrl.go | 2 +- .../cmd/genctrl/genctrl_generate_interface.go | 5 +- .../genctrl/api/article/article_expect.go | 24 ++++++ .../testdata/genctrl/api/article/v1/edit.go | 23 +++++ .../testdata/genctrl/api/article/v1/get.go | 25 ++++++ .../testdata/genctrl/api/article/v2/edit.go | 23 +++++ .../genctrl/controller/article/article.go | 5 ++ .../genctrl/controller/article/article_new.go | 21 +++++ .../controller/article/article_v1_create.go | 14 +++ .../controller/article/article_v1_get_list.go | 14 +++ .../controller/article/article_v1_get_one.go | 14 +++ .../controller/article/article_v1_update.go | 14 +++ .../controller/article/article_v2_create.go | 14 +++ .../controller/article/article_v2_update.go | 14 +++ .../consts/consts_gen_ctrl_template.go | 6 +- 18 files changed, 306 insertions(+), 12 deletions(-) create mode 100644 cmd/gf/internal/cmd/cmd__test.go create mode 100644 cmd/gf/internal/cmd/cmd_gen_ctrl_test.go create mode 100644 cmd/gf/internal/cmd/testdata/genctrl/api/article/article_expect.go create mode 100644 cmd/gf/internal/cmd/testdata/genctrl/api/article/v1/edit.go create mode 100644 cmd/gf/internal/cmd/testdata/genctrl/api/article/v1/get.go create mode 100644 cmd/gf/internal/cmd/testdata/genctrl/api/article/v2/edit.go create mode 100644 cmd/gf/internal/cmd/testdata/genctrl/controller/article/article.go create mode 100644 cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_new.go create mode 100644 cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_create.go create mode 100644 cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_get_list.go create mode 100644 cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_get_one.go create mode 100644 cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_update.go create mode 100644 cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v2_create.go create mode 100644 cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v2_update.go diff --git a/cmd/gf/internal/cmd/cmd__test.go b/cmd/gf/internal/cmd/cmd__test.go new file mode 100644 index 000000000..8ad499ff4 --- /dev/null +++ b/cmd/gf/internal/cmd/cmd__test.go @@ -0,0 +1,11 @@ +// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package cmd + +import "context" + +var ctx = context.Background() diff --git a/cmd/gf/internal/cmd/cmd_gen_ctrl_test.go b/cmd/gf/internal/cmd/cmd_gen_ctrl_test.go new file mode 100644 index 000000000..03cdc284c --- /dev/null +++ b/cmd/gf/internal/cmd/cmd_gen_ctrl_test.go @@ -0,0 +1,86 @@ +// Copyright GoFrame gf Author(https://goframe.org). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package cmd + +import ( + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/genctrl" + "github.com/gogf/gf/v2/os/gfile" + "github.com/gogf/gf/v2/test/gtest" + "github.com/gogf/gf/v2/util/guid" + "github.com/gogf/gf/v2/util/gutil" + "path/filepath" + "testing" +) + +func Test_Gen_Ctrl_Default(t *testing.T) { + gtest.C(t, func(t *gtest.T) { + var ( + path = gfile.Temp(guid.S()) + apiFolder = gtest.DataPath("genctrl", "api") + in = genctrl.CGenCtrlInput{ + SrcFolder: apiFolder, + DstFolder: path, + WatchFile: "", + SdkPath: "", + SdkStdVersion: false, + SdkNoV1: false, + Clear: false, + Merge: false, + } + ) + err := gutil.FillStructWithDefault(&in) + + t.AssertNil(err) + + err = gfile.Mkdir(path) + t.AssertNil(err) + defer gfile.Remove(path) + + _, err = genctrl.CGenCtrl{}.Ctrl(ctx, in) + if err != nil { + panic(err) + } + + // apiInterface files + var ( + genApi = apiFolder + filepath.FromSlash("/article/article.go") + genApiExpect = apiFolder + filepath.FromSlash("/article/article_expect.go") + ) + defer gfile.Remove(genApi) + t.Assert(gfile.GetContents(genApi), gfile.GetContents(genApiExpect)) + + // files + files, err := gfile.ScanDir(path, "*.go", true) + t.AssertNil(err) + t.Assert(files, []string{ + path + filepath.FromSlash("/article/article.go"), + path + filepath.FromSlash("/article/article_new.go"), + path + filepath.FromSlash("/article/article_v1_create.go"), + path + filepath.FromSlash("/article/article_v1_get_list.go"), + path + filepath.FromSlash("/article/article_v1_get_one.go"), + path + filepath.FromSlash("/article/article_v1_update.go"), + path + filepath.FromSlash("/article/article_v2_create.go"), + path + filepath.FromSlash("/article/article_v2_update.go"), + }) + + // content + testPath := gtest.DataPath("genctrl", "controller") + expectFiles := []string{ + testPath + filepath.FromSlash("/article/article.go"), + testPath + filepath.FromSlash("/article/article_new.go"), + testPath + filepath.FromSlash("/article/article_v1_create.go"), + testPath + filepath.FromSlash("/article/article_v1_get_list.go"), + testPath + filepath.FromSlash("/article/article_v1_get_one.go"), + testPath + filepath.FromSlash("/article/article_v1_update.go"), + testPath + filepath.FromSlash("/article/article_v2_create.go"), + testPath + filepath.FromSlash("/article/article_v2_update.go"), + } + for i, _ := range files { + t.Assert(gfile.GetContents(files[i]), gfile.GetContents(expectFiles[i])) + } + }) +} diff --git a/cmd/gf/internal/cmd/cmd_gen_dao_test.go b/cmd/gf/internal/cmd/cmd_gen_dao_test.go index f56ca031c..18323b034 100644 --- a/cmd/gf/internal/cmd/cmd_gen_dao_test.go +++ b/cmd/gf/internal/cmd/cmd_gen_dao_test.go @@ -7,7 +7,6 @@ package cmd import ( - "context" "fmt" "path/filepath" "testing" @@ -21,8 +20,6 @@ import ( "github.com/gogf/gf/v2/util/gutil" ) -var ctx = context.Background() - func dropTableWithDb(db gdb.DB, table string) { dropTableStmt := fmt.Sprintf("DROP TABLE IF EXISTS `%s`", table) if _, err := db.Exec(ctx, dropTableStmt); err != nil { diff --git a/cmd/gf/internal/cmd/genctrl/genctrl_generate_ctrl.go b/cmd/gf/internal/cmd/genctrl/genctrl_generate_ctrl.go index 9e88a7230..19d3dca15 100644 --- a/cmd/gf/internal/cmd/genctrl/genctrl_generate_ctrl.go +++ b/cmd/gf/internal/cmd/genctrl/genctrl_generate_ctrl.go @@ -108,7 +108,7 @@ func (c *controllerGenerator) doGenerateCtrlNewByModuleAndVersion( "{NewFuncName}": newFuncName, "{InterfaceName}": interfaceName, }) - err = gfile.PutContentsAppend(moduleFilePathNew, gstr.TrimLeft(content)) + err = gfile.PutContentsAppend(moduleFilePathNew, content) if err != nil { return err } diff --git a/cmd/gf/internal/cmd/genctrl/genctrl_generate_interface.go b/cmd/gf/internal/cmd/genctrl/genctrl_generate_interface.go index 90af387e2..c0ba77e1f 100644 --- a/cmd/gf/internal/cmd/genctrl/genctrl_generate_interface.go +++ b/cmd/gf/internal/cmd/genctrl/genctrl_generate_interface.go @@ -50,8 +50,7 @@ func (c *apiInterfaceGenerator) doGenerate(apiModuleFolderPath string, module st moduleFilePath = filepath.FromSlash(gfile.Join(apiModuleFolderPath, fmt.Sprintf(`%s.if.go`, module))) } // all import paths. - importPathMap.Set("\t"+`"context"`, 1) - importPathMap.Set("\t"+``, 1) + importPathMap.Set("\t"+`"context"`+"\n", 1) for _, item := range items { importPathMap.Set(fmt.Sprintf("\t"+`"%s"`, item.Import), 1) } @@ -92,7 +91,7 @@ func (c *apiInterfaceGenerator) doGenerate(apiModuleFolderPath string, module st interfaceDefinition += "\n\n" } interfaceContent = gstr.TrimLeft(gstr.ReplaceByMap(interfaceContent, g.MapStrStr{ - "{Interfaces}": interfaceDefinition, + "{Interfaces}": gstr.TrimRightStr(interfaceDefinition, "\n", 2), })) err = gfile.PutContents(moduleFilePath, interfaceContent) mlog.Printf(`generated: %s`, moduleFilePath) diff --git a/cmd/gf/internal/cmd/testdata/genctrl/api/article/article_expect.go b/cmd/gf/internal/cmd/testdata/genctrl/api/article/article_expect.go new file mode 100644 index 000000000..3fd161752 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl/api/article/article_expect.go @@ -0,0 +1,24 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package article + +import ( + "context" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl/api/article/v1" + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl/api/article/v2" +) + +type IArticleV1 interface { + Create(ctx context.Context, req *v1.CreateReq) (res *v1.CreateRes, err error) + Update(ctx context.Context, req *v1.UpdateReq) (res *v1.UpdateRes, err error) + GetList(ctx context.Context, req *v1.GetListReq) (res *v1.GetListRes, err error) + GetOne(ctx context.Context, req *v1.GetOneReq) (res *v1.GetOneRes, err error) +} + +type IArticleV2 interface { + Create(ctx context.Context, req *v2.CreateReq) (res *v2.CreateRes, err error) + Update(ctx context.Context, req *v2.UpdateReq) (res *v2.UpdateRes, err error) +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl/api/article/v1/edit.go b/cmd/gf/internal/cmd/testdata/genctrl/api/article/v1/edit.go new file mode 100644 index 000000000..b873d5804 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl/api/article/v1/edit.go @@ -0,0 +1,23 @@ +// Copyright GoFrame Author(https://goframe.org). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package v1 + +import "github.com/gogf/gf/v2/frame/g" + +type CreateReq struct { + g.Meta `path:"/article/create" method:"post" tags:"ArticleService"` + Title string `v:"required"` +} + +type CreateRes struct{} + +type UpdateReq struct { + g.Meta `path:"/article/update" method:"post" tags:"ArticleService"` + Title string `v:"required"` +} + +type UpdateRes struct{} diff --git a/cmd/gf/internal/cmd/testdata/genctrl/api/article/v1/get.go b/cmd/gf/internal/cmd/testdata/genctrl/api/article/v1/get.go new file mode 100644 index 000000000..36134f5f2 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl/api/article/v1/get.go @@ -0,0 +1,25 @@ +// Copyright GoFrame Author(https://goframe.org). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package v1 + +import "github.com/gogf/gf/v2/frame/g" + +type GetListReq struct { + g.Meta `path:"/article/list" method:"get" tags:"ArticleService"` +} + +type GetListRes struct { + list []struct{} +} + +type GetOneReq struct { + g.Meta `path:"/article/one" method:"get" tags:"ArticleService"` +} + +type GetOneRes struct { + one struct{} +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl/api/article/v2/edit.go b/cmd/gf/internal/cmd/testdata/genctrl/api/article/v2/edit.go new file mode 100644 index 000000000..8e8267a57 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl/api/article/v2/edit.go @@ -0,0 +1,23 @@ +// Copyright GoFrame Author(https://goframe.org). All Rights Reserved. +// +// This Source Code Form is subject to the terms of the MIT License. +// If a copy of the MIT was not distributed with this file, +// You can obtain one at https://github.com/gogf/gf. + +package v2 + +import "github.com/gogf/gf/v2/frame/g" + +type CreateReq struct { + g.Meta `path:"/article/create" method:"post" tags:"ArticleService"` + Title string `v:"required"` +} + +type CreateRes struct{} + +type UpdateReq struct { + g.Meta `path:"/article/update" method:"post" tags:"ArticleService"` + Title string `v:"required"` +} + +type UpdateRes struct{} diff --git a/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article.go b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article.go new file mode 100644 index 000000000..4bd478c5d --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article.go @@ -0,0 +1,5 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package article diff --git a/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_new.go b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_new.go new file mode 100644 index 000000000..d6b85c986 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_new.go @@ -0,0 +1,21 @@ +// ================================================================================= +// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish. +// ================================================================================= + +package article + +import ( + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl/api/article" +) + +type ControllerV1 struct{} + +func NewV1() article.IArticleV1 { + return &ControllerV1{} +} + +type ControllerV2 struct{} + +func NewV2() article.IArticleV2 { + return &ControllerV2{} +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_create.go b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_create.go new file mode 100644 index 000000000..48bfcefb9 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_create.go @@ -0,0 +1,14 @@ +package article + +import ( + "context" + + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/errors/gerror" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl/api/article/v1" +) + +func (c *ControllerV1) Create(ctx context.Context, req *v1.CreateReq) (res *v1.CreateRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_get_list.go b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_get_list.go new file mode 100644 index 000000000..9f9b3cd88 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_get_list.go @@ -0,0 +1,14 @@ +package article + +import ( + "context" + + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/errors/gerror" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl/api/article/v1" +) + +func (c *ControllerV1) GetList(ctx context.Context, req *v1.GetListReq) (res *v1.GetListRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_get_one.go b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_get_one.go new file mode 100644 index 000000000..8b20a1dba --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_get_one.go @@ -0,0 +1,14 @@ +package article + +import ( + "context" + + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/errors/gerror" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl/api/article/v1" +) + +func (c *ControllerV1) GetOne(ctx context.Context, req *v1.GetOneReq) (res *v1.GetOneRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_update.go b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_update.go new file mode 100644 index 000000000..d01e8b865 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v1_update.go @@ -0,0 +1,14 @@ +package article + +import ( + "context" + + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/errors/gerror" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl/api/article/v1" +) + +func (c *ControllerV1) Update(ctx context.Context, req *v1.UpdateReq) (res *v1.UpdateRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v2_create.go b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v2_create.go new file mode 100644 index 000000000..319407967 --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v2_create.go @@ -0,0 +1,14 @@ +package article + +import ( + "context" + + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/errors/gerror" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl/api/article/v2" +) + +func (c *ControllerV2) Create(ctx context.Context, req *v2.CreateReq) (res *v2.CreateRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} diff --git a/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v2_update.go b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v2_update.go new file mode 100644 index 000000000..25a9d03ab --- /dev/null +++ b/cmd/gf/internal/cmd/testdata/genctrl/controller/article/article_v2_update.go @@ -0,0 +1,14 @@ +package article + +import ( + "context" + + "github.com/gogf/gf/v2/errors/gcode" + "github.com/gogf/gf/v2/errors/gerror" + + "github.com/gogf/gf/cmd/gf/v2/internal/cmd/testdata/genctrl/api/article/v2" +) + +func (c *ControllerV2) Update(ctx context.Context, req *v2.UpdateReq) (res *v2.UpdateRes, err error) { + return nil, gerror.NewCode(gcode.CodeNotImplemented) +} diff --git a/cmd/gf/internal/consts/consts_gen_ctrl_template.go b/cmd/gf/internal/consts/consts_gen_ctrl_template.go index 626adf44c..919799255 100644 --- a/cmd/gf/internal/consts/consts_gen_ctrl_template.go +++ b/cmd/gf/internal/consts/consts_gen_ctrl_template.go @@ -12,7 +12,6 @@ const TemplateGenCtrlControllerEmpty = ` // ================================================================================= package {Module} - ` const TemplateGenCtrlControllerNewEmpty = ` @@ -25,17 +24,14 @@ package {Module} import ( {ImportPath} ) - ` const TemplateGenCtrlControllerNewFunc = ` - type {CtrlName} struct{} func {NewFuncName}() {InterfaceName} { return &{CtrlName}{} } - ` const TemplateGenCtrlControllerMethodFunc = ` @@ -64,7 +60,7 @@ func (c *{CtrlName}) {MethodName}(ctx context.Context, req *{Version}.{MethodNam const TemplateGenCtrlApiInterface = ` // ================================================================================= -// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. // ================================================================================= package {Module}