github.com/rmachuca89/go-lab@v0.0.0-20220225232501-08364e2cef7f/cmd/todo/main_test.go (about) 1 package main_test 2 3 import ( 4 "fmt" 5 "os" 6 "os/exec" 7 "path/filepath" 8 "runtime" 9 "testing" 10 ) 11 12 var ( 13 binName = "todo" 14 buildOutDir, buildOutFile string 15 ) 16 17 func TestMain(m *testing.M) { 18 fmt.Println("Building tool...") 19 if runtime.GOOS == "windows" { 20 binName += ".exe" 21 } 22 23 buildDir, err := os.MkdirTemp(os.TempDir(), "go-tmp-build") 24 if err != nil { 25 fmt.Fprintf(os.Stderr, "Cannot create temp build dir %s: %s", buildDir, err) 26 os.Exit(2) 27 } 28 29 buildOutDir = buildDir 30 buildOutFile = filepath.Join(buildDir, binName) 31 fmt.Println("Build File: ", buildOutFile) 32 build := exec.Command("go", "build", "-o", buildOutFile) 33 34 if err := build.Run(); err != nil { 35 fmt.Fprintf(os.Stderr, "Cannot build tool %s: %s", binName, err) 36 os.Exit(2) 37 } 38 39 fmt.Println("Running tests...") 40 exitStatus := m.Run() 41 42 fmt.Println("Cleaning up...") 43 if err := os.Remove(buildOutFile); err != nil { 44 fmt.Fprintf(os.Stderr, "Could not delete tool binary %s: %s", binName, err) 45 os.Exit(2) 46 } 47 if err := os.RemoveAll(buildDir); err != nil { 48 fmt.Fprintf(os.Stderr, "Could not delete temporary dir %s: %s", buildDir, err) 49 os.Exit(2) 50 } 51 os.Exit(exitStatus) 52 } 53 54 func TestTodoCLI(t *testing.T) { 55 56 tt := "test task number 1" 57 58 if buildOutFile == "" || buildOutDir == "" { 59 t.Fatalf("no built binary (%s) available", binName) 60 } 61 // Change to our temporal app testing dir. 62 os.Chdir(buildOutDir) 63 64 t.Run("AddNewTask", func(t *testing.T) { 65 args := []string{"--title", tt} 66 cmd := exec.Command(buildOutFile, args...) 67 if err := cmd.Run(); err != nil { 68 t.Fatal(err) 69 } 70 }) 71 72 t.Run("CompleteTask", func(t *testing.T) { 73 args := []string{"--title", tt, "--complete"} 74 cmd := exec.Command(buildOutFile, args...) 75 if err := cmd.Run(); err != nil { 76 t.Fatal(err) 77 } 78 }) 79 80 t.Run("ListTasks", func(t *testing.T) { 81 cmd := exec.Command(buildOutFile) 82 out, err := cmd.CombinedOutput() 83 if err != nil { 84 t.Fatal(err) 85 } 86 87 // Expected format provided by Tasks.String() 88 want := "[X] 1: " + tt + "\n" 89 90 got := string(out) 91 if want != got { 92 t.Errorf("Expected %q, got %q instead\n", want, got) 93 } 94 }) 95 }