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 }