github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/syft/pkg/cataloger/php/parse_installed_json_test.go (about)

     1  package php
     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 TestParseInstalledJsonComposerV1(t *testing.T) {
    13  	fixtures := []string{
    14  		"test-fixtures/vendor/composer_1/installed.json",
    15  		"test-fixtures/vendor/composer_2/installed.json",
    16  	}
    17  
    18  	var expectedRelationships []artifact.Relationship
    19  	var expectedPkgs = []pkg.Package{
    20  		{
    21  			Name:     "asm89/stack-cors",
    22  			Version:  "1.3.0",
    23  			PURL:     "pkg:composer/asm89/stack-cors@1.3.0",
    24  			Language: pkg.PHP,
    25  			Type:     pkg.PhpComposerPkg,
    26  			Licenses: pkg.NewLicenseSet(
    27  				pkg.NewLicense("MIT"),
    28  			),
    29  			Metadata: pkg.PhpComposerInstalledEntry{
    30  				Name:    "asm89/stack-cors",
    31  				Version: "1.3.0",
    32  				Source: pkg.PhpComposerExternalReference{
    33  					Type:      "git",
    34  					URL:       "https://github.com/asm89/stack-cors.git",
    35  					Reference: "b9c31def6a83f84b4d4a40d35996d375755f0e08",
    36  				},
    37  				Dist: pkg.PhpComposerExternalReference{
    38  					Type:      "zip",
    39  					URL:       "https://api.github.com/repos/asm89/stack-cors/zipball/b9c31def6a83f84b4d4a40d35996d375755f0e08",
    40  					Reference: "b9c31def6a83f84b4d4a40d35996d375755f0e08",
    41  				},
    42  				Require: map[string]string{
    43  					"php":                     ">=5.5.9",
    44  					"symfony/http-foundation": "~2.7|~3.0|~4.0|~5.0",
    45  					"symfony/http-kernel":     "~2.7|~3.0|~4.0|~5.0",
    46  				},
    47  				RequireDev: map[string]string{
    48  					"phpunit/phpunit":           "^5.0 || ^4.8.10",
    49  					"squizlabs/php_codesniffer": "^2.3",
    50  				},
    51  				Time:            "2019-12-24T22:41:47+00:00",
    52  				Type:            "library",
    53  				NotificationURL: "https://packagist.org/downloads/",
    54  				Authors: []pkg.PhpComposerAuthors{
    55  					{
    56  						Name:  "Alexander",
    57  						Email: "iam.asm89@gmail.com",
    58  					},
    59  				},
    60  
    61  				Description: "Cross-origin resource sharing library and stack middleware",
    62  				Homepage:    "https://github.com/asm89/stack-cors",
    63  				Keywords: []string{
    64  					"cors",
    65  					"stack",
    66  				},
    67  			},
    68  		},
    69  		{
    70  			Name:     "behat/mink",
    71  			Version:  "v1.8.1",
    72  			PURL:     "pkg:composer/behat/mink@v1.8.1",
    73  			Language: pkg.PHP,
    74  			Type:     pkg.PhpComposerPkg,
    75  			Licenses: pkg.NewLicenseSet(
    76  				pkg.NewLicense("MIT"),
    77  			),
    78  			Metadata: pkg.PhpComposerInstalledEntry{
    79  				Name:    "behat/mink",
    80  				Version: "v1.8.1",
    81  				Source: pkg.PhpComposerExternalReference{
    82  					Type:      "git",
    83  					URL:       "https://github.com/minkphp/Mink.git",
    84  					Reference: "07c6a9fe3fa98c2de074b25d9ed26c22904e3887",
    85  				},
    86  				Dist: pkg.PhpComposerExternalReference{
    87  					Type:      "zip",
    88  					URL:       "https://api.github.com/repos/minkphp/Mink/zipball/07c6a9fe3fa98c2de074b25d9ed26c22904e3887",
    89  					Reference: "07c6a9fe3fa98c2de074b25d9ed26c22904e3887",
    90  				},
    91  				Require: map[string]string{
    92  					"php":                  ">=5.3.1",
    93  					"symfony/css-selector": "^2.7|^3.0|^4.0|^5.0",
    94  				},
    95  				RequireDev: map[string]string{
    96  					"phpunit/phpunit":        "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20",
    97  					"symfony/debug":          "^2.7|^3.0|^4.0",
    98  					"symfony/phpunit-bridge": "^3.4.38 || ^5.0.5",
    99  				},
   100  				Suggest: map[string]string{
   101  					"behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)",
   102  					"behat/mink-goutte-driver":     "fast headless driver for any app without JS emulation",
   103  					"behat/mink-selenium2-driver":  "slow, but JS-enabled driver for any app (requires Selenium2)",
   104  					"behat/mink-zombie-driver":     "fast and JS-enabled headless driver for any app (requires node.js)",
   105  					"dmore/chrome-mink-driver":     "fast and JS-enabled driver for any app (requires chromium or google chrome)",
   106  				},
   107  				Time:            "2020-03-11T15:45:53+00:00",
   108  				Type:            "library",
   109  				NotificationURL: "https://packagist.org/downloads/",
   110  				Authors: []pkg.PhpComposerAuthors{
   111  					{
   112  						Name:     "Konstantin Kudryashov",
   113  						Email:    "ever.zet@gmail.com",
   114  						Homepage: "http://everzet.com",
   115  					},
   116  				},
   117  
   118  				Description: "Browser controller/emulator abstraction for PHP",
   119  				Homepage:    "http://mink.behat.org/",
   120  				Keywords: []string{
   121  					"browser",
   122  					"testing",
   123  					"web",
   124  				},
   125  			},
   126  		},
   127  	}
   128  
   129  	for _, fixture := range fixtures {
   130  		t.Run(fixture, func(t *testing.T) {
   131  			locations := file.NewLocationSet(file.NewLocation(fixture))
   132  			for i := range expectedPkgs {
   133  				expectedPkgs[i].Locations = locations
   134  				locationLicenses := pkg.NewLicenseSet()
   135  				for _, license := range expectedPkgs[i].Licenses.ToSlice() {
   136  					license.Locations = locations
   137  					locationLicenses.Add(license)
   138  				}
   139  				expectedPkgs[i].Licenses = locationLicenses
   140  			}
   141  			pkgtest.TestFileParser(t, fixture, parseInstalledJSON, expectedPkgs, expectedRelationships)
   142  		})
   143  	}
   144  }