mirror of
https://github.com/safedep/pmg.git
synced 2026-08-03 07:24:09 +02:00
fix: MacOS MDM based Deployment (#277)
* 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
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
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")
|
||||
}
|
||||
Reference in New Issue
Block a user