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