Refactor local installation manager test by OS

- Local extensions on Windows are not symlinks but files whose contents is the path to the local extension directory
- Local extensions elsewhere are symlinks
This commit is contained in:
Andy Feller 2024-12-10 22:13:48 -05:00
parent a6b8bec70d
commit 52b845bcad
3 changed files with 72 additions and 24 deletions

View file

@ -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")
}

View file

@ -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()

View file

@ -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")
}