mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
* fix: MacOS MDM deployment script * fix: Handle shell alias for bash on macos * fix: Code review fixes * fix: Code review fixes * feat: Add support for global config file * feat: Add support for global config file * fix: Code review fixes * fix: Avoid blocking CLI for analytics flush
101 lines
2.5 KiB
Go
101 lines
2.5 KiB
Go
package alias
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func newTestAliasManager(t *testing.T) *AliasManager {
|
|
t.Helper()
|
|
|
|
cfg := DefaultConfig()
|
|
rcm, err := NewDefaultRcFileManager(cfg.RcFileName)
|
|
require.NoError(t, err)
|
|
|
|
return New(cfg, rcm)
|
|
}
|
|
|
|
func TestAliasInstallCreatesPrimaryShellRcFile(t *testing.T) {
|
|
home := t.TempDir()
|
|
t.Setenv("HOME", home)
|
|
t.Setenv("SHELL", "/bin/zsh")
|
|
|
|
require.NoError(t, newTestAliasManager(t).Install())
|
|
|
|
rc := filepath.Join(home, ".pmg.rc")
|
|
assert.FileExists(t, rc)
|
|
data, err := os.ReadFile(rc)
|
|
require.NoError(t, err)
|
|
assert.Contains(t, string(data), "alias npm='pmg npm'")
|
|
|
|
zshrc := filepath.Join(home, ".zshrc")
|
|
assert.FileExists(t, zshrc)
|
|
zdata, err := os.ReadFile(zshrc)
|
|
require.NoError(t, err)
|
|
assert.Contains(t, string(zdata), ".pmg.rc")
|
|
|
|
// Shells the user does not use are left untouched.
|
|
assert.NoFileExists(t, filepath.Join(home, ".bashrc"))
|
|
assert.NoFileExists(t, filepath.Join(home, ".config", "fish", "config.fish"))
|
|
}
|
|
|
|
func TestAliasInstallWiresExistingNonPrimaryShell(t *testing.T) {
|
|
home := t.TempDir()
|
|
t.Setenv("HOME", home)
|
|
t.Setenv("SHELL", "/bin/zsh")
|
|
|
|
require.NoError(t, os.WriteFile(filepath.Join(home, ".bashrc"), []byte("# bashrc\n"), 0o644))
|
|
|
|
require.NoError(t, newTestAliasManager(t).Install())
|
|
|
|
bashrc, err := os.ReadFile(filepath.Join(home, ".bashrc"))
|
|
require.NoError(t, err)
|
|
assert.Contains(t, string(bashrc), ".pmg.rc")
|
|
|
|
zshrc, err := os.ReadFile(filepath.Join(home, ".zshrc"))
|
|
require.NoError(t, err)
|
|
assert.Contains(t, string(zshrc), ".pmg.rc")
|
|
}
|
|
|
|
func TestAliasInstallIdempotent(t *testing.T) {
|
|
home := t.TempDir()
|
|
t.Setenv("HOME", home)
|
|
t.Setenv("SHELL", "/bin/zsh")
|
|
|
|
mgr := newTestAliasManager(t)
|
|
require.NoError(t, mgr.Install())
|
|
require.NoError(t, mgr.Install())
|
|
|
|
data, err := os.ReadFile(filepath.Join(home, ".zshrc"))
|
|
require.NoError(t, err)
|
|
|
|
count := 0
|
|
for _, line := range strings.Split(string(data), "\n") {
|
|
if strings.Contains(line, ".pmg.rc") {
|
|
count++
|
|
}
|
|
}
|
|
assert.Equal(t, 1, count, "source line should appear exactly once")
|
|
}
|
|
|
|
func TestAliasRemove(t *testing.T) {
|
|
home := t.TempDir()
|
|
t.Setenv("HOME", home)
|
|
t.Setenv("SHELL", "/bin/zsh")
|
|
|
|
mgr := newTestAliasManager(t)
|
|
require.NoError(t, mgr.Install())
|
|
require.NoError(t, mgr.Remove())
|
|
|
|
assert.NoFileExists(t, filepath.Join(home, ".pmg.rc"))
|
|
|
|
data, err := os.ReadFile(filepath.Join(home, ".zshrc"))
|
|
require.NoError(t, err)
|
|
assert.NotContains(t, string(data), ".pmg.rc")
|
|
}
|