summaryrefslogtreecommitdiff
path: root/go/internal/command/fallback/fallback_test.go
blob: afd752b9aac53c875f06b333308db51294557f60 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package fallback

import (
	"errors"
	"os"
	"testing"

	"github.com/stretchr/testify/require"
)

type fakeExec struct {
	OldExec func(string, []string, []string) error
	Error   error
	Called  bool

	Filename string
	Args     []string
	Env      []string
}

var (
	fakeArgs = []string{"./test", "foo", "bar"}
)

func (f *fakeExec) Exec(filename string, args []string, env []string) error {
	f.Called = true

	f.Filename = filename
	f.Args = args
	f.Env = env

	return f.Error
}

func (f *fakeExec) Setup() {
	f.OldExec = execFunc
	execFunc = f.Exec
}

func (f *fakeExec) Cleanup() {
	execFunc = f.OldExec
}

func TestExecuteExecsCommandSuccesfully(t *testing.T) {
	cmd := &Command{RootDir: "/tmp", Args: fakeArgs}

	// Override the exec func
	fake := &fakeExec{}
	fake.Setup()
	defer fake.Cleanup()

	require.NoError(t, cmd.Execute())
	require.True(t, fake.Called)
	require.Equal(t, fake.Filename, "/tmp/bin/gitlab-shell-ruby")
	require.Equal(t, fake.Args, []string{"/tmp/bin/gitlab-shell-ruby", "foo", "bar"})
	require.Equal(t, fake.Env, os.Environ())
}

func TestExecuteExecsCommandOnError(t *testing.T) {
	cmd := &Command{RootDir: "/test", Args: fakeArgs}

	// Override the exec func
	fake := &fakeExec{Error: errors.New("Test error")}
	fake.Setup()
	defer fake.Cleanup()

	require.Error(t, cmd.Execute())
	require.True(t, fake.Called)
}

func TestExecuteGivenNonexistentCommand(t *testing.T) {
	cmd := &Command{RootDir: "/tmp/does/not/exist", Args: fakeArgs}

	require.Error(t, cmd.Execute())
}