github.com/posener/gitfs@v1.2.2-0.20200410105819-ea4e48d73ab9/internal/localfs/localfs_test.go (about) 1 package localfs 2 3 import ( 4 "net/http" 5 "os" 6 "path/filepath" 7 "testing" 8 9 "github.com/posener/gitfs/internal/testfs" 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 ) 13 14 func TestNew(t *testing.T) { 15 t.Parallel() 16 testfs.TestFS(t, func(t *testing.T, project string) (http.FileSystem, error) { 17 return New(project, ".") 18 }) 19 } 20 21 func TestComputeSubdir(t *testing.T) { 22 t.Parallel() 23 gitRoot, err := lookupGitRoot(".") 24 require.NoError(t, err) 25 26 tests := []struct { 27 project string 28 wantSubDir string 29 }{ 30 // Simple case. 31 {project: "github.com/posener/gitfs", wantSubDir: ""}, 32 // Any ref should be omitted. 33 {project: "github.com/posener/gitfs@123", wantSubDir: ""}, 34 // With subdirectories. 35 {project: "github.com/posener/gitfs/internal@123", wantSubDir: "internal"}, 36 {project: "github.com/posener/gitfs/internal/testdata", wantSubDir: "internal/testdata"}, 37 } 38 for _, tt := range tests { 39 t.Run(tt.project, func(t *testing.T) { 40 subDir, err := computeSubdir(tt.project, gitRoot) 41 require.NoError(t, err) 42 assert.Equal(t, tt.wantSubDir, subDir) 43 }) 44 } 45 } 46 47 func TestComputeSubdir_failure(t *testing.T) { 48 t.Parallel() 49 gitRoot, err := lookupGitRoot(".") 50 require.NoError(t, err) 51 52 tests := []struct { 53 project string 54 path string 55 }{ 56 // Should not have a .git suffix. 57 {project: "github.com/posener/gitfs.git", path: gitRoot}, 58 // Wrong domain. 59 {project: "git.com/posener/gitfs", path: gitRoot}, 60 // Correct project but not a repository directory. 61 {project: "github.com/posener/gitfs", path: "/tmp"}, 62 } 63 64 for _, tt := range tests { 65 t.Run(tt.project, func(t *testing.T) { 66 _, err := computeSubdir(tt.project, tt.path) 67 assert.Error(t, err) 68 }) 69 } 70 } 71 72 func TestCleanRevision(t *testing.T) { 73 t.Parallel() 74 assert.Equal(t, "x", cleanRevision("x")) 75 assert.Equal(t, "x", cleanRevision("x@")) 76 assert.Equal(t, "x", cleanRevision("x@v")) 77 } 78 79 func TestLookupGitRoot(t *testing.T) { 80 t.Parallel() 81 gitRoot, err := filepath.Abs("../..") 82 require.NoError(t, err) 83 84 // Check from current directory (not a git root) 85 path, err := lookupGitRoot(".") 86 require.NoError(t, err) 87 assert.Equal(t, gitRoot, path) 88 89 // Check from git root 90 os.Chdir(gitRoot) 91 path, err = lookupGitRoot(gitRoot) 92 require.NoError(t, err) 93 assert.Equal(t, gitRoot, path) 94 95 // Check from /tmp - not a git repository 96 path, err = lookupGitRoot("/tmp") 97 assert.Error(t, err) 98 }