github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/syft/pkg/cataloger/javascript/cataloger_test.go (about) 1 package javascript 2 3 import ( 4 "testing" 5 6 "github.com/anchore/syft/syft/artifact" 7 "github.com/anchore/syft/syft/file" 8 "github.com/anchore/syft/syft/pkg" 9 "github.com/anchore/syft/syft/pkg/cataloger/internal/pkgtest" 10 ) 11 12 func expectedPackagesAndRelationshipsLockV1(locationSet file.LocationSet, metadata bool) ([]pkg.Package, []artifact.Relationship) { 13 metadataMap := map[string]pkg.NpmPackageLockJSONMetadata{ 14 "rxjs": { 15 Resolved: "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", 16 Integrity: "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", 17 }, 18 "test-app": { 19 Resolved: "", 20 Integrity: "", 21 }, 22 "typescript": { 23 Resolved: "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", 24 Integrity: "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", 25 }, 26 "tslib": { 27 Resolved: "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 28 Integrity: "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", 29 }, 30 "zone.js": { 31 Resolved: "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", 32 Integrity: "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", 33 }, 34 } 35 rxjs := pkg.Package{ 36 Name: "rxjs", 37 Version: "7.5.7", 38 FoundBy: "javascript-cataloger", 39 PURL: "pkg:npm/rxjs@7.5.7", 40 Locations: locationSet, 41 Language: pkg.JavaScript, 42 Type: pkg.NpmPkg, 43 MetadataType: pkg.NpmPackageLockJSONMetadataType, 44 Metadata: pkg.NpmPackageLockJSONMetadata{}, 45 } 46 testApp := pkg.Package{ 47 Name: "test-app", 48 Version: "0.0.0", 49 FoundBy: "javascript-cataloger", 50 PURL: "pkg:npm/test-app@0.0.0", 51 Locations: locationSet, 52 Language: pkg.JavaScript, 53 Type: pkg.NpmPkg, 54 MetadataType: pkg.NpmPackageLockJSONMetadataType, 55 Metadata: pkg.NpmPackageLockJSONMetadata{}, 56 } 57 tslib := pkg.Package{ 58 Name: "tslib", 59 Version: "2.6.2", 60 FoundBy: "javascript-cataloger", 61 PURL: "pkg:npm/tslib@2.6.2", 62 Locations: locationSet, 63 Language: pkg.JavaScript, 64 Type: pkg.NpmPkg, 65 MetadataType: pkg.NpmPackageLockJSONMetadataType, 66 Metadata: pkg.NpmPackageLockJSONMetadata{}, 67 } 68 typescript := pkg.Package{ 69 Name: "typescript", 70 Version: "4.7.4", 71 FoundBy: "javascript-cataloger", 72 PURL: "pkg:npm/typescript@4.7.4", 73 Locations: locationSet, 74 Language: pkg.JavaScript, 75 Type: pkg.NpmPkg, 76 MetadataType: pkg.NpmPackageLockJSONMetadataType, 77 Metadata: pkg.NpmPackageLockJSONMetadata{}, 78 } 79 zonejs := pkg.Package{ 80 Name: "zone.js", 81 Version: "0.11.8", 82 FoundBy: "javascript-cataloger", 83 PURL: "pkg:npm/zone.js@0.11.8", 84 Locations: locationSet, 85 Language: pkg.JavaScript, 86 Type: pkg.NpmPkg, 87 MetadataType: pkg.NpmPackageLockJSONMetadataType, 88 Metadata: pkg.NpmPackageLockJSONMetadata{}, 89 } 90 91 l := []*pkg.Package{ 92 &rxjs, 93 &testApp, 94 &tslib, 95 &typescript, 96 &zonejs, 97 } 98 99 var expectedPkgs []pkg.Package 100 for i := range l { 101 if metadata { 102 l[i].Metadata = metadataMap[l[i].Name] 103 expectedPkgs = append(expectedPkgs, *l[i]) 104 } else { 105 expectedPkgs = append(expectedPkgs, *l[i]) 106 } 107 } 108 109 expectedRelationships := []artifact.Relationship{ 110 { 111 From: rxjs, 112 To: testApp, 113 Type: artifact.DependencyOfRelationship, 114 Data: nil, 115 }, 116 { 117 From: tslib, 118 To: testApp, 119 Type: artifact.DependencyOfRelationship, 120 Data: nil, 121 }, 122 { 123 From: typescript, 124 To: testApp, 125 Type: artifact.DependencyOfRelationship, 126 Data: nil, 127 }, 128 { 129 From: zonejs, 130 To: testApp, 131 Type: artifact.DependencyOfRelationship, 132 Data: nil, 133 }, 134 } 135 136 return expectedPkgs, expectedRelationships 137 } 138 139 func expectedPackagesAndRelationshipsLockV2(locationSet file.LocationSet, metadata bool) ([]pkg.Package, []artifact.Relationship) { 140 metadataMap := map[string]pkg.NpmPackageLockJSONMetadata{ 141 "rxjs": { 142 Resolved: "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", 143 Integrity: "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", 144 }, 145 "test-app": { 146 Resolved: "", 147 Integrity: "", 148 }, 149 "tslib": { 150 Resolved: "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 151 Integrity: "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", 152 }, 153 "typescript": { 154 Resolved: "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", 155 Integrity: "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", 156 }, 157 "zone.js": { 158 Resolved: "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", 159 Integrity: "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", 160 }, 161 } 162 rxjs := pkg.Package{ 163 Name: "rxjs", 164 Version: "7.5.7", 165 PURL: "pkg:npm/rxjs@7.5.7", 166 Locations: locationSet, 167 Licenses: pkg.NewLicenseSet(), 168 Language: pkg.JavaScript, 169 Type: pkg.NpmPkg, 170 MetadataType: pkg.NpmPackageLockJSONMetadataType, 171 Metadata: pkg.NpmPackageLockJSONMetadata{}, 172 } 173 testApp := pkg.Package{ 174 Name: "test-app", 175 Version: "0.0.0", 176 PURL: "pkg:npm/test-app@0.0.0", 177 Locations: locationSet, 178 Licenses: pkg.NewLicenseSet(), 179 Language: pkg.JavaScript, 180 Type: pkg.NpmPkg, 181 MetadataType: pkg.NpmPackageLockJSONMetadataType, 182 Metadata: pkg.NpmPackageLockJSONMetadata{}, 183 } 184 tslib := pkg.Package{ 185 Name: "tslib", 186 Version: "2.4.1", 187 PURL: "pkg:npm/tslib@2.4.1", 188 Locations: locationSet, 189 Licenses: pkg.NewLicenseSet(), 190 Language: pkg.JavaScript, 191 Type: pkg.NpmPkg, 192 MetadataType: pkg.NpmPackageLockJSONMetadataType, 193 Metadata: pkg.NpmPackageLockJSONMetadata{}, 194 } 195 typescript := pkg.Package{ 196 Name: "typescript", 197 Version: "4.7.4", 198 FoundBy: "javascript-cataloger", 199 PURL: "pkg:npm/typescript@4.7.4", 200 Locations: locationSet, 201 Language: pkg.JavaScript, 202 Type: pkg.NpmPkg, 203 MetadataType: pkg.NpmPackageLockJSONMetadataType, 204 Metadata: pkg.NpmPackageLockJSONMetadata{}, 205 } 206 zonejs := pkg.Package{ 207 Name: "zone.js", 208 Version: "0.11.8", 209 PURL: "pkg:npm/zone.js@0.11.8", 210 Locations: locationSet, 211 Licenses: pkg.NewLicenseSet(), 212 Language: pkg.JavaScript, 213 Type: pkg.NpmPkg, 214 MetadataType: pkg.NpmPackageLockJSONMetadataType, 215 Metadata: pkg.NpmPackageLockJSONMetadata{}, 216 } 217 218 l := []*pkg.Package{ 219 &rxjs, 220 &testApp, 221 &tslib, 222 &typescript, 223 &zonejs, 224 } 225 226 var expectedPkgs []pkg.Package 227 for i := range l { 228 if metadata { 229 l[i].Metadata = metadataMap[l[i].Name] 230 expectedPkgs = append(expectedPkgs, *l[i]) 231 } else { 232 expectedPkgs = append(expectedPkgs, *l[i]) 233 } 234 } 235 236 expectedRelationships := []artifact.Relationship{ 237 { 238 From: rxjs, 239 To: testApp, 240 Type: artifact.DependencyOfRelationship, 241 Data: nil, 242 }, 243 { 244 From: tslib, 245 To: rxjs, 246 Type: artifact.DependencyOfRelationship, 247 Data: nil, 248 }, 249 { 250 From: tslib, 251 To: testApp, 252 Type: artifact.DependencyOfRelationship, 253 Data: nil, 254 }, 255 { 256 From: tslib, 257 To: zonejs, 258 Type: artifact.DependencyOfRelationship, 259 Data: nil, 260 }, 261 { 262 From: typescript, 263 To: testApp, 264 Type: artifact.DependencyOfRelationship, 265 Data: nil, 266 }, 267 { 268 From: zonejs, 269 To: testApp, 270 Type: artifact.DependencyOfRelationship, 271 Data: nil, 272 }, 273 } 274 275 return expectedPkgs, expectedRelationships 276 } 277 278 func expectedPackagesAndRelationshipsYarnLock(locationSet file.LocationSet, metadata bool) ([]pkg.Package, []artifact.Relationship) { 279 metadataMap := map[string]pkg.NpmPackageLockJSONMetadata{ 280 "rxjs": { 281 Resolved: "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", 282 Integrity: "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", 283 }, 284 "test-app": { 285 Resolved: "", 286 Integrity: "", 287 }, 288 "tslib": { 289 Resolved: "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 290 Integrity: "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", 291 }, 292 "typescript": { 293 Resolved: "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", 294 Integrity: "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", 295 }, 296 "zone.js": { 297 Resolved: "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", 298 Integrity: "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", 299 }, 300 } 301 rxjs := pkg.Package{ 302 Name: "rxjs", 303 Version: "7.5.7", 304 FoundBy: "javascript-cataloger", 305 PURL: "pkg:npm/rxjs@7.5.7", 306 Locations: locationSet, 307 Licenses: pkg.NewLicenseSet(), 308 Language: pkg.JavaScript, 309 Type: pkg.NpmPkg, 310 MetadataType: pkg.NpmPackageLockJSONMetadataType, 311 Metadata: pkg.NpmPackageLockJSONMetadata{}, 312 } 313 testApp := pkg.Package{ 314 Name: "test-app", 315 Version: "0.0.0", 316 FoundBy: "javascript-cataloger", 317 PURL: "pkg:npm/test-app@0.0.0", 318 Locations: locationSet, 319 Licenses: pkg.NewLicenseSet(), 320 Language: pkg.JavaScript, 321 Type: pkg.NpmPkg, 322 MetadataType: pkg.NpmPackageLockJSONMetadataType, 323 Metadata: pkg.NpmPackageLockJSONMetadata{}, 324 } 325 tslib := pkg.Package{ 326 Name: "tslib", 327 Version: "2.4.1", 328 FoundBy: "javascript-cataloger", 329 PURL: "pkg:npm/tslib@2.4.1", 330 Locations: locationSet, 331 Licenses: pkg.NewLicenseSet(), 332 Language: pkg.JavaScript, 333 Type: pkg.NpmPkg, 334 MetadataType: pkg.NpmPackageLockJSONMetadataType, 335 Metadata: pkg.NpmPackageLockJSONMetadata{}, 336 } 337 typescript := pkg.Package{ 338 Name: "typescript", 339 Version: "4.7.4", 340 FoundBy: "javascript-cataloger", 341 PURL: "pkg:npm/typescript@4.7.4", 342 Locations: locationSet, 343 Licenses: pkg.NewLicenseSet(), 344 Language: pkg.JavaScript, 345 Type: pkg.NpmPkg, 346 MetadataType: pkg.NpmPackageLockJSONMetadataType, 347 } 348 zonejs := pkg.Package{ 349 Name: "zone.js", 350 Version: "0.11.8", 351 FoundBy: "javascript-cataloger", 352 PURL: "pkg:npm/zone.js@0.11.8", 353 Locations: locationSet, 354 Licenses: pkg.NewLicenseSet(), 355 Language: pkg.JavaScript, 356 Type: pkg.NpmPkg, 357 MetadataType: pkg.NpmPackageLockJSONMetadataType, 358 Metadata: pkg.NpmPackageLockJSONMetadata{}, 359 } 360 361 l := []*pkg.Package{ 362 &rxjs, 363 &testApp, 364 &tslib, 365 &typescript, 366 &zonejs, 367 } 368 369 var expectedPkgs []pkg.Package 370 for i := range l { 371 if metadata { 372 l[i].Metadata = metadataMap[l[i].Name] 373 expectedPkgs = append(expectedPkgs, *l[i]) 374 } else { 375 expectedPkgs = append(expectedPkgs, *l[i]) 376 } 377 } 378 379 expectedRelationships := []artifact.Relationship{ 380 { 381 From: rxjs, 382 To: testApp, 383 Type: artifact.DependencyOfRelationship, 384 Data: nil, 385 }, 386 { 387 From: tslib, 388 To: rxjs, 389 Type: artifact.DependencyOfRelationship, 390 Data: nil, 391 }, 392 { 393 From: tslib, 394 To: testApp, 395 Type: artifact.DependencyOfRelationship, 396 Data: nil, 397 }, 398 { 399 From: tslib, 400 To: zonejs, 401 Type: artifact.DependencyOfRelationship, 402 Data: nil, 403 }, 404 { 405 From: typescript, 406 To: testApp, 407 Type: artifact.DependencyOfRelationship, 408 Data: nil, 409 }, 410 { 411 From: zonejs, 412 To: testApp, 413 Type: artifact.DependencyOfRelationship, 414 Data: nil, 415 }, 416 } 417 418 return expectedPkgs, expectedRelationships 419 } 420 421 func expectedPackagesAndRelationshipsLockV3(locationSet file.LocationSet, metadata bool) ([]pkg.Package, []artifact.Relationship) { 422 metadataMap := map[string]pkg.NpmPackageLockJSONMetadata{ 423 "rxjs": { 424 Resolved: "https://registry.npmjs.org/rxjs/-/rxjs-7.5.0.tgz", 425 Integrity: "sha512-fuCKAfFawVYX0pyFlETtYnXI+5iiY9Dftgk+VdgeOq+Qyi9ZDWckHZRDaXRt5WCNbbLkmAheoSGDiceyCIKNZA==", 426 }, 427 "test-app": { 428 Resolved: "", 429 Integrity: "", 430 }, 431 "tslib": { 432 Resolved: "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 433 Integrity: "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", 434 }, 435 "typescript": { 436 Resolved: "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", 437 Integrity: "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", 438 }, 439 "zone.js": { 440 Resolved: "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", 441 Integrity: "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", 442 }, 443 } 444 rxjs := pkg.Package{ 445 Name: "rxjs", 446 Version: "7.5.0", 447 FoundBy: "javascript-cataloger", 448 PURL: "pkg:npm/rxjs@7.5.0", 449 Locations: locationSet, 450 Language: pkg.JavaScript, 451 Type: pkg.NpmPkg, 452 MetadataType: pkg.NpmPackageLockJSONMetadataType, 453 } 454 testApp := pkg.Package{ 455 Name: "test-app", 456 Version: "0.0.0", 457 FoundBy: "javascript-cataloger", 458 PURL: "pkg:npm/test-app@0.0.0", 459 Locations: locationSet, 460 Language: pkg.JavaScript, 461 Type: pkg.NpmPkg, 462 MetadataType: pkg.NpmPackageLockJSONMetadataType, 463 } 464 tslib := pkg.Package{ 465 Name: "tslib", 466 Version: "2.6.2", 467 FoundBy: "javascript-cataloger", 468 PURL: "pkg:npm/tslib@2.6.2", 469 Locations: locationSet, 470 Language: pkg.JavaScript, 471 Type: pkg.NpmPkg, 472 MetadataType: pkg.NpmPackageLockJSONMetadataType, 473 } 474 typescript := pkg.Package{ 475 Name: "typescript", 476 Version: "4.7.4", 477 FoundBy: "javascript-cataloger", 478 PURL: "pkg:npm/typescript@4.7.4", 479 Locations: locationSet, 480 Language: pkg.JavaScript, 481 Type: pkg.NpmPkg, 482 MetadataType: pkg.NpmPackageLockJSONMetadataType, 483 } 484 zonejs := pkg.Package{ 485 Name: "zone.js", 486 Version: "0.11.8", 487 FoundBy: "javascript-cataloger", 488 PURL: "pkg:npm/zone.js@0.11.8", 489 Locations: locationSet, 490 Language: pkg.JavaScript, 491 Type: pkg.NpmPkg, 492 MetadataType: pkg.NpmPackageLockJSONMetadataType, 493 } 494 495 l := []*pkg.Package{ 496 &rxjs, 497 &testApp, 498 &tslib, 499 &typescript, 500 &zonejs, 501 } 502 503 var expectedPkgs []pkg.Package 504 for i := range l { 505 if metadata { 506 l[i].Metadata = metadataMap[l[i].Name] 507 expectedPkgs = append(expectedPkgs, *l[i]) 508 } else { 509 expectedPkgs = append(expectedPkgs, *l[i]) 510 } 511 } 512 513 expectedRelationships := []artifact.Relationship{ 514 { 515 From: rxjs, 516 To: testApp, 517 Type: artifact.DependencyOfRelationship, 518 Data: nil, 519 }, 520 { 521 From: tslib, 522 To: rxjs, 523 Type: artifact.DependencyOfRelationship, 524 Data: nil, 525 }, 526 { 527 From: tslib, 528 To: testApp, 529 Type: artifact.DependencyOfRelationship, 530 Data: nil, 531 }, 532 { 533 From: tslib, 534 To: zonejs, 535 Type: artifact.DependencyOfRelationship, 536 Data: nil, 537 }, 538 { 539 From: typescript, 540 To: testApp, 541 Type: artifact.DependencyOfRelationship, 542 Data: nil, 543 }, 544 { 545 From: zonejs, 546 To: testApp, 547 Type: artifact.DependencyOfRelationship, 548 Data: nil, 549 }, 550 } 551 552 return expectedPkgs, expectedRelationships 553 } 554 555 func expectedPackagesAndRelationshipsPnpmLock(locationSet file.LocationSet, metadata bool) ([]pkg.Package, []artifact.Relationship) { 556 metadataMap := map[string]pkg.NpmPackageLockJSONMetadata{ 557 "rxjs": { 558 Resolved: "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", 559 Integrity: "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", 560 }, 561 "test-app": { 562 Resolved: "", 563 Integrity: "", 564 }, 565 "tslib": { 566 Resolved: "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 567 Integrity: "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", 568 }, 569 "typescript": { 570 Resolved: "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", 571 Integrity: "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", 572 }, 573 "zone.js": { 574 Resolved: "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", 575 Integrity: "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", 576 }, 577 } 578 rxjs := pkg.Package{ 579 Name: "rxjs", 580 Version: "7.5.7", 581 FoundBy: "javascript-cataloger", 582 PURL: "pkg:npm/rxjs@7.5.7", 583 Locations: locationSet, 584 Language: pkg.JavaScript, 585 Type: pkg.NpmPkg, 586 MetadataType: pkg.NpmPackageLockJSONMetadataType, 587 Metadata: pkg.NpmPackageLockJSONMetadata{}, 588 } 589 testApp := pkg.Package{ 590 Name: "test-app", 591 Version: "0.0.0", 592 FoundBy: "javascript-cataloger", 593 PURL: "pkg:npm/test-app@0.0.0", 594 Locations: locationSet, 595 Language: pkg.JavaScript, 596 Type: pkg.NpmPkg, 597 MetadataType: pkg.NpmPackageLockJSONMetadataType, 598 Metadata: pkg.NpmPackageLockJSONMetadata{}, 599 } 600 tslib := pkg.Package{ 601 Name: "tslib", 602 Version: "2.6.2", 603 FoundBy: "javascript-cataloger", 604 PURL: "pkg:npm/tslib@2.6.2", 605 Locations: locationSet, 606 Language: pkg.JavaScript, 607 Type: pkg.NpmPkg, 608 MetadataType: pkg.NpmPackageLockJSONMetadataType, 609 Metadata: pkg.NpmPackageLockJSONMetadata{}, 610 } 611 typescript := pkg.Package{ 612 Name: "typescript", 613 Version: "4.7.4", 614 FoundBy: "javascript-cataloger", 615 PURL: "pkg:npm/typescript@4.7.4", 616 Locations: locationSet, 617 Language: pkg.JavaScript, 618 Type: pkg.NpmPkg, 619 MetadataType: pkg.NpmPackageLockJSONMetadataType, 620 Metadata: pkg.NpmPackageLockJSONMetadata{}, 621 } 622 zonejs := pkg.Package{ 623 Name: "zone.js", 624 Version: "0.11.8", 625 FoundBy: "javascript-cataloger", 626 PURL: "pkg:npm/zone.js@0.11.8", 627 Locations: locationSet, 628 Language: pkg.JavaScript, 629 Type: pkg.NpmPkg, 630 MetadataType: pkg.NpmPackageLockJSONMetadataType, 631 Metadata: pkg.NpmPackageLockJSONMetadata{}, 632 } 633 634 l := []*pkg.Package{ 635 &rxjs, 636 &testApp, 637 &tslib, 638 &typescript, 639 &zonejs, 640 } 641 642 var expectedPkgs []pkg.Package 643 for i := range l { 644 if metadata { 645 l[i].Metadata = metadataMap[l[i].Name] 646 expectedPkgs = append(expectedPkgs, *l[i]) 647 } else { 648 expectedPkgs = append(expectedPkgs, *l[i]) 649 } 650 } 651 652 expectedRelationships := []artifact.Relationship{ 653 { 654 From: rxjs, 655 To: testApp, 656 Type: artifact.DependencyOfRelationship, 657 Data: nil, 658 }, 659 { 660 From: tslib, 661 To: rxjs, 662 Type: artifact.DependencyOfRelationship, 663 Data: nil, 664 }, 665 { 666 From: tslib, 667 To: testApp, 668 Type: artifact.DependencyOfRelationship, 669 Data: nil, 670 }, 671 { 672 From: tslib, 673 To: zonejs, 674 Type: artifact.DependencyOfRelationship, 675 Data: nil, 676 }, 677 { 678 From: zonejs, 679 To: testApp, 680 Type: artifact.DependencyOfRelationship, 681 Data: nil, 682 }, 683 } 684 685 return expectedPkgs, expectedRelationships 686 } 687 688 func Test_JavaScriptCataloger_PkgLock_v1(t *testing.T) { 689 locationSet := file.NewLocationSet(file.NewLocation("package-lock.json")) 690 expectedPkgs, expectedRelationships := expectedPackagesAndRelationshipsLockV1(locationSet, true) 691 pkgtest.NewCatalogTester(). 692 FromDirectory(t, "test-fixtures/pkg-json-and-lock/v1"). 693 Expects(expectedPkgs, expectedRelationships). 694 TestGroupedCataloger(t, NewJavaScriptCataloger()) 695 } 696 697 func Test_JavaScriptCataloger_PkgLock_v2(t *testing.T) { 698 locationSet := file.NewLocationSet(file.NewLocation("package-lock.json")) 699 expectedPkgs, expectedRelationships := expectedPackagesAndRelationshipsLockV2(locationSet, true) 700 pkgtest.NewCatalogTester(). 701 FromDirectory(t, "test-fixtures/pkg-json-and-lock/v2"). 702 Expects(expectedPkgs, expectedRelationships). 703 TestGroupedCataloger(t, NewJavaScriptCataloger()) 704 } 705 706 func Test_JavaScriptCataloger_PkgLock_v3(t *testing.T) { 707 locationSet := file.NewLocationSet(file.NewLocation("package-lock.json")) 708 expectedPkgs, expectedRelationships := expectedPackagesAndRelationshipsLockV3(locationSet, true) 709 pkgtest.NewCatalogTester(). 710 FromDirectory(t, "test-fixtures/pkg-json-and-lock/v3"). 711 Expects(expectedPkgs, expectedRelationships). 712 TestGroupedCataloger(t, NewJavaScriptCataloger()) 713 } 714 715 func Test_JavaScriptCataloger_YarnLock(t *testing.T) { 716 locationSet := file.NewLocationSet(file.NewLocation("yarn.lock")) 717 expectedPkgs, expectedRelationships := expectedPackagesAndRelationshipsYarnLock(locationSet, true) 718 pkgtest.NewCatalogTester(). 719 FromDirectory(t, "test-fixtures/pkg-json-and-yarn-lock"). 720 Expects(expectedPkgs, expectedRelationships). 721 TestGroupedCataloger(t, NewJavaScriptCataloger()) 722 } 723 724 func Test_JavaScriptCataloger_PnpmLock(t *testing.T) { 725 locationSet := file.NewLocationSet(file.NewLocation("pnpm-lock.yaml")) 726 expectedPkgs, expectedRelationships := expectedPackagesAndRelationshipsPnpmLock(locationSet, false) 727 pkgtest.NewCatalogTester(). 728 FromDirectory(t, "test-fixtures/pkg-json-and-pnpm-lock"). 729 Expects(expectedPkgs, expectedRelationships). 730 TestGroupedCataloger(t, NewJavaScriptCataloger()) 731 } 732 733 // TODO(noqcks): make this test work 734 // func Test_JavaScriptCataloger_Globs(t *testing.T) { 735 // tests := []struct { 736 // name string 737 // fixture string 738 // expected []string 739 // }{ 740 // { 741 // name: "obtain package lock files", 742 // fixture: "test-fixtures/pkg-json-and-lock/v1", 743 // expected: []string{ 744 // "package-lock.json", 745 // "package.json", 746 // }, 747 // }, 748 // { 749 // name: "obtain yarn lock files", 750 // fixture: "test-fixtures/pkg-json-and-yarn-lock", 751 // expected: []string{ 752 // "yarn.lock", 753 // "package.json", 754 // }, 755 // }, 756 // { 757 // name: "obtain yarn lock files", 758 // fixture: "test-fixtures/pkg-json-and-pnpm-lock", 759 // expected: []string{ 760 // "pnpm-lock.yaml", 761 // "package.json", 762 // }, 763 // }, 764 // } 765 766 // for _, test := range tests { 767 // t.Run(test.name, func(t *testing.T) { 768 // pkgtest.NewCatalogTester(). 769 // FromDirectory(t, test.fixture). 770 // ExpectsResolverContentQueries(test.expected). 771 // TestGroupedCataloger(t, NewJavaScriptCataloger()) 772 // }) 773 // } 774 // }