90 lines
2.2 KiB
Go
90 lines
2.2 KiB
Go
// ©AngelaMos | 2026
|
|
// node_test.go
|
|
|
|
package parser
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/CarterPerez-dev/bomber/pkg/types"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestNodeDetect(t *testing.T) {
|
|
p := NewNodeParser()
|
|
assert.True(t, p.Detect(filepath.Join(testdataDir(t), "node-project")))
|
|
assert.False(t, p.Detect(filepath.Join(testdataDir(t), "go-project")))
|
|
assert.False(t, p.Detect(filepath.Join(testdataDir(t), "empty-project")))
|
|
}
|
|
|
|
func TestNodeParse(t *testing.T) {
|
|
p := NewNodeParser()
|
|
dir := filepath.Join(testdataDir(t), "node-project")
|
|
graph, err := p.Parse(dir)
|
|
require.NoError(t, err)
|
|
|
|
assert.Equal(t, "test-project", graph.Root.Name)
|
|
assert.Equal(t, types.EcosystemNode, graph.Root.Ecosystem)
|
|
|
|
directCount := 0
|
|
for _, pkg := range graph.Nodes {
|
|
if pkg.Direct && pkg.PURL != graph.Root.PURL {
|
|
directCount++
|
|
}
|
|
}
|
|
assert.Equal(t, 3, directCount)
|
|
|
|
hasExpress := false
|
|
hasLodash := false
|
|
hasTS := false
|
|
for _, pkg := range graph.Nodes {
|
|
switch pkg.Name {
|
|
case "express":
|
|
hasExpress = true
|
|
assert.Equal(t, "4.18.2", pkg.Version)
|
|
case "lodash":
|
|
hasLodash = true
|
|
assert.Equal(t, "4.17.20", pkg.Version)
|
|
case "typescript":
|
|
hasTS = true
|
|
assert.Equal(t, "5.3.3", pkg.Version)
|
|
}
|
|
}
|
|
assert.True(t, hasExpress)
|
|
assert.True(t, hasLodash)
|
|
assert.True(t, hasTS)
|
|
}
|
|
|
|
func TestNodeParseTransitive(t *testing.T) {
|
|
p := NewNodeParser()
|
|
dir := filepath.Join(testdataDir(t), "node-project")
|
|
graph, err := p.Parse(dir)
|
|
require.NoError(t, err)
|
|
|
|
hasSemver := false
|
|
for _, pkg := range graph.Nodes {
|
|
if pkg.Name == "semver" {
|
|
hasSemver = true
|
|
assert.False(t, pkg.Direct)
|
|
}
|
|
}
|
|
assert.True(t, hasSemver)
|
|
}
|
|
|
|
func TestNodeEcosystem(t *testing.T) {
|
|
p := NewNodeParser()
|
|
assert.Equal(t, types.EcosystemNode, p.Ecosystem())
|
|
}
|
|
|
|
func TestCleanNodeVersion(t *testing.T) {
|
|
assert.Equal(t, "4.18.2", cleanNodeVersion("^4.18.2"))
|
|
assert.Equal(t, "4.18.2", cleanNodeVersion("~4.18.2"))
|
|
assert.Equal(t, "1.2.3", cleanNodeVersion(">=1.2.3"))
|
|
assert.Equal(t, "2.0.0", cleanNodeVersion("<2.0.0"))
|
|
assert.Equal(t, "1.0.0", cleanNodeVersion(">=1.0.0 <2.0.0"))
|
|
assert.Equal(t, "4.18.2", cleanNodeVersion("4.18.2"))
|
|
assert.Equal(t, "1.0.0", cleanNodeVersion("=1.0.0"))
|
|
}
|