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  }