github.com/lineaje-labs/syft@v0.98.1-0.20231227153149-9e393f60ff1b/syft/pkg/cataloger/javascript/cataloger_test.go (about)

     1  package javascript
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/anchore/syft/syft/file"
     7  	"github.com/anchore/syft/syft/pkg"
     8  	"github.com/lineaje-labs/syft/syft/pkg/cataloger/internal/pkgtest"
     9  )
    10  
    11  func Test_JavascriptCataloger(t *testing.T) {
    12  	locationSet := file.NewLocationSet(file.NewLocation("package-lock.json"))
    13  	expectedPkgs := []pkg.Package{
    14  		{
    15  			Name:      "@actions/core",
    16  			Version:   "1.6.0",
    17  			FoundBy:   "javascript-lock-cataloger",
    18  			PURL:      "pkg:npm/%40actions/core@1.6.0",
    19  			Locations: locationSet,
    20  			Language:  pkg.JavaScript,
    21  			Type:      pkg.NpmPkg,
    22  			Licenses: pkg.NewLicenseSet(
    23  				pkg.NewLicenseFromLocations("MIT", file.NewLocation("package-lock.json")),
    24  			),
    25  			Metadata: pkg.NpmPackageLockEntry{Resolved: "https://registry.npmjs.org/@actions/core/-/core-1.6.0.tgz", Integrity: "sha512-NB1UAZomZlCV/LmJqkLhNTqtKfFXJZAUPcfl/zqG7EfsQdeUJtaWO98SGbuQ3pydJ3fHl2CvI/51OKYlCYYcaw=="},
    26  		},
    27  		{
    28  			Name:      "ansi-regex",
    29  			Version:   "3.0.0",
    30  			FoundBy:   "javascript-lock-cataloger",
    31  			PURL:      "pkg:npm/ansi-regex@3.0.0",
    32  			Locations: locationSet,
    33  			Language:  pkg.JavaScript,
    34  			Type:      pkg.NpmPkg,
    35  			Metadata:  pkg.NpmPackageLockEntry{Resolved: "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", Integrity: "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="},
    36  		},
    37  		{
    38  			Name:      "cowsay",
    39  			Version:   "1.4.0",
    40  			FoundBy:   "javascript-lock-cataloger",
    41  			PURL:      "pkg:npm/cowsay@1.4.0",
    42  			Locations: locationSet,
    43  			Language:  pkg.JavaScript,
    44  			Type:      pkg.NpmPkg,
    45  			Licenses: pkg.NewLicenseSet(
    46  				pkg.NewLicenseFromLocations("MIT", file.NewLocation("package-lock.json")),
    47  			),
    48  			Metadata: pkg.NpmPackageLockEntry{Resolved: "https://registry.npmjs.org/cowsay/-/cowsay-1.4.0.tgz", Integrity: "sha512-rdg5k5PsHFVJheO/pmE3aDg2rUDDTfPJau6yYkZYlHFktUz+UxbE+IgnUAEyyCyv4noL5ltxXD0gZzmHPCy/9g=="},
    49  		},
    50  		{
    51  			Name:      "get-stdin",
    52  			Version:   "5.0.1",
    53  			FoundBy:   "javascript-lock-cataloger",
    54  			PURL:      "pkg:npm/get-stdin@5.0.1",
    55  			Locations: locationSet,
    56  			Language:  pkg.JavaScript,
    57  			Type:      pkg.NpmPkg,
    58  			Metadata:  pkg.NpmPackageLockEntry{Resolved: "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", Integrity: "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g="},
    59  		},
    60  		{
    61  			Name:      "is-fullwidth-code-point",
    62  			Version:   "2.0.0",
    63  			FoundBy:   "javascript-lock-cataloger",
    64  			PURL:      "pkg:npm/is-fullwidth-code-point@2.0.0",
    65  			Locations: locationSet,
    66  			Language:  pkg.JavaScript,
    67  			Type:      pkg.NpmPkg,
    68  			Metadata:  pkg.NpmPackageLockEntry{Resolved: "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", Integrity: "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="},
    69  		},
    70  		{
    71  			Name:      "minimist",
    72  			Version:   "0.0.10",
    73  			FoundBy:   "javascript-lock-cataloger",
    74  			PURL:      "pkg:npm/minimist@0.0.10",
    75  			Locations: locationSet,
    76  			Language:  pkg.JavaScript,
    77  			Type:      pkg.NpmPkg,
    78  			Metadata:  pkg.NpmPackageLockEntry{Resolved: "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", Integrity: "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="},
    79  		},
    80  		{
    81  			Name:      "optimist",
    82  			Version:   "0.6.1",
    83  			FoundBy:   "javascript-lock-cataloger",
    84  			PURL:      "pkg:npm/optimist@0.6.1",
    85  			Locations: locationSet,
    86  			Language:  pkg.JavaScript,
    87  			Type:      pkg.NpmPkg,
    88  			Metadata:  pkg.NpmPackageLockEntry{Resolved: "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", Integrity: "sha1-2j6nRob6IaGaERwybpDrFaAZZoY="},
    89  		},
    90  		{
    91  			Name:      "string-width",
    92  			Version:   "2.1.1",
    93  			FoundBy:   "javascript-lock-cataloger",
    94  			PURL:      "pkg:npm/string-width@2.1.1",
    95  			Locations: locationSet,
    96  			Language:  pkg.JavaScript,
    97  			Type:      pkg.NpmPkg,
    98  			Metadata:  pkg.NpmPackageLockEntry{Resolved: "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", Integrity: "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw=="},
    99  		},
   100  		{
   101  			Name:      "strip-ansi",
   102  			Version:   "4.0.0",
   103  			FoundBy:   "javascript-lock-cataloger",
   104  			PURL:      "pkg:npm/strip-ansi@4.0.0",
   105  			Locations: locationSet,
   106  			Language:  pkg.JavaScript,
   107  			Type:      pkg.NpmPkg,
   108  			Metadata:  pkg.NpmPackageLockEntry{Resolved: "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", Integrity: "sha1-qEeQIusaw2iocTibY1JixQXuNo8="},
   109  		},
   110  		{
   111  			Name:      "strip-eof",
   112  			Version:   "1.0.0",
   113  			FoundBy:   "javascript-lock-cataloger",
   114  			PURL:      "pkg:npm/strip-eof@1.0.0",
   115  			Locations: locationSet,
   116  			Language:  pkg.JavaScript,
   117  			Type:      pkg.NpmPkg,
   118  			Metadata:  pkg.NpmPackageLockEntry{Resolved: "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", Integrity: "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="},
   119  		},
   120  		{
   121  			Name:      "wordwrap",
   122  			Version:   "0.0.3",
   123  			FoundBy:   "javascript-lock-cataloger",
   124  			PURL:      "pkg:npm/wordwrap@0.0.3",
   125  			Locations: locationSet,
   126  			Language:  pkg.JavaScript,
   127  			Type:      pkg.NpmPkg,
   128  			Metadata:  pkg.NpmPackageLockEntry{Resolved: "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", Integrity: "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="},
   129  		},
   130  	}
   131  
   132  	pkgtest.NewCatalogTester().
   133  		FromDirectory(t, "test-fixtures/pkg-lock").
   134  		Expects(expectedPkgs, nil).
   135  		TestCataloger(t, NewLockCataloger())
   136  
   137  }
   138  
   139  func Test_PackageCataloger_Globs(t *testing.T) {
   140  	tests := []struct {
   141  		name     string
   142  		fixture  string
   143  		expected []string
   144  	}{
   145  		{
   146  			name:    "obtain package files",
   147  			fixture: "test-fixtures/glob-paths",
   148  			expected: []string{
   149  				"src/package.json",
   150  			},
   151  		},
   152  	}
   153  
   154  	for _, test := range tests {
   155  		t.Run(test.name, func(t *testing.T) {
   156  			pkgtest.NewCatalogTester().
   157  				FromDirectory(t, test.fixture).
   158  				ExpectsResolverContentQueries(test.expected).
   159  				TestCataloger(t, NewPackageCataloger())
   160  		})
   161  	}
   162  }
   163  
   164  func Test_LockCataloger_Globs(t *testing.T) {
   165  	tests := []struct {
   166  		name     string
   167  		fixture  string
   168  		expected []string
   169  	}{
   170  		{
   171  			name:    "obtain package files",
   172  			fixture: "test-fixtures/glob-paths",
   173  			expected: []string{
   174  				"src/package-lock.json",
   175  				"src/pnpm-lock.yaml",
   176  				"src/yarn.lock",
   177  			},
   178  		},
   179  	}
   180  
   181  	for _, test := range tests {
   182  		t.Run(test.name, func(t *testing.T) {
   183  			pkgtest.NewCatalogTester().
   184  				FromDirectory(t, test.fixture).
   185  				ExpectsResolverContentQueries(test.expected).
   186  				TestCataloger(t, NewLockCataloger())
   187  		})
   188  	}
   189  }