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 supersedes --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}