github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/syft/pkg/cataloger/javascript/parse_pnpm_lock_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 TestParsePnpmLock(t *testing.T) {
    13  	var expectedRelationships []artifact.Relationship
    14  	fixture := "test-fixtures/pnpm/pnpm-lock.yaml"
    15  
    16  	locationSet := file.NewLocationSet(file.NewLocation(fixture))
    17  
    18  	expectedPkgs := []pkg.Package{
    19  		{
    20  			Name:         "pnpm",
    21  			Version:      "0.0.0",
    22  			PURL:         "pkg:npm/pnpm@0.0.0",
    23  			Locations:    locationSet,
    24  			Language:     pkg.JavaScript,
    25  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    26  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    27  			Type:         pkg.NpmPkg,
    28  		},
    29  		{
    30  			Name:         "nanoid",
    31  			Version:      "3.3.4",
    32  			PURL:         "pkg:npm/nanoid@3.3.4",
    33  			Locations:    locationSet,
    34  			Language:     pkg.JavaScript,
    35  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    36  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    37  			Type:         pkg.NpmPkg,
    38  		},
    39  		{
    40  			Name:         "picocolors",
    41  			Version:      "1.0.0",
    42  			PURL:         "pkg:npm/picocolors@1.0.0",
    43  			Locations:    locationSet,
    44  			Language:     pkg.JavaScript,
    45  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    46  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    47  			Type:         pkg.NpmPkg,
    48  		},
    49  		{
    50  			Name:         "source-map-js",
    51  			Version:      "1.0.2",
    52  			PURL:         "pkg:npm/source-map-js@1.0.2",
    53  			Locations:    locationSet,
    54  			Language:     pkg.JavaScript,
    55  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    56  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    57  			Type:         pkg.NpmPkg,
    58  		},
    59  		{
    60  			Name:         "@bcoe/v8-coverage",
    61  			Version:      "0.2.3",
    62  			PURL:         "pkg:npm/%40bcoe/v8-coverage@0.2.3",
    63  			Locations:    locationSet,
    64  			Language:     pkg.JavaScript,
    65  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    66  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    67  			Type:         pkg.NpmPkg,
    68  		},
    69  	}
    70  
    71  	pkgtest.TestFileParser(t, fixture, parsePnpmLock, expectedPkgs, expectedRelationships)
    72  }
    73  
    74  func TestParsePnpmV6Lock(t *testing.T) {
    75  	var expectedRelationships []artifact.Relationship
    76  	fixture := "test-fixtures/pnpm-v6/pnpm-lock.yaml"
    77  
    78  	locationSet := file.NewLocationSet(file.NewLocation(fixture))
    79  
    80  	expectedPkgs := []pkg.Package{
    81  		{
    82  			Name:         "pnpm-v6",
    83  			Version:      "0.0.0",
    84  			PURL:         "pkg:npm/pnpm-v6@0.0.0",
    85  			Locations:    locationSet,
    86  			Language:     pkg.JavaScript,
    87  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    88  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    89  			Type:         pkg.NpmPkg,
    90  		},
    91  		{
    92  			Name:         "@testing-library/jest-dom",
    93  			Version:      "5.16.5",
    94  			PURL:         "pkg:npm/%40testing-library/jest-dom@5.16.5",
    95  			Locations:    locationSet,
    96  			Language:     pkg.JavaScript,
    97  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
    98  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
    99  			Type:         pkg.NpmPkg,
   100  		},
   101  		{
   102  			Name:         "@testing-library/react",
   103  			Version:      "13.4.0",
   104  			PURL:         "pkg:npm/%40testing-library/react@13.4.0",
   105  			Locations:    locationSet,
   106  			Language:     pkg.JavaScript,
   107  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   108  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
   109  			Type:         pkg.NpmPkg,
   110  		},
   111  		{
   112  			Name:         "@testing-library/user-event",
   113  			Version:      "13.5.0",
   114  			PURL:         "pkg:npm/%40testing-library/user-event@13.5.0",
   115  			Locations:    locationSet,
   116  			Language:     pkg.JavaScript,
   117  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   118  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
   119  			Type:         pkg.NpmPkg,
   120  		},
   121  		{
   122  			Name:         "react",
   123  			Version:      "18.2.0",
   124  			PURL:         "pkg:npm/react@18.2.0",
   125  			Locations:    locationSet,
   126  			Language:     pkg.JavaScript,
   127  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   128  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
   129  			Type:         pkg.NpmPkg,
   130  		},
   131  		{
   132  			Name:         "react-dom",
   133  			Version:      "18.2.0",
   134  			PURL:         "pkg:npm/react-dom@18.2.0",
   135  			Locations:    locationSet,
   136  			Language:     pkg.JavaScript,
   137  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   138  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
   139  			Type:         pkg.NpmPkg,
   140  		},
   141  		{
   142  			Name:         "web-vitals",
   143  			Version:      "2.1.4",
   144  			PURL:         "pkg:npm/web-vitals@2.1.4",
   145  			Locations:    locationSet,
   146  			Language:     pkg.JavaScript,
   147  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   148  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
   149  			Type:         pkg.NpmPkg,
   150  		},
   151  		{
   152  			Name:         "@babel/core",
   153  			Version:      "7.21.4",
   154  			PURL:         "pkg:npm/%40babel/core@7.21.4",
   155  			Locations:    locationSet,
   156  			Language:     pkg.JavaScript,
   157  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   158  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
   159  			Type:         pkg.NpmPkg,
   160  		},
   161  		{
   162  			Name:         "@types/eslint",
   163  			Version:      "8.37.0",
   164  			PURL:         "pkg:npm/%40types/eslint@8.37.0",
   165  			Locations:    locationSet,
   166  			Language:     pkg.JavaScript,
   167  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   168  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
   169  			Type:         pkg.NpmPkg,
   170  		},
   171  		{
   172  			Name:         "read-cache",
   173  			Version:      "1.0.0",
   174  			PURL:         "pkg:npm/read-cache@1.0.0",
   175  			Locations:    locationSet,
   176  			Language:     pkg.JavaScript,
   177  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   178  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
   179  			Type:         pkg.NpmPkg,
   180  		},
   181  		{
   182  			Name:         "schema-utils",
   183  			Version:      "3.1.2",
   184  			PURL:         "pkg:npm/schema-utils@3.1.2",
   185  			Locations:    locationSet,
   186  			Language:     pkg.JavaScript,
   187  			MetadataType: pkg.NpmPackageLockJSONMetadataType,
   188  			Metadata:     pkg.NpmPackageLockJSONMetadata{},
   189  			Type:         pkg.NpmPkg,
   190  		},
   191  	}
   192  
   193  	pkgtest.TestFileParser(t, fixture, parsePnpmLock, expectedPkgs, expectedRelationships)
   194  }