Cybersecurity-Projects/PROJECTS/intermediate/sbom-generator-vulnerabilit.../internal/parser/node_test.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"))
}