├── .gitignore ├── LICENCE ├── README.md ├── composer.json ├── composer.lock ├── phpunit.xml ├── src ├── ApiResponse.php ├── Config.php ├── CustomField.php ├── Enums │ ├── Currency.php │ └── Environment.php ├── Exceptions │ └── CurrencyException.php ├── Invoice │ └── InvoiceItem.php ├── PayTech.php └── Utils │ ├── Check.php │ ├── MakeRequest.php │ └── Serializer.php └── tests └── Unit ├── Exceptions └── CurrencyExceptionTest.php ├── Invoice └── InvoiceItemTest.php ├── PayTech ├── ApiResponseTest.php ├── ConfigTest.php ├── CustomFieldTest.php └── PayTechTest.php └── Utils ├── CheckTest.php ├── MakeRequestTest.php └── SerializerTest.php /.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ 2 | .vscode -------------------------------------------------------------------------------- /LICENCE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 PapiHack (MBCM) 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. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PayTech - PHP API Client 2 | 3 | [![Coverage Status](https://img.shields.io/badge/coverage-100%25-brightgreen)](https://coveralls.io/github/PapiHack/paytech-php-client?branch=master) 4 | ![Issues](https://img.shields.io/github/issues/PapiHack/paytech-php-client) 5 | ![PR](https://img.shields.io/github/issues-pr/PapiHack/paytech-php-client) 6 | [![Latest Stable Version](https://poser.pugx.org/papihack/paytech-php-client/v)](//packagist.org/packages/papihack/paytech-php-client) 7 | [![Total Downloads](https://poser.pugx.org/papihack/paytech-php-client/downloads)](//packagist.org/packages/papihack/paytech-php-client) 8 | [![Latest Unstable Version](https://poser.pugx.org/papihack/paytech-php-client/v/unstable)](//packagist.org/packages/papihack/paytech-php-client) 9 | [![License](https://poser.pugx.org/papihack/paytech-php-client/license)](//packagist.org/packages/papihack/paytech-php-client) 10 | [![Open Source Love png1](https://badges.frapsoft.com/os/v1/open-source.png?v=103)](https://github.com/ellerbrock/open-source-badges/) 11 | 12 | This is a simple `SDK Client` or `API Client` for `PayTech Online Payment Gateway`. 13 | 14 | Check out [PayTech SN Website](https://paytech.sn). 15 | 16 | ## How to use it 17 | 18 | First of all, install the package or library via composer 19 | 20 | - `composer require papihack/paytech-php-client` 21 | 22 | After that, setup the API config with your parameters like this : 23 | 24 | ```php 25 | \PayTech\Config::setApiKey('your_api_key'); 26 | \PayTech\Config::setApiSecret('your_api_secret'); 27 | 28 | /* 29 | * you can set one of this two environment TEST or PROD 30 | * you can just set the env mode via \PayTech\Enums\Env::TEST or \PayTech\Enums\Env::PROD 31 | * Like the following example 32 | * !!! By default env is PROD !!! 33 | * You can also directly set test or prod as a string if you want 34 | * Like \PayTech\Config::setEnv('test') or \PayTech\Config::setEnv('prod') 35 | */ 36 | 37 | \PayTech\Config::setEnv(\PayTech\Enums\Env::PROD); 38 | 39 | /* 40 | * The PayTech\Enums\Currency class defined authorized currencies 41 | * You can change XOF (in the following example) by USD, CAD or another currency 42 | * All allowed currencies are in \PayTech\Enums\Currency class 43 | * !!! Notice that XOF is the default currency !!! 44 | */ 45 | 46 | \PayTech\Config::setCurrency(\PayTech\Enums\Currency::XOF); 47 | 48 | /* !!! Note that if you decide to set the ipn_url, it must be in https !!! */ 49 | 50 | \PayTech\Config::setIpnUrl('your_ipn_url'); 51 | \PayTech\Config::setSuccessUrl('your_success_url'); 52 | \PayTech\Config::setCanceUrl('your_cancel_url'); 53 | 54 | /* 55 | * if you want the mobile success or cancel page, you can set 56 | * the following parameter 57 | */ 58 | 59 | \PayTech\Config::setIsMobile(true); 60 | ``` 61 | 62 | Then you can proceed with : 63 | 64 | ```php 65 | $article_price = 15000; 66 | $article = new \PayTech\Invoice\InvoiceItem('article_name', $article_price, 'command_name', 'ref_command'); 67 | 68 | /* You can also add custom data or fields like this */ 69 | 70 | \PayTech\CustomField::set('your_field_name', 'your_field_value'); 71 | 72 | /* Make the payment request demand to the API */ 73 | 74 | \PayTech\PayTech::send($article); 75 | 76 | /* Get the API Response */ 77 | 78 | $response = [ 79 | 'success' => \PayTech\ApiResponse::getSuccess(), 80 | 'errors' => \PayTech\ApiResponse::getErrors(), 81 | 'token' => \PayTech\ApiResponse::getToken(), 82 | 'redirect_url' => \PayTech\ApiResponse::getRedirectUrl(), 83 | ]; 84 | ``` 85 | 86 | After that, if you have a success response, you can redirect your user to the `$response['redirect_url']` so that he can make the payment. 87 | You can process the response as you wish by directly manipulating `\PayTech\ApiResponse`. 88 | 89 | ## TODO 90 | 91 | - tests: cover all use cases ✅ 92 | - get the support team at [paytech.sn](https://paytech.sn) to clarify certain points 93 | 94 | ## Contributing 95 | 96 | Feel free to make a PR or report an issue 😃 97 | 98 | Regarding the tests, I use the elegant PHP Testing Framework [Pest](https://pestphp.com/) 😎 99 | 100 | Oh, one more thing, please do not forget to put a description when you make your PR 🙂 101 | 102 | ## Contributors 103 | 104 | - [M.B.C.M](https://itdev.herokuapp.com) 105 | [![My Twitter Link](https://img.shields.io/twitter/follow/the_it_dev?style=social)](https://twitter.com/the_it_dev) 106 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "papihack/paytech-php-client", 3 | "description": "A PHP Client or SDK for PayTech Online Payment Gateway.", 4 | "keywords": [ 5 | "Plateforme de paiement en ligne Afrique", 6 | "Paiement Sénégal", "Paiement", "paiement en ligne", "Sénégal", 7 | "Passerelle de paiement en ligne", "PAYTECH", "paytech", "paytech.sn", 8 | "orange money", "client php", "api", "php client", "library", "sdk", 9 | "php sdk", "paytech php sdk", "client api" 10 | ], 11 | "type": "library", 12 | "license": "MIT", 13 | "authors": [ 14 | { 15 | "name": "PapiHack", 16 | "email": "itdev94@gmail.com" 17 | } 18 | ], 19 | "minimum-stability": "dev", 20 | "prefer-stable": true, 21 | "require": { 22 | "php": "^7.3", 23 | "rmccue/requests": "^1.7" 24 | }, 25 | "autoload": { 26 | "psr-4": { 27 | "PayTech\\": "src/" 28 | } 29 | }, 30 | "autoload-dev": { 31 | "psr-4": { 32 | "PayTech\\Tests\\": "tests/" 33 | } 34 | }, 35 | "require-dev": { 36 | "phpunit/phpunit": "^9.0", 37 | "pestphp/pest": "^0.2.3" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /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": "5664c8366476af06fe9587d3ac68f39d", 8 | "packages": [ 9 | { 10 | "name": "rmccue/requests", 11 | "version": "v1.8.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/WordPress/Requests.git", 15 | "reference": "afbe4790e4def03581c4a0963a1e8aa01f6030f1" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/WordPress/Requests/zipball/afbe4790e4def03581c4a0963a1e8aa01f6030f1", 20 | "reference": "afbe4790e4def03581c4a0963a1e8aa01f6030f1", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": ">=5.2" 25 | }, 26 | "require-dev": { 27 | "dealerdirect/phpcodesniffer-composer-installer": "^0.7", 28 | "php-parallel-lint/php-console-highlighter": "^0.5.0", 29 | "php-parallel-lint/php-parallel-lint": "^1.3", 30 | "phpcompatibility/php-compatibility": "^9.0", 31 | "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5", 32 | "requests/test-server": "dev-master", 33 | "squizlabs/php_codesniffer": "^3.5", 34 | "wp-coding-standards/wpcs": "^2.0" 35 | }, 36 | "type": "library", 37 | "autoload": { 38 | "psr-0": { 39 | "Requests": "library/" 40 | } 41 | }, 42 | "notification-url": "https://packagist.org/downloads/", 43 | "license": [ 44 | "ISC" 45 | ], 46 | "authors": [ 47 | { 48 | "name": "Ryan McCue", 49 | "homepage": "http://ryanmccue.info" 50 | } 51 | ], 52 | "description": "A HTTP library written in PHP, for human beings.", 53 | "homepage": "http://github.com/WordPress/Requests", 54 | "keywords": [ 55 | "curl", 56 | "fsockopen", 57 | "http", 58 | "idna", 59 | "ipv6", 60 | "iri", 61 | "sockets" 62 | ], 63 | "support": { 64 | "issues": "https://github.com/WordPress/Requests/issues", 65 | "source": "https://github.com/WordPress/Requests/tree/v1.8.0" 66 | }, 67 | "time": "2021-04-27T11:05:25+00:00" 68 | } 69 | ], 70 | "packages-dev": [ 71 | { 72 | "name": "doctrine/instantiator", 73 | "version": "1.3.1", 74 | "source": { 75 | "type": "git", 76 | "url": "https://github.com/doctrine/instantiator.git", 77 | "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" 78 | }, 79 | "dist": { 80 | "type": "zip", 81 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", 82 | "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", 83 | "shasum": "" 84 | }, 85 | "require": { 86 | "php": "^7.1 || ^8.0" 87 | }, 88 | "require-dev": { 89 | "doctrine/coding-standard": "^6.0", 90 | "ext-pdo": "*", 91 | "ext-phar": "*", 92 | "phpbench/phpbench": "^0.13", 93 | "phpstan/phpstan-phpunit": "^0.11", 94 | "phpstan/phpstan-shim": "^0.11", 95 | "phpunit/phpunit": "^7.0" 96 | }, 97 | "type": "library", 98 | "extra": { 99 | "branch-alias": { 100 | "dev-master": "1.2.x-dev" 101 | } 102 | }, 103 | "autoload": { 104 | "psr-4": { 105 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 106 | } 107 | }, 108 | "notification-url": "https://packagist.org/downloads/", 109 | "license": [ 110 | "MIT" 111 | ], 112 | "authors": [ 113 | { 114 | "name": "Marco Pivetta", 115 | "email": "ocramius@gmail.com", 116 | "homepage": "http://ocramius.github.com/" 117 | } 118 | ], 119 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 120 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 121 | "keywords": [ 122 | "constructor", 123 | "instantiate" 124 | ], 125 | "time": "2020-05-29T17:27:14+00:00" 126 | }, 127 | { 128 | "name": "facade/ignition-contracts", 129 | "version": "1.0.1", 130 | "source": { 131 | "type": "git", 132 | "url": "https://github.com/facade/ignition-contracts.git", 133 | "reference": "aeab1ce8b68b188a43e81758e750151ad7da796b" 134 | }, 135 | "dist": { 136 | "type": "zip", 137 | "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/aeab1ce8b68b188a43e81758e750151ad7da796b", 138 | "reference": "aeab1ce8b68b188a43e81758e750151ad7da796b", 139 | "shasum": "" 140 | }, 141 | "require": { 142 | "php": "^7.1" 143 | }, 144 | "require-dev": { 145 | "friendsofphp/php-cs-fixer": "^2.14", 146 | "phpunit/phpunit": "^7.5|^8.0", 147 | "vimeo/psalm": "^3.12" 148 | }, 149 | "type": "library", 150 | "autoload": { 151 | "psr-4": { 152 | "Facade\\IgnitionContracts\\": "src" 153 | } 154 | }, 155 | "notification-url": "https://packagist.org/downloads/", 156 | "license": [ 157 | "MIT" 158 | ], 159 | "authors": [ 160 | { 161 | "name": "Freek Van der Herten", 162 | "email": "freek@spatie.be", 163 | "homepage": "https://flareapp.io", 164 | "role": "Developer" 165 | } 166 | ], 167 | "description": "Solution contracts for Ignition", 168 | "homepage": "https://github.com/facade/ignition-contracts", 169 | "keywords": [ 170 | "contracts", 171 | "flare", 172 | "ignition" 173 | ], 174 | "time": "2020-07-14T10:10:28+00:00" 175 | }, 176 | { 177 | "name": "filp/whoops", 178 | "version": "2.7.3", 179 | "source": { 180 | "type": "git", 181 | "url": "https://github.com/filp/whoops.git", 182 | "reference": "5d5fe9bb3d656b514d455645b3addc5f7ba7714d" 183 | }, 184 | "dist": { 185 | "type": "zip", 186 | "url": "https://api.github.com/repos/filp/whoops/zipball/5d5fe9bb3d656b514d455645b3addc5f7ba7714d", 187 | "reference": "5d5fe9bb3d656b514d455645b3addc5f7ba7714d", 188 | "shasum": "" 189 | }, 190 | "require": { 191 | "php": "^5.5.9 || ^7.0", 192 | "psr/log": "^1.0.1" 193 | }, 194 | "require-dev": { 195 | "mockery/mockery": "^0.9 || ^1.0", 196 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0", 197 | "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" 198 | }, 199 | "suggest": { 200 | "symfony/var-dumper": "Pretty print complex values better with var-dumper available", 201 | "whoops/soap": "Formats errors as SOAP responses" 202 | }, 203 | "type": "library", 204 | "extra": { 205 | "branch-alias": { 206 | "dev-master": "2.6-dev" 207 | } 208 | }, 209 | "autoload": { 210 | "psr-4": { 211 | "Whoops\\": "src/Whoops/" 212 | } 213 | }, 214 | "notification-url": "https://packagist.org/downloads/", 215 | "license": [ 216 | "MIT" 217 | ], 218 | "authors": [ 219 | { 220 | "name": "Filipe Dobreira", 221 | "homepage": "https://github.com/filp", 222 | "role": "Developer" 223 | } 224 | ], 225 | "description": "php error handling for cool kids", 226 | "homepage": "https://filp.github.io/whoops/", 227 | "keywords": [ 228 | "error", 229 | "exception", 230 | "handling", 231 | "library", 232 | "throwable", 233 | "whoops" 234 | ], 235 | "time": "2020-06-14T09:00:00+00:00" 236 | }, 237 | { 238 | "name": "myclabs/deep-copy", 239 | "version": "1.10.1", 240 | "source": { 241 | "type": "git", 242 | "url": "https://github.com/myclabs/DeepCopy.git", 243 | "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" 244 | }, 245 | "dist": { 246 | "type": "zip", 247 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", 248 | "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", 249 | "shasum": "" 250 | }, 251 | "require": { 252 | "php": "^7.1 || ^8.0" 253 | }, 254 | "replace": { 255 | "myclabs/deep-copy": "self.version" 256 | }, 257 | "require-dev": { 258 | "doctrine/collections": "^1.0", 259 | "doctrine/common": "^2.6", 260 | "phpunit/phpunit": "^7.1" 261 | }, 262 | "type": "library", 263 | "autoload": { 264 | "psr-4": { 265 | "DeepCopy\\": "src/DeepCopy/" 266 | }, 267 | "files": [ 268 | "src/DeepCopy/deep_copy.php" 269 | ] 270 | }, 271 | "notification-url": "https://packagist.org/downloads/", 272 | "license": [ 273 | "MIT" 274 | ], 275 | "description": "Create deep copies (clones) of your objects", 276 | "keywords": [ 277 | "clone", 278 | "copy", 279 | "duplicate", 280 | "object", 281 | "object graph" 282 | ], 283 | "time": "2020-06-29T13:22:24+00:00" 284 | }, 285 | { 286 | "name": "nunomaduro/collision", 287 | "version": "v5.0.0-BETA4", 288 | "source": { 289 | "type": "git", 290 | "url": "https://github.com/nunomaduro/collision.git", 291 | "reference": "805929cb4bb6b24ef56a28a4121eb1336803effd" 292 | }, 293 | "dist": { 294 | "type": "zip", 295 | "url": "https://api.github.com/repos/nunomaduro/collision/zipball/805929cb4bb6b24ef56a28a4121eb1336803effd", 296 | "reference": "805929cb4bb6b24ef56a28a4121eb1336803effd", 297 | "shasum": "" 298 | }, 299 | "require": { 300 | "facade/ignition-contracts": "^1.0", 301 | "filp/whoops": "^2.7.2", 302 | "php": "^7.3", 303 | "symfony/console": "^5.0" 304 | }, 305 | "require-dev": { 306 | "fideloper/proxy": "^4.3", 307 | "friendsofphp/php-cs-fixer": "^2.16.3", 308 | "fruitcake/laravel-cors": "^2.0.1", 309 | "laravel/framework": "^8.0", 310 | "laravel/tinker": "^2.4", 311 | "nunomaduro/larastan": "^0.6.1", 312 | "nunomaduro/mock-final-classes": "^1.0", 313 | "orchestra/testbench": "^6.0", 314 | "phpstan/phpstan": "^0.12.30", 315 | "phpunit/phpunit": "^9.2.4", 316 | "rector/rector": "^0.7.37" 317 | }, 318 | "type": "library", 319 | "extra": { 320 | "laravel": { 321 | "providers": [ 322 | "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" 323 | ] 324 | } 325 | }, 326 | "autoload": { 327 | "psr-4": { 328 | "NunoMaduro\\Collision\\": "src/" 329 | } 330 | }, 331 | "notification-url": "https://packagist.org/downloads/", 332 | "license": [ 333 | "MIT" 334 | ], 335 | "authors": [ 336 | { 337 | "name": "Nuno Maduro", 338 | "email": "enunomaduro@gmail.com" 339 | } 340 | ], 341 | "description": "Cli error handling for console/command-line PHP applications.", 342 | "keywords": [ 343 | "artisan", 344 | "cli", 345 | "command-line", 346 | "console", 347 | "error", 348 | "handling", 349 | "laravel", 350 | "laravel-zero", 351 | "php", 352 | "symfony" 353 | ], 354 | "time": "2020-06-25T16:51:17+00:00" 355 | }, 356 | { 357 | "name": "pestphp/pest", 358 | "version": "v0.2.3", 359 | "source": { 360 | "type": "git", 361 | "url": "https://github.com/pestphp/pest.git", 362 | "reference": "1241e929b1441097c9be2467d2a75c6d2b3e0a84" 363 | }, 364 | "dist": { 365 | "type": "zip", 366 | "url": "https://api.github.com/repos/pestphp/pest/zipball/1241e929b1441097c9be2467d2a75c6d2b3e0a84", 367 | "reference": "1241e929b1441097c9be2467d2a75c6d2b3e0a84", 368 | "shasum": "" 369 | }, 370 | "require": { 371 | "nunomaduro/collision": "^5.0.0-BETA3", 372 | "pestphp/pest-plugin": "^0.2", 373 | "pestphp/pest-plugin-coverage": "^0.2", 374 | "pestphp/pest-plugin-init": "^0.2", 375 | "php": "^7.3", 376 | "phpunit/phpunit": "^9.1.4", 377 | "sebastian/environment": "^5.1" 378 | }, 379 | "require-dev": { 380 | "ergebnis/phpstan-rules": "^0.15.0", 381 | "friendsofphp/php-cs-fixer": "^2.16.3", 382 | "illuminate/console": "^7.16.1", 383 | "illuminate/support": "^7.16.1", 384 | "mockery/mockery": "^1.4.0", 385 | "phpstan/phpstan": "^0.12.30", 386 | "phpstan/phpstan-strict-rules": "^0.12.2", 387 | "rector/rector": "^0.7.37", 388 | "symfony/var-dumper": "^5.1.2", 389 | "thecodingmachine/phpstan-strict-rules": "^0.12.0" 390 | }, 391 | "bin": [ 392 | "bin/pest" 393 | ], 394 | "type": "library", 395 | "extra": { 396 | "branch-alias": { 397 | "dev-master": "0.2.x-dev" 398 | }, 399 | "pest": { 400 | "plugins": [ 401 | "Pest\\Plugins\\Version" 402 | ] 403 | }, 404 | "laravel": { 405 | "providers": [ 406 | "Pest\\Laravel\\PestServiceProvider" 407 | ] 408 | } 409 | }, 410 | "autoload": { 411 | "psr-4": { 412 | "Pest\\": "src/" 413 | }, 414 | "files": [ 415 | "src/globals.php", 416 | "src/Pest.php", 417 | "compiled/globals.php" 418 | ] 419 | }, 420 | "notification-url": "https://packagist.org/downloads/", 421 | "license": [ 422 | "MIT" 423 | ], 424 | "authors": [ 425 | { 426 | "name": "Nuno Maduro", 427 | "email": "enunomaduro@gmail.com" 428 | } 429 | ], 430 | "description": "An elegant PHP Testing Framework.", 431 | "keywords": [ 432 | "framework", 433 | "pest", 434 | "php", 435 | "test", 436 | "testing", 437 | "unit" 438 | ], 439 | "time": "2020-07-01T18:26:18+00:00" 440 | }, 441 | { 442 | "name": "pestphp/pest-plugin", 443 | "version": "v0.2.1", 444 | "source": { 445 | "type": "git", 446 | "url": "https://github.com/pestphp/pest-plugin.git", 447 | "reference": "99d21abb7b1a44aa26c2416ca729d2a989ee2850" 448 | }, 449 | "dist": { 450 | "type": "zip", 451 | "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/99d21abb7b1a44aa26c2416ca729d2a989ee2850", 452 | "reference": "99d21abb7b1a44aa26c2416ca729d2a989ee2850", 453 | "shasum": "" 454 | }, 455 | "require": { 456 | "composer-plugin-api": "^1.1||^2.0", 457 | "php": "^7.3" 458 | }, 459 | "conflict": { 460 | "pestphp/pest": "<0.2" 461 | }, 462 | "require-dev": { 463 | "composer/composer": "^1.10", 464 | "pestphp/pest": "^0.2", 465 | "pestphp/pest-dev-tools": "dev-master" 466 | }, 467 | "type": "composer-plugin", 468 | "extra": { 469 | "branch-alias": { 470 | "dev-master": "0.2.x-dev" 471 | }, 472 | "class": "Pest\\Plugin\\Manager" 473 | }, 474 | "autoload": { 475 | "psr-4": { 476 | "Pest\\Plugin\\": "src/" 477 | } 478 | }, 479 | "notification-url": "https://packagist.org/downloads/", 480 | "license": [ 481 | "MIT" 482 | ], 483 | "description": "The Pest plugin manager", 484 | "keywords": [ 485 | "framework", 486 | "manager", 487 | "pest", 488 | "php", 489 | "plugin", 490 | "test", 491 | "testing", 492 | "unit" 493 | ], 494 | "time": "2020-06-16T18:07:24+00:00" 495 | }, 496 | { 497 | "name": "pestphp/pest-plugin-coverage", 498 | "version": "v0.2.0", 499 | "source": { 500 | "type": "git", 501 | "url": "https://github.com/pestphp/pest-plugin-coverage.git", 502 | "reference": "0849cf8d394124c21f2370f8e37b4bc272ea07c0" 503 | }, 504 | "dist": { 505 | "type": "zip", 506 | "url": "https://api.github.com/repos/pestphp/pest-plugin-coverage/zipball/0849cf8d394124c21f2370f8e37b4bc272ea07c0", 507 | "reference": "0849cf8d394124c21f2370f8e37b4bc272ea07c0", 508 | "shasum": "" 509 | }, 510 | "require": { 511 | "pestphp/pest-plugin": "^0.2", 512 | "php": "^7.3" 513 | }, 514 | "conflict": { 515 | "pestphp/pest": "<0.2" 516 | }, 517 | "require-dev": { 518 | "pestphp/pest": "^0.2", 519 | "pestphp/pest-dev-tools": "dev-master" 520 | }, 521 | "type": "library", 522 | "extra": { 523 | "pest": { 524 | "plugins": [ 525 | "Pest\\PluginCoverage\\Plugin" 526 | ] 527 | } 528 | }, 529 | "autoload": { 530 | "psr-4": { 531 | "Pest\\PluginCoverage\\": "src/" 532 | } 533 | }, 534 | "notification-url": "https://packagist.org/downloads/", 535 | "license": [ 536 | "MIT" 537 | ], 538 | "description": "The Pest Coverage Plugin", 539 | "keywords": [ 540 | "coverage", 541 | "framework", 542 | "pest", 543 | "php", 544 | "plugin", 545 | "test", 546 | "testing", 547 | "unit" 548 | ], 549 | "time": "2020-06-11T20:42:52+00:00" 550 | }, 551 | { 552 | "name": "pestphp/pest-plugin-init", 553 | "version": "v0.2.3", 554 | "source": { 555 | "type": "git", 556 | "url": "https://github.com/pestphp/pest-plugin-init.git", 557 | "reference": "718771dbfcc5bb8ceca238c4754dbc7bfdcb1b09" 558 | }, 559 | "dist": { 560 | "type": "zip", 561 | "url": "https://api.github.com/repos/pestphp/pest-plugin-init/zipball/718771dbfcc5bb8ceca238c4754dbc7bfdcb1b09", 562 | "reference": "718771dbfcc5bb8ceca238c4754dbc7bfdcb1b09", 563 | "shasum": "" 564 | }, 565 | "require": { 566 | "pestphp/pest-plugin": "^0.2", 567 | "php": "^7.3" 568 | }, 569 | "conflict": { 570 | "pestphp/pest": "<0.2.3" 571 | }, 572 | "require-dev": { 573 | "pestphp/pest": "^0.2", 574 | "pestphp/pest-dev-tools": "dev-master" 575 | }, 576 | "type": "library", 577 | "extra": { 578 | "branch-alias": { 579 | "dev-master": "0.2.x-dev" 580 | }, 581 | "pest": { 582 | "plugins": [ 583 | "Pest\\Init\\Plugin" 584 | ] 585 | } 586 | }, 587 | "autoload": { 588 | "psr-4": { 589 | "Pest\\Init\\": "src/" 590 | } 591 | }, 592 | "notification-url": "https://packagist.org/downloads/", 593 | "license": [ 594 | "MIT" 595 | ], 596 | "description": "The Pest Init plugin", 597 | "keywords": [ 598 | "framework", 599 | "init", 600 | "pest", 601 | "php", 602 | "plugin", 603 | "test", 604 | "testing", 605 | "unit" 606 | ], 607 | "time": "2020-07-01T18:35:16+00:00" 608 | }, 609 | { 610 | "name": "phar-io/manifest", 611 | "version": "1.0.3", 612 | "source": { 613 | "type": "git", 614 | "url": "https://github.com/phar-io/manifest.git", 615 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" 616 | }, 617 | "dist": { 618 | "type": "zip", 619 | "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 620 | "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", 621 | "shasum": "" 622 | }, 623 | "require": { 624 | "ext-dom": "*", 625 | "ext-phar": "*", 626 | "phar-io/version": "^2.0", 627 | "php": "^5.6 || ^7.0" 628 | }, 629 | "type": "library", 630 | "extra": { 631 | "branch-alias": { 632 | "dev-master": "1.0.x-dev" 633 | } 634 | }, 635 | "autoload": { 636 | "classmap": [ 637 | "src/" 638 | ] 639 | }, 640 | "notification-url": "https://packagist.org/downloads/", 641 | "license": [ 642 | "BSD-3-Clause" 643 | ], 644 | "authors": [ 645 | { 646 | "name": "Arne Blankerts", 647 | "email": "arne@blankerts.de", 648 | "role": "Developer" 649 | }, 650 | { 651 | "name": "Sebastian Heuer", 652 | "email": "sebastian@phpeople.de", 653 | "role": "Developer" 654 | }, 655 | { 656 | "name": "Sebastian Bergmann", 657 | "email": "sebastian@phpunit.de", 658 | "role": "Developer" 659 | } 660 | ], 661 | "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", 662 | "time": "2018-07-08T19:23:20+00:00" 663 | }, 664 | { 665 | "name": "phar-io/version", 666 | "version": "2.0.1", 667 | "source": { 668 | "type": "git", 669 | "url": "https://github.com/phar-io/version.git", 670 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" 671 | }, 672 | "dist": { 673 | "type": "zip", 674 | "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", 675 | "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", 676 | "shasum": "" 677 | }, 678 | "require": { 679 | "php": "^5.6 || ^7.0" 680 | }, 681 | "type": "library", 682 | "autoload": { 683 | "classmap": [ 684 | "src/" 685 | ] 686 | }, 687 | "notification-url": "https://packagist.org/downloads/", 688 | "license": [ 689 | "BSD-3-Clause" 690 | ], 691 | "authors": [ 692 | { 693 | "name": "Arne Blankerts", 694 | "email": "arne@blankerts.de", 695 | "role": "Developer" 696 | }, 697 | { 698 | "name": "Sebastian Heuer", 699 | "email": "sebastian@phpeople.de", 700 | "role": "Developer" 701 | }, 702 | { 703 | "name": "Sebastian Bergmann", 704 | "email": "sebastian@phpunit.de", 705 | "role": "Developer" 706 | } 707 | ], 708 | "description": "Library for handling version information and constraints", 709 | "time": "2018-07-08T19:19:57+00:00" 710 | }, 711 | { 712 | "name": "phpdocumentor/reflection-common", 713 | "version": "2.2.0", 714 | "source": { 715 | "type": "git", 716 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 717 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" 718 | }, 719 | "dist": { 720 | "type": "zip", 721 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", 722 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", 723 | "shasum": "" 724 | }, 725 | "require": { 726 | "php": "^7.2 || ^8.0" 727 | }, 728 | "type": "library", 729 | "extra": { 730 | "branch-alias": { 731 | "dev-2.x": "2.x-dev" 732 | } 733 | }, 734 | "autoload": { 735 | "psr-4": { 736 | "phpDocumentor\\Reflection\\": "src/" 737 | } 738 | }, 739 | "notification-url": "https://packagist.org/downloads/", 740 | "license": [ 741 | "MIT" 742 | ], 743 | "authors": [ 744 | { 745 | "name": "Jaap van Otterdijk", 746 | "email": "opensource@ijaap.nl" 747 | } 748 | ], 749 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 750 | "homepage": "http://www.phpdoc.org", 751 | "keywords": [ 752 | "FQSEN", 753 | "phpDocumentor", 754 | "phpdoc", 755 | "reflection", 756 | "static analysis" 757 | ], 758 | "time": "2020-06-27T09:03:43+00:00" 759 | }, 760 | { 761 | "name": "phpdocumentor/reflection-docblock", 762 | "version": "5.1.0", 763 | "source": { 764 | "type": "git", 765 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 766 | "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" 767 | }, 768 | "dist": { 769 | "type": "zip", 770 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", 771 | "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", 772 | "shasum": "" 773 | }, 774 | "require": { 775 | "ext-filter": "^7.1", 776 | "php": "^7.2", 777 | "phpdocumentor/reflection-common": "^2.0", 778 | "phpdocumentor/type-resolver": "^1.0", 779 | "webmozart/assert": "^1" 780 | }, 781 | "require-dev": { 782 | "doctrine/instantiator": "^1", 783 | "mockery/mockery": "^1" 784 | }, 785 | "type": "library", 786 | "extra": { 787 | "branch-alias": { 788 | "dev-master": "5.x-dev" 789 | } 790 | }, 791 | "autoload": { 792 | "psr-4": { 793 | "phpDocumentor\\Reflection\\": "src" 794 | } 795 | }, 796 | "notification-url": "https://packagist.org/downloads/", 797 | "license": [ 798 | "MIT" 799 | ], 800 | "authors": [ 801 | { 802 | "name": "Mike van Riel", 803 | "email": "me@mikevanriel.com" 804 | }, 805 | { 806 | "name": "Jaap van Otterdijk", 807 | "email": "account@ijaap.nl" 808 | } 809 | ], 810 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 811 | "time": "2020-02-22T12:28:44+00:00" 812 | }, 813 | { 814 | "name": "phpdocumentor/type-resolver", 815 | "version": "1.3.0", 816 | "source": { 817 | "type": "git", 818 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 819 | "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" 820 | }, 821 | "dist": { 822 | "type": "zip", 823 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", 824 | "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", 825 | "shasum": "" 826 | }, 827 | "require": { 828 | "php": "^7.2 || ^8.0", 829 | "phpdocumentor/reflection-common": "^2.0" 830 | }, 831 | "require-dev": { 832 | "ext-tokenizer": "*" 833 | }, 834 | "type": "library", 835 | "extra": { 836 | "branch-alias": { 837 | "dev-1.x": "1.x-dev" 838 | } 839 | }, 840 | "autoload": { 841 | "psr-4": { 842 | "phpDocumentor\\Reflection\\": "src" 843 | } 844 | }, 845 | "notification-url": "https://packagist.org/downloads/", 846 | "license": [ 847 | "MIT" 848 | ], 849 | "authors": [ 850 | { 851 | "name": "Mike van Riel", 852 | "email": "me@mikevanriel.com" 853 | } 854 | ], 855 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 856 | "time": "2020-06-27T10:12:23+00:00" 857 | }, 858 | { 859 | "name": "phpspec/prophecy", 860 | "version": "1.11.1", 861 | "source": { 862 | "type": "git", 863 | "url": "https://github.com/phpspec/prophecy.git", 864 | "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160" 865 | }, 866 | "dist": { 867 | "type": "zip", 868 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b20034be5efcdab4fb60ca3a29cba2949aead160", 869 | "reference": "b20034be5efcdab4fb60ca3a29cba2949aead160", 870 | "shasum": "" 871 | }, 872 | "require": { 873 | "doctrine/instantiator": "^1.2", 874 | "php": "^7.2", 875 | "phpdocumentor/reflection-docblock": "^5.0", 876 | "sebastian/comparator": "^3.0 || ^4.0", 877 | "sebastian/recursion-context": "^3.0 || ^4.0" 878 | }, 879 | "require-dev": { 880 | "phpspec/phpspec": "^6.0", 881 | "phpunit/phpunit": "^8.0" 882 | }, 883 | "type": "library", 884 | "extra": { 885 | "branch-alias": { 886 | "dev-master": "1.11.x-dev" 887 | } 888 | }, 889 | "autoload": { 890 | "psr-4": { 891 | "Prophecy\\": "src/Prophecy" 892 | } 893 | }, 894 | "notification-url": "https://packagist.org/downloads/", 895 | "license": [ 896 | "MIT" 897 | ], 898 | "authors": [ 899 | { 900 | "name": "Konstantin Kudryashov", 901 | "email": "ever.zet@gmail.com", 902 | "homepage": "http://everzet.com" 903 | }, 904 | { 905 | "name": "Marcello Duarte", 906 | "email": "marcello.duarte@gmail.com" 907 | } 908 | ], 909 | "description": "Highly opinionated mocking framework for PHP 5.3+", 910 | "homepage": "https://github.com/phpspec/prophecy", 911 | "keywords": [ 912 | "Double", 913 | "Dummy", 914 | "fake", 915 | "mock", 916 | "spy", 917 | "stub" 918 | ], 919 | "time": "2020-07-08T12:44:21+00:00" 920 | }, 921 | { 922 | "name": "phpunit/php-code-coverage", 923 | "version": "8.0.2", 924 | "source": { 925 | "type": "git", 926 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 927 | "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc" 928 | }, 929 | "dist": { 930 | "type": "zip", 931 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca6647ffddd2add025ab3f21644a441d7c146cdc", 932 | "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc", 933 | "shasum": "" 934 | }, 935 | "require": { 936 | "ext-dom": "*", 937 | "ext-xmlwriter": "*", 938 | "php": "^7.3", 939 | "phpunit/php-file-iterator": "^3.0", 940 | "phpunit/php-text-template": "^2.0", 941 | "phpunit/php-token-stream": "^4.0", 942 | "sebastian/code-unit-reverse-lookup": "^2.0", 943 | "sebastian/environment": "^5.0", 944 | "sebastian/version": "^3.0", 945 | "theseer/tokenizer": "^1.1.3" 946 | }, 947 | "require-dev": { 948 | "phpunit/phpunit": "^9.0" 949 | }, 950 | "suggest": { 951 | "ext-pcov": "*", 952 | "ext-xdebug": "*" 953 | }, 954 | "type": "library", 955 | "extra": { 956 | "branch-alias": { 957 | "dev-master": "8.0-dev" 958 | } 959 | }, 960 | "autoload": { 961 | "classmap": [ 962 | "src/" 963 | ] 964 | }, 965 | "notification-url": "https://packagist.org/downloads/", 966 | "license": [ 967 | "BSD-3-Clause" 968 | ], 969 | "authors": [ 970 | { 971 | "name": "Sebastian Bergmann", 972 | "email": "sebastian@phpunit.de", 973 | "role": "lead" 974 | } 975 | ], 976 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 977 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 978 | "keywords": [ 979 | "coverage", 980 | "testing", 981 | "xunit" 982 | ], 983 | "time": "2020-05-23T08:02:54+00:00" 984 | }, 985 | { 986 | "name": "phpunit/php-file-iterator", 987 | "version": "3.0.4", 988 | "source": { 989 | "type": "git", 990 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 991 | "reference": "25fefc5b19835ca653877fe081644a3f8c1d915e" 992 | }, 993 | "dist": { 994 | "type": "zip", 995 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/25fefc5b19835ca653877fe081644a3f8c1d915e", 996 | "reference": "25fefc5b19835ca653877fe081644a3f8c1d915e", 997 | "shasum": "" 998 | }, 999 | "require": { 1000 | "php": "^7.3 || ^8.0" 1001 | }, 1002 | "require-dev": { 1003 | "phpunit/phpunit": "^9.0" 1004 | }, 1005 | "type": "library", 1006 | "extra": { 1007 | "branch-alias": { 1008 | "dev-master": "3.0-dev" 1009 | } 1010 | }, 1011 | "autoload": { 1012 | "classmap": [ 1013 | "src/" 1014 | ] 1015 | }, 1016 | "notification-url": "https://packagist.org/downloads/", 1017 | "license": [ 1018 | "BSD-3-Clause" 1019 | ], 1020 | "authors": [ 1021 | { 1022 | "name": "Sebastian Bergmann", 1023 | "email": "sebastian@phpunit.de", 1024 | "role": "lead" 1025 | } 1026 | ], 1027 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 1028 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 1029 | "keywords": [ 1030 | "filesystem", 1031 | "iterator" 1032 | ], 1033 | "time": "2020-07-11T05:18:21+00:00" 1034 | }, 1035 | { 1036 | "name": "phpunit/php-invoker", 1037 | "version": "3.0.2", 1038 | "source": { 1039 | "type": "git", 1040 | "url": "https://github.com/sebastianbergmann/php-invoker.git", 1041 | "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66" 1042 | }, 1043 | "dist": { 1044 | "type": "zip", 1045 | "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f6eedfed1085dd1f4c599629459a0277d25f9a66", 1046 | "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66", 1047 | "shasum": "" 1048 | }, 1049 | "require": { 1050 | "php": "^7.3 || ^8.0" 1051 | }, 1052 | "require-dev": { 1053 | "ext-pcntl": "*", 1054 | "phpunit/phpunit": "^9.0" 1055 | }, 1056 | "suggest": { 1057 | "ext-pcntl": "*" 1058 | }, 1059 | "type": "library", 1060 | "extra": { 1061 | "branch-alias": { 1062 | "dev-master": "3.0-dev" 1063 | } 1064 | }, 1065 | "autoload": { 1066 | "classmap": [ 1067 | "src/" 1068 | ] 1069 | }, 1070 | "notification-url": "https://packagist.org/downloads/", 1071 | "license": [ 1072 | "BSD-3-Clause" 1073 | ], 1074 | "authors": [ 1075 | { 1076 | "name": "Sebastian Bergmann", 1077 | "email": "sebastian@phpunit.de", 1078 | "role": "lead" 1079 | } 1080 | ], 1081 | "description": "Invoke callables with a timeout", 1082 | "homepage": "https://github.com/sebastianbergmann/php-invoker/", 1083 | "keywords": [ 1084 | "process" 1085 | ], 1086 | "time": "2020-06-26T11:53:53+00:00" 1087 | }, 1088 | { 1089 | "name": "phpunit/php-text-template", 1090 | "version": "2.0.2", 1091 | "source": { 1092 | "type": "git", 1093 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 1094 | "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324" 1095 | }, 1096 | "dist": { 1097 | "type": "zip", 1098 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", 1099 | "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", 1100 | "shasum": "" 1101 | }, 1102 | "require": { 1103 | "php": "^7.3 || ^8.0" 1104 | }, 1105 | "require-dev": { 1106 | "phpunit/phpunit": "^9.0" 1107 | }, 1108 | "type": "library", 1109 | "extra": { 1110 | "branch-alias": { 1111 | "dev-master": "2.0-dev" 1112 | } 1113 | }, 1114 | "autoload": { 1115 | "classmap": [ 1116 | "src/" 1117 | ] 1118 | }, 1119 | "notification-url": "https://packagist.org/downloads/", 1120 | "license": [ 1121 | "BSD-3-Clause" 1122 | ], 1123 | "authors": [ 1124 | { 1125 | "name": "Sebastian Bergmann", 1126 | "email": "sebastian@phpunit.de", 1127 | "role": "lead" 1128 | } 1129 | ], 1130 | "description": "Simple template engine.", 1131 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 1132 | "keywords": [ 1133 | "template" 1134 | ], 1135 | "time": "2020-06-26T11:55:37+00:00" 1136 | }, 1137 | { 1138 | "name": "phpunit/php-timer", 1139 | "version": "5.0.1", 1140 | "source": { 1141 | "type": "git", 1142 | "url": "https://github.com/sebastianbergmann/php-timer.git", 1143 | "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7" 1144 | }, 1145 | "dist": { 1146 | "type": "zip", 1147 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/cc49734779cbb302bf51a44297dab8c4bbf941e7", 1148 | "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7", 1149 | "shasum": "" 1150 | }, 1151 | "require": { 1152 | "php": "^7.3 || ^8.0" 1153 | }, 1154 | "require-dev": { 1155 | "phpunit/phpunit": "^9.2" 1156 | }, 1157 | "type": "library", 1158 | "extra": { 1159 | "branch-alias": { 1160 | "dev-master": "5.0-dev" 1161 | } 1162 | }, 1163 | "autoload": { 1164 | "classmap": [ 1165 | "src/" 1166 | ] 1167 | }, 1168 | "notification-url": "https://packagist.org/downloads/", 1169 | "license": [ 1170 | "BSD-3-Clause" 1171 | ], 1172 | "authors": [ 1173 | { 1174 | "name": "Sebastian Bergmann", 1175 | "email": "sebastian@phpunit.de", 1176 | "role": "lead" 1177 | } 1178 | ], 1179 | "description": "Utility class for timing", 1180 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 1181 | "keywords": [ 1182 | "timer" 1183 | ], 1184 | "time": "2020-06-26T11:58:13+00:00" 1185 | }, 1186 | { 1187 | "name": "phpunit/php-token-stream", 1188 | "version": "4.0.3", 1189 | "source": { 1190 | "type": "git", 1191 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 1192 | "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374" 1193 | }, 1194 | "dist": { 1195 | "type": "zip", 1196 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/5672711b6b07b14d5ab694e700c62eeb82fcf374", 1197 | "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374", 1198 | "shasum": "" 1199 | }, 1200 | "require": { 1201 | "ext-tokenizer": "*", 1202 | "php": "^7.3 || ^8.0" 1203 | }, 1204 | "require-dev": { 1205 | "phpunit/phpunit": "^9.0" 1206 | }, 1207 | "type": "library", 1208 | "extra": { 1209 | "branch-alias": { 1210 | "dev-master": "4.0-dev" 1211 | } 1212 | }, 1213 | "autoload": { 1214 | "classmap": [ 1215 | "src/" 1216 | ] 1217 | }, 1218 | "notification-url": "https://packagist.org/downloads/", 1219 | "license": [ 1220 | "BSD-3-Clause" 1221 | ], 1222 | "authors": [ 1223 | { 1224 | "name": "Sebastian Bergmann", 1225 | "email": "sebastian@phpunit.de" 1226 | } 1227 | ], 1228 | "description": "Wrapper around PHP's tokenizer extension.", 1229 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 1230 | "keywords": [ 1231 | "tokenizer" 1232 | ], 1233 | "time": "2020-06-27T06:36:25+00:00" 1234 | }, 1235 | { 1236 | "name": "phpunit/phpunit", 1237 | "version": "9.2.6", 1238 | "source": { 1239 | "type": "git", 1240 | "url": "https://github.com/sebastianbergmann/phpunit.git", 1241 | "reference": "1c6a9e4312e209e659f1fce3ce88dd197c2448f6" 1242 | }, 1243 | "dist": { 1244 | "type": "zip", 1245 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1c6a9e4312e209e659f1fce3ce88dd197c2448f6", 1246 | "reference": "1c6a9e4312e209e659f1fce3ce88dd197c2448f6", 1247 | "shasum": "" 1248 | }, 1249 | "require": { 1250 | "doctrine/instantiator": "^1.3.1", 1251 | "ext-dom": "*", 1252 | "ext-json": "*", 1253 | "ext-libxml": "*", 1254 | "ext-mbstring": "*", 1255 | "ext-xml": "*", 1256 | "ext-xmlwriter": "*", 1257 | "myclabs/deep-copy": "^1.9.5", 1258 | "phar-io/manifest": "^1.0.3", 1259 | "phar-io/version": "^2.0.1", 1260 | "php": "^7.3", 1261 | "phpspec/prophecy": "^1.10.3", 1262 | "phpunit/php-code-coverage": "^8.0.2", 1263 | "phpunit/php-file-iterator": "^3.0.3", 1264 | "phpunit/php-invoker": "^3.0.2", 1265 | "phpunit/php-text-template": "^2.0.2", 1266 | "phpunit/php-timer": "^5.0.1", 1267 | "sebastian/code-unit": "^1.0.5", 1268 | "sebastian/comparator": "^4.0.3", 1269 | "sebastian/diff": "^4.0.1", 1270 | "sebastian/environment": "^5.1.2", 1271 | "sebastian/exporter": "^4.0.2", 1272 | "sebastian/global-state": "^4.0", 1273 | "sebastian/object-enumerator": "^4.0.2", 1274 | "sebastian/resource-operations": "^3.0.2", 1275 | "sebastian/type": "^2.1.1", 1276 | "sebastian/version": "^3.0.1" 1277 | }, 1278 | "require-dev": { 1279 | "ext-pdo": "*", 1280 | "phpspec/prophecy-phpunit": "^2.0" 1281 | }, 1282 | "suggest": { 1283 | "ext-soap": "*", 1284 | "ext-xdebug": "*" 1285 | }, 1286 | "bin": [ 1287 | "phpunit" 1288 | ], 1289 | "type": "library", 1290 | "extra": { 1291 | "branch-alias": { 1292 | "dev-master": "9.2-dev" 1293 | } 1294 | }, 1295 | "autoload": { 1296 | "classmap": [ 1297 | "src/" 1298 | ], 1299 | "files": [ 1300 | "src/Framework/Assert/Functions.php" 1301 | ] 1302 | }, 1303 | "notification-url": "https://packagist.org/downloads/", 1304 | "license": [ 1305 | "BSD-3-Clause" 1306 | ], 1307 | "authors": [ 1308 | { 1309 | "name": "Sebastian Bergmann", 1310 | "email": "sebastian@phpunit.de", 1311 | "role": "lead" 1312 | } 1313 | ], 1314 | "description": "The PHP Unit Testing framework.", 1315 | "homepage": "https://phpunit.de/", 1316 | "keywords": [ 1317 | "phpunit", 1318 | "testing", 1319 | "xunit" 1320 | ], 1321 | "time": "2020-07-13T17:55:55+00:00" 1322 | }, 1323 | { 1324 | "name": "psr/container", 1325 | "version": "1.0.0", 1326 | "source": { 1327 | "type": "git", 1328 | "url": "https://github.com/php-fig/container.git", 1329 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 1330 | }, 1331 | "dist": { 1332 | "type": "zip", 1333 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 1334 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 1335 | "shasum": "" 1336 | }, 1337 | "require": { 1338 | "php": ">=5.3.0" 1339 | }, 1340 | "type": "library", 1341 | "extra": { 1342 | "branch-alias": { 1343 | "dev-master": "1.0.x-dev" 1344 | } 1345 | }, 1346 | "autoload": { 1347 | "psr-4": { 1348 | "Psr\\Container\\": "src/" 1349 | } 1350 | }, 1351 | "notification-url": "https://packagist.org/downloads/", 1352 | "license": [ 1353 | "MIT" 1354 | ], 1355 | "authors": [ 1356 | { 1357 | "name": "PHP-FIG", 1358 | "homepage": "http://www.php-fig.org/" 1359 | } 1360 | ], 1361 | "description": "Common Container Interface (PHP FIG PSR-11)", 1362 | "homepage": "https://github.com/php-fig/container", 1363 | "keywords": [ 1364 | "PSR-11", 1365 | "container", 1366 | "container-interface", 1367 | "container-interop", 1368 | "psr" 1369 | ], 1370 | "time": "2017-02-14T16:28:37+00:00" 1371 | }, 1372 | { 1373 | "name": "psr/log", 1374 | "version": "1.1.3", 1375 | "source": { 1376 | "type": "git", 1377 | "url": "https://github.com/php-fig/log.git", 1378 | "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" 1379 | }, 1380 | "dist": { 1381 | "type": "zip", 1382 | "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", 1383 | "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", 1384 | "shasum": "" 1385 | }, 1386 | "require": { 1387 | "php": ">=5.3.0" 1388 | }, 1389 | "type": "library", 1390 | "extra": { 1391 | "branch-alias": { 1392 | "dev-master": "1.1.x-dev" 1393 | } 1394 | }, 1395 | "autoload": { 1396 | "psr-4": { 1397 | "Psr\\Log\\": "Psr/Log/" 1398 | } 1399 | }, 1400 | "notification-url": "https://packagist.org/downloads/", 1401 | "license": [ 1402 | "MIT" 1403 | ], 1404 | "authors": [ 1405 | { 1406 | "name": "PHP-FIG", 1407 | "homepage": "http://www.php-fig.org/" 1408 | } 1409 | ], 1410 | "description": "Common interface for logging libraries", 1411 | "homepage": "https://github.com/php-fig/log", 1412 | "keywords": [ 1413 | "log", 1414 | "psr", 1415 | "psr-3" 1416 | ], 1417 | "time": "2020-03-23T09:12:05+00:00" 1418 | }, 1419 | { 1420 | "name": "sebastian/code-unit", 1421 | "version": "1.0.5", 1422 | "source": { 1423 | "type": "git", 1424 | "url": "https://github.com/sebastianbergmann/code-unit.git", 1425 | "reference": "c1e2df332c905079980b119c4db103117e5e5c90" 1426 | }, 1427 | "dist": { 1428 | "type": "zip", 1429 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/c1e2df332c905079980b119c4db103117e5e5c90", 1430 | "reference": "c1e2df332c905079980b119c4db103117e5e5c90", 1431 | "shasum": "" 1432 | }, 1433 | "require": { 1434 | "php": "^7.3 || ^8.0" 1435 | }, 1436 | "require-dev": { 1437 | "phpunit/phpunit": "^9.0" 1438 | }, 1439 | "type": "library", 1440 | "extra": { 1441 | "branch-alias": { 1442 | "dev-master": "1.0-dev" 1443 | } 1444 | }, 1445 | "autoload": { 1446 | "classmap": [ 1447 | "src/" 1448 | ] 1449 | }, 1450 | "notification-url": "https://packagist.org/downloads/", 1451 | "license": [ 1452 | "BSD-3-Clause" 1453 | ], 1454 | "authors": [ 1455 | { 1456 | "name": "Sebastian Bergmann", 1457 | "email": "sebastian@phpunit.de", 1458 | "role": "lead" 1459 | } 1460 | ], 1461 | "description": "Collection of value objects that represent the PHP code units", 1462 | "homepage": "https://github.com/sebastianbergmann/code-unit", 1463 | "time": "2020-06-26T12:50:45+00:00" 1464 | }, 1465 | { 1466 | "name": "sebastian/code-unit-reverse-lookup", 1467 | "version": "2.0.2", 1468 | "source": { 1469 | "type": "git", 1470 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1471 | "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819" 1472 | }, 1473 | "dist": { 1474 | "type": "zip", 1475 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ee51f9bb0c6d8a43337055db3120829fa14da819", 1476 | "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819", 1477 | "shasum": "" 1478 | }, 1479 | "require": { 1480 | "php": "^7.3 || ^8.0" 1481 | }, 1482 | "require-dev": { 1483 | "phpunit/phpunit": "^9.0" 1484 | }, 1485 | "type": "library", 1486 | "extra": { 1487 | "branch-alias": { 1488 | "dev-master": "2.0-dev" 1489 | } 1490 | }, 1491 | "autoload": { 1492 | "classmap": [ 1493 | "src/" 1494 | ] 1495 | }, 1496 | "notification-url": "https://packagist.org/downloads/", 1497 | "license": [ 1498 | "BSD-3-Clause" 1499 | ], 1500 | "authors": [ 1501 | { 1502 | "name": "Sebastian Bergmann", 1503 | "email": "sebastian@phpunit.de" 1504 | } 1505 | ], 1506 | "description": "Looks up which function or method a line of code belongs to", 1507 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1508 | "time": "2020-06-26T12:04:00+00:00" 1509 | }, 1510 | { 1511 | "name": "sebastian/comparator", 1512 | "version": "4.0.3", 1513 | "source": { 1514 | "type": "git", 1515 | "url": "https://github.com/sebastianbergmann/comparator.git", 1516 | "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f" 1517 | }, 1518 | "dist": { 1519 | "type": "zip", 1520 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", 1521 | "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", 1522 | "shasum": "" 1523 | }, 1524 | "require": { 1525 | "php": "^7.3 || ^8.0", 1526 | "sebastian/diff": "^4.0", 1527 | "sebastian/exporter": "^4.0" 1528 | }, 1529 | "require-dev": { 1530 | "phpunit/phpunit": "^9.0" 1531 | }, 1532 | "type": "library", 1533 | "extra": { 1534 | "branch-alias": { 1535 | "dev-master": "4.0-dev" 1536 | } 1537 | }, 1538 | "autoload": { 1539 | "classmap": [ 1540 | "src/" 1541 | ] 1542 | }, 1543 | "notification-url": "https://packagist.org/downloads/", 1544 | "license": [ 1545 | "BSD-3-Clause" 1546 | ], 1547 | "authors": [ 1548 | { 1549 | "name": "Sebastian Bergmann", 1550 | "email": "sebastian@phpunit.de" 1551 | }, 1552 | { 1553 | "name": "Jeff Welch", 1554 | "email": "whatthejeff@gmail.com" 1555 | }, 1556 | { 1557 | "name": "Volker Dusch", 1558 | "email": "github@wallbash.com" 1559 | }, 1560 | { 1561 | "name": "Bernhard Schussek", 1562 | "email": "bschussek@2bepublished.at" 1563 | } 1564 | ], 1565 | "description": "Provides the functionality to compare PHP values for equality", 1566 | "homepage": "https://github.com/sebastianbergmann/comparator", 1567 | "keywords": [ 1568 | "comparator", 1569 | "compare", 1570 | "equality" 1571 | ], 1572 | "time": "2020-06-26T12:05:46+00:00" 1573 | }, 1574 | { 1575 | "name": "sebastian/diff", 1576 | "version": "4.0.2", 1577 | "source": { 1578 | "type": "git", 1579 | "url": "https://github.com/sebastianbergmann/diff.git", 1580 | "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113" 1581 | }, 1582 | "dist": { 1583 | "type": "zip", 1584 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", 1585 | "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", 1586 | "shasum": "" 1587 | }, 1588 | "require": { 1589 | "php": "^7.3 || ^8.0" 1590 | }, 1591 | "require-dev": { 1592 | "phpunit/phpunit": "^9.0", 1593 | "symfony/process": "^4.2 || ^5" 1594 | }, 1595 | "type": "library", 1596 | "extra": { 1597 | "branch-alias": { 1598 | "dev-master": "4.0-dev" 1599 | } 1600 | }, 1601 | "autoload": { 1602 | "classmap": [ 1603 | "src/" 1604 | ] 1605 | }, 1606 | "notification-url": "https://packagist.org/downloads/", 1607 | "license": [ 1608 | "BSD-3-Clause" 1609 | ], 1610 | "authors": [ 1611 | { 1612 | "name": "Sebastian Bergmann", 1613 | "email": "sebastian@phpunit.de" 1614 | }, 1615 | { 1616 | "name": "Kore Nordmann", 1617 | "email": "mail@kore-nordmann.de" 1618 | } 1619 | ], 1620 | "description": "Diff implementation", 1621 | "homepage": "https://github.com/sebastianbergmann/diff", 1622 | "keywords": [ 1623 | "diff", 1624 | "udiff", 1625 | "unidiff", 1626 | "unified diff" 1627 | ], 1628 | "time": "2020-06-30T04:46:02+00:00" 1629 | }, 1630 | { 1631 | "name": "sebastian/environment", 1632 | "version": "5.1.2", 1633 | "source": { 1634 | "type": "git", 1635 | "url": "https://github.com/sebastianbergmann/environment.git", 1636 | "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2" 1637 | }, 1638 | "dist": { 1639 | "type": "zip", 1640 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", 1641 | "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", 1642 | "shasum": "" 1643 | }, 1644 | "require": { 1645 | "php": "^7.3 || ^8.0" 1646 | }, 1647 | "require-dev": { 1648 | "phpunit/phpunit": "^9.0" 1649 | }, 1650 | "suggest": { 1651 | "ext-posix": "*" 1652 | }, 1653 | "type": "library", 1654 | "extra": { 1655 | "branch-alias": { 1656 | "dev-master": "5.0-dev" 1657 | } 1658 | }, 1659 | "autoload": { 1660 | "classmap": [ 1661 | "src/" 1662 | ] 1663 | }, 1664 | "notification-url": "https://packagist.org/downloads/", 1665 | "license": [ 1666 | "BSD-3-Clause" 1667 | ], 1668 | "authors": [ 1669 | { 1670 | "name": "Sebastian Bergmann", 1671 | "email": "sebastian@phpunit.de" 1672 | } 1673 | ], 1674 | "description": "Provides functionality to handle HHVM/PHP environments", 1675 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1676 | "keywords": [ 1677 | "Xdebug", 1678 | "environment", 1679 | "hhvm" 1680 | ], 1681 | "time": "2020-06-26T12:07:24+00:00" 1682 | }, 1683 | { 1684 | "name": "sebastian/exporter", 1685 | "version": "4.0.2", 1686 | "source": { 1687 | "type": "git", 1688 | "url": "https://github.com/sebastianbergmann/exporter.git", 1689 | "reference": "571d721db4aec847a0e59690b954af33ebf9f023" 1690 | }, 1691 | "dist": { 1692 | "type": "zip", 1693 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/571d721db4aec847a0e59690b954af33ebf9f023", 1694 | "reference": "571d721db4aec847a0e59690b954af33ebf9f023", 1695 | "shasum": "" 1696 | }, 1697 | "require": { 1698 | "php": "^7.3 || ^8.0", 1699 | "sebastian/recursion-context": "^4.0" 1700 | }, 1701 | "require-dev": { 1702 | "ext-mbstring": "*", 1703 | "phpunit/phpunit": "^9.2" 1704 | }, 1705 | "type": "library", 1706 | "extra": { 1707 | "branch-alias": { 1708 | "dev-master": "4.0-dev" 1709 | } 1710 | }, 1711 | "autoload": { 1712 | "classmap": [ 1713 | "src/" 1714 | ] 1715 | }, 1716 | "notification-url": "https://packagist.org/downloads/", 1717 | "license": [ 1718 | "BSD-3-Clause" 1719 | ], 1720 | "authors": [ 1721 | { 1722 | "name": "Sebastian Bergmann", 1723 | "email": "sebastian@phpunit.de" 1724 | }, 1725 | { 1726 | "name": "Jeff Welch", 1727 | "email": "whatthejeff@gmail.com" 1728 | }, 1729 | { 1730 | "name": "Volker Dusch", 1731 | "email": "github@wallbash.com" 1732 | }, 1733 | { 1734 | "name": "Adam Harvey", 1735 | "email": "aharvey@php.net" 1736 | }, 1737 | { 1738 | "name": "Bernhard Schussek", 1739 | "email": "bschussek@gmail.com" 1740 | } 1741 | ], 1742 | "description": "Provides the functionality to export PHP variables for visualization", 1743 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1744 | "keywords": [ 1745 | "export", 1746 | "exporter" 1747 | ], 1748 | "time": "2020-06-26T12:08:55+00:00" 1749 | }, 1750 | { 1751 | "name": "sebastian/global-state", 1752 | "version": "4.0.0", 1753 | "source": { 1754 | "type": "git", 1755 | "url": "https://github.com/sebastianbergmann/global-state.git", 1756 | "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72" 1757 | }, 1758 | "dist": { 1759 | "type": "zip", 1760 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bdb1e7c79e592b8c82cb1699be3c8743119b8a72", 1761 | "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72", 1762 | "shasum": "" 1763 | }, 1764 | "require": { 1765 | "php": "^7.3", 1766 | "sebastian/object-reflector": "^2.0", 1767 | "sebastian/recursion-context": "^4.0" 1768 | }, 1769 | "require-dev": { 1770 | "ext-dom": "*", 1771 | "phpunit/phpunit": "^9.0" 1772 | }, 1773 | "suggest": { 1774 | "ext-uopz": "*" 1775 | }, 1776 | "type": "library", 1777 | "extra": { 1778 | "branch-alias": { 1779 | "dev-master": "4.0-dev" 1780 | } 1781 | }, 1782 | "autoload": { 1783 | "classmap": [ 1784 | "src/" 1785 | ] 1786 | }, 1787 | "notification-url": "https://packagist.org/downloads/", 1788 | "license": [ 1789 | "BSD-3-Clause" 1790 | ], 1791 | "authors": [ 1792 | { 1793 | "name": "Sebastian Bergmann", 1794 | "email": "sebastian@phpunit.de" 1795 | } 1796 | ], 1797 | "description": "Snapshotting of global state", 1798 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1799 | "keywords": [ 1800 | "global state" 1801 | ], 1802 | "time": "2020-02-07T06:11:37+00:00" 1803 | }, 1804 | { 1805 | "name": "sebastian/object-enumerator", 1806 | "version": "4.0.2", 1807 | "source": { 1808 | "type": "git", 1809 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1810 | "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8" 1811 | }, 1812 | "dist": { 1813 | "type": "zip", 1814 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/074fed2d0a6d08e1677dd8ce9d32aecb384917b8", 1815 | "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8", 1816 | "shasum": "" 1817 | }, 1818 | "require": { 1819 | "php": "^7.3 || ^8.0", 1820 | "sebastian/object-reflector": "^2.0", 1821 | "sebastian/recursion-context": "^4.0" 1822 | }, 1823 | "require-dev": { 1824 | "phpunit/phpunit": "^9.0" 1825 | }, 1826 | "type": "library", 1827 | "extra": { 1828 | "branch-alias": { 1829 | "dev-master": "4.0-dev" 1830 | } 1831 | }, 1832 | "autoload": { 1833 | "classmap": [ 1834 | "src/" 1835 | ] 1836 | }, 1837 | "notification-url": "https://packagist.org/downloads/", 1838 | "license": [ 1839 | "BSD-3-Clause" 1840 | ], 1841 | "authors": [ 1842 | { 1843 | "name": "Sebastian Bergmann", 1844 | "email": "sebastian@phpunit.de" 1845 | } 1846 | ], 1847 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1848 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1849 | "time": "2020-06-26T12:11:32+00:00" 1850 | }, 1851 | { 1852 | "name": "sebastian/object-reflector", 1853 | "version": "2.0.2", 1854 | "source": { 1855 | "type": "git", 1856 | "url": "https://github.com/sebastianbergmann/object-reflector.git", 1857 | "reference": "127a46f6b057441b201253526f81d5406d6c7840" 1858 | }, 1859 | "dist": { 1860 | "type": "zip", 1861 | "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/127a46f6b057441b201253526f81d5406d6c7840", 1862 | "reference": "127a46f6b057441b201253526f81d5406d6c7840", 1863 | "shasum": "" 1864 | }, 1865 | "require": { 1866 | "php": "^7.3 || ^8.0" 1867 | }, 1868 | "require-dev": { 1869 | "phpunit/phpunit": "^9.0" 1870 | }, 1871 | "type": "library", 1872 | "extra": { 1873 | "branch-alias": { 1874 | "dev-master": "2.0-dev" 1875 | } 1876 | }, 1877 | "autoload": { 1878 | "classmap": [ 1879 | "src/" 1880 | ] 1881 | }, 1882 | "notification-url": "https://packagist.org/downloads/", 1883 | "license": [ 1884 | "BSD-3-Clause" 1885 | ], 1886 | "authors": [ 1887 | { 1888 | "name": "Sebastian Bergmann", 1889 | "email": "sebastian@phpunit.de" 1890 | } 1891 | ], 1892 | "description": "Allows reflection of object attributes, including inherited and non-public ones", 1893 | "homepage": "https://github.com/sebastianbergmann/object-reflector/", 1894 | "time": "2020-06-26T12:12:55+00:00" 1895 | }, 1896 | { 1897 | "name": "sebastian/recursion-context", 1898 | "version": "4.0.2", 1899 | "source": { 1900 | "type": "git", 1901 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1902 | "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63" 1903 | }, 1904 | "dist": { 1905 | "type": "zip", 1906 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/062231bf61d2b9448c4fa5a7643b5e1829c11d63", 1907 | "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63", 1908 | "shasum": "" 1909 | }, 1910 | "require": { 1911 | "php": "^7.3 || ^8.0" 1912 | }, 1913 | "require-dev": { 1914 | "phpunit/phpunit": "^9.0" 1915 | }, 1916 | "type": "library", 1917 | "extra": { 1918 | "branch-alias": { 1919 | "dev-master": "4.0-dev" 1920 | } 1921 | }, 1922 | "autoload": { 1923 | "classmap": [ 1924 | "src/" 1925 | ] 1926 | }, 1927 | "notification-url": "https://packagist.org/downloads/", 1928 | "license": [ 1929 | "BSD-3-Clause" 1930 | ], 1931 | "authors": [ 1932 | { 1933 | "name": "Sebastian Bergmann", 1934 | "email": "sebastian@phpunit.de" 1935 | }, 1936 | { 1937 | "name": "Jeff Welch", 1938 | "email": "whatthejeff@gmail.com" 1939 | }, 1940 | { 1941 | "name": "Adam Harvey", 1942 | "email": "aharvey@php.net" 1943 | } 1944 | ], 1945 | "description": "Provides functionality to recursively process PHP variables", 1946 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1947 | "time": "2020-06-26T12:14:17+00:00" 1948 | }, 1949 | { 1950 | "name": "sebastian/resource-operations", 1951 | "version": "3.0.2", 1952 | "source": { 1953 | "type": "git", 1954 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1955 | "reference": "0653718a5a629b065e91f774595267f8dc32e213" 1956 | }, 1957 | "dist": { 1958 | "type": "zip", 1959 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0653718a5a629b065e91f774595267f8dc32e213", 1960 | "reference": "0653718a5a629b065e91f774595267f8dc32e213", 1961 | "shasum": "" 1962 | }, 1963 | "require": { 1964 | "php": "^7.3 || ^8.0" 1965 | }, 1966 | "require-dev": { 1967 | "phpunit/phpunit": "^9.0" 1968 | }, 1969 | "type": "library", 1970 | "extra": { 1971 | "branch-alias": { 1972 | "dev-master": "3.0-dev" 1973 | } 1974 | }, 1975 | "autoload": { 1976 | "classmap": [ 1977 | "src/" 1978 | ] 1979 | }, 1980 | "notification-url": "https://packagist.org/downloads/", 1981 | "license": [ 1982 | "BSD-3-Clause" 1983 | ], 1984 | "authors": [ 1985 | { 1986 | "name": "Sebastian Bergmann", 1987 | "email": "sebastian@phpunit.de" 1988 | } 1989 | ], 1990 | "description": "Provides a list of PHP built-in functions that operate on resources", 1991 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1992 | "time": "2020-06-26T12:16:22+00:00" 1993 | }, 1994 | { 1995 | "name": "sebastian/type", 1996 | "version": "2.2.1", 1997 | "source": { 1998 | "type": "git", 1999 | "url": "https://github.com/sebastianbergmann/type.git", 2000 | "reference": "86991e2b33446cd96e648c18bcdb1e95afb2c05a" 2001 | }, 2002 | "dist": { 2003 | "type": "zip", 2004 | "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/86991e2b33446cd96e648c18bcdb1e95afb2c05a", 2005 | "reference": "86991e2b33446cd96e648c18bcdb1e95afb2c05a", 2006 | "shasum": "" 2007 | }, 2008 | "require": { 2009 | "php": "^7.3 || ^8.0" 2010 | }, 2011 | "require-dev": { 2012 | "phpunit/phpunit": "^9.2" 2013 | }, 2014 | "type": "library", 2015 | "extra": { 2016 | "branch-alias": { 2017 | "dev-master": "2.2-dev" 2018 | } 2019 | }, 2020 | "autoload": { 2021 | "classmap": [ 2022 | "src/" 2023 | ] 2024 | }, 2025 | "notification-url": "https://packagist.org/downloads/", 2026 | "license": [ 2027 | "BSD-3-Clause" 2028 | ], 2029 | "authors": [ 2030 | { 2031 | "name": "Sebastian Bergmann", 2032 | "email": "sebastian@phpunit.de", 2033 | "role": "lead" 2034 | } 2035 | ], 2036 | "description": "Collection of value objects that represent the types of the PHP type system", 2037 | "homepage": "https://github.com/sebastianbergmann/type", 2038 | "time": "2020-07-05T08:31:53+00:00" 2039 | }, 2040 | { 2041 | "name": "sebastian/version", 2042 | "version": "3.0.1", 2043 | "source": { 2044 | "type": "git", 2045 | "url": "https://github.com/sebastianbergmann/version.git", 2046 | "reference": "626586115d0ed31cb71483be55beb759b5af5a3c" 2047 | }, 2048 | "dist": { 2049 | "type": "zip", 2050 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/626586115d0ed31cb71483be55beb759b5af5a3c", 2051 | "reference": "626586115d0ed31cb71483be55beb759b5af5a3c", 2052 | "shasum": "" 2053 | }, 2054 | "require": { 2055 | "php": "^7.3 || ^8.0" 2056 | }, 2057 | "type": "library", 2058 | "extra": { 2059 | "branch-alias": { 2060 | "dev-master": "3.0-dev" 2061 | } 2062 | }, 2063 | "autoload": { 2064 | "classmap": [ 2065 | "src/" 2066 | ] 2067 | }, 2068 | "notification-url": "https://packagist.org/downloads/", 2069 | "license": [ 2070 | "BSD-3-Clause" 2071 | ], 2072 | "authors": [ 2073 | { 2074 | "name": "Sebastian Bergmann", 2075 | "email": "sebastian@phpunit.de", 2076 | "role": "lead" 2077 | } 2078 | ], 2079 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 2080 | "homepage": "https://github.com/sebastianbergmann/version", 2081 | "time": "2020-06-26T12:18:43+00:00" 2082 | }, 2083 | { 2084 | "name": "symfony/console", 2085 | "version": "v5.1.2", 2086 | "source": { 2087 | "type": "git", 2088 | "url": "https://github.com/symfony/console.git", 2089 | "reference": "34ac555a3627e324b660e318daa07572e1140123" 2090 | }, 2091 | "dist": { 2092 | "type": "zip", 2093 | "url": "https://api.github.com/repos/symfony/console/zipball/34ac555a3627e324b660e318daa07572e1140123", 2094 | "reference": "34ac555a3627e324b660e318daa07572e1140123", 2095 | "shasum": "" 2096 | }, 2097 | "require": { 2098 | "php": ">=7.2.5", 2099 | "symfony/polyfill-mbstring": "~1.0", 2100 | "symfony/polyfill-php73": "^1.8", 2101 | "symfony/polyfill-php80": "^1.15", 2102 | "symfony/service-contracts": "^1.1|^2", 2103 | "symfony/string": "^5.1" 2104 | }, 2105 | "conflict": { 2106 | "symfony/dependency-injection": "<4.4", 2107 | "symfony/dotenv": "<5.1", 2108 | "symfony/event-dispatcher": "<4.4", 2109 | "symfony/lock": "<4.4", 2110 | "symfony/process": "<4.4" 2111 | }, 2112 | "provide": { 2113 | "psr/log-implementation": "1.0" 2114 | }, 2115 | "require-dev": { 2116 | "psr/log": "~1.0", 2117 | "symfony/config": "^4.4|^5.0", 2118 | "symfony/dependency-injection": "^4.4|^5.0", 2119 | "symfony/event-dispatcher": "^4.4|^5.0", 2120 | "symfony/lock": "^4.4|^5.0", 2121 | "symfony/process": "^4.4|^5.0", 2122 | "symfony/var-dumper": "^4.4|^5.0" 2123 | }, 2124 | "suggest": { 2125 | "psr/log": "For using the console logger", 2126 | "symfony/event-dispatcher": "", 2127 | "symfony/lock": "", 2128 | "symfony/process": "" 2129 | }, 2130 | "type": "library", 2131 | "extra": { 2132 | "branch-alias": { 2133 | "dev-master": "5.1-dev" 2134 | } 2135 | }, 2136 | "autoload": { 2137 | "psr-4": { 2138 | "Symfony\\Component\\Console\\": "" 2139 | }, 2140 | "exclude-from-classmap": [ 2141 | "/Tests/" 2142 | ] 2143 | }, 2144 | "notification-url": "https://packagist.org/downloads/", 2145 | "license": [ 2146 | "MIT" 2147 | ], 2148 | "authors": [ 2149 | { 2150 | "name": "Fabien Potencier", 2151 | "email": "fabien@symfony.com" 2152 | }, 2153 | { 2154 | "name": "Symfony Community", 2155 | "homepage": "https://symfony.com/contributors" 2156 | } 2157 | ], 2158 | "description": "Symfony Console Component", 2159 | "homepage": "https://symfony.com", 2160 | "time": "2020-06-15T12:59:21+00:00" 2161 | }, 2162 | { 2163 | "name": "symfony/polyfill-ctype", 2164 | "version": "v1.18.0", 2165 | "source": { 2166 | "type": "git", 2167 | "url": "https://github.com/symfony/polyfill-ctype.git", 2168 | "reference": "1c302646f6efc070cd46856e600e5e0684d6b454" 2169 | }, 2170 | "dist": { 2171 | "type": "zip", 2172 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/1c302646f6efc070cd46856e600e5e0684d6b454", 2173 | "reference": "1c302646f6efc070cd46856e600e5e0684d6b454", 2174 | "shasum": "" 2175 | }, 2176 | "require": { 2177 | "php": ">=5.3.3" 2178 | }, 2179 | "suggest": { 2180 | "ext-ctype": "For best performance" 2181 | }, 2182 | "type": "library", 2183 | "extra": { 2184 | "branch-alias": { 2185 | "dev-master": "1.18-dev" 2186 | }, 2187 | "thanks": { 2188 | "name": "symfony/polyfill", 2189 | "url": "https://github.com/symfony/polyfill" 2190 | } 2191 | }, 2192 | "autoload": { 2193 | "psr-4": { 2194 | "Symfony\\Polyfill\\Ctype\\": "" 2195 | }, 2196 | "files": [ 2197 | "bootstrap.php" 2198 | ] 2199 | }, 2200 | "notification-url": "https://packagist.org/downloads/", 2201 | "license": [ 2202 | "MIT" 2203 | ], 2204 | "authors": [ 2205 | { 2206 | "name": "Gert de Pagter", 2207 | "email": "BackEndTea@gmail.com" 2208 | }, 2209 | { 2210 | "name": "Symfony Community", 2211 | "homepage": "https://symfony.com/contributors" 2212 | } 2213 | ], 2214 | "description": "Symfony polyfill for ctype functions", 2215 | "homepage": "https://symfony.com", 2216 | "keywords": [ 2217 | "compatibility", 2218 | "ctype", 2219 | "polyfill", 2220 | "portable" 2221 | ], 2222 | "time": "2020-07-14T12:35:20+00:00" 2223 | }, 2224 | { 2225 | "name": "symfony/polyfill-intl-grapheme", 2226 | "version": "v1.18.0", 2227 | "source": { 2228 | "type": "git", 2229 | "url": "https://github.com/symfony/polyfill-intl-grapheme.git", 2230 | "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5" 2231 | }, 2232 | "dist": { 2233 | "type": "zip", 2234 | "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b740103edbdcc39602239ee8860f0f45a8eb9aa5", 2235 | "reference": "b740103edbdcc39602239ee8860f0f45a8eb9aa5", 2236 | "shasum": "" 2237 | }, 2238 | "require": { 2239 | "php": ">=5.3.3" 2240 | }, 2241 | "suggest": { 2242 | "ext-intl": "For best performance" 2243 | }, 2244 | "type": "library", 2245 | "extra": { 2246 | "branch-alias": { 2247 | "dev-master": "1.18-dev" 2248 | }, 2249 | "thanks": { 2250 | "name": "symfony/polyfill", 2251 | "url": "https://github.com/symfony/polyfill" 2252 | } 2253 | }, 2254 | "autoload": { 2255 | "psr-4": { 2256 | "Symfony\\Polyfill\\Intl\\Grapheme\\": "" 2257 | }, 2258 | "files": [ 2259 | "bootstrap.php" 2260 | ] 2261 | }, 2262 | "notification-url": "https://packagist.org/downloads/", 2263 | "license": [ 2264 | "MIT" 2265 | ], 2266 | "authors": [ 2267 | { 2268 | "name": "Nicolas Grekas", 2269 | "email": "p@tchwork.com" 2270 | }, 2271 | { 2272 | "name": "Symfony Community", 2273 | "homepage": "https://symfony.com/contributors" 2274 | } 2275 | ], 2276 | "description": "Symfony polyfill for intl's grapheme_* functions", 2277 | "homepage": "https://symfony.com", 2278 | "keywords": [ 2279 | "compatibility", 2280 | "grapheme", 2281 | "intl", 2282 | "polyfill", 2283 | "portable", 2284 | "shim" 2285 | ], 2286 | "time": "2020-07-14T12:35:20+00:00" 2287 | }, 2288 | { 2289 | "name": "symfony/polyfill-intl-normalizer", 2290 | "version": "v1.18.0", 2291 | "source": { 2292 | "type": "git", 2293 | "url": "https://github.com/symfony/polyfill-intl-normalizer.git", 2294 | "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e" 2295 | }, 2296 | "dist": { 2297 | "type": "zip", 2298 | "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", 2299 | "reference": "37078a8dd4a2a1e9ab0231af7c6cb671b2ed5a7e", 2300 | "shasum": "" 2301 | }, 2302 | "require": { 2303 | "php": ">=5.3.3" 2304 | }, 2305 | "suggest": { 2306 | "ext-intl": "For best performance" 2307 | }, 2308 | "type": "library", 2309 | "extra": { 2310 | "branch-alias": { 2311 | "dev-master": "1.18-dev" 2312 | }, 2313 | "thanks": { 2314 | "name": "symfony/polyfill", 2315 | "url": "https://github.com/symfony/polyfill" 2316 | } 2317 | }, 2318 | "autoload": { 2319 | "psr-4": { 2320 | "Symfony\\Polyfill\\Intl\\Normalizer\\": "" 2321 | }, 2322 | "files": [ 2323 | "bootstrap.php" 2324 | ], 2325 | "classmap": [ 2326 | "Resources/stubs" 2327 | ] 2328 | }, 2329 | "notification-url": "https://packagist.org/downloads/", 2330 | "license": [ 2331 | "MIT" 2332 | ], 2333 | "authors": [ 2334 | { 2335 | "name": "Nicolas Grekas", 2336 | "email": "p@tchwork.com" 2337 | }, 2338 | { 2339 | "name": "Symfony Community", 2340 | "homepage": "https://symfony.com/contributors" 2341 | } 2342 | ], 2343 | "description": "Symfony polyfill for intl's Normalizer class and related functions", 2344 | "homepage": "https://symfony.com", 2345 | "keywords": [ 2346 | "compatibility", 2347 | "intl", 2348 | "normalizer", 2349 | "polyfill", 2350 | "portable", 2351 | "shim" 2352 | ], 2353 | "time": "2020-07-14T12:35:20+00:00" 2354 | }, 2355 | { 2356 | "name": "symfony/polyfill-mbstring", 2357 | "version": "v1.18.0", 2358 | "source": { 2359 | "type": "git", 2360 | "url": "https://github.com/symfony/polyfill-mbstring.git", 2361 | "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a" 2362 | }, 2363 | "dist": { 2364 | "type": "zip", 2365 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/a6977d63bf9a0ad4c65cd352709e230876f9904a", 2366 | "reference": "a6977d63bf9a0ad4c65cd352709e230876f9904a", 2367 | "shasum": "" 2368 | }, 2369 | "require": { 2370 | "php": ">=5.3.3" 2371 | }, 2372 | "suggest": { 2373 | "ext-mbstring": "For best performance" 2374 | }, 2375 | "type": "library", 2376 | "extra": { 2377 | "branch-alias": { 2378 | "dev-master": "1.18-dev" 2379 | }, 2380 | "thanks": { 2381 | "name": "symfony/polyfill", 2382 | "url": "https://github.com/symfony/polyfill" 2383 | } 2384 | }, 2385 | "autoload": { 2386 | "psr-4": { 2387 | "Symfony\\Polyfill\\Mbstring\\": "" 2388 | }, 2389 | "files": [ 2390 | "bootstrap.php" 2391 | ] 2392 | }, 2393 | "notification-url": "https://packagist.org/downloads/", 2394 | "license": [ 2395 | "MIT" 2396 | ], 2397 | "authors": [ 2398 | { 2399 | "name": "Nicolas Grekas", 2400 | "email": "p@tchwork.com" 2401 | }, 2402 | { 2403 | "name": "Symfony Community", 2404 | "homepage": "https://symfony.com/contributors" 2405 | } 2406 | ], 2407 | "description": "Symfony polyfill for the Mbstring extension", 2408 | "homepage": "https://symfony.com", 2409 | "keywords": [ 2410 | "compatibility", 2411 | "mbstring", 2412 | "polyfill", 2413 | "portable", 2414 | "shim" 2415 | ], 2416 | "time": "2020-07-14T12:35:20+00:00" 2417 | }, 2418 | { 2419 | "name": "symfony/polyfill-php73", 2420 | "version": "v1.18.0", 2421 | "source": { 2422 | "type": "git", 2423 | "url": "https://github.com/symfony/polyfill-php73.git", 2424 | "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca" 2425 | }, 2426 | "dist": { 2427 | "type": "zip", 2428 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fffa1a52a023e782cdcc221d781fe1ec8f87fcca", 2429 | "reference": "fffa1a52a023e782cdcc221d781fe1ec8f87fcca", 2430 | "shasum": "" 2431 | }, 2432 | "require": { 2433 | "php": ">=5.3.3" 2434 | }, 2435 | "type": "library", 2436 | "extra": { 2437 | "branch-alias": { 2438 | "dev-master": "1.18-dev" 2439 | }, 2440 | "thanks": { 2441 | "name": "symfony/polyfill", 2442 | "url": "https://github.com/symfony/polyfill" 2443 | } 2444 | }, 2445 | "autoload": { 2446 | "psr-4": { 2447 | "Symfony\\Polyfill\\Php73\\": "" 2448 | }, 2449 | "files": [ 2450 | "bootstrap.php" 2451 | ], 2452 | "classmap": [ 2453 | "Resources/stubs" 2454 | ] 2455 | }, 2456 | "notification-url": "https://packagist.org/downloads/", 2457 | "license": [ 2458 | "MIT" 2459 | ], 2460 | "authors": [ 2461 | { 2462 | "name": "Nicolas Grekas", 2463 | "email": "p@tchwork.com" 2464 | }, 2465 | { 2466 | "name": "Symfony Community", 2467 | "homepage": "https://symfony.com/contributors" 2468 | } 2469 | ], 2470 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 2471 | "homepage": "https://symfony.com", 2472 | "keywords": [ 2473 | "compatibility", 2474 | "polyfill", 2475 | "portable", 2476 | "shim" 2477 | ], 2478 | "time": "2020-07-14T12:35:20+00:00" 2479 | }, 2480 | { 2481 | "name": "symfony/polyfill-php80", 2482 | "version": "v1.18.0", 2483 | "source": { 2484 | "type": "git", 2485 | "url": "https://github.com/symfony/polyfill-php80.git", 2486 | "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981" 2487 | }, 2488 | "dist": { 2489 | "type": "zip", 2490 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/d87d5766cbf48d72388a9f6b85f280c8ad51f981", 2491 | "reference": "d87d5766cbf48d72388a9f6b85f280c8ad51f981", 2492 | "shasum": "" 2493 | }, 2494 | "require": { 2495 | "php": ">=7.0.8" 2496 | }, 2497 | "type": "library", 2498 | "extra": { 2499 | "branch-alias": { 2500 | "dev-master": "1.18-dev" 2501 | }, 2502 | "thanks": { 2503 | "name": "symfony/polyfill", 2504 | "url": "https://github.com/symfony/polyfill" 2505 | } 2506 | }, 2507 | "autoload": { 2508 | "psr-4": { 2509 | "Symfony\\Polyfill\\Php80\\": "" 2510 | }, 2511 | "files": [ 2512 | "bootstrap.php" 2513 | ], 2514 | "classmap": [ 2515 | "Resources/stubs" 2516 | ] 2517 | }, 2518 | "notification-url": "https://packagist.org/downloads/", 2519 | "license": [ 2520 | "MIT" 2521 | ], 2522 | "authors": [ 2523 | { 2524 | "name": "Ion Bazan", 2525 | "email": "ion.bazan@gmail.com" 2526 | }, 2527 | { 2528 | "name": "Nicolas Grekas", 2529 | "email": "p@tchwork.com" 2530 | }, 2531 | { 2532 | "name": "Symfony Community", 2533 | "homepage": "https://symfony.com/contributors" 2534 | } 2535 | ], 2536 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 2537 | "homepage": "https://symfony.com", 2538 | "keywords": [ 2539 | "compatibility", 2540 | "polyfill", 2541 | "portable", 2542 | "shim" 2543 | ], 2544 | "time": "2020-07-14T12:35:20+00:00" 2545 | }, 2546 | { 2547 | "name": "symfony/service-contracts", 2548 | "version": "v2.1.3", 2549 | "source": { 2550 | "type": "git", 2551 | "url": "https://github.com/symfony/service-contracts.git", 2552 | "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442" 2553 | }, 2554 | "dist": { 2555 | "type": "zip", 2556 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/58c7475e5457c5492c26cc740cc0ad7464be9442", 2557 | "reference": "58c7475e5457c5492c26cc740cc0ad7464be9442", 2558 | "shasum": "" 2559 | }, 2560 | "require": { 2561 | "php": ">=7.2.5", 2562 | "psr/container": "^1.0" 2563 | }, 2564 | "suggest": { 2565 | "symfony/service-implementation": "" 2566 | }, 2567 | "type": "library", 2568 | "extra": { 2569 | "branch-alias": { 2570 | "dev-master": "2.1-dev" 2571 | }, 2572 | "thanks": { 2573 | "name": "symfony/contracts", 2574 | "url": "https://github.com/symfony/contracts" 2575 | } 2576 | }, 2577 | "autoload": { 2578 | "psr-4": { 2579 | "Symfony\\Contracts\\Service\\": "" 2580 | } 2581 | }, 2582 | "notification-url": "https://packagist.org/downloads/", 2583 | "license": [ 2584 | "MIT" 2585 | ], 2586 | "authors": [ 2587 | { 2588 | "name": "Nicolas Grekas", 2589 | "email": "p@tchwork.com" 2590 | }, 2591 | { 2592 | "name": "Symfony Community", 2593 | "homepage": "https://symfony.com/contributors" 2594 | } 2595 | ], 2596 | "description": "Generic abstractions related to writing services", 2597 | "homepage": "https://symfony.com", 2598 | "keywords": [ 2599 | "abstractions", 2600 | "contracts", 2601 | "decoupling", 2602 | "interfaces", 2603 | "interoperability", 2604 | "standards" 2605 | ], 2606 | "time": "2020-07-06T13:23:11+00:00" 2607 | }, 2608 | { 2609 | "name": "symfony/string", 2610 | "version": "v5.1.2", 2611 | "source": { 2612 | "type": "git", 2613 | "url": "https://github.com/symfony/string.git", 2614 | "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298" 2615 | }, 2616 | "dist": { 2617 | "type": "zip", 2618 | "url": "https://api.github.com/repos/symfony/string/zipball/ac70459db781108db7c6d8981dd31ce0e29e3298", 2619 | "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298", 2620 | "shasum": "" 2621 | }, 2622 | "require": { 2623 | "php": ">=7.2.5", 2624 | "symfony/polyfill-ctype": "~1.8", 2625 | "symfony/polyfill-intl-grapheme": "~1.0", 2626 | "symfony/polyfill-intl-normalizer": "~1.0", 2627 | "symfony/polyfill-mbstring": "~1.0", 2628 | "symfony/polyfill-php80": "~1.15" 2629 | }, 2630 | "require-dev": { 2631 | "symfony/error-handler": "^4.4|^5.0", 2632 | "symfony/http-client": "^4.4|^5.0", 2633 | "symfony/translation-contracts": "^1.1|^2", 2634 | "symfony/var-exporter": "^4.4|^5.0" 2635 | }, 2636 | "type": "library", 2637 | "extra": { 2638 | "branch-alias": { 2639 | "dev-master": "5.1-dev" 2640 | } 2641 | }, 2642 | "autoload": { 2643 | "psr-4": { 2644 | "Symfony\\Component\\String\\": "" 2645 | }, 2646 | "files": [ 2647 | "Resources/functions.php" 2648 | ], 2649 | "exclude-from-classmap": [ 2650 | "/Tests/" 2651 | ] 2652 | }, 2653 | "notification-url": "https://packagist.org/downloads/", 2654 | "license": [ 2655 | "MIT" 2656 | ], 2657 | "authors": [ 2658 | { 2659 | "name": "Nicolas Grekas", 2660 | "email": "p@tchwork.com" 2661 | }, 2662 | { 2663 | "name": "Symfony Community", 2664 | "homepage": "https://symfony.com/contributors" 2665 | } 2666 | ], 2667 | "description": "Symfony String component", 2668 | "homepage": "https://symfony.com", 2669 | "keywords": [ 2670 | "grapheme", 2671 | "i18n", 2672 | "string", 2673 | "unicode", 2674 | "utf-8", 2675 | "utf8" 2676 | ], 2677 | "time": "2020-06-11T12:16:36+00:00" 2678 | }, 2679 | { 2680 | "name": "theseer/tokenizer", 2681 | "version": "1.2.0", 2682 | "source": { 2683 | "type": "git", 2684 | "url": "https://github.com/theseer/tokenizer.git", 2685 | "reference": "75a63c33a8577608444246075ea0af0d052e452a" 2686 | }, 2687 | "dist": { 2688 | "type": "zip", 2689 | "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", 2690 | "reference": "75a63c33a8577608444246075ea0af0d052e452a", 2691 | "shasum": "" 2692 | }, 2693 | "require": { 2694 | "ext-dom": "*", 2695 | "ext-tokenizer": "*", 2696 | "ext-xmlwriter": "*", 2697 | "php": "^7.2 || ^8.0" 2698 | }, 2699 | "type": "library", 2700 | "autoload": { 2701 | "classmap": [ 2702 | "src/" 2703 | ] 2704 | }, 2705 | "notification-url": "https://packagist.org/downloads/", 2706 | "license": [ 2707 | "BSD-3-Clause" 2708 | ], 2709 | "authors": [ 2710 | { 2711 | "name": "Arne Blankerts", 2712 | "email": "arne@blankerts.de", 2713 | "role": "Developer" 2714 | } 2715 | ], 2716 | "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", 2717 | "time": "2020-07-12T23:59:07+00:00" 2718 | }, 2719 | { 2720 | "name": "webmozart/assert", 2721 | "version": "1.9.1", 2722 | "source": { 2723 | "type": "git", 2724 | "url": "https://github.com/webmozart/assert.git", 2725 | "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" 2726 | }, 2727 | "dist": { 2728 | "type": "zip", 2729 | "url": "https://api.github.com/repos/webmozart/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", 2730 | "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", 2731 | "shasum": "" 2732 | }, 2733 | "require": { 2734 | "php": "^5.3.3 || ^7.0 || ^8.0", 2735 | "symfony/polyfill-ctype": "^1.8" 2736 | }, 2737 | "conflict": { 2738 | "phpstan/phpstan": "<0.12.20", 2739 | "vimeo/psalm": "<3.9.1" 2740 | }, 2741 | "require-dev": { 2742 | "phpunit/phpunit": "^4.8.36 || ^7.5.13" 2743 | }, 2744 | "type": "library", 2745 | "autoload": { 2746 | "psr-4": { 2747 | "Webmozart\\Assert\\": "src/" 2748 | } 2749 | }, 2750 | "notification-url": "https://packagist.org/downloads/", 2751 | "license": [ 2752 | "MIT" 2753 | ], 2754 | "authors": [ 2755 | { 2756 | "name": "Bernhard Schussek", 2757 | "email": "bschussek@gmail.com" 2758 | } 2759 | ], 2760 | "description": "Assertions to validate method input/output with nice error messages.", 2761 | "keywords": [ 2762 | "assert", 2763 | "check", 2764 | "validate" 2765 | ], 2766 | "time": "2020-07-08T17:02:28+00:00" 2767 | } 2768 | ], 2769 | "aliases": [], 2770 | "minimum-stability": "dev", 2771 | "stability-flags": [], 2772 | "prefer-stable": true, 2773 | "prefer-lowest": false, 2774 | "platform": { 2775 | "php": "^7.3" 2776 | }, 2777 | "platform-dev": [], 2778 | "plugin-api-version": "2.0.0" 2779 | } 2780 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | ./tests/Unit 10 | 11 | 12 | ./tests/Feature 13 | 14 | 15 | 16 | 17 | ./app 18 | ./src 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/ApiResponse.php: -------------------------------------------------------------------------------- 1 | '. $this->message; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/Invoice/InvoiceItem.php: -------------------------------------------------------------------------------- 1 | setName($name); 24 | $this->setPrice($price); 25 | $this->setCommandName($commandName); 26 | $this->setRefCommand($refCommand); 27 | } 28 | 29 | public function getName() 30 | { 31 | return $this->name; 32 | } 33 | 34 | public function getPrice() 35 | { 36 | return $this->price; 37 | } 38 | 39 | public function getCommandName() 40 | { 41 | return $this->commandName; 42 | } 43 | 44 | public function getRefCommand() 45 | { 46 | return $this->refCommand; 47 | } 48 | 49 | public function setName($name) 50 | { 51 | $this->name = $name; 52 | } 53 | 54 | public function setPrice($price) 55 | { 56 | if (is_int($price) && $price > 100) 57 | { 58 | $this->price = $price; 59 | } 60 | else 61 | { 62 | throw new Exception('Price must be a number and greather than 100 !'); 63 | } 64 | } 65 | 66 | public function setCommandName($commandName) 67 | { 68 | $this->commandName = $commandName; 69 | } 70 | 71 | public function setRefCommand($refCommand) 72 | { 73 | $this->refCommand = $refCommand; 74 | } 75 | } -------------------------------------------------------------------------------- /src/PayTech.php: -------------------------------------------------------------------------------- 1 | $invoiceItem->getName(), 23 | 'item_price' => $invoiceItem->getPrice(), 24 | 'command_name' => $invoiceItem->getCommandName(), 25 | 'ref_command' => $invoiceItem->getRefCommand(), 26 | 'env' => Config::getEnv(), 27 | 'currency' => Config::getCurrency(), 28 | 'ipn_url' => Config::getIpnUrl(), 29 | 'success_url' => Config::getIsMobile() ? Config::MOBILE_SUCCESS_URL : Config::getSuccessUrl(), 30 | 'cancel_url' => Config::getIsMobile() ? Config::MOBILE_CANCEL_URL : Config::getCancelUrl(), 31 | 'custom_field' => CustomField::retrieve()->toJSONString() 32 | ], []); 33 | 34 | // @codeCoverageIgnoreStart 35 | if (array_key_exists('token', $response)) 36 | { 37 | ApiResponse::setSuccess(1); 38 | ApiResponse::setToken($response['token']); 39 | ApiResponse::setRedirectUrl(Config::ROOT_URL_BASE . Config::PAYMENT_REDIRECT_PATH . $response['token']); 40 | } 41 | else if(array_key_exists('error', $response)) 42 | { 43 | ApiResponse::setSuccess(-1); 44 | ApiResponse::setErrors($response['error']); 45 | } 46 | else if(array_key_exists('message', $response)) 47 | { 48 | ApiResponse::setSuccess(-1); 49 | ApiResponse::setErrors($response['message']); 50 | } 51 | else 52 | { 53 | ApiResponse::setSuccess(-1); 54 | ApiResponse::setErrors(['Internal Error']); 55 | } 56 | // @codeCoverageIgnoreEnd 57 | 58 | } 59 | } -------------------------------------------------------------------------------- /src/Utils/Check.php: -------------------------------------------------------------------------------- 1 | 'application/json;charset=utf-8', 44 | 'API_KEY' => \PayTech\Config::getApiKey(), 45 | 'API_SECRET' => \PayTech\Config::getApiSecret() 46 | ]); 47 | 48 | array_merge(self::$headers, $headers); 49 | 50 | $jsonPayload = json_encode($data); 51 | 52 | $response = Requests::post($url, self::$headers, $jsonPayload, ['timeout' => self::$timeout]); 53 | 54 | return json_decode($response->body, true); 55 | } 56 | 57 | public static function post($url, $data = [], $headers = []) 58 | { 59 | self::setHeaders([ 60 | 'Content-Type' => 'application/x-www-form-urlencoded;charset=utf-8', 61 | 'API_KEY' => \PayTech\Config::getApiKey(), 62 | 'API_SECRET' => \PayTech\Config::getApiSecret() 63 | ]); 64 | 65 | array_merge(self::$headers, $headers); 66 | 67 | $response = Requests::post($url, self::$headers, $data, ['timeout' => self::$timeout]); 68 | 69 | return json_decode($response->body, true); 70 | } 71 | 72 | public static function get($url, $headers = []) 73 | { 74 | self::setHeaders([ 75 | 'API_KEY' => \PayTech\Config::getApiKey(), 76 | 'API_SECRET' => \PayTech\Config::getApiSecret() 77 | ]); 78 | 79 | array_merge(self::$headers, $headers); 80 | 81 | $response = Requests::get($url, self::$headers, ['timeout' => self::$timeout]); 82 | 83 | return json_decode($response->body, true); 84 | } 85 | 86 | } -------------------------------------------------------------------------------- /src/Utils/Serializer.php: -------------------------------------------------------------------------------- 1 | setData($data); 18 | } 19 | 20 | public function getData() 21 | { 22 | return $this->data; 23 | } 24 | 25 | public function setData(Array $data) 26 | { 27 | $this->data = $data; 28 | } 29 | 30 | public function toJSONString() 31 | { 32 | return json_encode($this->data); 33 | } 34 | 35 | public function toXMLString() 36 | { 37 | return $this->arrayToXml($this->data, ''); 38 | } 39 | 40 | public function toQueryString() 41 | { 42 | return http_build_query($this->data); 43 | } 44 | 45 | // @codeCoverageIgnoreStart 46 | private function arrayToXml($array, $rootElement = null, $xml = null) { 47 | $xmlDocument = $xml; 48 | 49 | if ($xmlDocument === null) 50 | { 51 | $xmlDocument = new \SimpleXMLElement($rootElement !== null ? $rootElement : ''); 52 | } 53 | 54 | foreach ($array as $key => $value) 55 | { 56 | is_array($value) ? $this->arrayToXml($value, $key, $xmlDocument->addChild($key)) : $xmlDocument->addChild($key, $value); 57 | } 58 | 59 | return $xmlDocument->asXML(); 60 | } 61 | // @codeCoverageIgnoreEnd 62 | } -------------------------------------------------------------------------------- /tests/Unit/Exceptions/CurrencyExceptionTest.php: -------------------------------------------------------------------------------- 1 | expectException(\PayTech\Exceptions\CurrencyException::class); 16 | throw new \PayTech\Exceptions\CurrencyException('Test currecny exception', 999); 17 | }); 18 | 19 | test('Instance of CurrencyException should have a message', function () { 20 | $this->assertIsString((new \PayTech\Exceptions\CurrencyException('Test currecny exception', 999))->__toString()); 21 | }); -------------------------------------------------------------------------------- /tests/Unit/Invoice/InvoiceItemTest.php: -------------------------------------------------------------------------------- 1 | assertClassHasAttribute('name', InvoiceItem::class); 19 | }); 20 | 21 | it('Should have price attribute', function () { 22 | $this->assertClassHasAttribute('price', InvoiceItem::class); 23 | }); 24 | 25 | it('Should have command name attribute', function () { 26 | $this->assertClassHasAttribute('commandName', InvoiceItem::class); 27 | }); 28 | 29 | it('Should have reference command attribute', function () { 30 | $this->assertClassHasAttribute('refCommand', InvoiceItem::class); 31 | }); 32 | 33 | it('Should instantiate InvoiceItem class', function () { 34 | $invoiceItem = new InvoiceItem('PS4', 225000, 'command-test', 'ref-command'); 35 | $this->assertInstanceOf(InvoiceItem::class, $invoiceItem); 36 | }); 37 | 38 | it('Should be string for name, command name and ref name', function () { 39 | $invoiceItem = new InvoiceItem('PS4', 225000, 'command-test', 'ref-command'); 40 | $this->assertIsString($invoiceItem->getName()); 41 | $this->assertIsString($invoiceItem->getCommandName()); 42 | $this->assertIsString($invoiceItem->getRefCommand()); 43 | }); 44 | 45 | it('Should change price', function () { 46 | $invoiceItem = new InvoiceItem('PS4', 225000, 'command-test', 'ref-command'); 47 | $this->assertIsInt($invoiceItem->getPrice()); 48 | $invoiceItem->setPrice(250000); 49 | $this->assertNotEquals(225000, $invoiceItem->getPrice()); 50 | }); 51 | 52 | it('Should raise an exception when price is not a number', function () { 53 | $this->expectException(\Exception::class); 54 | $invoiceItem = new InvoiceItem('PS4', '225000', 'command-test', 'ref-command'); 55 | }); 56 | -------------------------------------------------------------------------------- /tests/Unit/PayTech/ApiResponseTest.php: -------------------------------------------------------------------------------- 1 | assertClassHasStaticAttribute('success', ApiResponse::class); 16 | $this->assertClassHasStaticAttribute('token', ApiResponse::class); 17 | $this->assertClassHasStaticAttribute('errors', ApiResponse::class); 18 | $this->assertClassHasStaticAttribute('redirectUrl', ApiResponse::class); 19 | }); 20 | 21 | 22 | it('Shoud set dummy values', function () { 23 | ApiResponse::setErrors('Fatal Error'); 24 | ApiResponse::setSuccess(1); 25 | ApiResponse::setToken('dumytoken54545a4s5a'); 26 | ApiResponse::setRedirectUrl('http://localhost'); 27 | $this->assertIsInt(ApiResponse::getSuccess()); 28 | $this->assertIsString(ApiResponse::getToken()); 29 | $this->assertIsString(ApiResponse::getErrors()); 30 | $this->assertIsString(ApiResponse::getRedirectUrl()); 31 | }); 32 | -------------------------------------------------------------------------------- /tests/Unit/PayTech/ConfigTest.php: -------------------------------------------------------------------------------- 1 | assertSame(\PayTech\Enums\Currency::XOF, strtoupper(Config::getCurrency())); 16 | }); 17 | 18 | test('LiveMode should be activate by default', function () { 19 | $this->assertTrue(Config::getLiveMode()); 20 | }); 21 | 22 | test('TestMode should be disable by default', function () { 23 | $this->assertFalse(Config::getTestMode()); 24 | }); 25 | 26 | test('Mobile config should be disable by default', function () { 27 | $this->assertFalse(Config::getIsMobile()); 28 | }); 29 | 30 | test('Notification Urls should be empty by default', function () { 31 | $this->assertEmpty(Config::getIpnUrl()); 32 | $this->assertEmpty(Config::getSuccessUrl()); 33 | $this->assertEmpty(Config::getCancelUrl()); 34 | }); 35 | 36 | it('Should set some Config attributes', function () { 37 | Config::setApiKey('saplspalsa4545s4a5s4'); 38 | Config::setApiSecret('saplspalsa4545s4a5s4'); 39 | Config::setCurrency(\PayTech\Enums\Currency::USD); 40 | Config::setEnv(\PayTech\Enums\Environment::TEST); 41 | Config::setIsMobile(false); 42 | Config::setIpnUrl('http://papihack/dashboard/'); 43 | Config::setSuccessUrl('http://papihack/dashboard/'); 44 | Config::setCancelUrl('http://papihack/dashboard/'); 45 | 46 | $this->assertIsString(Config::getApiKey()); 47 | $this->assertIsString(Config::getApiSecret()); 48 | $this->assertIsString(Config::getCurrency()); 49 | $this->assertIsBool(Config::getLiveMode()); 50 | $this->assertIsBool(Config::getTestMode()); 51 | $this->assertIsBool(Config::getIsMobile()); 52 | $this->assertIsString(Config::getIpnUrl()); 53 | $this->assertIsString(Config::getSuccessUrl()); 54 | $this->assertIsString(Config::getCancelUrl()); 55 | }); 56 | 57 | it('Should raise an CurrencyException when currency is not allowed', function () { 58 | $this->expectException(\PayTech\Exceptions\CurrencyException::class); 59 | Config::setCurrency('dummy currency'); 60 | }); 61 | 62 | it('Should raise an Exception when env is not allowed', function () { 63 | $this->expectException(\Exception::class); 64 | Config::setEnv('dummyEnv'); 65 | }); 66 | 67 | it('Should set Env when env is allowed', function () { 68 | Config::setEnv(\PayTech\Enums\Environment::TEST); 69 | $this->assertIsString(Config::getEnv()); 70 | }); -------------------------------------------------------------------------------- /tests/Unit/PayTech/CustomFieldTest.php: -------------------------------------------------------------------------------- 1 | assertClassHasStaticAttribute('data', CustomField::class); 16 | }); 17 | 18 | test('The data property should be an empty Array', function () { 19 | $this->assertIsArray(CustomField::retrieve()->getData()); 20 | $this->assertEmpty(CustomField::retrieve()->getData()); 21 | }); 22 | 23 | test('data property should be an empty Array', function () { 24 | CustomField::push(['test' => 'this is a test']); 25 | $this->assertNotEmpty(CustomField::retrieve()->getData()); 26 | }); 27 | 28 | it('Shoud have an entry named test', function () { 29 | CustomField::push(['test' => 'this is a test']); 30 | $this->assertTrue(array_key_exists('test', CustomField::retrieve()->getData())); 31 | }); 32 | 33 | it('Shoud have an entry named test & price', function () { 34 | CustomField::push(['test' => 'this is a test']); 35 | CustomField::set('price', 500); 36 | $this->assertTrue(array_key_exists('test', CustomField::retrieve()->getData())); 37 | $this->assertTrue(array_key_exists('price', CustomField::retrieve()->getData())); 38 | $this->assertEquals(2, count(CustomField::retrieve()->getData())); 39 | }); 40 | 41 | it('Shoud set an dummy entry', function () { 42 | CustomField::set('dummy', 'test'); 43 | $this->assertTrue(array_key_exists('dummy', CustomField::retrieve()->getData())); 44 | $this->assertEquals(3, count(CustomField::retrieve()->getData())); 45 | }); 46 | 47 | it('Shoud get dummy value', function () { 48 | $this->assertIsString(CustomField::find('dummy')); 49 | }); 50 | 51 | it('Should raise an exception when an entry not exist', function () { 52 | $this->expectException(\Exception::class); 53 | CustomField::find('nothin'); 54 | }); -------------------------------------------------------------------------------- /tests/Unit/PayTech/PayTechTest.php: -------------------------------------------------------------------------------- 1 | assertIsNumeric(\PayTech\ApiResponse::getSuccess()); 17 | }); 18 | 19 | it('Should have response after sending data', function () { 20 | $this->assertIsInt(\PayTech\ApiResponse::getSuccess()); 21 | }); -------------------------------------------------------------------------------- /tests/Unit/Utils/CheckTest.php: -------------------------------------------------------------------------------- 1 | assertTrue(Check::isCurrencyAllowed('EUR')); 16 | }); 17 | 18 | it('Should allow XOF currency', function() { 19 | $this->assertTrue(Check::isCurrencyAllowed('xof')); 20 | }); 21 | 22 | it('Should not allow dummy currency', function() { 23 | $this->assertFalse(Check::isCurrencyAllowed('dummyCurrency')); 24 | }); 25 | 26 | it('Should allow Test Env', function() { 27 | $this->assertTrue(Check::isEnvAllowed('test')); 28 | }); 29 | 30 | it('Should allow PROD Env', function() { 31 | $this->assertTrue(Check::isEnvAllowed('PrOD')); 32 | }); 33 | 34 | it('Should not allow dummy env', function() { 35 | $this->assertFalse(Check::isEnvAllowed('dummyEnv')); 36 | }); -------------------------------------------------------------------------------- /tests/Unit/Utils/MakeRequestTest.php: -------------------------------------------------------------------------------- 1 | assertClassHasStaticAttribute('headers', MakeRequest::class); 16 | $this->assertClassHasStaticAttribute('timeout', MakeRequest::class); 17 | }); 18 | 19 | test('Timeout attribute should be 15 by default', function () { 20 | $this->assertEquals(15, MakeRequest::getTimeout()); 21 | }); 22 | 23 | test('Headers attribute should be empty by default', function () { 24 | $this->assertGreaterThanOrEqual(1, MakeRequest::getHeaders()); 25 | }); 26 | 27 | it('Should change default timeout value & set headers attribute', function () { 28 | MakeRequest::setTimeout(20); 29 | MakeRequest::setHeaders(['ACCEPT' => 'application/json;charset=utf-8']); 30 | $this->assertNotEmpty(MakeRequest::getHeaders()); 31 | $this->assertGreaterThanOrEqual(15, MakeRequest::getTimeout()); 32 | }); 33 | 34 | it('Should make a post request with json data', function () { 35 | $response = MakeRequest::json('http://papihack/dashboard/', ['name' => 'papi']); 36 | $this->assertEmpty($response); 37 | }); 38 | 39 | it('Should make a post request', function () { 40 | $response = MakeRequest::post('http://papihack/dashboard/', ['name' => 'papi']); 41 | $this->assertEmpty($response); 42 | }); 43 | 44 | it('Should make a get request', function () { 45 | $response = MakeRequest::get('http://papihack/dashboard/'); 46 | $this->assertEmpty($response); 47 | }); 48 | -------------------------------------------------------------------------------- /tests/Unit/Utils/SerializerTest.php: -------------------------------------------------------------------------------- 1 | assertIsString((new Serializer(['nom' => 'papi', 'job' => 'coder']))->toQueryString()); 16 | }); 17 | 18 | it('Should return a JSON', function() { 19 | $this->assertJsonStringEqualsJsonString(json_encode(['nom' => 'papi', 'job' => 'coder']), (new Serializer(['nom' => 'papi', 'job' => 'coder']))->toJSONString()); 20 | }); 21 | 22 | it('Should return a XML', function() { 23 | $this->assertXmlStringEqualsXmlString("papicoder", 24 | (new Serializer(['nom' => 'papi', 'job' => 'coder']))->toXMLString()); 25 | }); --------------------------------------------------------------------------------