diff --git a/cmd/app/server.go b/cmd/app/server.go index 7ff8f6e9..59284fb0 100644 --- a/cmd/app/server.go +++ b/cmd/app/server.go @@ -7,6 +7,7 @@ import ( "github.com/go-admin-team/go-admin-core/v2/sdk/pkg" "github.com/go-admin-team/go-admin-core/v2/sdk/pkg/utils" "github.com/spf13/cobra" + "os" "text/template" ) @@ -33,7 +34,10 @@ func run() { //1. 读取配置 fmt.Println(`generate migration file`) - _ = genFile() + if err := genFile(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } } @@ -80,11 +84,19 @@ func genFile() error { m := map[string]string{} m["appName"] = appName var b1 bytes.Buffer - err = t1.Execute(&b1, m) - pkg.FileCreate(b1, "./cmd/api/"+appName+".go") + if err = t1.Execute(&b1, m); err != nil { + return err + } t2, err := template.ParseFiles("template/router.template") + if err != nil { + return err + } var b2 bytes.Buffer - err = t2.Execute(&b2, nil) - pkg.FileCreate(b2, appPath+"/router/router.go") - return nil + if err = t2.Execute(&b2, nil); err != nil { + return err + } + if err = pkg.FileCreate(b1, "./cmd/api/"+appName+".go"); err != nil { + return err + } + return pkg.FileCreate(b2, appPath+"/router/router.go") } diff --git a/cmd/migrate/genfile_test.go b/cmd/migrate/genfile_test.go new file mode 100644 index 00000000..9ecac71e --- /dev/null +++ b/cmd/migrate/genfile_test.go @@ -0,0 +1,54 @@ +package migrate + +import ( + "os" + "path/filepath" + "testing" +) + +// chdirWithTemplates runs the test from an empty directory that has the +// repository's template/ directory in it, which is what genFile reads from +// the working directory. +func chdirWithTemplates(t *testing.T) string { + t.Helper() + tmpl, err := filepath.Abs(filepath.Join("..", "..", "template")) + if err != nil { + t.Fatal(err) + } + dir := t.TempDir() + if err := os.Symlink(tmpl, filepath.Join(dir, "template")); err != nil { + t.Fatal(err) + } + t.Chdir(dir) + return dir +} + +func TestGenFileWritesTheMigration(t *testing.T) { + dir := chdirWithTemplates(t) + out := filepath.Join(dir, "cmd", "migrate", "migration", "version-local") + if err := os.MkdirAll(out, 0o755); err != nil { + t.Fatal(err) + } + + if err := genFile(); err != nil { + t.Fatalf("genFile: %v", err) + } + files, err := filepath.Glob(filepath.Join(out, "*_migrate.go")) + if err != nil { + t.Fatal(err) + } + if len(files) != 1 { + t.Fatalf("generated files = %v, want one", files) + } +} + +// Run from a directory without cmd/migrate/migration, writing the file fails. +// The failure used to end the process from inside pkg.FileCreate and, before +// that, was dropped by genFile's caller; it now reaches the caller. +func TestGenFileReportsAFileItCannotWrite(t *testing.T) { + chdirWithTemplates(t) + + if err := genFile(); err == nil { + t.Fatal("genFile returned nil with no directory to write into") + } +} diff --git a/cmd/migrate/server.go b/cmd/migrate/server.go index a4e60858..521a6b1f 100644 --- a/cmd/migrate/server.go +++ b/cmd/migrate/server.go @@ -106,7 +106,7 @@ func run() { ) } else { fmt.Println(`generate migration file`) - _ = genFile() + exitOnError(os.Stderr, genFile()) } } @@ -360,11 +360,11 @@ func genFile() error { m["Package"] = "version" } var b1 bytes.Buffer - err = t1.Execute(&b1, m) - if goAdmin { - pkg.FileCreate(b1, "./cmd/migrate/migration/version/"+m["GenerateTime"]+"_migrate.go") - } else { - pkg.FileCreate(b1, "./cmd/migrate/migration/version-local/"+m["GenerateTime"]+"_migrate.go") + if err = t1.Execute(&b1, m); err != nil { + return err } - return nil + if goAdmin { + return pkg.FileCreate(b1, "./cmd/migrate/migration/version/"+m["GenerateTime"]+"_migrate.go") + } + return pkg.FileCreate(b1, "./cmd/migrate/migration/version-local/"+m["GenerateTime"]+"_migrate.go") }