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  }