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  // }