loading_test.go

 1package execenv
 2
 3import (
 4	"os"
 5	"path/filepath"
 6	"strings"
 7	"testing"
 8
 9	"github.com/stretchr/testify/assert"
10	"github.com/stretchr/testify/require"
11)
12
13// ***** WARNING ***** - due to the use of testing with an environment
14//
15//	variable, do NOT use t.Parallel() with these
16//	test cases.
17func TestGetRepoPath(t *testing.T) {
18	t.Run("no Git path provided (use WD)", func(t *testing.T) {
19		// WD during tests is the directory containing the test file
20		path, err := getRepoPath(&Env{})
21		require.NoError(t, err)
22		assert.True(t, strings.HasSuffix(path, filepath.Join("commands", "execenv")))
23	})
24
25	t.Run("flag provided", func(t *testing.T) {
26		gitDir, err := os.UserHomeDir()
27		require.NoError(t, err)
28
29		path, err := getRepoPath(&Env{
30			GitDir: gitDir,
31		})
32		require.NoError(t, err)
33		assert.Equal(t, gitDir, path)
34	})
35
36	t.Run("environment variable provided", func(t *testing.T) {
37		gitDir, err := os.UserHomeDir()
38		require.NoError(t, err)
39		t.Setenv("GIT_DIR", gitDir)
40
41		path, err := getRepoPath(&Env{})
42		require.NoError(t, err)
43		assert.Equal(t, gitDir, path)
44	})
45
46	t.Run("GIT_DIR supercedes --git-dir", func(t *testing.T) {
47		cacheDir, err := os.UserCacheDir()
48		require.NoError(t, err)
49
50		configDir, err := os.UserConfigDir()
51		require.NoError(t, err)
52		t.Setenv("GIT_DIR", configDir)
53
54		path, err := getRepoPath(&Env{
55			GitDir: cacheDir,
56		})
57		require.NoError(t, err)
58		assert.Equal(t, configDir, path)
59
60	})
61
62	t.Run("path does not exist", func(t *testing.T) {
63		_, err := getRepoPath(&Env{
64			GitDir: filepath.Join("/", "tmp", "does-not-exist"),
65		})
66		require.ErrorIs(t, err, os.ErrNotExist)
67	})
68
69	t.Run("path is not a directory", func(t *testing.T) {
70		gitDir := filepath.Join(os.TempDir(), "plain-file")
71
72		f, err := os.Create(gitDir)
73		require.NoError(t, err)
74		require.NoError(t, f.Close())
75
76		_, err = getRepoPath(&Env{
77			GitDir: gitDir,
78		})
79		require.ErrorIs(t, err, errNotDirectory)
80	})
81}