1package goose
2
3import (
4	"fmt"
5	"io/ioutil"
6	"os"
7	"os/exec"
8	"strings"
9	"testing"
10	"time"
11)
12
13func TestSequential(t *testing.T) {
14	t.Parallel()
15
16	dir, err := ioutil.TempDir("", "tmptest")
17	if err != nil {
18		t.Fatal(err)
19	}
20
21	defer os.RemoveAll(dir)               // clean up
22	defer os.Remove("./bin/create-goose") // clean up
23
24	commands := []string{
25		"go build -o ./bin/create-goose ./cmd/goose",
26		fmt.Sprintf("./bin/create-goose -s -dir=%s create create_table", dir),
27		fmt.Sprintf("./bin/create-goose -s -dir=%s create add_users", dir),
28		fmt.Sprintf("./bin/create-goose -s -dir=%s create add_indices", dir),
29		fmt.Sprintf("./bin/create-goose -s -dir=%s create update_users", dir),
30	}
31
32	for _, cmd := range commands {
33		args := strings.Split(cmd, " ")
34		time.Sleep(1 * time.Second)
35		cmd := exec.Command(args[0], args[1:]...)
36		cmd.Env = os.Environ()
37		out, err := cmd.CombinedOutput()
38		if err != nil {
39			t.Fatalf("%s:\n%v\n\n%s", err, cmd, out)
40		}
41	}
42
43	files, err := ioutil.ReadDir(dir)
44	if err != nil {
45		t.Fatal(err)
46	}
47
48	// check that the files are in order
49	for i, f := range files {
50		expected := fmt.Sprintf("%05v", i+1)
51		if !strings.HasPrefix(f.Name(), expected) {
52			t.Errorf("failed to find %s prefix in %s", expected, f.Name())
53		}
54	}
55}
56