|
| 1 | +package system |
| 2 | + |
| 3 | +import ( |
| 4 | + "fmt" |
| 5 | + "os" |
| 6 | + "os/exec" |
| 7 | + "testing" |
| 8 | + |
| 9 | + "github.com/stretchr/testify/assert" |
| 10 | +) |
| 11 | + |
| 12 | +func TestGetNodeVersionNotInstalled(t *testing.T) { |
| 13 | + t.Setenv("PATH", "") |
| 14 | + _, err := GetInstalledNodeVersion() |
| 15 | + assert.ErrorContains(t, err, "Node.js is not installed") |
| 16 | +} |
| 17 | + |
| 18 | +func TestGetNodeVersion(t *testing.T) { |
| 19 | + tmpDir := t.TempDir() |
| 20 | + |
| 21 | + setupFakeNode(t, tmpDir, "18.16.0") |
| 22 | + |
| 23 | + nodeVersion, err := GetInstalledNodeVersion() |
| 24 | + assert.NoError(t, err) |
| 25 | + assert.Equal(t, "18.16.0", nodeVersion) |
| 26 | +} |
| 27 | + |
| 28 | +func TestNodeVersionIsAtLeast(t *testing.T) { |
| 29 | + setupFakeNode(t, t.TempDir(), "18.16.0") |
| 30 | + hit, err := IsNodeVersionAtLeast("16.0.0") |
| 31 | + |
| 32 | + assert.NoError(t, err) |
| 33 | + assert.True(t, hit, "Node.js version should be at least 16.0.0") |
| 34 | +} |
| 35 | + |
| 36 | +func TestNodeVersionIsNotAtLeast(t *testing.T) { |
| 37 | + setupFakeNode(t, t.TempDir(), "14.17.0") |
| 38 | + hit, err := IsNodeVersionAtLeast("16.0.0") |
| 39 | + |
| 40 | + assert.NoError(t, err) |
| 41 | + assert.False(t, hit, "Node.js version should not be at least 16.0.0") |
| 42 | +} |
| 43 | + |
| 44 | +func setupFakeNode(t *testing.T, tmpDir string, version string) { |
| 45 | + t.Helper() |
| 46 | + shPath, err := exec.LookPath("sh") |
| 47 | + assert.NoError(t, err) |
| 48 | + |
| 49 | + // Node returns version with 'v' prefix |
| 50 | + assert.NoError(t, os.WriteFile(tmpDir+"/node", []byte(fmt.Sprintf("#!%s\necho v%s", shPath, version)), 0755)) |
| 51 | + t.Setenv("PATH", tmpDir) |
| 52 | +} |
0 commit comments