github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/cmds/newapp/cmd_test.go (about) 1 package newapp 2 3 import ( 4 "context" 5 "io/ioutil" 6 "os" 7 "os/exec" 8 "path/filepath" 9 "strings" 10 "testing" 11 12 "github.com/gobuffalo/here" 13 "github.com/gobuffalo/plugins" 14 "github.com/stretchr/testify/require" 15 ) 16 17 func Test_Cmd_Main(t *testing.T) { 18 r := require.New(t) 19 20 info, err := here.Current() 21 r.NoError(err) 22 23 dir := filepath.Join(info.Root, "tmp") 24 os.RemoveAll(dir) 25 defer os.RemoveAll(dir) 26 27 cmd := &Cmd{} 28 var act []string 29 fn := func(ctx context.Context, root string, cmd *exec.Cmd) error { 30 act = cmd.Args 31 return nil 32 } 33 cmd.WithPlugins(func() []plugins.Plugin { 34 return []plugins.Plugin{ 35 cmdRunner(fn), 36 } 37 }) 38 39 pkg := "github.com/markbates/coke" 40 name := "coke" 41 orig := []string{"-p", "json", "-p", "github.com/other/preset", pkg} 42 43 err = cmd.Main(context.Background(), dir, orig) 44 r.NoError(err) 45 46 exp := []string{"go", "run", "./cmd/newapp"} 47 exp = append(exp, orig[:len(orig)-1]...) 48 r.Equal(exp, act) 49 50 dir = filepath.Join(dir, name) 51 mp := filepath.Join(dir, "go.mod") 52 _, err = os.Stat(mp) 53 r.NoError(err) 54 55 b, err := ioutil.ReadFile(filepath.Join(dir, "cmd", "newapp", "main.go")) 56 r.NoError(err) 57 58 ba := string(b) 59 ba = strings.TrimSpace(ba) 60 be := strings.TrimSpace(newappExp) 61 r.Equal(be, ba) 62 } 63 64 const newappExp = ` 65 package main 66 67 import ( 68 "context" 69 "log" 70 "os" 71 72 "github.com/gobuffalo/buffalo-cli/v2/cli/cmds/newapp" 73 "github.com/gobuffalo/plugins" 74 75 json "github.com/gobuffalo/buffalo-cli/v2/cli/cmds/newapp/presets/jsonapp" 76 preset "github.com/other/preset" 77 ) 78 79 func main() { 80 ctx := context.Background() 81 pwd, err := os.Getwd() 82 if err != nil { 83 log.Fatal(err) 84 } 85 86 var plugs []plugins.Plugin 87 88 plugs = append(plugs, json.Plugins()...) 89 plugs = append(plugs, preset.Plugins()...) 90 91 args := []string{"-p", "json", "-p", "github.com/other/preset"} 92 if err := newapp.Execute(plugs, ctx, pwd, "github.com/markbates/coke", args); err != nil { 93 log.Fatal(err) 94 } 95 } 96 `