├── .gitignore ├── LICENSE ├── README.md ├── api-testing-course ├── README.md ├── behat.dist.yml ├── composer.json ├── composer.lock ├── composer.phar └── features │ ├── 1.4-smoke-test.feature │ ├── 2.1-issue-list.feature │ ├── 2.2-issue-list-with-variables.feature │ ├── 3.2-my-repositories.feature │ ├── 3.3-star-repository.feature │ ├── 3.4-unstar-repository.feature │ ├── 4.1-create-a-repo.feature │ ├── 4.2-create-a-repo-cleanup.feature │ └── bootstrap │ └── FeatureContext.php ├── api-testing-workspace ├── README.md ├── behat.dist.yml ├── composer.json └── composer.lock └── php └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | **/behat.yml 3 | **/.DS_Store 4 | **/vendor 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Keith Casey 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # API Testing and Validation 2 | 3 | This is the sample code for the LinkedIn Learning course "API Testing and Validation" from Keith Casey / @CaseySoftware. 4 | 5 | ## LinkedIn Course Instructions 6 | 7 | _The course was built using PHP 8.2 and Behat 3.12 and these instructions are designed for that combination._ 8 | 9 | 1. Ensure you have PHP installed. This course was built on PHP 8.2.x installed via Homebrew on a Mac. 10 | 2. Ensure you have [Composer](https://getcomposer.org/) installed. 11 | 3. Download or clone this repository. 12 | 4. On your command line, move to the `api-testing-workspace` directory. 13 | 6. Install your environment via `./composer.phar install` or equivalent depending on your Composer configuration. This will load Behat 3.12 and the Github SDK for you. 14 | 8. Run `vendor/bin/behat --init` to create the framework for your tests. 15 | 9. All of your code, feature specifications, etc will be in `api-testing-workspace`. If you ever get stuck, check out the `api-testing-course` directory for the completed solutions. 16 | 17 | Note: Do not rename `behat.dist.yml` to `behat.yml` at this time. Once you do, Behat will look for additional information. You'll rename and configure that information during the course. 18 | 19 | ## PHP Instructions 20 | 21 | The PHP instructions are identical to the LinkedIn Learning instructions above. 22 | 23 | ## TODO: Go 24 | 25 | ## TODO: Python 26 | -------------------------------------------------------------------------------- /api-testing-course/README.md: -------------------------------------------------------------------------------- 1 | 2 | # Sample Code for LinkedIn Learning Course 3 | 4 | This folder has all the working samples and code for the LinkedIn Learning course. To try them out, follow these instructions. They're slightly different than the README.md in the root directory. 5 | 6 | **Note:** Other than copying the `behat.dist.yml` file. You should not have to modify any other files in this directory. 7 | 8 | 1. Ensure you have PHP installed. This course was built on PHP 8.2.x installed via Homebrew on a Mac. 9 | 2. Ensure you have [Composer](https://getcomposer.org/) installed. 10 | 3. Download or clone this repository. 11 | 4. On your command line, move to this (the `api-testing-course`) directory. 12 | 6. Install your environment via `./composer.phar install` or equivalent depending on your Composer configuration. This will load Behat 3.12 and the Github SDK for you. 13 | 7. Copy `behat.dist.yml` to `behat.yml` 14 | 8. Create a Personal Access Token on Github via https://github.com/settings/tokens?type=beta giving it permission to 15 | * User Permissions: Read and Write access to starring and watching 16 | * Repository permissions: Read and Write access to administration 17 | 9. Copy and paste the Personal Access Token into `behat.yml` for the `github_token` parameter. 18 | 10. Run `vendor/bin/behat` to run these tests 19 | -------------------------------------------------------------------------------- /api-testing-course/behat.dist.yml: -------------------------------------------------------------------------------- 1 | # behat.yml 2 | 3 | default: 4 | suites: 5 | default: 6 | contexts: 7 | - FeatureContext: 8 | parameters: 9 | github_token: "Visit https://github.com/settings/tokens to create a personal access token and put it here" -------------------------------------------------------------------------------- /api-testing-course/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require-dev": { 3 | "behat/behat": "^3.12" 4 | }, 5 | "require": { 6 | "knplabs/github-api": "^3.0", 7 | "guzzlehttp/guzzle": "^7.0.1", 8 | "http-interop/http-factory-guzzle": "^1.0" 9 | }, 10 | "config": { 11 | "allow-plugins": { 12 | "php-http/discovery": true 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /api-testing-course/composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "c51262e3eb4820c349d6a4a98191805f", 8 | "packages": [ 9 | { 10 | "name": "clue/stream-filter", 11 | "version": "v1.6.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/clue/stream-filter.git", 15 | "reference": "d6169430c7731d8509da7aecd0af756a5747b78e" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/clue/stream-filter/zipball/d6169430c7731d8509da7aecd0af756a5747b78e", 20 | "reference": "d6169430c7731d8509da7aecd0af756a5747b78e", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": ">=5.3" 25 | }, 26 | "require-dev": { 27 | "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" 28 | }, 29 | "type": "library", 30 | "autoload": { 31 | "files": [ 32 | "src/functions_include.php" 33 | ], 34 | "psr-4": { 35 | "Clue\\StreamFilter\\": "src/" 36 | } 37 | }, 38 | "notification-url": "https://packagist.org/downloads/", 39 | "license": [ 40 | "MIT" 41 | ], 42 | "authors": [ 43 | { 44 | "name": "Christian Lück", 45 | "email": "christian@clue.engineering" 46 | } 47 | ], 48 | "description": "A simple and modern approach to stream filtering in PHP", 49 | "homepage": "https://github.com/clue/php-stream-filter", 50 | "keywords": [ 51 | "bucket brigade", 52 | "callback", 53 | "filter", 54 | "php_user_filter", 55 | "stream", 56 | "stream_filter_append", 57 | "stream_filter_register" 58 | ], 59 | "support": { 60 | "issues": "https://github.com/clue/stream-filter/issues", 61 | "source": "https://github.com/clue/stream-filter/tree/v1.6.0" 62 | }, 63 | "funding": [ 64 | { 65 | "url": "https://clue.engineering/support", 66 | "type": "custom" 67 | }, 68 | { 69 | "url": "https://github.com/clue", 70 | "type": "github" 71 | } 72 | ], 73 | "time": "2022-02-21T13:15:14+00:00" 74 | }, 75 | { 76 | "name": "guzzlehttp/guzzle", 77 | "version": "7.5.1", 78 | "source": { 79 | "type": "git", 80 | "url": "https://github.com/guzzle/guzzle.git", 81 | "reference": "b964ca597e86b752cd994f27293e9fa6b6a95ed9" 82 | }, 83 | "dist": { 84 | "type": "zip", 85 | "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b964ca597e86b752cd994f27293e9fa6b6a95ed9", 86 | "reference": "b964ca597e86b752cd994f27293e9fa6b6a95ed9", 87 | "shasum": "" 88 | }, 89 | "require": { 90 | "ext-json": "*", 91 | "guzzlehttp/promises": "^1.5", 92 | "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", 93 | "php": "^7.2.5 || ^8.0", 94 | "psr/http-client": "^1.0", 95 | "symfony/deprecation-contracts": "^2.2 || ^3.0" 96 | }, 97 | "provide": { 98 | "psr/http-client-implementation": "1.0" 99 | }, 100 | "require-dev": { 101 | "bamarni/composer-bin-plugin": "^1.8.1", 102 | "ext-curl": "*", 103 | "php-http/client-integration-tests": "^3.0", 104 | "phpunit/phpunit": "^8.5.29 || ^9.5.23", 105 | "psr/log": "^1.1 || ^2.0 || ^3.0" 106 | }, 107 | "suggest": { 108 | "ext-curl": "Required for CURL handler support", 109 | "ext-intl": "Required for Internationalized Domain Name (IDN) support", 110 | "psr/log": "Required for using the Log middleware" 111 | }, 112 | "type": "library", 113 | "extra": { 114 | "bamarni-bin": { 115 | "bin-links": true, 116 | "forward-command": false 117 | }, 118 | "branch-alias": { 119 | "dev-master": "7.5-dev" 120 | } 121 | }, 122 | "autoload": { 123 | "files": [ 124 | "src/functions_include.php" 125 | ], 126 | "psr-4": { 127 | "GuzzleHttp\\": "src/" 128 | } 129 | }, 130 | "notification-url": "https://packagist.org/downloads/", 131 | "license": [ 132 | "MIT" 133 | ], 134 | "authors": [ 135 | { 136 | "name": "Graham Campbell", 137 | "email": "hello@gjcampbell.co.uk", 138 | "homepage": "https://github.com/GrahamCampbell" 139 | }, 140 | { 141 | "name": "Michael Dowling", 142 | "email": "mtdowling@gmail.com", 143 | "homepage": "https://github.com/mtdowling" 144 | }, 145 | { 146 | "name": "Jeremy Lindblom", 147 | "email": "jeremeamia@gmail.com", 148 | "homepage": "https://github.com/jeremeamia" 149 | }, 150 | { 151 | "name": "George Mponos", 152 | "email": "gmponos@gmail.com", 153 | "homepage": "https://github.com/gmponos" 154 | }, 155 | { 156 | "name": "Tobias Nyholm", 157 | "email": "tobias.nyholm@gmail.com", 158 | "homepage": "https://github.com/Nyholm" 159 | }, 160 | { 161 | "name": "Márk Sági-Kazár", 162 | "email": "mark.sagikazar@gmail.com", 163 | "homepage": "https://github.com/sagikazarmark" 164 | }, 165 | { 166 | "name": "Tobias Schultze", 167 | "email": "webmaster@tubo-world.de", 168 | "homepage": "https://github.com/Tobion" 169 | } 170 | ], 171 | "description": "Guzzle is a PHP HTTP client library", 172 | "keywords": [ 173 | "client", 174 | "curl", 175 | "framework", 176 | "http", 177 | "http client", 178 | "psr-18", 179 | "psr-7", 180 | "rest", 181 | "web service" 182 | ], 183 | "support": { 184 | "issues": "https://github.com/guzzle/guzzle/issues", 185 | "source": "https://github.com/guzzle/guzzle/tree/7.5.1" 186 | }, 187 | "funding": [ 188 | { 189 | "url": "https://github.com/GrahamCampbell", 190 | "type": "github" 191 | }, 192 | { 193 | "url": "https://github.com/Nyholm", 194 | "type": "github" 195 | }, 196 | { 197 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", 198 | "type": "tidelift" 199 | } 200 | ], 201 | "time": "2023-04-17T16:30:08+00:00" 202 | }, 203 | { 204 | "name": "guzzlehttp/promises", 205 | "version": "1.5.2", 206 | "source": { 207 | "type": "git", 208 | "url": "https://github.com/guzzle/promises.git", 209 | "reference": "b94b2807d85443f9719887892882d0329d1e2598" 210 | }, 211 | "dist": { 212 | "type": "zip", 213 | "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", 214 | "reference": "b94b2807d85443f9719887892882d0329d1e2598", 215 | "shasum": "" 216 | }, 217 | "require": { 218 | "php": ">=5.5" 219 | }, 220 | "require-dev": { 221 | "symfony/phpunit-bridge": "^4.4 || ^5.1" 222 | }, 223 | "type": "library", 224 | "extra": { 225 | "branch-alias": { 226 | "dev-master": "1.5-dev" 227 | } 228 | }, 229 | "autoload": { 230 | "files": [ 231 | "src/functions_include.php" 232 | ], 233 | "psr-4": { 234 | "GuzzleHttp\\Promise\\": "src/" 235 | } 236 | }, 237 | "notification-url": "https://packagist.org/downloads/", 238 | "license": [ 239 | "MIT" 240 | ], 241 | "authors": [ 242 | { 243 | "name": "Graham Campbell", 244 | "email": "hello@gjcampbell.co.uk", 245 | "homepage": "https://github.com/GrahamCampbell" 246 | }, 247 | { 248 | "name": "Michael Dowling", 249 | "email": "mtdowling@gmail.com", 250 | "homepage": "https://github.com/mtdowling" 251 | }, 252 | { 253 | "name": "Tobias Nyholm", 254 | "email": "tobias.nyholm@gmail.com", 255 | "homepage": "https://github.com/Nyholm" 256 | }, 257 | { 258 | "name": "Tobias Schultze", 259 | "email": "webmaster@tubo-world.de", 260 | "homepage": "https://github.com/Tobion" 261 | } 262 | ], 263 | "description": "Guzzle promises library", 264 | "keywords": [ 265 | "promise" 266 | ], 267 | "support": { 268 | "issues": "https://github.com/guzzle/promises/issues", 269 | "source": "https://github.com/guzzle/promises/tree/1.5.2" 270 | }, 271 | "funding": [ 272 | { 273 | "url": "https://github.com/GrahamCampbell", 274 | "type": "github" 275 | }, 276 | { 277 | "url": "https://github.com/Nyholm", 278 | "type": "github" 279 | }, 280 | { 281 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", 282 | "type": "tidelift" 283 | } 284 | ], 285 | "time": "2022-08-28T14:55:35+00:00" 286 | }, 287 | { 288 | "name": "guzzlehttp/psr7", 289 | "version": "2.5.0", 290 | "source": { 291 | "type": "git", 292 | "url": "https://github.com/guzzle/psr7.git", 293 | "reference": "b635f279edd83fc275f822a1188157ffea568ff6" 294 | }, 295 | "dist": { 296 | "type": "zip", 297 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", 298 | "reference": "b635f279edd83fc275f822a1188157ffea568ff6", 299 | "shasum": "" 300 | }, 301 | "require": { 302 | "php": "^7.2.5 || ^8.0", 303 | "psr/http-factory": "^1.0", 304 | "psr/http-message": "^1.1 || ^2.0", 305 | "ralouphie/getallheaders": "^3.0" 306 | }, 307 | "provide": { 308 | "psr/http-factory-implementation": "1.0", 309 | "psr/http-message-implementation": "1.0" 310 | }, 311 | "require-dev": { 312 | "bamarni/composer-bin-plugin": "^1.8.1", 313 | "http-interop/http-factory-tests": "^0.9", 314 | "phpunit/phpunit": "^8.5.29 || ^9.5.23" 315 | }, 316 | "suggest": { 317 | "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" 318 | }, 319 | "type": "library", 320 | "extra": { 321 | "bamarni-bin": { 322 | "bin-links": true, 323 | "forward-command": false 324 | } 325 | }, 326 | "autoload": { 327 | "psr-4": { 328 | "GuzzleHttp\\Psr7\\": "src/" 329 | } 330 | }, 331 | "notification-url": "https://packagist.org/downloads/", 332 | "license": [ 333 | "MIT" 334 | ], 335 | "authors": [ 336 | { 337 | "name": "Graham Campbell", 338 | "email": "hello@gjcampbell.co.uk", 339 | "homepage": "https://github.com/GrahamCampbell" 340 | }, 341 | { 342 | "name": "Michael Dowling", 343 | "email": "mtdowling@gmail.com", 344 | "homepage": "https://github.com/mtdowling" 345 | }, 346 | { 347 | "name": "George Mponos", 348 | "email": "gmponos@gmail.com", 349 | "homepage": "https://github.com/gmponos" 350 | }, 351 | { 352 | "name": "Tobias Nyholm", 353 | "email": "tobias.nyholm@gmail.com", 354 | "homepage": "https://github.com/Nyholm" 355 | }, 356 | { 357 | "name": "Márk Sági-Kazár", 358 | "email": "mark.sagikazar@gmail.com", 359 | "homepage": "https://github.com/sagikazarmark" 360 | }, 361 | { 362 | "name": "Tobias Schultze", 363 | "email": "webmaster@tubo-world.de", 364 | "homepage": "https://github.com/Tobion" 365 | }, 366 | { 367 | "name": "Márk Sági-Kazár", 368 | "email": "mark.sagikazar@gmail.com", 369 | "homepage": "https://sagikazarmark.hu" 370 | } 371 | ], 372 | "description": "PSR-7 message implementation that also provides common utility methods", 373 | "keywords": [ 374 | "http", 375 | "message", 376 | "psr-7", 377 | "request", 378 | "response", 379 | "stream", 380 | "uri", 381 | "url" 382 | ], 383 | "support": { 384 | "issues": "https://github.com/guzzle/psr7/issues", 385 | "source": "https://github.com/guzzle/psr7/tree/2.5.0" 386 | }, 387 | "funding": [ 388 | { 389 | "url": "https://github.com/GrahamCampbell", 390 | "type": "github" 391 | }, 392 | { 393 | "url": "https://github.com/Nyholm", 394 | "type": "github" 395 | }, 396 | { 397 | "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", 398 | "type": "tidelift" 399 | } 400 | ], 401 | "time": "2023-04-17T16:11:26+00:00" 402 | }, 403 | { 404 | "name": "http-interop/http-factory-guzzle", 405 | "version": "1.2.0", 406 | "source": { 407 | "type": "git", 408 | "url": "https://github.com/http-interop/http-factory-guzzle.git", 409 | "reference": "8f06e92b95405216b237521cc64c804dd44c4a81" 410 | }, 411 | "dist": { 412 | "type": "zip", 413 | "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81", 414 | "reference": "8f06e92b95405216b237521cc64c804dd44c4a81", 415 | "shasum": "" 416 | }, 417 | "require": { 418 | "guzzlehttp/psr7": "^1.7||^2.0", 419 | "php": ">=7.3", 420 | "psr/http-factory": "^1.0" 421 | }, 422 | "provide": { 423 | "psr/http-factory-implementation": "^1.0" 424 | }, 425 | "require-dev": { 426 | "http-interop/http-factory-tests": "^0.9", 427 | "phpunit/phpunit": "^9.5" 428 | }, 429 | "suggest": { 430 | "guzzlehttp/psr7": "Includes an HTTP factory starting in version 2.0" 431 | }, 432 | "type": "library", 433 | "autoload": { 434 | "psr-4": { 435 | "Http\\Factory\\Guzzle\\": "src/" 436 | } 437 | }, 438 | "notification-url": "https://packagist.org/downloads/", 439 | "license": [ 440 | "MIT" 441 | ], 442 | "authors": [ 443 | { 444 | "name": "PHP-FIG", 445 | "homepage": "http://www.php-fig.org/" 446 | } 447 | ], 448 | "description": "An HTTP Factory using Guzzle PSR7", 449 | "keywords": [ 450 | "factory", 451 | "http", 452 | "psr-17", 453 | "psr-7" 454 | ], 455 | "support": { 456 | "issues": "https://github.com/http-interop/http-factory-guzzle/issues", 457 | "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0" 458 | }, 459 | "time": "2021-07-21T13:50:14+00:00" 460 | }, 461 | { 462 | "name": "knplabs/github-api", 463 | "version": "v3.11.0", 464 | "source": { 465 | "type": "git", 466 | "url": "https://github.com/KnpLabs/php-github-api.git", 467 | "reference": "c68b874ac3267c3cc0544b726dbb4e49a72a9920" 468 | }, 469 | "dist": { 470 | "type": "zip", 471 | "url": "https://api.github.com/repos/KnpLabs/php-github-api/zipball/c68b874ac3267c3cc0544b726dbb4e49a72a9920", 472 | "reference": "c68b874ac3267c3cc0544b726dbb4e49a72a9920", 473 | "shasum": "" 474 | }, 475 | "require": { 476 | "ext-json": "*", 477 | "php": "^7.2.5 || ^8.0", 478 | "php-http/cache-plugin": "^1.7.1", 479 | "php-http/client-common": "^2.3", 480 | "php-http/discovery": "^1.12", 481 | "php-http/httplug": "^2.2", 482 | "php-http/multipart-stream-builder": "^1.1.2", 483 | "psr/cache": "^1.0|^2.0|^3.0", 484 | "psr/http-client-implementation": "^1.0", 485 | "psr/http-factory-implementation": "^1.0", 486 | "psr/http-message": "^1.0", 487 | "symfony/deprecation-contracts": "^2.2|^3.0", 488 | "symfony/polyfill-php80": "^1.17" 489 | }, 490 | "require-dev": { 491 | "guzzlehttp/guzzle": "^7.2", 492 | "guzzlehttp/psr7": "^1.7", 493 | "http-interop/http-factory-guzzle": "^1.0", 494 | "php-http/mock-client": "^1.4.1", 495 | "phpstan/extension-installer": "^1.0.5", 496 | "phpstan/phpstan": "^0.12.57", 497 | "phpstan/phpstan-deprecation-rules": "^0.12.5", 498 | "phpunit/phpunit": "^8.5 || ^9.4", 499 | "symfony/cache": "^5.1.8", 500 | "symfony/phpunit-bridge": "^5.2" 501 | }, 502 | "type": "library", 503 | "extra": { 504 | "branch-alias": { 505 | "dev-2.x": "2.20.x-dev", 506 | "dev-master": "3.10.x-dev" 507 | } 508 | }, 509 | "autoload": { 510 | "psr-4": { 511 | "Github\\": "lib/Github/" 512 | } 513 | }, 514 | "notification-url": "https://packagist.org/downloads/", 515 | "license": [ 516 | "MIT" 517 | ], 518 | "authors": [ 519 | { 520 | "name": "KnpLabs Team", 521 | "homepage": "http://knplabs.com" 522 | }, 523 | { 524 | "name": "Thibault Duplessis", 525 | "email": "thibault.duplessis@gmail.com", 526 | "homepage": "http://ornicar.github.com" 527 | } 528 | ], 529 | "description": "GitHub API v3 client", 530 | "homepage": "https://github.com/KnpLabs/php-github-api", 531 | "keywords": [ 532 | "api", 533 | "gh", 534 | "gist", 535 | "github" 536 | ], 537 | "support": { 538 | "issues": "https://github.com/KnpLabs/php-github-api/issues", 539 | "source": "https://github.com/KnpLabs/php-github-api/tree/v3.11.0" 540 | }, 541 | "funding": [ 542 | { 543 | "url": "https://github.com/acrobat", 544 | "type": "github" 545 | } 546 | ], 547 | "time": "2023-03-10T11:40:14+00:00" 548 | }, 549 | { 550 | "name": "php-http/cache-plugin", 551 | "version": "1.7.5", 552 | "source": { 553 | "type": "git", 554 | "url": "https://github.com/php-http/cache-plugin.git", 555 | "reference": "63bc3f7242825c9a817db8f78e4c9703b0c471e2" 556 | }, 557 | "dist": { 558 | "type": "zip", 559 | "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/63bc3f7242825c9a817db8f78e4c9703b0c471e2", 560 | "reference": "63bc3f7242825c9a817db8f78e4c9703b0c471e2", 561 | "shasum": "" 562 | }, 563 | "require": { 564 | "php": "^7.1 || ^8.0", 565 | "php-http/client-common": "^1.9 || ^2.0", 566 | "php-http/message-factory": "^1.0", 567 | "psr/cache": "^1.0 || ^2.0 || ^3.0", 568 | "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0 || ^6.0" 569 | }, 570 | "require-dev": { 571 | "phpspec/phpspec": "^5.1 || ^6.0" 572 | }, 573 | "type": "library", 574 | "extra": { 575 | "branch-alias": { 576 | "dev-master": "1.6-dev" 577 | } 578 | }, 579 | "autoload": { 580 | "psr-4": { 581 | "Http\\Client\\Common\\Plugin\\": "src/" 582 | } 583 | }, 584 | "notification-url": "https://packagist.org/downloads/", 585 | "license": [ 586 | "MIT" 587 | ], 588 | "authors": [ 589 | { 590 | "name": "Márk Sági-Kazár", 591 | "email": "mark.sagikazar@gmail.com" 592 | } 593 | ], 594 | "description": "PSR-6 Cache plugin for HTTPlug", 595 | "homepage": "http://httplug.io", 596 | "keywords": [ 597 | "cache", 598 | "http", 599 | "httplug", 600 | "plugin" 601 | ], 602 | "support": { 603 | "issues": "https://github.com/php-http/cache-plugin/issues", 604 | "source": "https://github.com/php-http/cache-plugin/tree/1.7.5" 605 | }, 606 | "time": "2022-01-18T12:24:56+00:00" 607 | }, 608 | { 609 | "name": "php-http/client-common", 610 | "version": "2.6.1", 611 | "source": { 612 | "type": "git", 613 | "url": "https://github.com/php-http/client-common.git", 614 | "reference": "665bfc381bb910385f70391ed3eeefd0b7bbdd0d" 615 | }, 616 | "dist": { 617 | "type": "zip", 618 | "url": "https://api.github.com/repos/php-http/client-common/zipball/665bfc381bb910385f70391ed3eeefd0b7bbdd0d", 619 | "reference": "665bfc381bb910385f70391ed3eeefd0b7bbdd0d", 620 | "shasum": "" 621 | }, 622 | "require": { 623 | "php": "^7.1 || ^8.0", 624 | "php-http/httplug": "^2.0", 625 | "php-http/message": "^1.6", 626 | "php-http/message-factory": "^1.0", 627 | "psr/http-client": "^1.0", 628 | "psr/http-factory": "^1.0", 629 | "psr/http-message": "^1.0 || ^2.0", 630 | "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0", 631 | "symfony/polyfill-php80": "^1.17" 632 | }, 633 | "require-dev": { 634 | "doctrine/instantiator": "^1.1", 635 | "guzzlehttp/psr7": "^1.4", 636 | "nyholm/psr7": "^1.2", 637 | "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", 638 | "phpspec/prophecy": "^1.10.2", 639 | "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" 640 | }, 641 | "suggest": { 642 | "ext-json": "To detect JSON responses with the ContentTypePlugin", 643 | "ext-libxml": "To detect XML responses with the ContentTypePlugin", 644 | "php-http/cache-plugin": "PSR-6 Cache plugin", 645 | "php-http/logger-plugin": "PSR-3 Logger plugin", 646 | "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" 647 | }, 648 | "type": "library", 649 | "autoload": { 650 | "psr-4": { 651 | "Http\\Client\\Common\\": "src/" 652 | } 653 | }, 654 | "notification-url": "https://packagist.org/downloads/", 655 | "license": [ 656 | "MIT" 657 | ], 658 | "authors": [ 659 | { 660 | "name": "Márk Sági-Kazár", 661 | "email": "mark.sagikazar@gmail.com" 662 | } 663 | ], 664 | "description": "Common HTTP Client implementations and tools for HTTPlug", 665 | "homepage": "http://httplug.io", 666 | "keywords": [ 667 | "client", 668 | "common", 669 | "http", 670 | "httplug" 671 | ], 672 | "support": { 673 | "issues": "https://github.com/php-http/client-common/issues", 674 | "source": "https://github.com/php-http/client-common/tree/2.6.1" 675 | }, 676 | "time": "2023-04-14T13:30:08+00:00" 677 | }, 678 | { 679 | "name": "php-http/discovery", 680 | "version": "1.15.3", 681 | "source": { 682 | "type": "git", 683 | "url": "https://github.com/php-http/discovery.git", 684 | "reference": "3ccd28dd9fb34b52db946abea1b538568e34eae8" 685 | }, 686 | "dist": { 687 | "type": "zip", 688 | "url": "https://api.github.com/repos/php-http/discovery/zipball/3ccd28dd9fb34b52db946abea1b538568e34eae8", 689 | "reference": "3ccd28dd9fb34b52db946abea1b538568e34eae8", 690 | "shasum": "" 691 | }, 692 | "require": { 693 | "composer-plugin-api": "^1.0|^2.0", 694 | "php": "^7.1 || ^8.0" 695 | }, 696 | "conflict": { 697 | "nyholm/psr7": "<1.0" 698 | }, 699 | "provide": { 700 | "php-http/async-client-implementation": "*", 701 | "php-http/client-implementation": "*", 702 | "psr/http-client-implementation": "*", 703 | "psr/http-factory-implementation": "*", 704 | "psr/http-message-implementation": "*" 705 | }, 706 | "require-dev": { 707 | "composer/composer": "^1.0.2|^2.0", 708 | "graham-campbell/phpspec-skip-example-extension": "^5.0", 709 | "php-http/httplug": "^1.0 || ^2.0", 710 | "php-http/message-factory": "^1.0", 711 | "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", 712 | "symfony/phpunit-bridge": "^6.2" 713 | }, 714 | "type": "composer-plugin", 715 | "extra": { 716 | "class": "Http\\Discovery\\Composer\\Plugin", 717 | "plugin-optional": true 718 | }, 719 | "autoload": { 720 | "psr-4": { 721 | "Http\\Discovery\\": "src/" 722 | } 723 | }, 724 | "notification-url": "https://packagist.org/downloads/", 725 | "license": [ 726 | "MIT" 727 | ], 728 | "authors": [ 729 | { 730 | "name": "Márk Sági-Kazár", 731 | "email": "mark.sagikazar@gmail.com" 732 | } 733 | ], 734 | "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", 735 | "homepage": "http://php-http.org", 736 | "keywords": [ 737 | "adapter", 738 | "client", 739 | "discovery", 740 | "factory", 741 | "http", 742 | "message", 743 | "psr17", 744 | "psr7" 745 | ], 746 | "support": { 747 | "issues": "https://github.com/php-http/discovery/issues", 748 | "source": "https://github.com/php-http/discovery/tree/1.15.3" 749 | }, 750 | "time": "2023-03-31T14:40:37+00:00" 751 | }, 752 | { 753 | "name": "php-http/httplug", 754 | "version": "2.4.0", 755 | "source": { 756 | "type": "git", 757 | "url": "https://github.com/php-http/httplug.git", 758 | "reference": "625ad742c360c8ac580fcc647a1541d29e257f67" 759 | }, 760 | "dist": { 761 | "type": "zip", 762 | "url": "https://api.github.com/repos/php-http/httplug/zipball/625ad742c360c8ac580fcc647a1541d29e257f67", 763 | "reference": "625ad742c360c8ac580fcc647a1541d29e257f67", 764 | "shasum": "" 765 | }, 766 | "require": { 767 | "php": "^7.1 || ^8.0", 768 | "php-http/promise": "^1.1", 769 | "psr/http-client": "^1.0", 770 | "psr/http-message": "^1.0 || ^2.0" 771 | }, 772 | "require-dev": { 773 | "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", 774 | "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" 775 | }, 776 | "type": "library", 777 | "autoload": { 778 | "psr-4": { 779 | "Http\\Client\\": "src/" 780 | } 781 | }, 782 | "notification-url": "https://packagist.org/downloads/", 783 | "license": [ 784 | "MIT" 785 | ], 786 | "authors": [ 787 | { 788 | "name": "Eric GELOEN", 789 | "email": "geloen.eric@gmail.com" 790 | }, 791 | { 792 | "name": "Márk Sági-Kazár", 793 | "email": "mark.sagikazar@gmail.com", 794 | "homepage": "https://sagikazarmark.hu" 795 | } 796 | ], 797 | "description": "HTTPlug, the HTTP client abstraction for PHP", 798 | "homepage": "http://httplug.io", 799 | "keywords": [ 800 | "client", 801 | "http" 802 | ], 803 | "support": { 804 | "issues": "https://github.com/php-http/httplug/issues", 805 | "source": "https://github.com/php-http/httplug/tree/2.4.0" 806 | }, 807 | "time": "2023-04-14T15:10:03+00:00" 808 | }, 809 | { 810 | "name": "php-http/message", 811 | "version": "1.14.0", 812 | "source": { 813 | "type": "git", 814 | "url": "https://github.com/php-http/message.git", 815 | "reference": "2ccee04a28c3d98eb3f2b85ce1e2fcff70c0e63b" 816 | }, 817 | "dist": { 818 | "type": "zip", 819 | "url": "https://api.github.com/repos/php-http/message/zipball/2ccee04a28c3d98eb3f2b85ce1e2fcff70c0e63b", 820 | "reference": "2ccee04a28c3d98eb3f2b85ce1e2fcff70c0e63b", 821 | "shasum": "" 822 | }, 823 | "require": { 824 | "clue/stream-filter": "^1.5", 825 | "php": "^7.1 || ^8.0", 826 | "php-http/message-factory": "^1.0.2", 827 | "psr/http-message": "^1.0 || ^2.0" 828 | }, 829 | "provide": { 830 | "php-http/message-factory-implementation": "1.0" 831 | }, 832 | "require-dev": { 833 | "ergebnis/composer-normalize": "^2.6", 834 | "ext-zlib": "*", 835 | "guzzlehttp/psr7": "^1.0", 836 | "laminas/laminas-diactoros": "^2.0", 837 | "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", 838 | "slim/slim": "^3.0" 839 | }, 840 | "suggest": { 841 | "ext-zlib": "Used with compressor/decompressor streams", 842 | "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", 843 | "laminas/laminas-diactoros": "Used with Diactoros Factories", 844 | "slim/slim": "Used with Slim Framework PSR-7 implementation" 845 | }, 846 | "type": "library", 847 | "autoload": { 848 | "files": [ 849 | "src/filters.php" 850 | ], 851 | "psr-4": { 852 | "Http\\Message\\": "src/" 853 | } 854 | }, 855 | "notification-url": "https://packagist.org/downloads/", 856 | "license": [ 857 | "MIT" 858 | ], 859 | "authors": [ 860 | { 861 | "name": "Márk Sági-Kazár", 862 | "email": "mark.sagikazar@gmail.com" 863 | } 864 | ], 865 | "description": "HTTP Message related tools", 866 | "homepage": "http://php-http.org", 867 | "keywords": [ 868 | "http", 869 | "message", 870 | "psr-7" 871 | ], 872 | "support": { 873 | "issues": "https://github.com/php-http/message/issues", 874 | "source": "https://github.com/php-http/message/tree/1.14.0" 875 | }, 876 | "time": "2023-04-14T14:26:18+00:00" 877 | }, 878 | { 879 | "name": "php-http/message-factory", 880 | "version": "1.1.0", 881 | "source": { 882 | "type": "git", 883 | "url": "https://github.com/php-http/message-factory.git", 884 | "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57" 885 | }, 886 | "dist": { 887 | "type": "zip", 888 | "url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57", 889 | "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57", 890 | "shasum": "" 891 | }, 892 | "require": { 893 | "php": ">=5.4", 894 | "psr/http-message": "^1.0 || ^2.0" 895 | }, 896 | "type": "library", 897 | "extra": { 898 | "branch-alias": { 899 | "dev-master": "1.x-dev" 900 | } 901 | }, 902 | "autoload": { 903 | "psr-4": { 904 | "Http\\Message\\": "src/" 905 | } 906 | }, 907 | "notification-url": "https://packagist.org/downloads/", 908 | "license": [ 909 | "MIT" 910 | ], 911 | "authors": [ 912 | { 913 | "name": "Márk Sági-Kazár", 914 | "email": "mark.sagikazar@gmail.com" 915 | } 916 | ], 917 | "description": "Factory interfaces for PSR-7 HTTP Message", 918 | "homepage": "http://php-http.org", 919 | "keywords": [ 920 | "factory", 921 | "http", 922 | "message", 923 | "stream", 924 | "uri" 925 | ], 926 | "support": { 927 | "issues": "https://github.com/php-http/message-factory/issues", 928 | "source": "https://github.com/php-http/message-factory/tree/1.1.0" 929 | }, 930 | "time": "2023-04-14T14:16:17+00:00" 931 | }, 932 | { 933 | "name": "php-http/multipart-stream-builder", 934 | "version": "1.2.0", 935 | "source": { 936 | "type": "git", 937 | "url": "https://github.com/php-http/multipart-stream-builder.git", 938 | "reference": "11c1d31f72e01c738bbce9e27649a7cca829c30e" 939 | }, 940 | "dist": { 941 | "type": "zip", 942 | "url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/11c1d31f72e01c738bbce9e27649a7cca829c30e", 943 | "reference": "11c1d31f72e01c738bbce9e27649a7cca829c30e", 944 | "shasum": "" 945 | }, 946 | "require": { 947 | "php": "^7.1 || ^8.0", 948 | "php-http/discovery": "^1.7", 949 | "php-http/message-factory": "^1.0.2", 950 | "psr/http-factory": "^1.0", 951 | "psr/http-message": "^1.0" 952 | }, 953 | "require-dev": { 954 | "nyholm/psr7": "^1.0", 955 | "php-http/message": "^1.5", 956 | "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" 957 | }, 958 | "type": "library", 959 | "extra": { 960 | "branch-alias": { 961 | "dev-master": "1.x-dev" 962 | } 963 | }, 964 | "autoload": { 965 | "psr-4": { 966 | "Http\\Message\\MultipartStream\\": "src/" 967 | } 968 | }, 969 | "notification-url": "https://packagist.org/downloads/", 970 | "license": [ 971 | "MIT" 972 | ], 973 | "authors": [ 974 | { 975 | "name": "Tobias Nyholm", 976 | "email": "tobias.nyholm@gmail.com" 977 | } 978 | ], 979 | "description": "A builder class that help you create a multipart stream", 980 | "homepage": "http://php-http.org", 981 | "keywords": [ 982 | "factory", 983 | "http", 984 | "message", 985 | "multipart stream", 986 | "stream" 987 | ], 988 | "support": { 989 | "issues": "https://github.com/php-http/multipart-stream-builder/issues", 990 | "source": "https://github.com/php-http/multipart-stream-builder/tree/1.2.0" 991 | }, 992 | "time": "2021-05-21T08:32:01+00:00" 993 | }, 994 | { 995 | "name": "php-http/promise", 996 | "version": "1.1.0", 997 | "source": { 998 | "type": "git", 999 | "url": "https://github.com/php-http/promise.git", 1000 | "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88" 1001 | }, 1002 | "dist": { 1003 | "type": "zip", 1004 | "url": "https://api.github.com/repos/php-http/promise/zipball/4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", 1005 | "reference": "4c4c1f9b7289a2ec57cde7f1e9762a5789506f88", 1006 | "shasum": "" 1007 | }, 1008 | "require": { 1009 | "php": "^7.1 || ^8.0" 1010 | }, 1011 | "require-dev": { 1012 | "friends-of-phpspec/phpspec-code-coverage": "^4.3.2", 1013 | "phpspec/phpspec": "^5.1.2 || ^6.2" 1014 | }, 1015 | "type": "library", 1016 | "extra": { 1017 | "branch-alias": { 1018 | "dev-master": "1.1-dev" 1019 | } 1020 | }, 1021 | "autoload": { 1022 | "psr-4": { 1023 | "Http\\Promise\\": "src/" 1024 | } 1025 | }, 1026 | "notification-url": "https://packagist.org/downloads/", 1027 | "license": [ 1028 | "MIT" 1029 | ], 1030 | "authors": [ 1031 | { 1032 | "name": "Joel Wurtz", 1033 | "email": "joel.wurtz@gmail.com" 1034 | }, 1035 | { 1036 | "name": "Márk Sági-Kazár", 1037 | "email": "mark.sagikazar@gmail.com" 1038 | } 1039 | ], 1040 | "description": "Promise used for asynchronous HTTP requests", 1041 | "homepage": "http://httplug.io", 1042 | "keywords": [ 1043 | "promise" 1044 | ], 1045 | "support": { 1046 | "issues": "https://github.com/php-http/promise/issues", 1047 | "source": "https://github.com/php-http/promise/tree/1.1.0" 1048 | }, 1049 | "time": "2020-07-07T09:29:14+00:00" 1050 | }, 1051 | { 1052 | "name": "psr/cache", 1053 | "version": "3.0.0", 1054 | "source": { 1055 | "type": "git", 1056 | "url": "https://github.com/php-fig/cache.git", 1057 | "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" 1058 | }, 1059 | "dist": { 1060 | "type": "zip", 1061 | "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", 1062 | "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", 1063 | "shasum": "" 1064 | }, 1065 | "require": { 1066 | "php": ">=8.0.0" 1067 | }, 1068 | "type": "library", 1069 | "extra": { 1070 | "branch-alias": { 1071 | "dev-master": "1.0.x-dev" 1072 | } 1073 | }, 1074 | "autoload": { 1075 | "psr-4": { 1076 | "Psr\\Cache\\": "src/" 1077 | } 1078 | }, 1079 | "notification-url": "https://packagist.org/downloads/", 1080 | "license": [ 1081 | "MIT" 1082 | ], 1083 | "authors": [ 1084 | { 1085 | "name": "PHP-FIG", 1086 | "homepage": "https://www.php-fig.org/" 1087 | } 1088 | ], 1089 | "description": "Common interface for caching libraries", 1090 | "keywords": [ 1091 | "cache", 1092 | "psr", 1093 | "psr-6" 1094 | ], 1095 | "support": { 1096 | "source": "https://github.com/php-fig/cache/tree/3.0.0" 1097 | }, 1098 | "time": "2021-02-03T23:26:27+00:00" 1099 | }, 1100 | { 1101 | "name": "psr/http-client", 1102 | "version": "1.0.2", 1103 | "source": { 1104 | "type": "git", 1105 | "url": "https://github.com/php-fig/http-client.git", 1106 | "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" 1107 | }, 1108 | "dist": { 1109 | "type": "zip", 1110 | "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", 1111 | "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", 1112 | "shasum": "" 1113 | }, 1114 | "require": { 1115 | "php": "^7.0 || ^8.0", 1116 | "psr/http-message": "^1.0 || ^2.0" 1117 | }, 1118 | "type": "library", 1119 | "extra": { 1120 | "branch-alias": { 1121 | "dev-master": "1.0.x-dev" 1122 | } 1123 | }, 1124 | "autoload": { 1125 | "psr-4": { 1126 | "Psr\\Http\\Client\\": "src/" 1127 | } 1128 | }, 1129 | "notification-url": "https://packagist.org/downloads/", 1130 | "license": [ 1131 | "MIT" 1132 | ], 1133 | "authors": [ 1134 | { 1135 | "name": "PHP-FIG", 1136 | "homepage": "https://www.php-fig.org/" 1137 | } 1138 | ], 1139 | "description": "Common interface for HTTP clients", 1140 | "homepage": "https://github.com/php-fig/http-client", 1141 | "keywords": [ 1142 | "http", 1143 | "http-client", 1144 | "psr", 1145 | "psr-18" 1146 | ], 1147 | "support": { 1148 | "source": "https://github.com/php-fig/http-client/tree/1.0.2" 1149 | }, 1150 | "time": "2023-04-10T20:12:12+00:00" 1151 | }, 1152 | { 1153 | "name": "psr/http-factory", 1154 | "version": "1.0.2", 1155 | "source": { 1156 | "type": "git", 1157 | "url": "https://github.com/php-fig/http-factory.git", 1158 | "reference": "e616d01114759c4c489f93b099585439f795fe35" 1159 | }, 1160 | "dist": { 1161 | "type": "zip", 1162 | "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", 1163 | "reference": "e616d01114759c4c489f93b099585439f795fe35", 1164 | "shasum": "" 1165 | }, 1166 | "require": { 1167 | "php": ">=7.0.0", 1168 | "psr/http-message": "^1.0 || ^2.0" 1169 | }, 1170 | "type": "library", 1171 | "extra": { 1172 | "branch-alias": { 1173 | "dev-master": "1.0.x-dev" 1174 | } 1175 | }, 1176 | "autoload": { 1177 | "psr-4": { 1178 | "Psr\\Http\\Message\\": "src/" 1179 | } 1180 | }, 1181 | "notification-url": "https://packagist.org/downloads/", 1182 | "license": [ 1183 | "MIT" 1184 | ], 1185 | "authors": [ 1186 | { 1187 | "name": "PHP-FIG", 1188 | "homepage": "https://www.php-fig.org/" 1189 | } 1190 | ], 1191 | "description": "Common interfaces for PSR-7 HTTP message factories", 1192 | "keywords": [ 1193 | "factory", 1194 | "http", 1195 | "message", 1196 | "psr", 1197 | "psr-17", 1198 | "psr-7", 1199 | "request", 1200 | "response" 1201 | ], 1202 | "support": { 1203 | "source": "https://github.com/php-fig/http-factory/tree/1.0.2" 1204 | }, 1205 | "time": "2023-04-10T20:10:41+00:00" 1206 | }, 1207 | { 1208 | "name": "psr/http-message", 1209 | "version": "1.1", 1210 | "source": { 1211 | "type": "git", 1212 | "url": "https://github.com/php-fig/http-message.git", 1213 | "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" 1214 | }, 1215 | "dist": { 1216 | "type": "zip", 1217 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", 1218 | "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", 1219 | "shasum": "" 1220 | }, 1221 | "require": { 1222 | "php": "^7.2 || ^8.0" 1223 | }, 1224 | "type": "library", 1225 | "extra": { 1226 | "branch-alias": { 1227 | "dev-master": "1.1.x-dev" 1228 | } 1229 | }, 1230 | "autoload": { 1231 | "psr-4": { 1232 | "Psr\\Http\\Message\\": "src/" 1233 | } 1234 | }, 1235 | "notification-url": "https://packagist.org/downloads/", 1236 | "license": [ 1237 | "MIT" 1238 | ], 1239 | "authors": [ 1240 | { 1241 | "name": "PHP-FIG", 1242 | "homepage": "http://www.php-fig.org/" 1243 | } 1244 | ], 1245 | "description": "Common interface for HTTP messages", 1246 | "homepage": "https://github.com/php-fig/http-message", 1247 | "keywords": [ 1248 | "http", 1249 | "http-message", 1250 | "psr", 1251 | "psr-7", 1252 | "request", 1253 | "response" 1254 | ], 1255 | "support": { 1256 | "source": "https://github.com/php-fig/http-message/tree/1.1" 1257 | }, 1258 | "time": "2023-04-04T09:50:52+00:00" 1259 | }, 1260 | { 1261 | "name": "ralouphie/getallheaders", 1262 | "version": "3.0.3", 1263 | "source": { 1264 | "type": "git", 1265 | "url": "https://github.com/ralouphie/getallheaders.git", 1266 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 1267 | }, 1268 | "dist": { 1269 | "type": "zip", 1270 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 1271 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 1272 | "shasum": "" 1273 | }, 1274 | "require": { 1275 | "php": ">=5.6" 1276 | }, 1277 | "require-dev": { 1278 | "php-coveralls/php-coveralls": "^2.1", 1279 | "phpunit/phpunit": "^5 || ^6.5" 1280 | }, 1281 | "type": "library", 1282 | "autoload": { 1283 | "files": [ 1284 | "src/getallheaders.php" 1285 | ] 1286 | }, 1287 | "notification-url": "https://packagist.org/downloads/", 1288 | "license": [ 1289 | "MIT" 1290 | ], 1291 | "authors": [ 1292 | { 1293 | "name": "Ralph Khattar", 1294 | "email": "ralph.khattar@gmail.com" 1295 | } 1296 | ], 1297 | "description": "A polyfill for getallheaders.", 1298 | "support": { 1299 | "issues": "https://github.com/ralouphie/getallheaders/issues", 1300 | "source": "https://github.com/ralouphie/getallheaders/tree/develop" 1301 | }, 1302 | "time": "2019-03-08T08:55:37+00:00" 1303 | }, 1304 | { 1305 | "name": "symfony/deprecation-contracts", 1306 | "version": "v3.2.1", 1307 | "source": { 1308 | "type": "git", 1309 | "url": "https://github.com/symfony/deprecation-contracts.git", 1310 | "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" 1311 | }, 1312 | "dist": { 1313 | "type": "zip", 1314 | "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", 1315 | "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", 1316 | "shasum": "" 1317 | }, 1318 | "require": { 1319 | "php": ">=8.1" 1320 | }, 1321 | "type": "library", 1322 | "extra": { 1323 | "branch-alias": { 1324 | "dev-main": "3.3-dev" 1325 | }, 1326 | "thanks": { 1327 | "name": "symfony/contracts", 1328 | "url": "https://github.com/symfony/contracts" 1329 | } 1330 | }, 1331 | "autoload": { 1332 | "files": [ 1333 | "function.php" 1334 | ] 1335 | }, 1336 | "notification-url": "https://packagist.org/downloads/", 1337 | "license": [ 1338 | "MIT" 1339 | ], 1340 | "authors": [ 1341 | { 1342 | "name": "Nicolas Grekas", 1343 | "email": "p@tchwork.com" 1344 | }, 1345 | { 1346 | "name": "Symfony Community", 1347 | "homepage": "https://symfony.com/contributors" 1348 | } 1349 | ], 1350 | "description": "A generic function and convention to trigger deprecation notices", 1351 | "homepage": "https://symfony.com", 1352 | "support": { 1353 | "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" 1354 | }, 1355 | "funding": [ 1356 | { 1357 | "url": "https://symfony.com/sponsor", 1358 | "type": "custom" 1359 | }, 1360 | { 1361 | "url": "https://github.com/fabpot", 1362 | "type": "github" 1363 | }, 1364 | { 1365 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1366 | "type": "tidelift" 1367 | } 1368 | ], 1369 | "time": "2023-03-01T10:25:55+00:00" 1370 | }, 1371 | { 1372 | "name": "symfony/options-resolver", 1373 | "version": "v6.2.7", 1374 | "source": { 1375 | "type": "git", 1376 | "url": "https://github.com/symfony/options-resolver.git", 1377 | "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629" 1378 | }, 1379 | "dist": { 1380 | "type": "zip", 1381 | "url": "https://api.github.com/repos/symfony/options-resolver/zipball/aa0e85b53bbb2b4951960efd61d295907eacd629", 1382 | "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629", 1383 | "shasum": "" 1384 | }, 1385 | "require": { 1386 | "php": ">=8.1", 1387 | "symfony/deprecation-contracts": "^2.1|^3" 1388 | }, 1389 | "type": "library", 1390 | "autoload": { 1391 | "psr-4": { 1392 | "Symfony\\Component\\OptionsResolver\\": "" 1393 | }, 1394 | "exclude-from-classmap": [ 1395 | "/Tests/" 1396 | ] 1397 | }, 1398 | "notification-url": "https://packagist.org/downloads/", 1399 | "license": [ 1400 | "MIT" 1401 | ], 1402 | "authors": [ 1403 | { 1404 | "name": "Fabien Potencier", 1405 | "email": "fabien@symfony.com" 1406 | }, 1407 | { 1408 | "name": "Symfony Community", 1409 | "homepage": "https://symfony.com/contributors" 1410 | } 1411 | ], 1412 | "description": "Provides an improved replacement for the array_replace PHP function", 1413 | "homepage": "https://symfony.com", 1414 | "keywords": [ 1415 | "config", 1416 | "configuration", 1417 | "options" 1418 | ], 1419 | "support": { 1420 | "source": "https://github.com/symfony/options-resolver/tree/v6.2.7" 1421 | }, 1422 | "funding": [ 1423 | { 1424 | "url": "https://symfony.com/sponsor", 1425 | "type": "custom" 1426 | }, 1427 | { 1428 | "url": "https://github.com/fabpot", 1429 | "type": "github" 1430 | }, 1431 | { 1432 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1433 | "type": "tidelift" 1434 | } 1435 | ], 1436 | "time": "2023-02-14T08:44:56+00:00" 1437 | }, 1438 | { 1439 | "name": "symfony/polyfill-php80", 1440 | "version": "v1.27.0", 1441 | "source": { 1442 | "type": "git", 1443 | "url": "https://github.com/symfony/polyfill-php80.git", 1444 | "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" 1445 | }, 1446 | "dist": { 1447 | "type": "zip", 1448 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", 1449 | "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", 1450 | "shasum": "" 1451 | }, 1452 | "require": { 1453 | "php": ">=7.1" 1454 | }, 1455 | "type": "library", 1456 | "extra": { 1457 | "branch-alias": { 1458 | "dev-main": "1.27-dev" 1459 | }, 1460 | "thanks": { 1461 | "name": "symfony/polyfill", 1462 | "url": "https://github.com/symfony/polyfill" 1463 | } 1464 | }, 1465 | "autoload": { 1466 | "files": [ 1467 | "bootstrap.php" 1468 | ], 1469 | "psr-4": { 1470 | "Symfony\\Polyfill\\Php80\\": "" 1471 | }, 1472 | "classmap": [ 1473 | "Resources/stubs" 1474 | ] 1475 | }, 1476 | "notification-url": "https://packagist.org/downloads/", 1477 | "license": [ 1478 | "MIT" 1479 | ], 1480 | "authors": [ 1481 | { 1482 | "name": "Ion Bazan", 1483 | "email": "ion.bazan@gmail.com" 1484 | }, 1485 | { 1486 | "name": "Nicolas Grekas", 1487 | "email": "p@tchwork.com" 1488 | }, 1489 | { 1490 | "name": "Symfony Community", 1491 | "homepage": "https://symfony.com/contributors" 1492 | } 1493 | ], 1494 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 1495 | "homepage": "https://symfony.com", 1496 | "keywords": [ 1497 | "compatibility", 1498 | "polyfill", 1499 | "portable", 1500 | "shim" 1501 | ], 1502 | "support": { 1503 | "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" 1504 | }, 1505 | "funding": [ 1506 | { 1507 | "url": "https://symfony.com/sponsor", 1508 | "type": "custom" 1509 | }, 1510 | { 1511 | "url": "https://github.com/fabpot", 1512 | "type": "github" 1513 | }, 1514 | { 1515 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1516 | "type": "tidelift" 1517 | } 1518 | ], 1519 | "time": "2022-11-03T14:55:06+00:00" 1520 | } 1521 | ], 1522 | "packages-dev": [ 1523 | { 1524 | "name": "behat/behat", 1525 | "version": "v3.12.0", 1526 | "source": { 1527 | "type": "git", 1528 | "url": "https://github.com/Behat/Behat.git", 1529 | "reference": "2f059c9172764ba1f1759b3679aca499b665330a" 1530 | }, 1531 | "dist": { 1532 | "type": "zip", 1533 | "url": "https://api.github.com/repos/Behat/Behat/zipball/2f059c9172764ba1f1759b3679aca499b665330a", 1534 | "reference": "2f059c9172764ba1f1759b3679aca499b665330a", 1535 | "shasum": "" 1536 | }, 1537 | "require": { 1538 | "behat/gherkin": "^4.9.0", 1539 | "behat/transliterator": "^1.2", 1540 | "ext-mbstring": "*", 1541 | "php": "^7.2 || ^8.0", 1542 | "psr/container": "^1.0 || ^2.0", 1543 | "symfony/config": "^4.4 || ^5.0 || ^6.0", 1544 | "symfony/console": "^4.4 || ^5.0 || ^6.0", 1545 | "symfony/dependency-injection": "^4.4 || ^5.0 || ^6.0", 1546 | "symfony/event-dispatcher": "^4.4 || ^5.0 || ^6.0", 1547 | "symfony/translation": "^4.4 || ^5.0 || ^6.0", 1548 | "symfony/yaml": "^4.4 || ^5.0 || ^6.0" 1549 | }, 1550 | "require-dev": { 1551 | "herrera-io/box": "~1.6.1", 1552 | "phpspec/prophecy": "^1.15", 1553 | "phpunit/phpunit": "^8.5 || ^9.0", 1554 | "symfony/process": "^4.4 || ^5.0 || ^6.0", 1555 | "vimeo/psalm": "^4.8" 1556 | }, 1557 | "suggest": { 1558 | "ext-dom": "Needed to output test results in JUnit format." 1559 | }, 1560 | "bin": [ 1561 | "bin/behat" 1562 | ], 1563 | "type": "library", 1564 | "extra": { 1565 | "branch-alias": { 1566 | "dev-master": "3.x-dev" 1567 | } 1568 | }, 1569 | "autoload": { 1570 | "psr-4": { 1571 | "Behat\\Hook\\": "src/Behat/Hook/", 1572 | "Behat\\Step\\": "src/Behat/Step/", 1573 | "Behat\\Behat\\": "src/Behat/Behat/", 1574 | "Behat\\Testwork\\": "src/Behat/Testwork/" 1575 | } 1576 | }, 1577 | "notification-url": "https://packagist.org/downloads/", 1578 | "license": [ 1579 | "MIT" 1580 | ], 1581 | "authors": [ 1582 | { 1583 | "name": "Konstantin Kudryashov", 1584 | "email": "ever.zet@gmail.com", 1585 | "homepage": "http://everzet.com" 1586 | } 1587 | ], 1588 | "description": "Scenario-oriented BDD framework for PHP", 1589 | "homepage": "http://behat.org/", 1590 | "keywords": [ 1591 | "Agile", 1592 | "BDD", 1593 | "ScenarioBDD", 1594 | "Scrum", 1595 | "StoryBDD", 1596 | "User story", 1597 | "business", 1598 | "development", 1599 | "documentation", 1600 | "examples", 1601 | "symfony", 1602 | "testing" 1603 | ], 1604 | "support": { 1605 | "issues": "https://github.com/Behat/Behat/issues", 1606 | "source": "https://github.com/Behat/Behat/tree/v3.12.0" 1607 | }, 1608 | "time": "2022-11-29T15:30:11+00:00" 1609 | }, 1610 | { 1611 | "name": "behat/gherkin", 1612 | "version": "v4.9.0", 1613 | "source": { 1614 | "type": "git", 1615 | "url": "https://github.com/Behat/Gherkin.git", 1616 | "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4" 1617 | }, 1618 | "dist": { 1619 | "type": "zip", 1620 | "url": "https://api.github.com/repos/Behat/Gherkin/zipball/0bc8d1e30e96183e4f36db9dc79caead300beff4", 1621 | "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4", 1622 | "shasum": "" 1623 | }, 1624 | "require": { 1625 | "php": "~7.2|~8.0" 1626 | }, 1627 | "require-dev": { 1628 | "cucumber/cucumber": "dev-gherkin-22.0.0", 1629 | "phpunit/phpunit": "~8|~9", 1630 | "symfony/yaml": "~3|~4|~5" 1631 | }, 1632 | "suggest": { 1633 | "symfony/yaml": "If you want to parse features, represented in YAML files" 1634 | }, 1635 | "type": "library", 1636 | "extra": { 1637 | "branch-alias": { 1638 | "dev-master": "4.x-dev" 1639 | } 1640 | }, 1641 | "autoload": { 1642 | "psr-0": { 1643 | "Behat\\Gherkin": "src/" 1644 | } 1645 | }, 1646 | "notification-url": "https://packagist.org/downloads/", 1647 | "license": [ 1648 | "MIT" 1649 | ], 1650 | "authors": [ 1651 | { 1652 | "name": "Konstantin Kudryashov", 1653 | "email": "ever.zet@gmail.com", 1654 | "homepage": "http://everzet.com" 1655 | } 1656 | ], 1657 | "description": "Gherkin DSL parser for PHP", 1658 | "homepage": "http://behat.org/", 1659 | "keywords": [ 1660 | "BDD", 1661 | "Behat", 1662 | "Cucumber", 1663 | "DSL", 1664 | "gherkin", 1665 | "parser" 1666 | ], 1667 | "support": { 1668 | "issues": "https://github.com/Behat/Gherkin/issues", 1669 | "source": "https://github.com/Behat/Gherkin/tree/v4.9.0" 1670 | }, 1671 | "time": "2021-10-12T13:05:09+00:00" 1672 | }, 1673 | { 1674 | "name": "behat/transliterator", 1675 | "version": "v1.5.0", 1676 | "source": { 1677 | "type": "git", 1678 | "url": "https://github.com/Behat/Transliterator.git", 1679 | "reference": "baac5873bac3749887d28ab68e2f74db3a4408af" 1680 | }, 1681 | "dist": { 1682 | "type": "zip", 1683 | "url": "https://api.github.com/repos/Behat/Transliterator/zipball/baac5873bac3749887d28ab68e2f74db3a4408af", 1684 | "reference": "baac5873bac3749887d28ab68e2f74db3a4408af", 1685 | "shasum": "" 1686 | }, 1687 | "require": { 1688 | "php": ">=7.2" 1689 | }, 1690 | "require-dev": { 1691 | "chuyskywalker/rolling-curl": "^3.1", 1692 | "php-yaoi/php-yaoi": "^1.0", 1693 | "phpunit/phpunit": "^8.5.25 || ^9.5.19" 1694 | }, 1695 | "type": "library", 1696 | "extra": { 1697 | "branch-alias": { 1698 | "dev-master": "1.x-dev" 1699 | } 1700 | }, 1701 | "autoload": { 1702 | "psr-4": { 1703 | "Behat\\Transliterator\\": "src/Behat/Transliterator" 1704 | } 1705 | }, 1706 | "notification-url": "https://packagist.org/downloads/", 1707 | "license": [ 1708 | "Artistic-1.0" 1709 | ], 1710 | "description": "String transliterator", 1711 | "keywords": [ 1712 | "i18n", 1713 | "slug", 1714 | "transliterator" 1715 | ], 1716 | "support": { 1717 | "issues": "https://github.com/Behat/Transliterator/issues", 1718 | "source": "https://github.com/Behat/Transliterator/tree/v1.5.0" 1719 | }, 1720 | "time": "2022-03-30T09:27:43+00:00" 1721 | }, 1722 | { 1723 | "name": "psr/container", 1724 | "version": "2.0.2", 1725 | "source": { 1726 | "type": "git", 1727 | "url": "https://github.com/php-fig/container.git", 1728 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" 1729 | }, 1730 | "dist": { 1731 | "type": "zip", 1732 | "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", 1733 | "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", 1734 | "shasum": "" 1735 | }, 1736 | "require": { 1737 | "php": ">=7.4.0" 1738 | }, 1739 | "type": "library", 1740 | "extra": { 1741 | "branch-alias": { 1742 | "dev-master": "2.0.x-dev" 1743 | } 1744 | }, 1745 | "autoload": { 1746 | "psr-4": { 1747 | "Psr\\Container\\": "src/" 1748 | } 1749 | }, 1750 | "notification-url": "https://packagist.org/downloads/", 1751 | "license": [ 1752 | "MIT" 1753 | ], 1754 | "authors": [ 1755 | { 1756 | "name": "PHP-FIG", 1757 | "homepage": "https://www.php-fig.org/" 1758 | } 1759 | ], 1760 | "description": "Common Container Interface (PHP FIG PSR-11)", 1761 | "homepage": "https://github.com/php-fig/container", 1762 | "keywords": [ 1763 | "PSR-11", 1764 | "container", 1765 | "container-interface", 1766 | "container-interop", 1767 | "psr" 1768 | ], 1769 | "support": { 1770 | "issues": "https://github.com/php-fig/container/issues", 1771 | "source": "https://github.com/php-fig/container/tree/2.0.2" 1772 | }, 1773 | "time": "2021-11-05T16:47:00+00:00" 1774 | }, 1775 | { 1776 | "name": "psr/event-dispatcher", 1777 | "version": "1.0.0", 1778 | "source": { 1779 | "type": "git", 1780 | "url": "https://github.com/php-fig/event-dispatcher.git", 1781 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" 1782 | }, 1783 | "dist": { 1784 | "type": "zip", 1785 | "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", 1786 | "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", 1787 | "shasum": "" 1788 | }, 1789 | "require": { 1790 | "php": ">=7.2.0" 1791 | }, 1792 | "type": "library", 1793 | "extra": { 1794 | "branch-alias": { 1795 | "dev-master": "1.0.x-dev" 1796 | } 1797 | }, 1798 | "autoload": { 1799 | "psr-4": { 1800 | "Psr\\EventDispatcher\\": "src/" 1801 | } 1802 | }, 1803 | "notification-url": "https://packagist.org/downloads/", 1804 | "license": [ 1805 | "MIT" 1806 | ], 1807 | "authors": [ 1808 | { 1809 | "name": "PHP-FIG", 1810 | "homepage": "http://www.php-fig.org/" 1811 | } 1812 | ], 1813 | "description": "Standard interfaces for event handling.", 1814 | "keywords": [ 1815 | "events", 1816 | "psr", 1817 | "psr-14" 1818 | ], 1819 | "support": { 1820 | "issues": "https://github.com/php-fig/event-dispatcher/issues", 1821 | "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" 1822 | }, 1823 | "time": "2019-01-08T18:20:26+00:00" 1824 | }, 1825 | { 1826 | "name": "symfony/config", 1827 | "version": "v6.2.7", 1828 | "source": { 1829 | "type": "git", 1830 | "url": "https://github.com/symfony/config.git", 1831 | "reference": "249271da6f545d6579e0663374f8249a80be2893" 1832 | }, 1833 | "dist": { 1834 | "type": "zip", 1835 | "url": "https://api.github.com/repos/symfony/config/zipball/249271da6f545d6579e0663374f8249a80be2893", 1836 | "reference": "249271da6f545d6579e0663374f8249a80be2893", 1837 | "shasum": "" 1838 | }, 1839 | "require": { 1840 | "php": ">=8.1", 1841 | "symfony/deprecation-contracts": "^2.1|^3", 1842 | "symfony/filesystem": "^5.4|^6.0", 1843 | "symfony/polyfill-ctype": "~1.8" 1844 | }, 1845 | "conflict": { 1846 | "symfony/finder": "<5.4" 1847 | }, 1848 | "require-dev": { 1849 | "symfony/event-dispatcher": "^5.4|^6.0", 1850 | "symfony/finder": "^5.4|^6.0", 1851 | "symfony/messenger": "^5.4|^6.0", 1852 | "symfony/service-contracts": "^1.1|^2|^3", 1853 | "symfony/yaml": "^5.4|^6.0" 1854 | }, 1855 | "suggest": { 1856 | "symfony/yaml": "To use the yaml reference dumper" 1857 | }, 1858 | "type": "library", 1859 | "autoload": { 1860 | "psr-4": { 1861 | "Symfony\\Component\\Config\\": "" 1862 | }, 1863 | "exclude-from-classmap": [ 1864 | "/Tests/" 1865 | ] 1866 | }, 1867 | "notification-url": "https://packagist.org/downloads/", 1868 | "license": [ 1869 | "MIT" 1870 | ], 1871 | "authors": [ 1872 | { 1873 | "name": "Fabien Potencier", 1874 | "email": "fabien@symfony.com" 1875 | }, 1876 | { 1877 | "name": "Symfony Community", 1878 | "homepage": "https://symfony.com/contributors" 1879 | } 1880 | ], 1881 | "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", 1882 | "homepage": "https://symfony.com", 1883 | "support": { 1884 | "source": "https://github.com/symfony/config/tree/v6.2.7" 1885 | }, 1886 | "funding": [ 1887 | { 1888 | "url": "https://symfony.com/sponsor", 1889 | "type": "custom" 1890 | }, 1891 | { 1892 | "url": "https://github.com/fabpot", 1893 | "type": "github" 1894 | }, 1895 | { 1896 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1897 | "type": "tidelift" 1898 | } 1899 | ], 1900 | "time": "2023-02-14T08:44:56+00:00" 1901 | }, 1902 | { 1903 | "name": "symfony/console", 1904 | "version": "v6.2.8", 1905 | "source": { 1906 | "type": "git", 1907 | "url": "https://github.com/symfony/console.git", 1908 | "reference": "3582d68a64a86ec25240aaa521ec8bc2342b369b" 1909 | }, 1910 | "dist": { 1911 | "type": "zip", 1912 | "url": "https://api.github.com/repos/symfony/console/zipball/3582d68a64a86ec25240aaa521ec8bc2342b369b", 1913 | "reference": "3582d68a64a86ec25240aaa521ec8bc2342b369b", 1914 | "shasum": "" 1915 | }, 1916 | "require": { 1917 | "php": ">=8.1", 1918 | "symfony/deprecation-contracts": "^2.1|^3", 1919 | "symfony/polyfill-mbstring": "~1.0", 1920 | "symfony/service-contracts": "^1.1|^2|^3", 1921 | "symfony/string": "^5.4|^6.0" 1922 | }, 1923 | "conflict": { 1924 | "symfony/dependency-injection": "<5.4", 1925 | "symfony/dotenv": "<5.4", 1926 | "symfony/event-dispatcher": "<5.4", 1927 | "symfony/lock": "<5.4", 1928 | "symfony/process": "<5.4" 1929 | }, 1930 | "provide": { 1931 | "psr/log-implementation": "1.0|2.0|3.0" 1932 | }, 1933 | "require-dev": { 1934 | "psr/log": "^1|^2|^3", 1935 | "symfony/config": "^5.4|^6.0", 1936 | "symfony/dependency-injection": "^5.4|^6.0", 1937 | "symfony/event-dispatcher": "^5.4|^6.0", 1938 | "symfony/lock": "^5.4|^6.0", 1939 | "symfony/process": "^5.4|^6.0", 1940 | "symfony/var-dumper": "^5.4|^6.0" 1941 | }, 1942 | "suggest": { 1943 | "psr/log": "For using the console logger", 1944 | "symfony/event-dispatcher": "", 1945 | "symfony/lock": "", 1946 | "symfony/process": "" 1947 | }, 1948 | "type": "library", 1949 | "autoload": { 1950 | "psr-4": { 1951 | "Symfony\\Component\\Console\\": "" 1952 | }, 1953 | "exclude-from-classmap": [ 1954 | "/Tests/" 1955 | ] 1956 | }, 1957 | "notification-url": "https://packagist.org/downloads/", 1958 | "license": [ 1959 | "MIT" 1960 | ], 1961 | "authors": [ 1962 | { 1963 | "name": "Fabien Potencier", 1964 | "email": "fabien@symfony.com" 1965 | }, 1966 | { 1967 | "name": "Symfony Community", 1968 | "homepage": "https://symfony.com/contributors" 1969 | } 1970 | ], 1971 | "description": "Eases the creation of beautiful and testable command line interfaces", 1972 | "homepage": "https://symfony.com", 1973 | "keywords": [ 1974 | "cli", 1975 | "command-line", 1976 | "console", 1977 | "terminal" 1978 | ], 1979 | "support": { 1980 | "source": "https://github.com/symfony/console/tree/v6.2.8" 1981 | }, 1982 | "funding": [ 1983 | { 1984 | "url": "https://symfony.com/sponsor", 1985 | "type": "custom" 1986 | }, 1987 | { 1988 | "url": "https://github.com/fabpot", 1989 | "type": "github" 1990 | }, 1991 | { 1992 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1993 | "type": "tidelift" 1994 | } 1995 | ], 1996 | "time": "2023-03-29T21:42:15+00:00" 1997 | }, 1998 | { 1999 | "name": "symfony/dependency-injection", 2000 | "version": "v6.2.8", 2001 | "source": { 2002 | "type": "git", 2003 | "url": "https://github.com/symfony/dependency-injection.git", 2004 | "reference": "b6195feacceb88fc58a02b69522b569e4c6188ac" 2005 | }, 2006 | "dist": { 2007 | "type": "zip", 2008 | "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b6195feacceb88fc58a02b69522b569e4c6188ac", 2009 | "reference": "b6195feacceb88fc58a02b69522b569e4c6188ac", 2010 | "shasum": "" 2011 | }, 2012 | "require": { 2013 | "php": ">=8.1", 2014 | "psr/container": "^1.1|^2.0", 2015 | "symfony/deprecation-contracts": "^2.1|^3", 2016 | "symfony/service-contracts": "^1.1.6|^2.0|^3.0", 2017 | "symfony/var-exporter": "^6.2.7" 2018 | }, 2019 | "conflict": { 2020 | "ext-psr": "<1.1|>=2", 2021 | "symfony/config": "<6.1", 2022 | "symfony/finder": "<5.4", 2023 | "symfony/proxy-manager-bridge": "<6.2", 2024 | "symfony/yaml": "<5.4" 2025 | }, 2026 | "provide": { 2027 | "psr/container-implementation": "1.1|2.0", 2028 | "symfony/service-implementation": "1.1|2.0|3.0" 2029 | }, 2030 | "require-dev": { 2031 | "symfony/config": "^6.1", 2032 | "symfony/expression-language": "^5.4|^6.0", 2033 | "symfony/yaml": "^5.4|^6.0" 2034 | }, 2035 | "suggest": { 2036 | "symfony/config": "", 2037 | "symfony/expression-language": "For using expressions in service container configuration", 2038 | "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", 2039 | "symfony/yaml": "" 2040 | }, 2041 | "type": "library", 2042 | "autoload": { 2043 | "psr-4": { 2044 | "Symfony\\Component\\DependencyInjection\\": "" 2045 | }, 2046 | "exclude-from-classmap": [ 2047 | "/Tests/" 2048 | ] 2049 | }, 2050 | "notification-url": "https://packagist.org/downloads/", 2051 | "license": [ 2052 | "MIT" 2053 | ], 2054 | "authors": [ 2055 | { 2056 | "name": "Fabien Potencier", 2057 | "email": "fabien@symfony.com" 2058 | }, 2059 | { 2060 | "name": "Symfony Community", 2061 | "homepage": "https://symfony.com/contributors" 2062 | } 2063 | ], 2064 | "description": "Allows you to standardize and centralize the way objects are constructed in your application", 2065 | "homepage": "https://symfony.com", 2066 | "support": { 2067 | "source": "https://github.com/symfony/dependency-injection/tree/v6.2.8" 2068 | }, 2069 | "funding": [ 2070 | { 2071 | "url": "https://symfony.com/sponsor", 2072 | "type": "custom" 2073 | }, 2074 | { 2075 | "url": "https://github.com/fabpot", 2076 | "type": "github" 2077 | }, 2078 | { 2079 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2080 | "type": "tidelift" 2081 | } 2082 | ], 2083 | "time": "2023-03-30T13:35:57+00:00" 2084 | }, 2085 | { 2086 | "name": "symfony/event-dispatcher", 2087 | "version": "v6.2.8", 2088 | "source": { 2089 | "type": "git", 2090 | "url": "https://github.com/symfony/event-dispatcher.git", 2091 | "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339" 2092 | }, 2093 | "dist": { 2094 | "type": "zip", 2095 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/04046f35fd7d72f9646e721fc2ecb8f9c67d3339", 2096 | "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339", 2097 | "shasum": "" 2098 | }, 2099 | "require": { 2100 | "php": ">=8.1", 2101 | "symfony/event-dispatcher-contracts": "^2|^3" 2102 | }, 2103 | "conflict": { 2104 | "symfony/dependency-injection": "<5.4" 2105 | }, 2106 | "provide": { 2107 | "psr/event-dispatcher-implementation": "1.0", 2108 | "symfony/event-dispatcher-implementation": "2.0|3.0" 2109 | }, 2110 | "require-dev": { 2111 | "psr/log": "^1|^2|^3", 2112 | "symfony/config": "^5.4|^6.0", 2113 | "symfony/dependency-injection": "^5.4|^6.0", 2114 | "symfony/error-handler": "^5.4|^6.0", 2115 | "symfony/expression-language": "^5.4|^6.0", 2116 | "symfony/http-foundation": "^5.4|^6.0", 2117 | "symfony/service-contracts": "^1.1|^2|^3", 2118 | "symfony/stopwatch": "^5.4|^6.0" 2119 | }, 2120 | "suggest": { 2121 | "symfony/dependency-injection": "", 2122 | "symfony/http-kernel": "" 2123 | }, 2124 | "type": "library", 2125 | "autoload": { 2126 | "psr-4": { 2127 | "Symfony\\Component\\EventDispatcher\\": "" 2128 | }, 2129 | "exclude-from-classmap": [ 2130 | "/Tests/" 2131 | ] 2132 | }, 2133 | "notification-url": "https://packagist.org/downloads/", 2134 | "license": [ 2135 | "MIT" 2136 | ], 2137 | "authors": [ 2138 | { 2139 | "name": "Fabien Potencier", 2140 | "email": "fabien@symfony.com" 2141 | }, 2142 | { 2143 | "name": "Symfony Community", 2144 | "homepage": "https://symfony.com/contributors" 2145 | } 2146 | ], 2147 | "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", 2148 | "homepage": "https://symfony.com", 2149 | "support": { 2150 | "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.8" 2151 | }, 2152 | "funding": [ 2153 | { 2154 | "url": "https://symfony.com/sponsor", 2155 | "type": "custom" 2156 | }, 2157 | { 2158 | "url": "https://github.com/fabpot", 2159 | "type": "github" 2160 | }, 2161 | { 2162 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2163 | "type": "tidelift" 2164 | } 2165 | ], 2166 | "time": "2023-03-20T16:06:02+00:00" 2167 | }, 2168 | { 2169 | "name": "symfony/event-dispatcher-contracts", 2170 | "version": "v3.2.1", 2171 | "source": { 2172 | "type": "git", 2173 | "url": "https://github.com/symfony/event-dispatcher-contracts.git", 2174 | "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" 2175 | }, 2176 | "dist": { 2177 | "type": "zip", 2178 | "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", 2179 | "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", 2180 | "shasum": "" 2181 | }, 2182 | "require": { 2183 | "php": ">=8.1", 2184 | "psr/event-dispatcher": "^1" 2185 | }, 2186 | "suggest": { 2187 | "symfony/event-dispatcher-implementation": "" 2188 | }, 2189 | "type": "library", 2190 | "extra": { 2191 | "branch-alias": { 2192 | "dev-main": "3.3-dev" 2193 | }, 2194 | "thanks": { 2195 | "name": "symfony/contracts", 2196 | "url": "https://github.com/symfony/contracts" 2197 | } 2198 | }, 2199 | "autoload": { 2200 | "psr-4": { 2201 | "Symfony\\Contracts\\EventDispatcher\\": "" 2202 | } 2203 | }, 2204 | "notification-url": "https://packagist.org/downloads/", 2205 | "license": [ 2206 | "MIT" 2207 | ], 2208 | "authors": [ 2209 | { 2210 | "name": "Nicolas Grekas", 2211 | "email": "p@tchwork.com" 2212 | }, 2213 | { 2214 | "name": "Symfony Community", 2215 | "homepage": "https://symfony.com/contributors" 2216 | } 2217 | ], 2218 | "description": "Generic abstractions related to dispatching event", 2219 | "homepage": "https://symfony.com", 2220 | "keywords": [ 2221 | "abstractions", 2222 | "contracts", 2223 | "decoupling", 2224 | "interfaces", 2225 | "interoperability", 2226 | "standards" 2227 | ], 2228 | "support": { 2229 | "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" 2230 | }, 2231 | "funding": [ 2232 | { 2233 | "url": "https://symfony.com/sponsor", 2234 | "type": "custom" 2235 | }, 2236 | { 2237 | "url": "https://github.com/fabpot", 2238 | "type": "github" 2239 | }, 2240 | { 2241 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2242 | "type": "tidelift" 2243 | } 2244 | ], 2245 | "time": "2023-03-01T10:32:47+00:00" 2246 | }, 2247 | { 2248 | "name": "symfony/filesystem", 2249 | "version": "v6.2.7", 2250 | "source": { 2251 | "type": "git", 2252 | "url": "https://github.com/symfony/filesystem.git", 2253 | "reference": "82b6c62b959f642d000456f08c6d219d749215b3" 2254 | }, 2255 | "dist": { 2256 | "type": "zip", 2257 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/82b6c62b959f642d000456f08c6d219d749215b3", 2258 | "reference": "82b6c62b959f642d000456f08c6d219d749215b3", 2259 | "shasum": "" 2260 | }, 2261 | "require": { 2262 | "php": ">=8.1", 2263 | "symfony/polyfill-ctype": "~1.8", 2264 | "symfony/polyfill-mbstring": "~1.8" 2265 | }, 2266 | "type": "library", 2267 | "autoload": { 2268 | "psr-4": { 2269 | "Symfony\\Component\\Filesystem\\": "" 2270 | }, 2271 | "exclude-from-classmap": [ 2272 | "/Tests/" 2273 | ] 2274 | }, 2275 | "notification-url": "https://packagist.org/downloads/", 2276 | "license": [ 2277 | "MIT" 2278 | ], 2279 | "authors": [ 2280 | { 2281 | "name": "Fabien Potencier", 2282 | "email": "fabien@symfony.com" 2283 | }, 2284 | { 2285 | "name": "Symfony Community", 2286 | "homepage": "https://symfony.com/contributors" 2287 | } 2288 | ], 2289 | "description": "Provides basic utilities for the filesystem", 2290 | "homepage": "https://symfony.com", 2291 | "support": { 2292 | "source": "https://github.com/symfony/filesystem/tree/v6.2.7" 2293 | }, 2294 | "funding": [ 2295 | { 2296 | "url": "https://symfony.com/sponsor", 2297 | "type": "custom" 2298 | }, 2299 | { 2300 | "url": "https://github.com/fabpot", 2301 | "type": "github" 2302 | }, 2303 | { 2304 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2305 | "type": "tidelift" 2306 | } 2307 | ], 2308 | "time": "2023-02-14T08:44:56+00:00" 2309 | }, 2310 | { 2311 | "name": "symfony/polyfill-ctype", 2312 | "version": "v1.27.0", 2313 | "source": { 2314 | "type": "git", 2315 | "url": "https://github.com/symfony/polyfill-ctype.git", 2316 | "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" 2317 | }, 2318 | "dist": { 2319 | "type": "zip", 2320 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", 2321 | "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", 2322 | "shasum": "" 2323 | }, 2324 | "require": { 2325 | "php": ">=7.1" 2326 | }, 2327 | "provide": { 2328 | "ext-ctype": "*" 2329 | }, 2330 | "suggest": { 2331 | "ext-ctype": "For best performance" 2332 | }, 2333 | "type": "library", 2334 | "extra": { 2335 | "branch-alias": { 2336 | "dev-main": "1.27-dev" 2337 | }, 2338 | "thanks": { 2339 | "name": "symfony/polyfill", 2340 | "url": "https://github.com/symfony/polyfill" 2341 | } 2342 | }, 2343 | "autoload": { 2344 | "files": [ 2345 | "bootstrap.php" 2346 | ], 2347 | "psr-4": { 2348 | "Symfony\\Polyfill\\Ctype\\": "" 2349 | } 2350 | }, 2351 | "notification-url": "https://packagist.org/downloads/", 2352 | "license": [ 2353 | "MIT" 2354 | ], 2355 | "authors": [ 2356 | { 2357 | "name": "Gert de Pagter", 2358 | "email": "BackEndTea@gmail.com" 2359 | }, 2360 | { 2361 | "name": "Symfony Community", 2362 | "homepage": "https://symfony.com/contributors" 2363 | } 2364 | ], 2365 | "description": "Symfony polyfill for ctype functions", 2366 | "homepage": "https://symfony.com", 2367 | "keywords": [ 2368 | "compatibility", 2369 | "ctype", 2370 | "polyfill", 2371 | "portable" 2372 | ], 2373 | "support": { 2374 | "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" 2375 | }, 2376 | "funding": [ 2377 | { 2378 | "url": "https://symfony.com/sponsor", 2379 | "type": "custom" 2380 | }, 2381 | { 2382 | "url": "https://github.com/fabpot", 2383 | "type": "github" 2384 | }, 2385 | { 2386 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2387 | "type": "tidelift" 2388 | } 2389 | ], 2390 | "time": "2022-11-03T14:55:06+00:00" 2391 | }, 2392 | { 2393 | "name": "symfony/polyfill-intl-grapheme", 2394 | "version": "v1.27.0", 2395 | "source": { 2396 | "type": "git", 2397 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git", 2398 | "reference": "511a08c03c1960e08a883f4cffcacd219b758354" 2399 | }, 2400 | "dist": { 2401 | "type": "zip", 2402 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", 2403 | "reference": "511a08c03c1960e08a883f4cffcacd219b758354", 2404 | "shasum": "" 2405 | }, 2406 | "require": { 2407 | "php": ">=7.1" 2408 | }, 2409 | "suggest": { 2410 | "ext-intl": "For best performance" 2411 | }, 2412 | "type": "library", 2413 | "extra": { 2414 | "branch-alias": { 2415 | "dev-main": "1.27-dev" 2416 | }, 2417 | "thanks": { 2418 | "name": "symfony/polyfill", 2419 | "url": "https://github.com/symfony/polyfill" 2420 | } 2421 | }, 2422 | "autoload": { 2423 | "files": [ 2424 | "bootstrap.php" 2425 | ], 2426 | "psr-4": { 2427 | "Symfony\\Polyfill\\Intl\\Grapheme\\": "" 2428 | } 2429 | }, 2430 | "notification-url": "https://packagist.org/downloads/", 2431 | "license": [ 2432 | "MIT" 2433 | ], 2434 | "authors": [ 2435 | { 2436 | "name": "Nicolas Grekas", 2437 | "email": "p@tchwork.com" 2438 | }, 2439 | { 2440 | "name": "Symfony Community", 2441 | "homepage": "https://symfony.com/contributors" 2442 | } 2443 | ], 2444 | "description": "Symfony polyfill for intl's grapheme_* functions", 2445 | "homepage": "https://symfony.com", 2446 | "keywords": [ 2447 | "compatibility", 2448 | "grapheme", 2449 | "intl", 2450 | "polyfill", 2451 | "portable", 2452 | "shim" 2453 | ], 2454 | "support": { 2455 | "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" 2456 | }, 2457 | "funding": [ 2458 | { 2459 | "url": "https://symfony.com/sponsor", 2460 | "type": "custom" 2461 | }, 2462 | { 2463 | "url": "https://github.com/fabpot", 2464 | "type": "github" 2465 | }, 2466 | { 2467 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2468 | "type": "tidelift" 2469 | } 2470 | ], 2471 | "time": "2022-11-03T14:55:06+00:00" 2472 | }, 2473 | { 2474 | "name": "symfony/polyfill-intl-normalizer", 2475 | "version": "v1.27.0", 2476 | "source": { 2477 | "type": "git", 2478 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 2479 | "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" 2480 | }, 2481 | "dist": { 2482 | "type": "zip", 2483 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", 2484 | "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", 2485 | "shasum": "" 2486 | }, 2487 | "require": { 2488 | "php": ">=7.1" 2489 | }, 2490 | "suggest": { 2491 | "ext-intl": "For best performance" 2492 | }, 2493 | "type": "library", 2494 | "extra": { 2495 | "branch-alias": { 2496 | "dev-main": "1.27-dev" 2497 | }, 2498 | "thanks": { 2499 | "name": "symfony/polyfill", 2500 | "url": "https://github.com/symfony/polyfill" 2501 | } 2502 | }, 2503 | "autoload": { 2504 | "files": [ 2505 | "bootstrap.php" 2506 | ], 2507 | "psr-4": { 2508 | "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 2509 | }, 2510 | "classmap": [ 2511 | "Resources/stubs" 2512 | ] 2513 | }, 2514 | "notification-url": "https://packagist.org/downloads/", 2515 | "license": [ 2516 | "MIT" 2517 | ], 2518 | "authors": [ 2519 | { 2520 | "name": "Nicolas Grekas", 2521 | "email": "p@tchwork.com" 2522 | }, 2523 | { 2524 | "name": "Symfony Community", 2525 | "homepage": "https://symfony.com/contributors" 2526 | } 2527 | ], 2528 | "description": "Symfony polyfill for intl's Normalizer class and related functions", 2529 | "homepage": "https://symfony.com", 2530 | "keywords": [ 2531 | "compatibility", 2532 | "intl", 2533 | "normalizer", 2534 | "polyfill", 2535 | "portable", 2536 | "shim" 2537 | ], 2538 | "support": { 2539 | "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" 2540 | }, 2541 | "funding": [ 2542 | { 2543 | "url": "https://symfony.com/sponsor", 2544 | "type": "custom" 2545 | }, 2546 | { 2547 | "url": "https://github.com/fabpot", 2548 | "type": "github" 2549 | }, 2550 | { 2551 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2552 | "type": "tidelift" 2553 | } 2554 | ], 2555 | "time": "2022-11-03T14:55:06+00:00" 2556 | }, 2557 | { 2558 | "name": "symfony/polyfill-mbstring", 2559 | "version": "v1.27.0", 2560 | "source": { 2561 | "type": "git", 2562 | "url": "https://github.com/symfony/polyfill-mbstring.git", 2563 | "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" 2564 | }, 2565 | "dist": { 2566 | "type": "zip", 2567 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", 2568 | "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", 2569 | "shasum": "" 2570 | }, 2571 | "require": { 2572 | "php": ">=7.1" 2573 | }, 2574 | "provide": { 2575 | "ext-mbstring": "*" 2576 | }, 2577 | "suggest": { 2578 | "ext-mbstring": "For best performance" 2579 | }, 2580 | "type": "library", 2581 | "extra": { 2582 | "branch-alias": { 2583 | "dev-main": "1.27-dev" 2584 | }, 2585 | "thanks": { 2586 | "name": "symfony/polyfill", 2587 | "url": "https://github.com/symfony/polyfill" 2588 | } 2589 | }, 2590 | "autoload": { 2591 | "files": [ 2592 | "bootstrap.php" 2593 | ], 2594 | "psr-4": { 2595 | "Symfony\\Polyfill\\Mbstring\\": "" 2596 | } 2597 | }, 2598 | "notification-url": "https://packagist.org/downloads/", 2599 | "license": [ 2600 | "MIT" 2601 | ], 2602 | "authors": [ 2603 | { 2604 | "name": "Nicolas Grekas", 2605 | "email": "p@tchwork.com" 2606 | }, 2607 | { 2608 | "name": "Symfony Community", 2609 | "homepage": "https://symfony.com/contributors" 2610 | } 2611 | ], 2612 | "description": "Symfony polyfill for the Mbstring extension", 2613 | "homepage": "https://symfony.com", 2614 | "keywords": [ 2615 | "compatibility", 2616 | "mbstring", 2617 | "polyfill", 2618 | "portable", 2619 | "shim" 2620 | ], 2621 | "support": { 2622 | "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" 2623 | }, 2624 | "funding": [ 2625 | { 2626 | "url": "https://symfony.com/sponsor", 2627 | "type": "custom" 2628 | }, 2629 | { 2630 | "url": "https://github.com/fabpot", 2631 | "type": "github" 2632 | }, 2633 | { 2634 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2635 | "type": "tidelift" 2636 | } 2637 | ], 2638 | "time": "2022-11-03T14:55:06+00:00" 2639 | }, 2640 | { 2641 | "name": "symfony/service-contracts", 2642 | "version": "v3.2.1", 2643 | "source": { 2644 | "type": "git", 2645 | "url": "https://github.com/symfony/service-contracts.git", 2646 | "reference": "a8c9cedf55f314f3a186041d19537303766df09a" 2647 | }, 2648 | "dist": { 2649 | "type": "zip", 2650 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", 2651 | "reference": "a8c9cedf55f314f3a186041d19537303766df09a", 2652 | "shasum": "" 2653 | }, 2654 | "require": { 2655 | "php": ">=8.1", 2656 | "psr/container": "^2.0" 2657 | }, 2658 | "conflict": { 2659 | "ext-psr": "<1.1|>=2" 2660 | }, 2661 | "suggest": { 2662 | "symfony/service-implementation": "" 2663 | }, 2664 | "type": "library", 2665 | "extra": { 2666 | "branch-alias": { 2667 | "dev-main": "3.3-dev" 2668 | }, 2669 | "thanks": { 2670 | "name": "symfony/contracts", 2671 | "url": "https://github.com/symfony/contracts" 2672 | } 2673 | }, 2674 | "autoload": { 2675 | "psr-4": { 2676 | "Symfony\\Contracts\\Service\\": "" 2677 | }, 2678 | "exclude-from-classmap": [ 2679 | "/Test/" 2680 | ] 2681 | }, 2682 | "notification-url": "https://packagist.org/downloads/", 2683 | "license": [ 2684 | "MIT" 2685 | ], 2686 | "authors": [ 2687 | { 2688 | "name": "Nicolas Grekas", 2689 | "email": "p@tchwork.com" 2690 | }, 2691 | { 2692 | "name": "Symfony Community", 2693 | "homepage": "https://symfony.com/contributors" 2694 | } 2695 | ], 2696 | "description": "Generic abstractions related to writing services", 2697 | "homepage": "https://symfony.com", 2698 | "keywords": [ 2699 | "abstractions", 2700 | "contracts", 2701 | "decoupling", 2702 | "interfaces", 2703 | "interoperability", 2704 | "standards" 2705 | ], 2706 | "support": { 2707 | "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" 2708 | }, 2709 | "funding": [ 2710 | { 2711 | "url": "https://symfony.com/sponsor", 2712 | "type": "custom" 2713 | }, 2714 | { 2715 | "url": "https://github.com/fabpot", 2716 | "type": "github" 2717 | }, 2718 | { 2719 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2720 | "type": "tidelift" 2721 | } 2722 | ], 2723 | "time": "2023-03-01T10:32:47+00:00" 2724 | }, 2725 | { 2726 | "name": "symfony/string", 2727 | "version": "v6.2.8", 2728 | "source": { 2729 | "type": "git", 2730 | "url": "https://github.com/symfony/string.git", 2731 | "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef" 2732 | }, 2733 | "dist": { 2734 | "type": "zip", 2735 | "url": "https://api.github.com/repos/symfony/string/zipball/193e83bbd6617d6b2151c37fff10fa7168ebddef", 2736 | "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef", 2737 | "shasum": "" 2738 | }, 2739 | "require": { 2740 | "php": ">=8.1", 2741 | "symfony/polyfill-ctype": "~1.8", 2742 | "symfony/polyfill-intl-grapheme": "~1.0", 2743 | "symfony/polyfill-intl-normalizer": "~1.0", 2744 | "symfony/polyfill-mbstring": "~1.0" 2745 | }, 2746 | "conflict": { 2747 | "symfony/translation-contracts": "<2.0" 2748 | }, 2749 | "require-dev": { 2750 | "symfony/error-handler": "^5.4|^6.0", 2751 | "symfony/http-client": "^5.4|^6.0", 2752 | "symfony/intl": "^6.2", 2753 | "symfony/translation-contracts": "^2.0|^3.0", 2754 | "symfony/var-exporter": "^5.4|^6.0" 2755 | }, 2756 | "type": "library", 2757 | "autoload": { 2758 | "files": [ 2759 | "Resources/functions.php" 2760 | ], 2761 | "psr-4": { 2762 | "Symfony\\Component\\String\\": "" 2763 | }, 2764 | "exclude-from-classmap": [ 2765 | "/Tests/" 2766 | ] 2767 | }, 2768 | "notification-url": "https://packagist.org/downloads/", 2769 | "license": [ 2770 | "MIT" 2771 | ], 2772 | "authors": [ 2773 | { 2774 | "name": "Nicolas Grekas", 2775 | "email": "p@tchwork.com" 2776 | }, 2777 | { 2778 | "name": "Symfony Community", 2779 | "homepage": "https://symfony.com/contributors" 2780 | } 2781 | ], 2782 | "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", 2783 | "homepage": "https://symfony.com", 2784 | "keywords": [ 2785 | "grapheme", 2786 | "i18n", 2787 | "string", 2788 | "unicode", 2789 | "utf-8", 2790 | "utf8" 2791 | ], 2792 | "support": { 2793 | "source": "https://github.com/symfony/string/tree/v6.2.8" 2794 | }, 2795 | "funding": [ 2796 | { 2797 | "url": "https://symfony.com/sponsor", 2798 | "type": "custom" 2799 | }, 2800 | { 2801 | "url": "https://github.com/fabpot", 2802 | "type": "github" 2803 | }, 2804 | { 2805 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2806 | "type": "tidelift" 2807 | } 2808 | ], 2809 | "time": "2023-03-20T16:06:02+00:00" 2810 | }, 2811 | { 2812 | "name": "symfony/translation", 2813 | "version": "v6.2.8", 2814 | "source": { 2815 | "type": "git", 2816 | "url": "https://github.com/symfony/translation.git", 2817 | "reference": "817535dbb1721df8b3a8f2489dc7e50bcd6209b5" 2818 | }, 2819 | "dist": { 2820 | "type": "zip", 2821 | "url": "https://api.github.com/repos/symfony/translation/zipball/817535dbb1721df8b3a8f2489dc7e50bcd6209b5", 2822 | "reference": "817535dbb1721df8b3a8f2489dc7e50bcd6209b5", 2823 | "shasum": "" 2824 | }, 2825 | "require": { 2826 | "php": ">=8.1", 2827 | "symfony/polyfill-mbstring": "~1.0", 2828 | "symfony/translation-contracts": "^2.3|^3.0" 2829 | }, 2830 | "conflict": { 2831 | "symfony/config": "<5.4", 2832 | "symfony/console": "<5.4", 2833 | "symfony/dependency-injection": "<5.4", 2834 | "symfony/http-kernel": "<5.4", 2835 | "symfony/twig-bundle": "<5.4", 2836 | "symfony/yaml": "<5.4" 2837 | }, 2838 | "provide": { 2839 | "symfony/translation-implementation": "2.3|3.0" 2840 | }, 2841 | "require-dev": { 2842 | "nikic/php-parser": "^4.13", 2843 | "psr/log": "^1|^2|^3", 2844 | "symfony/config": "^5.4|^6.0", 2845 | "symfony/console": "^5.4|^6.0", 2846 | "symfony/dependency-injection": "^5.4|^6.0", 2847 | "symfony/finder": "^5.4|^6.0", 2848 | "symfony/http-client-contracts": "^1.1|^2.0|^3.0", 2849 | "symfony/http-kernel": "^5.4|^6.0", 2850 | "symfony/intl": "^5.4|^6.0", 2851 | "symfony/polyfill-intl-icu": "^1.21", 2852 | "symfony/routing": "^5.4|^6.0", 2853 | "symfony/service-contracts": "^1.1.2|^2|^3", 2854 | "symfony/yaml": "^5.4|^6.0" 2855 | }, 2856 | "suggest": { 2857 | "nikic/php-parser": "To use PhpAstExtractor", 2858 | "psr/log-implementation": "To use logging capability in translator", 2859 | "symfony/config": "", 2860 | "symfony/yaml": "" 2861 | }, 2862 | "type": "library", 2863 | "autoload": { 2864 | "files": [ 2865 | "Resources/functions.php" 2866 | ], 2867 | "psr-4": { 2868 | "Symfony\\Component\\Translation\\": "" 2869 | }, 2870 | "exclude-from-classmap": [ 2871 | "/Tests/" 2872 | ] 2873 | }, 2874 | "notification-url": "https://packagist.org/downloads/", 2875 | "license": [ 2876 | "MIT" 2877 | ], 2878 | "authors": [ 2879 | { 2880 | "name": "Fabien Potencier", 2881 | "email": "fabien@symfony.com" 2882 | }, 2883 | { 2884 | "name": "Symfony Community", 2885 | "homepage": "https://symfony.com/contributors" 2886 | } 2887 | ], 2888 | "description": "Provides tools to internationalize your application", 2889 | "homepage": "https://symfony.com", 2890 | "support": { 2891 | "source": "https://github.com/symfony/translation/tree/v6.2.8" 2892 | }, 2893 | "funding": [ 2894 | { 2895 | "url": "https://symfony.com/sponsor", 2896 | "type": "custom" 2897 | }, 2898 | { 2899 | "url": "https://github.com/fabpot", 2900 | "type": "github" 2901 | }, 2902 | { 2903 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2904 | "type": "tidelift" 2905 | } 2906 | ], 2907 | "time": "2023-03-31T09:14:44+00:00" 2908 | }, 2909 | { 2910 | "name": "symfony/translation-contracts", 2911 | "version": "v3.2.1", 2912 | "source": { 2913 | "type": "git", 2914 | "url": "https://github.com/symfony/translation-contracts.git", 2915 | "reference": "dfec258b9dd17a6b24420d464c43bffe347441c8" 2916 | }, 2917 | "dist": { 2918 | "type": "zip", 2919 | "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dfec258b9dd17a6b24420d464c43bffe347441c8", 2920 | "reference": "dfec258b9dd17a6b24420d464c43bffe347441c8", 2921 | "shasum": "" 2922 | }, 2923 | "require": { 2924 | "php": ">=8.1" 2925 | }, 2926 | "suggest": { 2927 | "symfony/translation-implementation": "" 2928 | }, 2929 | "type": "library", 2930 | "extra": { 2931 | "branch-alias": { 2932 | "dev-main": "3.3-dev" 2933 | }, 2934 | "thanks": { 2935 | "name": "symfony/contracts", 2936 | "url": "https://github.com/symfony/contracts" 2937 | } 2938 | }, 2939 | "autoload": { 2940 | "psr-4": { 2941 | "Symfony\\Contracts\\Translation\\": "" 2942 | }, 2943 | "exclude-from-classmap": [ 2944 | "/Test/" 2945 | ] 2946 | }, 2947 | "notification-url": "https://packagist.org/downloads/", 2948 | "license": [ 2949 | "MIT" 2950 | ], 2951 | "authors": [ 2952 | { 2953 | "name": "Nicolas Grekas", 2954 | "email": "p@tchwork.com" 2955 | }, 2956 | { 2957 | "name": "Symfony Community", 2958 | "homepage": "https://symfony.com/contributors" 2959 | } 2960 | ], 2961 | "description": "Generic abstractions related to translation", 2962 | "homepage": "https://symfony.com", 2963 | "keywords": [ 2964 | "abstractions", 2965 | "contracts", 2966 | "decoupling", 2967 | "interfaces", 2968 | "interoperability", 2969 | "standards" 2970 | ], 2971 | "support": { 2972 | "source": "https://github.com/symfony/translation-contracts/tree/v3.2.1" 2973 | }, 2974 | "funding": [ 2975 | { 2976 | "url": "https://symfony.com/sponsor", 2977 | "type": "custom" 2978 | }, 2979 | { 2980 | "url": "https://github.com/fabpot", 2981 | "type": "github" 2982 | }, 2983 | { 2984 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2985 | "type": "tidelift" 2986 | } 2987 | ], 2988 | "time": "2023-03-01T10:32:47+00:00" 2989 | }, 2990 | { 2991 | "name": "symfony/var-exporter", 2992 | "version": "v6.2.8", 2993 | "source": { 2994 | "type": "git", 2995 | "url": "https://github.com/symfony/var-exporter.git", 2996 | "reference": "8302bb670204500d492c6b8c595ee9a27da62cd6" 2997 | }, 2998 | "dist": { 2999 | "type": "zip", 3000 | "url": "https://api.github.com/repos/symfony/var-exporter/zipball/8302bb670204500d492c6b8c595ee9a27da62cd6", 3001 | "reference": "8302bb670204500d492c6b8c595ee9a27da62cd6", 3002 | "shasum": "" 3003 | }, 3004 | "require": { 3005 | "php": ">=8.1" 3006 | }, 3007 | "require-dev": { 3008 | "symfony/var-dumper": "^5.4|^6.0" 3009 | }, 3010 | "type": "library", 3011 | "autoload": { 3012 | "psr-4": { 3013 | "Symfony\\Component\\VarExporter\\": "" 3014 | }, 3015 | "exclude-from-classmap": [ 3016 | "/Tests/" 3017 | ] 3018 | }, 3019 | "notification-url": "https://packagist.org/downloads/", 3020 | "license": [ 3021 | "MIT" 3022 | ], 3023 | "authors": [ 3024 | { 3025 | "name": "Nicolas Grekas", 3026 | "email": "p@tchwork.com" 3027 | }, 3028 | { 3029 | "name": "Symfony Community", 3030 | "homepage": "https://symfony.com/contributors" 3031 | } 3032 | ], 3033 | "description": "Allows exporting any serializable PHP data structure to plain PHP code", 3034 | "homepage": "https://symfony.com", 3035 | "keywords": [ 3036 | "clone", 3037 | "construct", 3038 | "export", 3039 | "hydrate", 3040 | "instantiate", 3041 | "lazy-loading", 3042 | "proxy", 3043 | "serialize" 3044 | ], 3045 | "support": { 3046 | "source": "https://github.com/symfony/var-exporter/tree/v6.2.8" 3047 | }, 3048 | "funding": [ 3049 | { 3050 | "url": "https://symfony.com/sponsor", 3051 | "type": "custom" 3052 | }, 3053 | { 3054 | "url": "https://github.com/fabpot", 3055 | "type": "github" 3056 | }, 3057 | { 3058 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3059 | "type": "tidelift" 3060 | } 3061 | ], 3062 | "time": "2023-03-14T15:48:45+00:00" 3063 | }, 3064 | { 3065 | "name": "symfony/yaml", 3066 | "version": "v6.2.7", 3067 | "source": { 3068 | "type": "git", 3069 | "url": "https://github.com/symfony/yaml.git", 3070 | "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57" 3071 | }, 3072 | "dist": { 3073 | "type": "zip", 3074 | "url": "https://api.github.com/repos/symfony/yaml/zipball/e8e6a1d59e050525f27a1f530aa9703423cb7f57", 3075 | "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57", 3076 | "shasum": "" 3077 | }, 3078 | "require": { 3079 | "php": ">=8.1", 3080 | "symfony/polyfill-ctype": "^1.8" 3081 | }, 3082 | "conflict": { 3083 | "symfony/console": "<5.4" 3084 | }, 3085 | "require-dev": { 3086 | "symfony/console": "^5.4|^6.0" 3087 | }, 3088 | "suggest": { 3089 | "symfony/console": "For validating YAML files using the lint command" 3090 | }, 3091 | "bin": [ 3092 | "Resources/bin/yaml-lint" 3093 | ], 3094 | "type": "library", 3095 | "autoload": { 3096 | "psr-4": { 3097 | "Symfony\\Component\\Yaml\\": "" 3098 | }, 3099 | "exclude-from-classmap": [ 3100 | "/Tests/" 3101 | ] 3102 | }, 3103 | "notification-url": "https://packagist.org/downloads/", 3104 | "license": [ 3105 | "MIT" 3106 | ], 3107 | "authors": [ 3108 | { 3109 | "name": "Fabien Potencier", 3110 | "email": "fabien@symfony.com" 3111 | }, 3112 | { 3113 | "name": "Symfony Community", 3114 | "homepage": "https://symfony.com/contributors" 3115 | } 3116 | ], 3117 | "description": "Loads and dumps YAML files", 3118 | "homepage": "https://symfony.com", 3119 | "support": { 3120 | "source": "https://github.com/symfony/yaml/tree/v6.2.7" 3121 | }, 3122 | "funding": [ 3123 | { 3124 | "url": "https://symfony.com/sponsor", 3125 | "type": "custom" 3126 | }, 3127 | { 3128 | "url": "https://github.com/fabpot", 3129 | "type": "github" 3130 | }, 3131 | { 3132 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 3133 | "type": "tidelift" 3134 | } 3135 | ], 3136 | "time": "2023-02-16T09:57:23+00:00" 3137 | } 3138 | ], 3139 | "aliases": [], 3140 | "minimum-stability": "stable", 3141 | "stability-flags": [], 3142 | "prefer-stable": false, 3143 | "prefer-lowest": false, 3144 | "platform": [], 3145 | "platform-dev": [], 3146 | "plugin-api-version": "2.3.0" 3147 | } 3148 | -------------------------------------------------------------------------------- /api-testing-course/composer.phar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caseysoftware/API-Testing-and-Validation/b43d11fb78eea72a3f93c15c8b30a4845d0c15d2/api-testing-course/composer.phar -------------------------------------------------------------------------------- /api-testing-course/features/1.4-smoke-test.feature: -------------------------------------------------------------------------------- 1 | Feature: Establish my Environment 2 | Scenario: I want to prove my environment is working as expected 3 | Given I have 2 monkeys 4 | When I get 2 more monkeys 5 | Then I should have 4 monkeys -------------------------------------------------------------------------------- /api-testing-course/features/2.1-issue-list.feature: -------------------------------------------------------------------------------- 1 | Feature: Get a list of issues 2 | 3 | Scenario: I want to get a list of the issues for the Symfony repository 4 | Given I am an anonymous user 5 | When I request a list of issues for the Symfony repository from user Symfony 6 | Then I should get at least 1 result -------------------------------------------------------------------------------- /api-testing-course/features/2.2-issue-list-with-variables.feature: -------------------------------------------------------------------------------- 1 | Feature: Get a list of issues with variables 2 | 3 | Scenario: I want to get a list of the issues for the Symfony repository 4 | Given I am an anonymous user 5 | When I request the issues for the "Symfony" repository from user "Symfony" 6 | Then I should get at least "1" result -------------------------------------------------------------------------------- /api-testing-course/features/3.2-my-repositories.feature: -------------------------------------------------------------------------------- 1 | Feature: Get my list of repositories 2 | 3 | Scenario: I want to find my private repository 4 | Given I am an authenticated user 5 | When I request a list of my repositories 6 | Then the results should include a repository named "is-your-api-misbehaving" -------------------------------------------------------------------------------- /api-testing-course/features/3.3-star-repository.feature: -------------------------------------------------------------------------------- 1 | Feature: Star a repository 2 | 3 | Scenario: I want to star an important repository 4 | Given I am an authenticated user 5 | When I star my "is-your-api-misbehaving" repository 6 | Then my "is-your-api-misbehaving" repository will list me as a stargazer -------------------------------------------------------------------------------- /api-testing-course/features/3.4-unstar-repository.feature: -------------------------------------------------------------------------------- 1 | Feature: Unstar a repository 2 | 3 | Scenario: I want to unstar an important repository 4 | Given I am an authenticated user 5 | When I unstar my "is-your-api-misbehaving" repository 6 | Then my "is-your-api-misbehaving" repository will not list me as a stargazer -------------------------------------------------------------------------------- /api-testing-course/features/4.1-create-a-repo.feature: -------------------------------------------------------------------------------- 1 | Feature: Create a repository 2 | 3 | Scenario: I want to create a repository 4 | Given I am an authenticated user 5 | When I create a repository called "something-cool" 6 | And I request a list of my repositories 7 | Then the results should include a repository named "something-cool" -------------------------------------------------------------------------------- /api-testing-course/features/4.2-create-a-repo-cleanup.feature: -------------------------------------------------------------------------------- 1 | Feature: Delete a repository 2 | 3 | Scenario: I want to delete a repository 4 | Given I am an authenticated user 5 | And I request a list of my repositories 6 | And the results should include a repository named "something-cool" 7 | When I delete a repository called "something-cool" 8 | And I request a list of my repositories 9 | Then the results should not include a repository named "something-cool" -------------------------------------------------------------------------------- /api-testing-course/features/bootstrap/FeatureContext.php: -------------------------------------------------------------------------------- 1 | params = $parameters; 27 | $this->client = new \Github\Client(); 28 | } 29 | 30 | 31 | /** 32 | * @Given I am an anonymous user 33 | */ 34 | public function iAmAnAnonymousUser() 35 | { 36 | // don't do anything here. We're anonymous by default 37 | } 38 | 39 | /** 40 | * @When I request a list of issues for the Symfony repository from user Symfony 41 | */ 42 | public function iRequestAListOfIssuesForTheSymfonyRepositoryFromUserSymfony() 43 | { 44 | $issues = $this->client->issues()->all('Symfony', 'Symfony'); 45 | 46 | $this->results = $issues; 47 | } 48 | 49 | 50 | /** 51 | * @When I request the issues for the :arg1 repository from user :arg2 52 | */ 53 | public function iRequestTheIssuesForTheRepositoryFromUser($arg1, $arg2) 54 | { 55 | $issues = $this->client->issues()->all($arg1, $arg2); 56 | 57 | $this->checkResponseCode(200); 58 | 59 | $this->results = $issues; 60 | } 61 | 62 | /** 63 | * @Then I should get at least :arg1 result 64 | */ 65 | public function iShouldGetAtLeastResult($arg1) 66 | { 67 | if (count($this->results) < $arg1) { 68 | throw new Exception("Expected at least $arg1 result but got back " . count($this->results)); 69 | } 70 | } 71 | 72 | /** 73 | * @Given I am an authenticated user 74 | */ 75 | public function iAmAnAuthenticatedUser() 76 | { 77 | $this->client->authenticate( 78 | $this->params['github_token'], null, Github\AuthMethod::ACCESS_TOKEN 79 | ); 80 | } 81 | 82 | /** 83 | * @When I request a list of my repositories 84 | */ 85 | public function iRequestAListOfMyRepositories() 86 | { 87 | $repositories = $this->client->api('current_user')->repositories(); 88 | 89 | $this->checkResponseCode(200); 90 | 91 | $this->results = $repositories; 92 | } 93 | 94 | /** 95 | * @Then The results should include a repository named :arg1 96 | */ 97 | public function theResultsShouldIncludeARepositoryNamed($arg1) 98 | { 99 | if (!$this->repositoryExists($this->results, $arg1)) { 100 | throw new Exception("Expected to find a repository called '$arg1' but it doesn't exist."); 101 | } 102 | } 103 | 104 | /** 105 | * @Then the results should not include a repository named :arg1 106 | */ 107 | public function theResultsShouldNotIncludeARepositoryNamed($arg1) 108 | { 109 | if ($this->repositoryExists($this->results, $arg1)) { 110 | throw new Exception("Expected not to find a repository called '$arg1' but it does exist."); 111 | } 112 | } 113 | 114 | protected function repositoryExists($repoArray, $repoName) 115 | { 116 | $repositories = array_column($repoArray, 'name', 'name'); 117 | 118 | return isset($repositories[$repoName]); 119 | } 120 | 121 | /** 122 | * @When I star my :arg1 repository 123 | */ 124 | public function iStarMyRepository($arg1) 125 | { 126 | $githubUser = $this->client->api('current_user')->show()['login']; 127 | $this->client->api('current_user')->starring()->star($githubUser, $arg1); 128 | } 129 | 130 | /** 131 | * @When I unstar my :arg1 repository 132 | */ 133 | public function iUnstarMyRepository($arg1) 134 | { 135 | $githubUser = $this->client->api('current_user')->show()['login']; 136 | $this->client->api('current_user')->starring()->unstar($githubUser, $arg1); 137 | } 138 | 139 | /** 140 | * @Then my :arg1 repository will list me as a stargazer 141 | */ 142 | public function myRepositoryWillListMeAsAStargazer($arg1) 143 | { 144 | $githubUser = $this->client->api('current_user')->show()['login']; 145 | if (!$this->isAStargazer($githubUser, $arg1)) { 146 | throw new Exception("Expected current user to be a stargazer of the '$githubUser/$arg1' repository but they were not."); 147 | } 148 | } 149 | 150 | /** 151 | * @Then my :arg1 repository will not list me as a stargazer 152 | */ 153 | public function myRepositoryWillNotListMeAsAStargazer($arg1) 154 | { 155 | $githubUser = $this->client->api('current_user')->show()['login']; 156 | if ($this->isAStargazer($githubUser, $arg1)) { 157 | throw new Exception("Expected current user to not be a stargazer of the '$githubUser/$arg1' repository but they were."); 158 | } 159 | } 160 | 161 | /** 162 | * Simplified this function to determine if the user is currently a stargazer for a repo. 163 | */ 164 | protected function isAStargazer($user, $repo) 165 | { 166 | $_stargazers = $this->client->api('repo')->stargazers()->all($user, $repo); 167 | $stargazers = array_column($_stargazers, 'login', 'login'); 168 | 169 | return isset($stargazers[$user]); 170 | } 171 | 172 | /** 173 | * @When I create a repository called :arg1 174 | */ 175 | public function iCreateARepositoryCalled($arg1) 176 | { 177 | $this->client->api('repo')->create($arg1, 178 | 'This is the repo description', 'http://google.com', true); 179 | 180 | $this->checkResponseCode(201); 181 | } 182 | 183 | /** 184 | * @Then I delete a repository called :arg1 185 | */ 186 | public function iDeleteARepositoryCalled($arg1) 187 | { 188 | $githubUser = $this->client->api('current_user')->show()['login']; 189 | $this->client->api('repo')->remove($githubUser, $arg1); 190 | 191 | $this->checkResponseCode(204); 192 | } 193 | 194 | protected function checkResponseCode($expected) 195 | { 196 | $statusCode = $this->client->getLastResponse()->getStatusCode(); 197 | 198 | if ($expected != $statusCode) { 199 | throw new Exception("Expected a $expected status code but got $statusCode instead!"); 200 | } 201 | } 202 | 203 | 204 | /** 205 | * @Given I have :arg1 monkeys 206 | */ 207 | public function iHaveMonkeys($arg1) 208 | { 209 | $this->monkeyCount = (int) $arg1; 210 | } 211 | 212 | /** 213 | * @When I get :arg1 more monkeys 214 | */ 215 | public function iGetMoreMonkeys($arg1) 216 | { 217 | $this->monkeyCount += (int) $arg1; 218 | } 219 | 220 | /** 221 | * @Then I should have :arg1 monkeys 222 | */ 223 | public function iShouldHaveMonkeys($arg1) 224 | { 225 | assert($this->monkeyCount == $arg1, "We expected $arg1 monkeys but found " . $this->monkeyCount); 226 | } 227 | } 228 | -------------------------------------------------------------------------------- /api-testing-workspace/README.md: -------------------------------------------------------------------------------- 1 | 2 | If you are working through the LinkedIn Learning course, all of the code you write should be in this folder. 3 | 4 | To get this ready, follow the instructions in the README in this root of this project for details. 5 | -------------------------------------------------------------------------------- /api-testing-workspace/behat.dist.yml: -------------------------------------------------------------------------------- 1 | # behat.yml 2 | 3 | default: 4 | suites: 5 | default: 6 | contexts: 7 | - FeatureContext: 8 | parameters: 9 | github_token: "Visit https://github.com/settings/tokens to create a personal access token and put it here" -------------------------------------------------------------------------------- /api-testing-workspace/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require-dev": { 3 | "behat/behat": "^3.12" 4 | }, 5 | "require": { 6 | "knplabs/github-api": "^3.0", 7 | "guzzlehttp/guzzle": "^7.0.1", 8 | "http-interop/http-factory-guzzle": "^1.0" 9 | }, 10 | "config": { 11 | "allow-plugins": { 12 | "php-http/discovery": true 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /php/README.md: -------------------------------------------------------------------------------- 1 | 2 | If you are working through the LinkedIn Learning course, check out the README in the root of this project for details. --------------------------------------------------------------------------------