diff --git a/pkg/cmd/extension/manager_other_test.go b/pkg/cmd/extension/manager_other_test.go new file mode 100644 index 000000000..48ccb349b --- /dev/null +++ b/pkg/cmd/extension/manager_other_test.go @@ -0,0 +1,34 @@ +package extension + +import ( + "os" + "path/filepath" + "testing" + + "github.com/cli/cli/v2/pkg/iostreams" + "github.com/stretchr/testify/require" +) + +func TestManager_InstallLocal(t *testing.T) { + dataDir := t.TempDir() + updateDir := t.TempDir() + + extDir := filepath.Join(t.TempDir(), "gh-local") + err := os.MkdirAll(extDir, 0755) + require.NoErrorf(t, err, "failed to create local extension") + require.NoError(t, stubExtensionUpdate(filepath.Join(updateDir, "gh-local"))) + + ios, _, stdout, stderr := iostreams.Test() + m := newTestManager(dataDir, updateDir, nil, nil, ios) + + err = m.InstallLocal(extDir) + require.NoError(t, err) + require.Equal(t, "", stdout.String()) + require.Equal(t, "", stderr.String()) + + fm, err := os.Lstat(filepath.Join(dataDir, "extensions", "gh-local")) + require.NoErrorf(t, err, "data directory missing local extension symlink") + isSymlink := fm.Mode() & os.ModeSymlink + require.True(t, isSymlink != 0) + require.NoDirExistsf(t, filepath.Join(updateDir, "gh-local"), "update directory should be removed") +} diff --git a/pkg/cmd/extension/manager_test.go b/pkg/cmd/extension/manager_test.go index af8264639..8662a2cd7 100644 --- a/pkg/cmd/extension/manager_test.go +++ b/pkg/cmd/extension/manager_test.go @@ -751,30 +751,6 @@ func TestManager_UpgradeExtension_GitExtension_Pinned(t *testing.T) { gcOne.AssertExpectations(t) } -func TestManager_InstallLocal(t *testing.T) { - dataDir := t.TempDir() - updateDir := t.TempDir() - - extDir := filepath.Join(t.TempDir(), "gh-local") - err := os.MkdirAll(extDir, 0755) - assert.NoErrorf(t, err, "failed to create local extension") - assert.NoError(t, stubExtensionUpdate(filepath.Join(updateDir, "gh-local"))) - - ios, _, stdout, stderr := iostreams.Test() - m := newTestManager(dataDir, updateDir, nil, nil, ios) - - err = m.InstallLocal(extDir) - assert.NoError(t, err) - assert.Equal(t, "", stdout.String()) - assert.Equal(t, "", stderr.String()) - - fm, err := os.Lstat(filepath.Join(dataDir, "extensions", "gh-local")) - assert.NoErrorf(t, err, "data directory missing local extension symlink") - isSymlink := fm.Mode() & os.ModeSymlink - assert.True(t, isSymlink != 0) - assert.NoDirExistsf(t, filepath.Join(updateDir, "gh-local"), "update directory should be removed") -} - func TestManager_Install_git(t *testing.T) { dataDir := t.TempDir() updateDir := t.TempDir() diff --git a/pkg/cmd/extension/manager_windows_test.go b/pkg/cmd/extension/manager_windows_test.go new file mode 100644 index 000000000..f9142f4fc --- /dev/null +++ b/pkg/cmd/extension/manager_windows_test.go @@ -0,0 +1,38 @@ +package extension + +import ( + "os" + "path/filepath" + "testing" + + "github.com/cli/cli/v2/pkg/iostreams" + "github.com/stretchr/testify/require" +) + +func TestManager_InstallLocal_Windows(t *testing.T) { + dataDir := t.TempDir() + updateDir := t.TempDir() + + extDir := filepath.Join(t.TempDir(), "gh-local") + err := os.MkdirAll(extDir, 0755) + require.NoErrorf(t, err, "failed to create local extension") + require.NoError(t, stubExtensionUpdate(filepath.Join(updateDir, "gh-local"))) + + ios, _, stdout, stderr := iostreams.Test() + m := newTestManager(dataDir, updateDir, nil, nil, ios) + + err = m.InstallLocal(extDir) + require.NoError(t, err) + require.Equal(t, "", stdout.String()) + require.Equal(t, "", stderr.String()) + + extDataFile := filepath.Join(dataDir, "extensions", "gh-local") + fm, err := os.Stat(extDataFile) + require.NoErrorf(t, err, "data directory missing Windows local extension file") + isSymlink := fm.Mode() & os.ModeSymlink + require.True(t, isSymlink == 0) + extDataFilePath, err := readPathFromFile(extDataFile) + require.NoErrorf(t, err, "failed to read Windows local extension path file") + require.Equal(t, extDir, extDataFilePath) + require.NoDirExistsf(t, filepath.Join(updateDir, "gh-local"), "update directory should be removed") +}