diff --git a/.github/workflows/run-tests-with-coverage.yml b/.github/workflows/run-tests-with-coverage.yml index 67f78591..966ca488 100644 --- a/.github/workflows/run-tests-with-coverage.yml +++ b/.github/workflows/run-tests-with-coverage.yml @@ -12,7 +12,7 @@ jobs: steps: - uses: shivammathur/setup-php@v2 with: - php-version: '8.1' + php-version: '8.3' - uses: actions/checkout@v3 - name: Install Dependencies run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index bbec81fa..00000000 --- a/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM webdevops/php-nginx-dev:8.1 - -RUN wget -O "/usr/local/bin/go-replace" "https://github.com/webdevops/goreplace/releases/download/1.1.2/gr-arm64-linux" \ - && chmod +x "/usr/local/bin/go-replace" \ - && "/usr/local/bin/go-replace" --version diff --git a/bootstrap/app.php b/bootstrap/app.php index bc7cf562..ca05b961 100755 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -15,13 +15,11 @@ realpath(__DIR__.'/../') ); -$env = $app->detectEnvironment(function() -{ +$env = $app->detectEnvironment(function () { return getenv('APP_ENV') ?: 'local'; }); $fn = ".env.{$env}"; $app->loadEnvironmentFrom(file_exists(base_path($fn)) ? $fn : '.env'); - return $app; diff --git a/composer.json b/composer.json index 83999b79..c4eac02d 100644 --- a/composer.json +++ b/composer.json @@ -10,22 +10,22 @@ } ], "require": { - "php": ">=8.1", - "laravel/framework": ">=10.48", - "guzzlehttp/guzzle": ">=6.0", - "maatwebsite/excel": "3.*", - "tecnickcom/tcpdf": "~6.7.4", + "php": ">=8.3", + "laravel/framework": "^11.20", + "guzzlehttp/guzzle": "^7.9.2", + "maatwebsite/excel": "^3.1.55", + "tecnickcom/tcpdf": "^6.7.5", "ext-json": "*", - "php-mock/php-mock-phpunit": "^2.9" + "php-mock/php-mock-phpunit": "^2.10" }, "require-dev": { - "fakerphp/faker": "^1.23", - "mockery/mockery": "1.*", - "phpunit/phpunit": "9.*", - "php-coveralls/php-coveralls": "^2.5", - "orchestra/testbench": "^8.23", - "mpyw/laravel-database-mock": "0.0.1-alpha5", - "friendsofphp/php-cs-fixer": "^3.59", + "fakerphp/faker": "^1.23.1", + "mockery/mockery": "^1.6.12", + "phpunit/phpunit": "^10.5.30", + "php-coveralls/php-coveralls": "^2.7", + "orchestra/testbench": "^9.3", + "mpyw/laravel-database-mock": "^0.0.1-alpha5", + "friendsofphp/php-cs-fixer": "^3.62", "brainmaestro/composer-git-hooks": "^3.0" }, "autoload": { diff --git a/composer.lock b/composer.lock index 95e0fadb..c59333c5 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3b048f679fe48f21716e5adb534a51a5", + "content-hash": "d7555f5abc8ddb00bc4c560b6769d42b", "packages": [ { "name": "brick/math", @@ -68,26 +68,26 @@ }, { "name": "carbonphp/carbon-doctrine-types", - "version": "2.1.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", - "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb" + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", - "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": "^8.1" }, "conflict": { - "doctrine/dbal": "<3.7.0 || >=4.0.0" + "doctrine/dbal": "<4.0.0 || >=5.0.0" }, "require-dev": { - "doctrine/dbal": "^3.7.0", + "doctrine/dbal": "^4.0.0", "nesbot/carbon": "^2.71.0 || ^3.0.0", "phpunit/phpunit": "^10.3" }, @@ -117,7 +117,7 @@ ], "support": { "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", - "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" }, "funding": [ { @@ -133,20 +133,20 @@ "type": "tidelift" } ], - "time": "2023-12-11T17:09:12+00:00" + "time": "2024-02-09T16:56:22+00:00" }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6", + "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6", "shasum": "" }, "require": { @@ -198,7 +198,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.2" }, "funding": [ { @@ -214,20 +214,20 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-07-12T11:35:52+00:00" }, { "name": "dflydev/dot-access-data", - "version": "v3.0.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "f41715465d65213d644d3141a6a93081be5d3549" + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", - "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", "shasum": "" }, "require": { @@ -287,9 +287,9 @@ ], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" }, - "time": "2022-10-27T11:44:00+00:00" + "time": "2024-07-08T12:26:09+00:00" }, { "name": "doctrine/inflector", @@ -382,76 +382,6 @@ ], "time": "2024-02-18T20:23:39+00:00" }, - { - "name": "doctrine/instantiator", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:23:10+00:00" - }, { "name": "doctrine/lexer", "version": "3.0.1", @@ -791,24 +721,24 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.1.2", + "version": "v1.1.3", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", - "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.2" + "phpoption/phpoption": "^1.9.3" }, "require-dev": { - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "autoload": { @@ -837,7 +767,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" }, "funding": [ { @@ -849,26 +779,26 @@ "type": "tidelift" } ], - "time": "2023-11-12T22:16:48+00:00" + "time": "2024-07-20T21:45:45+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.8.1", + "version": "7.9.2", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" + "reference": "d281ed313b989f213357e3be1a179f02196ac99b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", - "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", + "reference": "d281ed313b989f213357e3be1a179f02196ac99b", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.1", - "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -879,9 +809,9 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "guzzle/client-integration-tests": "3.0.2", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -959,7 +889,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.1" + "source": "https://github.com/guzzle/guzzle/tree/7.9.2" }, "funding": [ { @@ -975,20 +905,20 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:35:24+00:00" + "time": "2024-07-24T11:22:20+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", - "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", + "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", + "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", "shasum": "" }, "require": { @@ -996,7 +926,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { @@ -1042,7 +972,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.2" + "source": "https://github.com/guzzle/promises/tree/2.0.3" }, "funding": [ { @@ -1058,20 +988,20 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:19:20+00:00" + "time": "2024-07-18T10:29:17+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.2", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", - "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", "shasum": "" }, "require": { @@ -1086,8 +1016,8 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.36 || ^9.6.15" + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1158,7 +1088,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.2" + "source": "https://github.com/guzzle/psr7/tree/2.7.0" }, "funding": [ { @@ -1174,7 +1104,7 @@ "type": "tidelift" } ], - "time": "2023-12-03T20:05:35+00:00" + "time": "2024-07-18T11:15:46+00:00" }, { "name": "guzzlehttp/uri-template", @@ -1264,16 +1194,16 @@ }, { "name": "laravel/framework", - "version": "v10.48.14", + "version": "v11.20.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "27cb4736bb7e60a5311ec73160068dfbcf98336b" + "reference": "3cd7593dd9b67002fc416b46616f4d4d1da3e571" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/27cb4736bb7e60a5311ec73160068dfbcf98336b", - "reference": "27cb4736bb7e60a5311ec73160068dfbcf98336b", + "url": "https://api.github.com/repos/laravel/framework/zipball/3cd7593dd9b67002fc416b46616f4d4d1da3e571", + "reference": "3cd7593dd9b67002fc416b46616f4d4d1da3e571", "shasum": "" }, "require": { @@ -1289,44 +1219,44 @@ "ext-openssl": "*", "ext-session": "*", "ext-tokenizer": "*", - "fruitcake/php-cors": "^1.2", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8", "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.9", + "laravel/prompts": "^0.1.18", "laravel/serializable-closure": "^1.3", "league/commonmark": "^2.2.1", "league/flysystem": "^3.8.0", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.67", - "nunomaduro/termwind": "^1.13", - "php": "^8.1", + "nesbot/carbon": "^2.72.2|^3.0", + "nunomaduro/termwind": "^2.0", + "php": "^8.2", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^6.2", - "symfony/error-handler": "^6.2", - "symfony/finder": "^6.2", - "symfony/http-foundation": "^6.4", - "symfony/http-kernel": "^6.2", - "symfony/mailer": "^6.2", - "symfony/mime": "^6.2", - "symfony/process": "^6.2", - "symfony/routing": "^6.2", - "symfony/uid": "^6.2", - "symfony/var-dumper": "^6.2", + "symfony/console": "^7.0", + "symfony/error-handler": "^7.0", + "symfony/finder": "^7.0", + "symfony/http-foundation": "^7.0", + "symfony/http-kernel": "^7.0", + "symfony/mailer": "^7.0", + "symfony/mime": "^7.0", + "symfony/polyfill-php83": "^1.28", + "symfony/process": "^7.0", + "symfony/routing": "^7.0", + "symfony/uid": "^7.0", + "symfony/var-dumper": "^7.0", "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.4.1", "voku/portable-ascii": "^2.0" }, "conflict": { - "carbonphp/carbon-doctrine-types": ">=3.0", - "doctrine/dbal": ">=4.0", "mockery/mockery": "1.6.8", - "phpunit/phpunit": ">=11.0.0", "tightenco/collect": "<5.5.33" }, "provide": { "psr/container-implementation": "1.1|2.0", + "psr/log-implementation": "1.0|2.0|3.0", "psr/simple-cache-implementation": "1.0|2.0|3.0" }, "replace": { @@ -1362,36 +1292,35 @@ "illuminate/testing": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version" + "illuminate/view": "self.version", + "spatie/once": "*" }, "require-dev": { "ably/ably-php": "^1.0", "aws/aws-sdk-php": "^3.235.5", - "doctrine/dbal": "^3.5.1", "ext-gmp": "*", - "fakerphp/faker": "^1.21", - "guzzlehttp/guzzle": "^7.5", + "fakerphp/faker": "^1.23", "league/flysystem-aws-s3-v3": "^3.0", "league/flysystem-ftp": "^3.0", "league/flysystem-path-prefixing": "^3.3", "league/flysystem-read-only": "^3.3", "league/flysystem-sftp-v3": "^3.0", - "mockery/mockery": "^1.5.1", + "mockery/mockery": "^1.6", "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^8.23.4", - "pda/pheanstalk": "^4.0", - "phpstan/phpstan": "^1.4.7", - "phpunit/phpunit": "^10.0.7", + "orchestra/testbench-core": "^9.1.5", + "pda/pheanstalk": "^5.0", + "phpstan/phpstan": "^1.11.5", + "phpunit/phpunit": "^10.5|^11.0", "predis/predis": "^2.0.2", - "symfony/cache": "^6.2", - "symfony/http-client": "^6.2.4", - "symfony/psr-http-message-bridge": "^2.0" + "resend/resend-php": "^0.10.0", + "symfony/cache": "^7.0", + "symfony/http-client": "^7.0", + "symfony/psr-http-message-bridge": "^7.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", - "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", + "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", "ext-apcu": "Required to use the APC cache driver.", "ext-fileinfo": "Required to use the Filesystem class.", "ext-ftp": "Required to use the Flysystem FTP driver.", @@ -1400,34 +1329,34 @@ "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", "ext-pdo": "Required to use all database features.", "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", "league/flysystem-read-only": "Required to use read-only disks (^3.3)", "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", - "mockery/mockery": "Required to use mocking (^1.5.1).", + "mockery/mockery": "Required to use mocking (^1.6).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8|^10.0.7).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", "predis/predis": "Required to use the predis connector (^2.0.2).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^6.2).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "10.x-dev" + "dev-master": "11.x-dev" } }, "autoload": { @@ -1467,7 +1396,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-06-21T10:06:42+00:00" + "time": "2024-08-06T14:39:21+00:00" }, { "name": "laravel/prompts", @@ -1529,26 +1458,27 @@ }, { "name": "laravel/serializable-closure", - "version": "v1.3.3", + "version": "v1.3.4", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "3dbf8a8e914634c48d389c1234552666b3d43754" + "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754", - "reference": "3dbf8a8e914634c48d389c1234552666b3d43754", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/61b87392d986dc49ad5ef64e75b1ff5fee24ef81", + "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81", "shasum": "" }, "require": { "php": "^7.3|^8.0" }, "require-dev": { - "nesbot/carbon": "^2.61", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0", + "nesbot/carbon": "^2.61|^3.0", "pestphp/pest": "^1.21.3", "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11" + "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" }, "type": "library", "extra": { @@ -1585,20 +1515,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2023-11-08T14:08:06+00:00" + "time": "2024-08-02T07:48:17+00:00" }, { "name": "league/commonmark", - "version": "2.4.2", + "version": "2.5.3", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf" + "reference": "b650144166dfa7703e62a22e493b853b58d874b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/91c24291965bd6d7c46c46a12ba7492f83b1cadf", - "reference": "91c24291965bd6d7c46c46a12ba7492f83b1cadf", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/b650144166dfa7703e62a22e493b853b58d874b0", + "reference": "b650144166dfa7703e62a22e493b853b58d874b0", "shasum": "" }, "require": { @@ -1611,8 +1541,8 @@ }, "require-dev": { "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.3", - "commonmark/commonmark.js": "0.30.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", "composer/package-versions-deprecated": "^1.8", "embed/embed": "^4.4", "erusev/parsedown": "^1.0", @@ -1634,7 +1564,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "2.6-dev" } }, "autoload": { @@ -1691,7 +1621,7 @@ "type": "tidelift" } ], - "time": "2024-02-02T11:59:32+00:00" + "time": "2024-08-16T11:46:16+00:00" }, { "name": "league/config", @@ -2234,16 +2164,16 @@ }, { "name": "monolog/monolog", - "version": "3.6.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654" + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4b18b21a5527a3d5ffdac2fd35d3ab25a9597654", - "reference": "4b18b21a5527a3d5ffdac2fd35d3ab25a9597654", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", + "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", "shasum": "" }, "require": { @@ -2319,7 +2249,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.6.0" + "source": "https://github.com/Seldaek/monolog/tree/3.7.0" }, "funding": [ { @@ -2331,7 +2261,7 @@ "type": "tidelift" } ], - "time": "2024-04-12T21:02:21+00:00" + "time": "2024-06-28T09:40:51+00:00" }, { "name": "myclabs/deep-copy", @@ -2395,42 +2325,41 @@ }, { "name": "nesbot/carbon", - "version": "2.72.5", + "version": "3.8.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed" + "reference": "bbd3eef89af8ba66a3aa7952b5439168fbcc529f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/afd46589c216118ecd48ff2b95d77596af1e57ed", - "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bbd3eef89af8ba66a3aa7952b5439168fbcc529f", + "reference": "bbd3eef89af8ba66a3aa7952b5439168fbcc529f", "shasum": "" }, "require": { "carbonphp/carbon-doctrine-types": "*", "ext-json": "*", - "php": "^7.1.8 || ^8.0", + "php": "^8.1", "psr/clock": "^1.0", + "symfony/clock": "^6.3 || ^7.0", "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", - "doctrine/orm": "^2.7 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.0", - "kylekatarnls/multi-tester": "^2.0", - "ondrejmirtes/better-reflection": "*", - "phpmd/phpmd": "^2.9", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.99 || ^1.7.14", - "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", - "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", - "squizlabs/php_codesniffer": "^3.4" + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.57.2", + "kylekatarnls/multi-tester": "^2.5.3", + "ondrejmirtes/better-reflection": "^6.25.0.4", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.11.2", + "phpunit/phpunit": "^10.5.20", + "squizlabs/php_codesniffer": "^3.9.0" }, "bin": [ "bin/carbon" @@ -2498,7 +2427,7 @@ "type": "tidelift" } ], - "time": "2024-06-03T19:18:41+00:00" + "time": "2024-08-19T06:22:39+00:00" }, { "name": "nette/schema", @@ -2564,20 +2493,20 @@ }, { "name": "nette/utils", - "version": "v4.0.4", + "version": "v4.0.5", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218" + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/d3ad0aa3b9f934602cb3e3902ebccf10be34d218", - "reference": "d3ad0aa3b9f934602cb3e3902ebccf10be34d218", + "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", "shasum": "" }, "require": { - "php": ">=8.0 <8.4" + "php": "8.0 - 8.4" }, "conflict": { "nette/finder": "<3", @@ -2644,22 +2573,22 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.4" + "source": "https://github.com/nette/utils/tree/v4.0.5" }, - "time": "2024-01-17T16:50:36+00:00" + "time": "2024-08-07T15:39:19+00:00" }, { "name": "nikic/php-parser", - "version": "v5.0.2", + "version": "v5.1.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", - "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/683130c2ff8c2739f4822ff7ac5c873ec529abd1", + "reference": "683130c2ff8c2739f4822ff7ac5c873ec529abd1", "shasum": "" }, "require": { @@ -2670,7 +2599,7 @@ }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -2702,39 +2631,38 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.1.0" }, - "time": "2024-03-05T20:51:40+00:00" + "time": "2024-07-01T20:03:41+00:00" }, { "name": "nunomaduro/termwind", - "version": "v1.15.1", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" + "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/58c4c58cf23df7f498daeb97092e34f5259feb6a", + "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^8.0", - "symfony/console": "^5.3.0|^6.0.0" + "php": "^8.2", + "symfony/console": "^7.0.4" }, "require-dev": { - "ergebnis/phpstan-rules": "^1.0.", - "illuminate/console": "^8.0|^9.0", - "illuminate/support": "^8.0|^9.0", - "laravel/pint": "^1.0.0", - "pestphp/pest": "^1.21.0", - "pestphp/pest-plugin-mock": "^1.0", - "phpstan/phpstan": "^1.4.6", - "phpstan/phpstan-strict-rules": "^1.1.0", - "symfony/var-dumper": "^5.2.7|^6.0.0", + "ergebnis/phpstan-rules": "^2.2.0", + "illuminate/console": "^11.0.0", + "laravel/pint": "^1.14.0", + "mockery/mockery": "^1.6.7", + "pestphp/pest": "^2.34.1", + "phpstan/phpstan": "^1.10.59", + "phpstan/phpstan-strict-rules": "^1.5.2", + "symfony/var-dumper": "^7.0.4", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -2743,6 +2671,9 @@ "providers": [ "Termwind\\Laravel\\TermwindServiceProvider" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -2774,7 +2705,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" + "source": "https://github.com/nunomaduro/termwind/tree/v2.0.1" }, "funding": [ { @@ -2790,7 +2721,7 @@ "type": "github" } ], - "time": "2023-02-08T01:06:31+00:00" + "time": "2024-03-06T16:17:14+00:00" }, { "name": "phar-io/manifest", @@ -3224,16 +3155,16 @@ }, { "name": "phpoption/phpoption", - "version": "1.9.2", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", - "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", "shasum": "" }, "require": { @@ -3241,13 +3172,13 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { "dev-master": "1.9-dev" @@ -3283,7 +3214,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" }, "funding": [ { @@ -3295,20 +3226,20 @@ "type": "tidelift" } ], - "time": "2023-11-12T21:59:55+00:00" + "time": "2024-07-20T21:41:07+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.31", + "version": "10.1.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" + "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", - "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae", + "reference": "5da8b1728acd1e6ffdf2ff32ffbdfd04307f26ae", "shasum": "" }, "require": { @@ -3316,18 +3247,18 @@ "ext-libxml": "*", "ext-xmlwriter": "*", "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.1" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -3336,7 +3267,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "10.1-dev" } }, "autoload": { @@ -3365,7 +3296,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.15" }, "funding": [ { @@ -3373,32 +3304,32 @@ "type": "github" } ], - "time": "2024-03-02T06:37:42+00:00" + "time": "2024-06-29T08:25:15+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "version": "4.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -3425,7 +3356,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, "funding": [ { @@ -3433,28 +3365,28 @@ "type": "github" } ], - "time": "2021-12-02T12:48:52+00:00" + "time": "2023-08-31T06:24:48+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-pcntl": "*" @@ -3462,7 +3394,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -3488,7 +3420,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, "funding": [ { @@ -3496,32 +3428,32 @@ "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -3547,7 +3479,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, "funding": [ { @@ -3555,32 +3488,32 @@ "type": "github" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2023-08-31T14:07:24+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -3606,7 +3539,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, "funding": [ { @@ -3614,54 +3547,52 @@ "type": "github" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { "name": "phpunit/phpunit", - "version": "9.6.19", + "version": "10.5.30", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8" + "reference": "b15524febac0153876b4ba9aab3326c2ee94c897" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8", - "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b15524febac0153876b4ba9aab3326c2ee94c897", + "reference": "b15524febac0153876b4ba9aab3326c2ee94c897", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" + "myclabs/deep-copy": "^1.12.0", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.15", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.2", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.2", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.0", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" }, "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -3669,7 +3600,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.6-dev" + "dev-main": "10.5-dev" } }, "autoload": { @@ -3701,7 +3632,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.30" }, "funding": [ { @@ -3717,7 +3648,7 @@ "type": "tidelift" } ], - "time": "2024-04-05T04:35:58+00:00" + "time": "2024-08-13T06:09:37+00:00" }, { "name": "psr/clock", @@ -4358,28 +4289,28 @@ }, { "name": "sebastian/cli-parser", - "version": "1.0.2", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -4402,7 +4333,8 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" }, "funding": [ { @@ -4410,32 +4342,32 @@ "type": "github" } ], - "time": "2024-03-02T06:27:43+00:00" + "time": "2024-03-02T07:12:49+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -4458,7 +4390,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "funding": [ { @@ -4466,32 +4398,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -4513,7 +4445,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { @@ -4521,34 +4453,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.8", + "version": "5.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53", + "reference": "2d3e04c3b4c1e84a5e7382221ad8883c8fbc4f53", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -4587,7 +4521,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.2" }, "funding": [ { @@ -4595,33 +4530,33 @@ "type": "github" } ], - "time": "2022-09-14T12:41:17+00:00" + "time": "2024-08-12T06:03:08+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.3", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" + "reference": "68ff824baeae169ec9f2137158ee529584553799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.2-dev" } }, "autoload": { @@ -4644,7 +4579,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, "funding": [ { @@ -4652,33 +4588,33 @@ "type": "github" } ], - "time": "2023-12-22T06:19:30+00:00" + "time": "2023-12-21T08:37:17+00:00" }, { "name": "sebastian/diff", - "version": "4.0.6", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -4710,7 +4646,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { @@ -4718,27 +4655,27 @@ "type": "github" } ], - "time": "2024-03-02T06:30:58+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { "name": "sebastian/environment", - "version": "5.1.5", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -4746,7 +4683,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -4765,7 +4702,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -4773,7 +4710,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { @@ -4781,34 +4719,34 @@ "type": "github" } ], - "time": "2023-02-03T06:03:51+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.6", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -4850,7 +4788,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" }, "funding": [ { @@ -4858,38 +4797,35 @@ "type": "github" } ], - "time": "2024-03-02T06:33:00+00:00" + "time": "2024-03-02T07:17:12+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.7", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -4908,13 +4844,14 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", "keywords": [ "global state" ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { @@ -4922,33 +4859,33 @@ "type": "github" } ], - "time": "2024-03-02T06:35:11+00:00" + "time": "2024-03-02T07:19:19+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.4", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -4971,7 +4908,8 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { @@ -4979,34 +4917,34 @@ "type": "github" } ], - "time": "2023-12-22T06:20:34+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -5028,7 +4966,7 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { @@ -5036,32 +4974,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -5083,7 +5021,7 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { @@ -5091,32 +5029,32 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.5", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -5146,7 +5084,7 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" }, "funding": [ { @@ -5154,32 +5092,32 @@ "type": "github" } ], - "time": "2023-02-03T06:07:39+00:00" + "time": "2023-02-03T07:05:40+00:00" }, { - "name": "sebastian/resource-operations", - "version": "3.0.4", + "name": "sebastian/type", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -5194,13 +5132,15 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", "support": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -5208,32 +5148,29 @@ "type": "github" } ], - "time": "2024-03-14T16:00:52+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { - "name": "sebastian/type", - "version": "3.2.1", + "name": "sebastian/version", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -5252,11 +5189,11 @@ "role": "lead" } ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, "funding": [ { @@ -5264,104 +5201,124 @@ "type": "github" } ], - "time": "2023-02-03T06:13:03+00:00" + "time": "2023-02-07T11:34:05+00:00" }, { - "name": "sebastian/version", - "version": "3.0.2", + "name": "symfony/clock", + "version": "v7.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "url": "https://github.com/symfony/clock.git", + "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/symfony/clock/zipball/3dfc8b084853586de51dd1441c6242c76a28cbe7", + "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } + "provide": { + "psr/clock-implementation": "1.0" }, + "type": "library", "autoload": { - "classmap": [ - "src/" + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "source": "https://github.com/symfony/clock/tree/v7.1.1" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/console", - "version": "v6.4.8", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "be5854cee0e8c7b110f00d695d11debdfa1a2a91" + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/be5854cee0e8c7b110f00d695d11debdfa1a2a91", - "reference": "be5854cee0e8c7b110f00d695d11debdfa1a2a91", + "url": "https://api.github.com/repos/symfony/console/zipball/cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", + "reference": "cb1dcb30ebc7005c29864ee78adb47b5fb7c3cd9", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^6.4|^7.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5395,7 +5352,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.8" + "source": "https://github.com/symfony/console/tree/v7.1.3" }, "funding": [ { @@ -5411,24 +5368,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/css-selector", - "version": "v6.4.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08" + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/4b61b02fe15db48e3687ce1c45ea385d1780fe08", - "reference": "4b61b02fe15db48e3687ce1c45ea385d1780fe08", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", + "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -5460,7 +5417,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.4.8" + "source": "https://github.com/symfony/css-selector/tree/v7.1.1" }, "funding": [ { @@ -5476,7 +5433,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/deprecation-contracts", @@ -5547,22 +5504,22 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.8", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc" + "reference": "432bb369952795c61ca1def65e078c4a80dad13c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc", - "reference": "ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", + "reference": "432bb369952795c61ca1def65e078c4a80dad13c", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/var-dumper": "^6.4|^7.0" }, "conflict": { "symfony/deprecation-contracts": "<2.5", @@ -5571,7 +5528,7 @@ "require-dev": { "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^5.4|^6.0|^7.0" + "symfony/serializer": "^6.4|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -5602,7 +5559,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.8" + "source": "https://github.com/symfony/error-handler/tree/v7.1.3" }, "funding": [ { @@ -5618,28 +5575,28 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T13:02:51+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b" + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8d7507f02b06e06815e56bb39aa0128e3806208b", - "reference": "8d7507f02b06e06815e56bb39aa0128e3806208b", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", + "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -5648,13 +5605,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5682,7 +5639,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.8" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" }, "funding": [ { @@ -5698,7 +5655,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -5778,23 +5735,23 @@ }, { "name": "symfony/finder", - "version": "v6.4.8", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "3ef977a43883215d560a2cecb82ec8e62131471c" + "reference": "717c6329886f32dc65e27461f80f2a465412fdca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/3ef977a43883215d560a2cecb82ec8e62131471c", - "reference": "3ef977a43883215d560a2cecb82ec8e62131471c", + "url": "https://api.github.com/repos/symfony/finder/zipball/717c6329886f32dc65e27461f80f2a465412fdca", + "reference": "717c6329886f32dc65e27461f80f2a465412fdca", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0|^7.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5822,7 +5779,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.8" + "source": "https://github.com/symfony/finder/tree/v7.1.3" }, "funding": [ { @@ -5838,40 +5795,40 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-24T07:08:44+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.8", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "27de8cc95e11db7a50b027e71caaab9024545947" + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/27de8cc95e11db7a50b027e71caaab9024545947", - "reference": "27de8cc95e11db7a50b027e71caaab9024545947", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", + "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.3" + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0" + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -5899,7 +5856,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.8" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.3" }, "funding": [ { @@ -5915,77 +5872,77 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.8", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1" + "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1", - "reference": "6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/db9702f3a04cc471ec8c70e881825db26ac5f186", + "reference": "db9702f3a04cc471ec8c70e881825db26ac5f186", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.4", - "symfony/config": "<6.1", - "symfony/console": "<5.4", + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<5.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/translation": "<5.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<5.4", + "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.3", - "twig/twig": "<2.13" + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.0.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/clock": "^6.2|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4.5|^6.0.5|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4.4|^7.0.4", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^7.1", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^7.1", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/uid": "^6.4|^7.0", "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.4|^7.0", - "symfony/var-exporter": "^6.2|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "type": "library", "autoload": { @@ -6013,7 +5970,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.8" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.3" }, "funding": [ { @@ -6029,43 +5986,43 @@ "type": "tidelift" } ], - "time": "2024-06-02T16:06:25+00:00" + "time": "2024-07-26T14:58:15+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.8", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "76326421d44c07f7824b19487cfbf87870b37efc" + "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/76326421d44c07f7824b19487cfbf87870b37efc", - "reference": "76326421d44c07f7824b19487cfbf87870b37efc", + "url": "https://api.github.com/repos/symfony/mailer/zipball/8fcff0af9043c8f8a8e229437cea363e282f9aee", + "reference": "8fcff0af9043c8f8a8e229437cea363e282f9aee", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.1", + "php": ">=8.2", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/mime": "^6.2|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", - "symfony/messenger": "<6.2", - "symfony/mime": "<6.2", - "symfony/twig-bridge": "<6.2.1" + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/messenger": "^6.2|^7.0", - "symfony/twig-bridge": "^6.2|^7.0" + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -6093,7 +6050,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.8" + "source": "https://github.com/symfony/mailer/tree/v7.1.2" }, "funding": [ { @@ -6109,25 +6066,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-28T08:00:31+00:00" }, { "name": "symfony/mime", - "version": "v6.4.8", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "618597ab8b78ac86d1c75a9d0b35540cda074f33" + "reference": "26a00b85477e69a4bab63b66c5dce64f18b0cbfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/618597ab8b78ac86d1c75a9d0b35540cda074f33", - "reference": "618597ab8b78ac86d1c75a9d0b35540cda074f33", + "url": "https://api.github.com/repos/symfony/mime/zipball/26a00b85477e69a4bab63b66c5dce64f18b0cbfc", + "reference": "26a00b85477e69a4bab63b66c5dce64f18b0cbfc", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -6135,18 +6091,18 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4", - "symfony/serializer": "<6.3.2" + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.4|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.3.2|^7.0" + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3" }, "type": "library", "autoload": { @@ -6178,7 +6134,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.8" + "source": "https://github.com/symfony/mime/tree/v7.1.2" }, "funding": [ { @@ -6194,7 +6150,7 @@ "type": "tidelift" } ], - "time": "2024-06-01T07:50:16+00:00" + "time": "2024-06-28T10:03:55+00:00" }, { "name": "symfony/polyfill-ctype", @@ -6908,20 +6864,20 @@ }, { "name": "symfony/process", - "version": "v6.4.8", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5" + "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5", - "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5", + "url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca", + "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -6949,7 +6905,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.8" + "source": "https://github.com/symfony/process/tree/v7.1.3" }, "funding": [ { @@ -6965,40 +6921,38 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:44:47+00:00" }, { "name": "symfony/routing", - "version": "v6.4.8", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58" + "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58", - "reference": "8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58", + "url": "https://api.github.com/repos/symfony/routing/zipball/8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", + "reference": "8a908a3f22d5a1b5d297578c2ceb41b02fa916d0", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<6.2", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -7032,7 +6986,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.8" + "source": "https://github.com/symfony/routing/tree/v7.1.3" }, "funding": [ { @@ -7048,7 +7002,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-17T06:10:24+00:00" }, { "name": "symfony/service-contracts", @@ -7135,20 +7089,20 @@ }, { "name": "symfony/string", - "version": "v6.4.8", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "a147c0f826c4a1f3afb763ab8e009e37c877a44d" + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/a147c0f826c4a1f3afb763ab8e009e37c877a44d", - "reference": "a147c0f826c4a1f3afb763ab8e009e37c877a44d", + "url": "https://api.github.com/repos/symfony/string/zipball/ea272a882be7f20cad58d5d78c215001617b7f07", + "reference": "ea272a882be7f20cad58d5d78c215001617b7f07", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -7158,11 +7112,12 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/intl": "^6.2|^7.0", + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -7201,7 +7156,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.8" + "source": "https://github.com/symfony/string/tree/v7.1.3" }, "funding": [ { @@ -7217,37 +7172,36 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-22T10:25:37+00:00" }, { "name": "symfony/translation", - "version": "v6.4.8", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a002933b13989fc4bd0b58e04bf7eec5210e438a" + "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a002933b13989fc4bd0b58e04bf7eec5210e438a", - "reference": "a002933b13989fc4bd0b58e04bf7eec5210e438a", + "url": "https://api.github.com/repos/symfony/translation/zipball/8d5e50c813ba2859a6dfc99a0765c550507934a1", + "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", + "symfony/http-kernel": "<6.4", "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "symfony/translation-implementation": "2.3|3.0" @@ -7255,17 +7209,17 @@ "require-dev": { "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/routing": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -7296,7 +7250,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.8" + "source": "https://github.com/symfony/translation/tree/v7.1.3" }, "funding": [ { @@ -7312,7 +7266,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "symfony/translation-contracts", @@ -7394,24 +7348,24 @@ }, { "name": "symfony/uid", - "version": "v6.4.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "35904eca37a84bb764c560cbfcac9f0ac2bcdbdf" + "reference": "bb59febeecc81528ff672fad5dab7f06db8c8277" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/35904eca37a84bb764c560cbfcac9f0ac2bcdbdf", - "reference": "35904eca37a84bb764c560cbfcac9f0ac2bcdbdf", + "url": "https://api.github.com/repos/symfony/uid/zipball/bb59febeecc81528ff672fad5dab7f06db8c8277", + "reference": "bb59febeecc81528ff672fad5dab7f06db8c8277", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -7448,7 +7402,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.8" + "source": "https://github.com/symfony/uid/tree/v7.1.1" }, "funding": [ { @@ -7464,38 +7418,36 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.8", + "version": "v7.1.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "ad23ca4312395f0a8a8633c831ef4c4ee542ed25" + "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ad23ca4312395f0a8a8633c831ef4c4ee542ed25", - "reference": "ad23ca4312395f0a8a8633c831ef4c4ee542ed25", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/86af4617cca75a6e28598f49ae0690f3b9d4591f", + "reference": "86af4617cca75a6e28598f49ae0690f3b9d4591f", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^6.3|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "bin": [ "Resources/bin/var-dump-server" @@ -7533,7 +7485,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.8" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.3" }, "funding": [ { @@ -7549,7 +7501,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:41:01+00:00" }, { "name": "tecnickcom/tcpdf", @@ -7728,23 +7680,23 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.6.0", + "version": "v5.6.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", - "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.2", + "graham-campbell/result-type": "^1.1.3", "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.2", + "phpoption/phpoption": "^1.9.3", "symfony/polyfill-ctype": "^1.24", "symfony/polyfill-mbstring": "^1.24", "symfony/polyfill-php80": "^1.24" @@ -7761,7 +7713,7 @@ "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { "dev-master": "5.6-dev" @@ -7796,7 +7748,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" }, "funding": [ { @@ -7808,7 +7760,7 @@ "type": "tidelift" } ], - "time": "2023-11-12T22:43:29+00:00" + "time": "2024-07-20T21:52:34+00:00" }, { "name": "voku/portable-ascii", @@ -8083,30 +8035,38 @@ }, { "name": "composer/pcre", - "version": "3.1.4", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "04229f163664973f68f38f6f73d917799168ef24" + "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/04229f163664973f68f38f6f73d917799168ef24", - "reference": "04229f163664973f68f38f6f73d917799168ef24", + "url": "https://api.github.com/repos/composer/pcre/zipball/ea4ab6f9580a4fd221e0418f2c357cdd39102a90", + "reference": "ea4ab6f9580a4fd221e0418f2c357cdd39102a90", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.8" + }, "require-dev": { - "phpstan/phpstan": "^1.3", + "phpstan/phpstan": "^1.11.8", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { "branch-alias": { "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -8134,7 +8094,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.4" + "source": "https://github.com/composer/pcre/tree/3.2.0" }, "funding": [ { @@ -8150,7 +8110,7 @@ "type": "tidelift" } ], - "time": "2024-05-27T13:40:54+00:00" + "time": "2024-07-25T09:36:02+00:00" }, { "name": "composer/xdebug-handler", @@ -8462,16 +8422,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.59.3", + "version": "v3.62.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "30ba9ecc2b0e5205e578fe29973c15653d9bfd29" + "reference": "627692f794d35c43483f34b01d94740df2a73507" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/30ba9ecc2b0e5205e578fe29973c15653d9bfd29", - "reference": "30ba9ecc2b0e5205e578fe29973c15653d9bfd29", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/627692f794d35c43483f34b01d94740df2a73507", + "reference": "627692f794d35c43483f34b01d94740df2a73507", "shasum": "" }, "require": { @@ -8553,7 +8513,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.59.3" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.62.0" }, "funding": [ { @@ -8561,7 +8521,7 @@ "type": "github" } ], - "time": "2024-06-16T14:17:03+00:00" + "time": "2024-08-07T17:03:09+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -8888,40 +8848,38 @@ }, { "name": "nunomaduro/collision", - "version": "v7.10.0", + "version": "v8.4.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "49ec67fa7b002712da8526678abd651c09f375b2" + "reference": "e7d1aa8ed753f63fa816932bbc89678238843b4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/49ec67fa7b002712da8526678abd651c09f375b2", - "reference": "49ec67fa7b002712da8526678abd651c09f375b2", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/e7d1aa8ed753f63fa816932bbc89678238843b4a", + "reference": "e7d1aa8ed753f63fa816932bbc89678238843b4a", "shasum": "" }, "require": { - "filp/whoops": "^2.15.3", - "nunomaduro/termwind": "^1.15.1", - "php": "^8.1.0", - "symfony/console": "^6.3.4" + "filp/whoops": "^2.15.4", + "nunomaduro/termwind": "^2.0.1", + "php": "^8.2.0", + "symfony/console": "^7.1.3" }, "conflict": { - "laravel/framework": ">=11.0.0" + "laravel/framework": "<11.0.0 || >=12.0.0", + "phpunit/phpunit": "<10.5.1 || >=12.0.0" }, "require-dev": { - "brianium/paratest": "^7.3.0", - "laravel/framework": "^10.28.0", - "laravel/pint": "^1.13.3", - "laravel/sail": "^1.25.0", - "laravel/sanctum": "^3.3.1", - "laravel/tinker": "^2.8.2", - "nunomaduro/larastan": "^2.6.4", - "orchestra/testbench-core": "^8.13.0", - "pestphp/pest": "^2.23.2", - "phpunit/phpunit": "^10.4.1", - "sebastian/environment": "^6.0.1", - "spatie/laravel-ignition": "^2.3.1" + "larastan/larastan": "^2.9.8", + "laravel/framework": "^11.19.0", + "laravel/pint": "^1.17.1", + "laravel/sail": "^1.31.0", + "laravel/sanctum": "^4.0.2", + "laravel/tinker": "^2.9.0", + "orchestra/testbench-core": "^9.2.3", + "pestphp/pest": "^2.35.0 || ^3.0.0", + "sebastian/environment": "^6.1.0 || ^7.0.0" }, "type": "library", "extra": { @@ -8929,6 +8887,9 @@ "providers": [ "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" } }, "autoload": { @@ -8980,42 +8941,42 @@ "type": "patreon" } ], - "time": "2023-10-11T15:45:01+00:00" + "time": "2024-08-03T15:32:23+00:00" }, { "name": "orchestra/canvas", - "version": "v8.11.9", + "version": "v9.1.1", "source": { "type": "git", "url": "https://github.com/orchestral/canvas.git", - "reference": "9bed1ce6084af2ce166e9ea1cb160ff22dc94a6d" + "reference": "c49867fac16b6286bf2b8360088620e697a2ea92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/canvas/zipball/9bed1ce6084af2ce166e9ea1cb160ff22dc94a6d", - "reference": "9bed1ce6084af2ce166e9ea1cb160ff22dc94a6d", + "url": "https://api.github.com/repos/orchestral/canvas/zipball/c49867fac16b6286bf2b8360088620e697a2ea92", + "reference": "c49867fac16b6286bf2b8360088620e697a2ea92", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", "composer/semver": "^3.0", - "illuminate/console": "^10.48.4", - "illuminate/database": "^10.48.4", - "illuminate/filesystem": "^10.48.4", - "illuminate/support": "^10.48.4", - "orchestra/canvas-core": "^8.10.2", - "orchestra/testbench-core": "^8.19", - "php": "^8.1", + "illuminate/console": "^11.20", + "illuminate/database": "^11.20", + "illuminate/filesystem": "^11.20", + "illuminate/support": "^11.20", + "orchestra/canvas-core": "^9.0", + "orchestra/testbench-core": "^9.2", + "php": "^8.2", "symfony/polyfill-php83": "^1.28", - "symfony/yaml": "^6.2" + "symfony/yaml": "^7.0" }, "require-dev": { - "laravel/framework": "^10.48.4", - "laravel/pint": "^1.6", - "mockery/mockery": "^1.5.1", + "laravel/framework": "^11.20", + "laravel/pint": "^1.17", + "mockery/mockery": "^1.6", "phpstan/phpstan": "^1.11", - "phpunit/phpunit": "^10.5", - "spatie/laravel-ray": "^1.33" + "phpunit/phpunit": "^11.0", + "spatie/laravel-ray": "^1.35" }, "bin": [ "canvas" @@ -9053,44 +9014,40 @@ "description": "Code Generators for Laravel Applications and Packages", "support": { "issues": "https://github.com/orchestral/canvas/issues", - "source": "https://github.com/orchestral/canvas/tree/v8.11.9" + "source": "https://github.com/orchestral/canvas/tree/v9.1.1" }, - "time": "2024-06-18T08:26:09+00:00" + "time": "2024-08-06T17:20:26+00:00" }, { "name": "orchestra/canvas-core", - "version": "v8.10.2", + "version": "v9.0.0", "source": { "type": "git", "url": "https://github.com/orchestral/canvas-core.git", - "reference": "3af8fb6b1ebd85903ba5d0e6df1c81aedacfedfc" + "reference": "3a29eecf324fe02e3e5628e422314b5cd1a80e48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/canvas-core/zipball/3af8fb6b1ebd85903ba5d0e6df1c81aedacfedfc", - "reference": "3af8fb6b1ebd85903ba5d0e6df1c81aedacfedfc", + "url": "https://api.github.com/repos/orchestral/canvas-core/zipball/3a29eecf324fe02e3e5628e422314b5cd1a80e48", + "reference": "3a29eecf324fe02e3e5628e422314b5cd1a80e48", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", "composer/semver": "^3.0", - "illuminate/console": "^10.38.1", - "illuminate/filesystem": "^10.38.1", - "php": "^8.1", + "illuminate/console": "^11.0", + "illuminate/filesystem": "^11.0", + "php": "^8.2", "symfony/polyfill-php83": "^1.28" }, - "conflict": { - "orchestra/canvas": "<8.11.0", - "orchestra/testbench-core": "<8.2.0" - }, "require-dev": { - "laravel/framework": "^10.38.1", + "laravel/framework": "^11.0", "laravel/pint": "^1.6", "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^8.19", + "orchestra/testbench-core": "^9.0", "phpstan/phpstan": "^1.10.6", "phpunit/phpunit": "^10.1", - "symfony/yaml": "^6.2" + "symfony/yaml": "^7.0" }, "type": "library", "extra": { @@ -9125,35 +9082,35 @@ "description": "Code Generators Builder for Laravel Applications and Packages", "support": { "issues": "https://github.com/orchestral/canvas/issues", - "source": "https://github.com/orchestral/canvas-core/tree/v8.10.2" + "source": "https://github.com/orchestral/canvas-core/tree/v9.0.0" }, - "time": "2023-12-28T01:27:59+00:00" + "time": "2024-03-06T10:00:21+00:00" }, { "name": "orchestra/testbench", - "version": "v8.23.2", + "version": "v9.3.0", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "c9f89b66aaa245a2e36f046aa431587ba46a3f2e" + "reference": "6084d0793bae571713e96d48557562bb8276aa7b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/c9f89b66aaa245a2e36f046aa431587ba46a3f2e", - "reference": "c9f89b66aaa245a2e36f046aa431587ba46a3f2e", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/6084d0793bae571713e96d48557562bb8276aa7b", + "reference": "6084d0793bae571713e96d48557562bb8276aa7b", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", - "fakerphp/faker": "^1.21", - "laravel/framework": "^10.48.10", - "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^8.24.3", - "orchestra/workbench": "^1.4.1 || ^8.5", - "php": "^8.1", - "phpunit/phpunit": "^9.6 || ^10.1", - "symfony/process": "^6.2", - "symfony/yaml": "^6.2", + "fakerphp/faker": "^1.23", + "laravel/framework": "^11.11", + "mockery/mockery": "^1.6", + "orchestra/testbench-core": "^9.3", + "orchestra/workbench": "^9.5", + "php": "^8.2", + "phpunit/phpunit": "^10.5 || ^11.0.1", + "symfony/process": "^7.0", + "symfony/yaml": "^7.0", "vlucas/phpdotenv": "^5.4.1" }, "type": "library", @@ -9180,61 +9137,58 @@ ], "support": { "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v8.23.2" + "source": "https://github.com/orchestral/testbench/tree/v9.3.0" }, - "time": "2024-06-04T12:24:55+00:00" + "time": "2024-08-14T06:29:45+00:00" }, { "name": "orchestra/testbench-core", - "version": "v8.24.4", + "version": "v9.3.0", "source": { "type": "git", "url": "https://github.com/orchestral/testbench-core.git", - "reference": "3acbb96840e2bd4acbe670ee95e9bd55f517964c" + "reference": "d66217119f326f82190a3638739a92a985ad73b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/3acbb96840e2bd4acbe670ee95e9bd55f517964c", - "reference": "3acbb96840e2bd4acbe670ee95e9bd55f517964c", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/d66217119f326f82190a3638739a92a985ad73b3", + "reference": "d66217119f326f82190a3638739a92a985ad73b3", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", - "php": "^8.1", + "php": "^8.2", "symfony/polyfill-php83": "^1.28" }, "conflict": { - "brianium/paratest": "<6.4.0 || >=7.0.0 <7.1.4 || >=8.0.0", - "laravel/framework": "<10.48.2 || >=11.0.0", - "nunomaduro/collision": "<6.4.0 || >=7.0.0 <7.4.0 || >=8.0.0", - "orchestra/testbench-dusk": "<8.21.0 || >=9.0.0", - "orchestra/workbench": "<1.0.0", - "phpunit/phpunit": "<9.6.0 || >=10.6.0" + "brianium/paratest": "<7.3.0 || >=8.0.0", + "laravel/framework": "<11.11.0 || >=12.0.0", + "nunomaduro/collision": "<8.0.0 || >=9.0.0", + "phpunit/phpunit": "<10.5.0 || 11.0.0 || >=11.4.0" }, "require-dev": { - "fakerphp/faker": "^1.21", - "laravel/framework": "^10.48.2", - "laravel/pint": "^1.6", - "mockery/mockery": "^1.5.1", + "fakerphp/faker": "^1.23", + "laravel/framework": "^11.11", + "laravel/pint": "^1.17", + "mockery/mockery": "^1.6", "phpstan/phpstan": "^1.11", - "phpunit/phpunit": "^10.1", - "spatie/laravel-ray": "^1.32.4", - "symfony/process": "^6.2", - "symfony/yaml": "^6.2", + "phpunit/phpunit": "^10.5 || ^11.0.1", + "spatie/laravel-ray": "^1.35", + "symfony/process": "^7.0", + "symfony/yaml": "^7.0", "vlucas/phpdotenv": "^5.4.1" }, "suggest": { - "brianium/paratest": "Allow using parallel testing (^6.4 || ^7.1.4).", + "brianium/paratest": "Allow using parallel tresting (^7.3).", "ext-pcntl": "Required to use all features of the console signal trapping.", - "fakerphp/faker": "Allow using Faker for testing (^1.21).", - "laravel/framework": "Required for testing (^10.48.2).", - "mockery/mockery": "Allow using Mockery for testing (^1.5.1).", - "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^6.4 || ^7.4).", - "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^8.0).", - "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^8.0).", - "phpunit/phpunit": "Allow using PHPUnit for testing (^9.6 || ^10.1).", - "symfony/process": "Required to use Orchestra\\Testbench\\remote function (^6.2).", - "symfony/yaml": "Required for Testbench CLI (^6.2).", + "fakerphp/faker": "Allow using Faker for testing (^1.23).", + "laravel/framework": "Required for testing (^11.11).", + "mockery/mockery": "Allow using Mockery for testing (^1.6).", + "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^8.0).", + "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^9.0).", + "phpunit/phpunit": "Allow using PHPUnit for testing (^10.5 || ^11.0).", + "symfony/process": "Required to use Orchestra\\Testbench\\remote function (^7.0).", + "symfony/yaml": "Required for Testbench CLI (^7.0).", "vlucas/phpdotenv": "Required for Testbench CLI (^5.4.1)." }, "bin": [ @@ -9274,51 +9228,46 @@ "issues": "https://github.com/orchestral/testbench/issues", "source": "https://github.com/orchestral/testbench-core" }, - "time": "2024-06-26T12:14:16+00:00" + "time": "2024-08-14T05:55:35+00:00" }, { "name": "orchestra/workbench", - "version": "v8.5.0", + "version": "v9.5.0", "source": { "type": "git", "url": "https://github.com/orchestral/workbench.git", - "reference": "dce002c20de63b6bde74e0cae2ca558d031a8a17" + "reference": "db7ba7a09d5e3f6bc6cbbea44d58aa18c10ab08f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/workbench/zipball/dce002c20de63b6bde74e0cae2ca558d031a8a17", - "reference": "dce002c20de63b6bde74e0cae2ca558d031a8a17", + "url": "https://api.github.com/repos/orchestral/workbench/zipball/db7ba7a09d5e3f6bc6cbbea44d58aa18c10ab08f", + "reference": "db7ba7a09d5e3f6bc6cbbea44d58aa18c10ab08f", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", - "fakerphp/faker": "^1.21", - "laravel/framework": "^10.38.1", - "laravel/tinker": "^2.8.2", - "nunomaduro/collision": "^6.4 || ^7.10", - "orchestra/canvas": "^8.11.4", - "orchestra/testbench-core": "^8.24", + "fakerphp/faker": "^1.23", + "laravel/framework": "^11.11", + "laravel/tinker": "^2.9", + "nunomaduro/collision": "^8.0", + "orchestra/canvas": "^9.1", + "orchestra/testbench-core": "^9.2", "php": "^8.1", - "spatie/laravel-ray": "^1.32.4", + "spatie/laravel-ray": "^1.35", "symfony/polyfill-php83": "^1.28", - "symfony/yaml": "^6.2" + "symfony/yaml": "^7.0" }, "require-dev": { - "laravel/pint": "^1.4", - "mockery/mockery": "^1.5.1", + "laravel/pint": "^1.17", + "mockery/mockery": "^1.6", "phpstan/phpstan": "^1.11", - "phpunit/phpunit": "^10.1", - "symfony/process": "^6.2" + "phpunit/phpunit": "^10.5 || ^11.0", + "symfony/process": "^7.0" }, "suggest": { "ext-pcntl": "Required to use all features of the console signal trapping." }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.5.x-dev" - } - }, "autoload": { "psr-4": { "Orchestra\\Workbench\\": "src/" @@ -9343,9 +9292,9 @@ ], "support": { "issues": "https://github.com/orchestral/workbench/issues", - "source": "https://github.com/orchestral/workbench/tree/v8.5.0" + "source": "https://github.com/orchestral/workbench/tree/v9.5.0" }, - "time": "2024-05-20T23:51:13+00:00" + "time": "2024-08-14T00:24:43+00:00" }, { "name": "php-coveralls/php-coveralls", @@ -9431,115 +9380,190 @@ "time": "2023-11-22T10:21:01+00:00" }, { - "name": "phpstan/phpstan", - "version": "1.11.5", + "name": "php-di/invoker", + "version": "2.3.4", "source": { "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "490f0ae1c92b082f154681d7849aee776a7c1443" + "url": "https://github.com/PHP-DI/Invoker.git", + "reference": "33234b32dafa8eb69202f950a1fc92055ed76a86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/490f0ae1c92b082f154681d7849aee776a7c1443", - "reference": "490f0ae1c92b082f154681d7849aee776a7c1443", + "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/33234b32dafa8eb69202f950a1fc92055ed76a86", + "reference": "33234b32dafa8eb69202f950a1fc92055ed76a86", "shasum": "" }, "require": { - "php": "^7.2|^8.0" + "php": ">=7.3", + "psr/container": "^1.0|^2.0" }, - "conflict": { - "phpstan/phpstan-shim": "*" + "require-dev": { + "athletic/athletic": "~0.1.8", + "mnapoli/hard-mode": "~0.3.0", + "phpunit/phpunit": "^9.0" }, - "bin": [ - "phpstan", - "phpstan.phar" - ], "type": "library", "autoload": { - "files": [ - "bootstrap.php" - ] + "psr-4": { + "Invoker\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "PHPStan - PHP Static Analysis Tool", + "description": "Generic and extensible callable invoker", + "homepage": "https://github.com/PHP-DI/Invoker", "keywords": [ - "dev", - "static analysis" + "callable", + "dependency", + "dependency-injection", + "injection", + "invoke", + "invoker" ], "support": { - "docs": "https://phpstan.org/user-guide/getting-started", - "forum": "https://github.com/phpstan/phpstan/discussions", - "issues": "https://github.com/phpstan/phpstan/issues", - "security": "https://github.com/phpstan/phpstan/security/policy", - "source": "https://github.com/phpstan/phpstan-src" + "issues": "https://github.com/PHP-DI/Invoker/issues", + "source": "https://github.com/PHP-DI/Invoker/tree/2.3.4" }, "funding": [ { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", + "url": "https://github.com/mnapoli", "type": "github" } ], - "time": "2024-06-17T15:10:54+00:00" + "time": "2023-09-08T09:24:21+00:00" }, { - "name": "pimple/pimple", - "version": "v3.5.0", + "name": "php-di/php-di", + "version": "7.0.7", "source": { "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed" + "url": "https://github.com/PHP-DI/PHP-DI.git", + "reference": "e87435e3c0e8f22977adc5af0d5cdcc467e15cf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a94b3a4db7fb774b3d78dad2315ddc07629e1bed", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed", + "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/e87435e3c0e8f22977adc5af0d5cdcc467e15cf1", + "reference": "e87435e3c0e8f22977adc5af0d5cdcc467e15cf1", "shasum": "" }, "require": { - "php": ">=7.2.5", + "laravel/serializable-closure": "^1.0", + "php": ">=8.0", + "php-di/invoker": "^2.0", "psr/container": "^1.1 || ^2.0" }, + "provide": { + "psr/container-implementation": "^1.0" + }, "require-dev": { - "symfony/phpunit-bridge": "^5.4@dev" + "friendsofphp/php-cs-fixer": "^3", + "friendsofphp/proxy-manager-lts": "^1", + "mnapoli/phpunit-easymock": "^1.3", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.6" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4.x-dev" - } + "suggest": { + "friendsofphp/proxy-manager-lts": "Install it if you want to use lazy injection (version ^1)" }, + "type": "library", "autoload": { - "psr-0": { - "Pimple": "src/" + "files": [ + "src/functions.php" + ], + "psr-4": { + "DI\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ + "description": "The dependency injection container for humans", + "homepage": "https://php-di.org/", + "keywords": [ + "PSR-11", + "container", + "container-interop", + "dependency injection", + "di", + "ioc", + "psr11" + ], + "support": { + "issues": "https://github.com/PHP-DI/PHP-DI/issues", + "source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.7" + }, + "funding": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "url": "https://github.com/mnapoli", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/php-di/php-di", + "type": "tidelift" } ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", + "time": "2024-07-21T15:55:45+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "1.11.10", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "640410b32995914bde3eed26fa89552f9c2c082f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/640410b32995914bde3eed26fa89552f9c2c082f", + "reference": "640410b32995914bde3eed26fa89552f9c2c082f", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", "keywords": [ - "container", - "dependency injection" + "dev", + "static analysis" ], "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.5.0" + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" }, - "time": "2021-10-28T11:13:42+00:00" + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2024-08-08T09:02:50+00:00" }, { "name": "psy/psysh", @@ -9994,31 +10018,31 @@ }, { "name": "react/socket", - "version": "v1.15.0", + "version": "v1.16.0", "source": { "type": "git", "url": "https://github.com/reactphp/socket.git", - "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038" + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/216d3aec0b87f04a40ca04f481e6af01bdd1d038", - "reference": "216d3aec0b87f04a40ca04f481e6af01bdd1d038", + "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", "shasum": "" }, "require": { "evenement/evenement": "^3.0 || ^2.0 || ^1.0", "php": ">=5.3.0", - "react/dns": "^1.11", + "react/dns": "^1.13", "react/event-loop": "^1.2", - "react/promise": "^3 || ^2.6 || ^1.2.1", - "react/stream": "^1.2" + "react/promise": "^3.2 || ^2.6 || ^1.2.1", + "react/stream": "^1.4" }, "require-dev": { "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", - "react/async": "^4 || ^3 || ^2", + "react/async": "^4.3 || ^3.3 || ^2", "react/promise-stream": "^1.4", - "react/promise-timer": "^1.10" + "react/promise-timer": "^1.11" }, "type": "library", "autoload": { @@ -10062,7 +10086,7 @@ ], "support": { "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.15.0" + "source": "https://github.com/reactphp/socket/tree/v1.16.0" }, "funding": [ { @@ -10070,7 +10094,7 @@ "type": "open_collective" } ], - "time": "2023-12-15T11:02:10+00:00" + "time": "2024-07-26T10:38:09+00:00" }, { "name": "react/stream", @@ -10152,21 +10176,21 @@ }, { "name": "rector/rector", - "version": "1.1.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "c930cdb21294f10955ddfc31b720971e8333943d" + "reference": "2433e95410aef1b34b15d7f1b6a134365a4ddb39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/c930cdb21294f10955ddfc31b720971e8333943d", - "reference": "c930cdb21294f10955ddfc31b720971e8333943d", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/2433e95410aef1b34b15d7f1b6a134365a4ddb39", + "reference": "2433e95410aef1b34b15d7f1b6a134365a4ddb39", "shasum": "" }, "require": { "php": "^7.2|^8.0", - "phpstan/phpstan": "^1.11" + "phpstan/phpstan": "^1.11.9" }, "conflict": { "rector/rector-doctrine": "*", @@ -10199,7 +10223,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/1.1.1" + "source": "https://github.com/rectorphp/rector/tree/1.2.3" }, "funding": [ { @@ -10207,20 +10231,20 @@ "type": "github" } ], - "time": "2024-06-21T07:51:17+00:00" + "time": "2024-08-12T16:36:46+00:00" }, { "name": "spatie/backtrace", - "version": "1.6.1", + "version": "1.6.2", "source": { "type": "git", "url": "https://github.com/spatie/backtrace.git", - "reference": "8373b9d51638292e3bfd736a9c19a654111b4a23" + "reference": "1a9a145b044677ae3424693f7b06479fc8c137a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/8373b9d51638292e3bfd736a9c19a654111b4a23", - "reference": "8373b9d51638292e3bfd736a9c19a654111b4a23", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/1a9a145b044677ae3424693f7b06479fc8c137a9", + "reference": "1a9a145b044677ae3424693f7b06479fc8c137a9", "shasum": "" }, "require": { @@ -10258,7 +10282,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/backtrace/tree/1.6.1" + "source": "https://github.com/spatie/backtrace/tree/1.6.2" }, "funding": [ { @@ -10270,20 +10294,20 @@ "type": "other" } ], - "time": "2024-04-24T13:22:11+00:00" + "time": "2024-07-22T08:21:24+00:00" }, { "name": "spatie/laravel-ray", - "version": "1.36.2", + "version": "1.37.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ray.git", - "reference": "1852faa96e5aa6778ea3401ec3176eee77268718" + "reference": "c2bedfd1172648df2c80aaceb2541d70f1d9a5b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/1852faa96e5aa6778ea3401ec3176eee77268718", - "reference": "1852faa96e5aa6778ea3401ec3176eee77268718", + "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/c2bedfd1172648df2c80aaceb2541d70f1d9a5b9", + "reference": "c2bedfd1172648df2c80aaceb2541d70f1d9a5b9", "shasum": "" }, "require": { @@ -10297,7 +10321,7 @@ "spatie/backtrace": "^1.0", "spatie/ray": "^1.41.1", "symfony/stopwatch": "4.2|^5.1|^6.0|^7.0", - "zbateson/mail-mime-parser": "^1.3.1|^2.0" + "zbateson/mail-mime-parser": "^1.3.1|^2.0|^3.0" }, "require-dev": { "guzzlehttp/guzzle": "^7.3", @@ -10345,7 +10369,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.36.2" + "source": "https://github.com/spatie/laravel-ray/tree/1.37.1" }, "funding": [ { @@ -10357,7 +10381,7 @@ "type": "other" } ], - "time": "2024-05-02T08:26:02+00:00" + "time": "2024-07-12T12:35:17+00:00" }, { "name": "spatie/macroable", @@ -10496,34 +10520,34 @@ }, { "name": "symfony/config", - "version": "v6.4.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "12e7e52515ce37191b193cf3365903c4f3951e35" + "reference": "2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/12e7e52515ce37191b193cf3365903c4f3951e35", - "reference": "12e7e52515ce37191b193cf3365903c4f3951e35", + "url": "https://api.github.com/repos/symfony/config/zipball/2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2", + "reference": "2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^7.1", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<5.4", + "symfony/finder": "<6.4", "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -10551,7 +10575,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.4.8" + "source": "https://github.com/symfony/config/tree/v7.1.1" }, "funding": [ { @@ -10567,29 +10591,29 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/filesystem", - "version": "v6.4.8", + "version": "v7.1.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4d37529150e7081c51b3c5d5718c55a04a9503f3" + "reference": "92a91985250c251de9b947a14bb2c9390b1a562c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4d37529150e7081c51b3c5d5718c55a04a9503f3", - "reference": "4d37529150e7081c51b3c5d5718c55a04a9503f3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/92a91985250c251de9b947a14bb2c9390b1a562c", + "reference": "92a91985250c251de9b947a14bb2c9390b1a562c", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "require-dev": { - "symfony/process": "^5.4|^6.4|^7.0" + "symfony/process": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -10617,7 +10641,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.8" + "source": "https://github.com/symfony/filesystem/tree/v7.1.2" }, "funding": [ { @@ -10633,24 +10657,24 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-28T10:03:55+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.4.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "22ab9e9101ab18de37839074f8a1197f55590c1b" + "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/22ab9e9101ab18de37839074f8a1197f55590c1b", - "reference": "22ab9e9101ab18de37839074f8a1197f55590c1b", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/47aa818121ed3950acd2b58d1d37d08a94f9bf55", + "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "type": "library", @@ -10684,7 +10708,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.4.8" + "source": "https://github.com/symfony/options-resolver/tree/v7.1.1" }, "funding": [ { @@ -10700,7 +10724,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/polyfill-iconv", @@ -10860,20 +10884,20 @@ }, { "name": "symfony/stopwatch", - "version": "v6.4.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "63e069eb616049632cde9674c46957819454b8aa" + "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/63e069eb616049632cde9674c46957819454b8aa", - "reference": "63e069eb616049632cde9674c46957819454b8aa", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", + "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/service-contracts": "^2.5|^3" }, "type": "library", @@ -10902,7 +10926,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.4.8" + "source": "https://github.com/symfony/stopwatch/tree/v7.1.1" }, "funding": [ { @@ -10918,32 +10942,31 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.8", + "version": "v7.1.1", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "52903de178d542850f6f341ba92995d3d63e60c9" + "reference": "fa34c77015aa6720469db7003567b9f772492bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/52903de178d542850f6f341ba92995d3d63e60c9", - "reference": "52903de178d542850f6f341ba92995d3d63e60c9", + "url": "https://api.github.com/repos/symfony/yaml/zipball/fa34c77015aa6720469db7003567b9f772492bf2", + "reference": "fa34c77015aa6720469db7003567b9f772492bf2", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -10974,7 +10997,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.8" + "source": "https://github.com/symfony/yaml/tree/v7.1.1" }, "funding": [ { @@ -10990,34 +11013,35 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-05-31T14:57:53+00:00" }, { "name": "zbateson/mail-mime-parser", - "version": "2.4.1", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/zbateson/mail-mime-parser.git", - "reference": "ff49e02f6489b38f7cc3d1bd3971adc0f872569c" + "reference": "e0d4423fe27850c9dd301190767dbc421acc2f19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/ff49e02f6489b38f7cc3d1bd3971adc0f872569c", - "reference": "ff49e02f6489b38f7cc3d1bd3971adc0f872569c", + "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/e0d4423fe27850c9dd301190767dbc421acc2f19", + "reference": "e0d4423fe27850c9dd301190767dbc421acc2f19", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.7.0|^2.0", - "php": ">=7.1", - "pimple/pimple": "^3.0", - "zbateson/mb-wrapper": "^1.0.1", - "zbateson/stream-decorators": "^1.0.6" + "guzzlehttp/psr7": "^2.5", + "php": ">=8.0", + "php-di/php-di": "^6.0|^7.0", + "psr/log": "^1|^2|^3", + "zbateson/mb-wrapper": "^2.0", + "zbateson/stream-decorators": "^2.1" }, "require-dev": { "friendsofphp/php-cs-fixer": "*", - "mikey179/vfsstream": "^1.6.0", + "monolog/monolog": "^2|^3", "phpstan/phpstan": "*", - "phpunit/phpunit": "<10" + "phpunit/phpunit": "^9.6" }, "suggest": { "ext-iconv": "For best support/performance", @@ -11065,24 +11089,24 @@ "type": "github" } ], - "time": "2024-04-28T00:58:54+00:00" + "time": "2024-08-10T18:44:09+00:00" }, { "name": "zbateson/mb-wrapper", - "version": "1.2.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/zbateson/mb-wrapper.git", - "reference": "09a8b77eb94af3823a9a6623dcc94f8d988da67f" + "reference": "9e4373a153585d12b6c621ac4a6bb143264d4619" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/09a8b77eb94af3823a9a6623dcc94f8d988da67f", - "reference": "09a8b77eb94af3823a9a6623dcc94f8d988da67f", + "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/9e4373a153585d12b6c621ac4a6bb143264d4619", + "reference": "9e4373a153585d12b6c621ac4a6bb143264d4619", "shasum": "" }, "require": { - "php": ">=7.1", + "php": ">=8.0", "symfony/polyfill-iconv": "^1.9", "symfony/polyfill-mbstring": "^1.9" }, @@ -11126,7 +11150,7 @@ ], "support": { "issues": "https://github.com/zbateson/mb-wrapper/issues", - "source": "https://github.com/zbateson/mb-wrapper/tree/1.2.1" + "source": "https://github.com/zbateson/mb-wrapper/tree/2.0.0" }, "funding": [ { @@ -11134,31 +11158,31 @@ "type": "github" } ], - "time": "2024-03-18T04:31:04+00:00" + "time": "2024-03-20T01:38:07+00:00" }, { "name": "zbateson/stream-decorators", - "version": "1.2.1", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/zbateson/stream-decorators.git", - "reference": "783b034024fda8eafa19675fb2552f8654d3a3e9" + "reference": "32a2a62fb0f26313395c996ebd658d33c3f9c4e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/783b034024fda8eafa19675fb2552f8654d3a3e9", - "reference": "783b034024fda8eafa19675fb2552f8654d3a3e9", + "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/32a2a62fb0f26313395c996ebd658d33c3f9c4e5", + "reference": "32a2a62fb0f26313395c996ebd658d33c3f9c4e5", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.9 | ^2.0", - "php": ">=7.2", - "zbateson/mb-wrapper": "^1.0.0" + "guzzlehttp/psr7": "^2.5", + "php": ">=8.0", + "zbateson/mb-wrapper": "^2.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "*", "phpstan/phpstan": "*", - "phpunit/phpunit": "<10.0" + "phpunit/phpunit": "^9.6|^10.0" }, "type": "library", "autoload": { @@ -11189,7 +11213,7 @@ ], "support": { "issues": "https://github.com/zbateson/stream-decorators/issues", - "source": "https://github.com/zbateson/stream-decorators/tree/1.2.1" + "source": "https://github.com/zbateson/stream-decorators/tree/2.1.1" }, "funding": [ { @@ -11197,7 +11221,7 @@ "type": "github" } ], - "time": "2023-05-30T22:51:52+00:00" + "time": "2024-04-29T21:42:39+00:00" } ], "aliases": [], @@ -11208,7 +11232,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=8.1", + "php": ">=8.2", "ext-json": "*" }, "platform-dev": [], diff --git a/docker-compose.yml b/docker-compose.yml index 10295c41..baccb007 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ services: nginx: - image: webdevops/php-nginx-dev:8.1 + image: ghcr.io/ronasit/php-nginx-dev:8.3 build: . working_dir: /app ports: diff --git a/phpunit.xml b/phpunit.xml index d2f2973c..ec0d7afb 100755 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,22 +1,22 @@ - - - - ./src - - - ./app/Http/routes.php - - - - - ./tests - - - - - - - - + + + + ./tests + + + + + + + + + + + ./src + + + ./app/Http/routes.php + + diff --git a/src/Contracts/VersionEnumContract.php b/src/Contracts/VersionEnumContract.php index ffaa7f02..45e489d5 100644 --- a/src/Contracts/VersionEnumContract.php +++ b/src/Contracts/VersionEnumContract.php @@ -7,4 +7,4 @@ interface VersionEnumContract public static function values(): array; public static function toString(string $separator = ','): string; -} \ No newline at end of file +} diff --git a/src/HelpersServiceProvider.php b/src/HelpersServiceProvider.php index ef9803de..91dd39cd 100755 --- a/src/HelpersServiceProvider.php +++ b/src/HelpersServiceProvider.php @@ -27,8 +27,6 @@ public function boot(): void app(ExcelServiceProvider::class, ['app' => app()])->boot(); - $this->loadViewsFrom(__DIR__ . '/Stubs', 'ronasit'); - $this->extendRouter(); } diff --git a/src/Importers/Importer.php b/src/Importers/Importer.php index e73f2821..20723080 100644 --- a/src/Importers/Importer.php +++ b/src/Importers/Importer.php @@ -9,13 +9,13 @@ class Importer { - const DELETED_AT_FIELD = 'deleted_at'; + public const DELETED_AT_FIELD = 'deleted_at'; - const ITEMS_TO_CREATE = 'create'; - const ITEMS_TO_UPDATE = 'update'; + public const ITEMS_TO_CREATE = 'create'; + public const ITEMS_TO_UPDATE = 'update'; - const CREATED_REPORTS = 'created'; - const UPDATED_REPORTS = 'updated'; + public const CREATED_REPORTS = 'created'; + public const UPDATED_REPORTS = 'updated'; protected $input; @@ -27,13 +27,13 @@ class Importer protected $items = [ self::ITEMS_TO_CREATE => [], - self::ITEMS_TO_UPDATE => [] + self::ITEMS_TO_UPDATE => [], ]; protected $report = [ self::UPDATED_REPORTS => 0, self::CREATED_REPORTS => 0, - 'errors' => [] + 'errors' => [], ]; public function setInput($input): self @@ -190,7 +190,7 @@ protected function validateDuplicatingOfId(array $item): bool } return $this->service->withTrashed()->exists([ - 'id' => $item['id'] + 'id' => $item['id'], ]); } diff --git a/src/Interfaces/ExporterInterface.php b/src/Interfaces/ExporterInterface.php index aafb39f5..c8ee54a7 100755 --- a/src/Interfaces/ExporterInterface.php +++ b/src/Interfaces/ExporterInterface.php @@ -28,5 +28,3 @@ public function setFileName(string $fileName); */ public function setType(string $type): self; } - - diff --git a/src/Middleware/SecurityMiddleware.php b/src/Middleware/SecurityMiddleware.php index dcf5fc6a..1a57ce09 100644 --- a/src/Middleware/SecurityMiddleware.php +++ b/src/Middleware/SecurityMiddleware.php @@ -10,8 +10,8 @@ class SecurityMiddleware { protected $cache; - const MAINTENANCE_MODE_KEY = 'maintenance_activated'; - const MAINTENANCE_MODE_HEADER = 'maintenance'; + public const MAINTENANCE_MODE_KEY = 'maintenance_activated'; + public const MAINTENANCE_MODE_HEADER = 'maintenance'; public function __construct(Repository $cache) { @@ -66,7 +66,7 @@ protected function codeVariations(): array Response::HTTP_INSUFFICIENT_STORAGE, Response::HTTP_LOOP_DETECTED, Response::HTTP_NOT_EXTENDED, - Response::HTTP_NETWORK_AUTHENTICATION_REQUIRED + Response::HTTP_NETWORK_AUTHENTICATION_REQUIRED, ]; } } diff --git a/src/Services/HttpRequestService.php b/src/Services/HttpRequestService.php index c014b7b3..e71ac26d 100755 --- a/src/Services/HttpRequestService.php +++ b/src/Services/HttpRequestService.php @@ -150,7 +150,7 @@ protected function sendRequest($method, $url, array $data = [], array $headers = case 'delete': $response = $client->delete($url, $this->options); break; - default : + default: throw new UnknownRequestMethodException($method); } @@ -172,7 +172,7 @@ protected function logRequest(string $typeOfRequest, string $url, array $data, a logger("sending {$typeOfRequest} request:", [ 'url' => $url, 'data' => $data, - 'headers' => $headers + 'headers' => $headers, ]); logger(''); } diff --git a/src/Tests/ModelTestState.php b/src/Tests/ModelTestState.php index 952fd35e..296888d3 100644 --- a/src/Tests/ModelTestState.php +++ b/src/Tests/ModelTestState.php @@ -33,7 +33,7 @@ public function assertNotChanged(): void $this->assertEquals([ 'updated' => [], 'created' => [], - 'deleted' => [] + 'deleted' => [], ], $changes); } @@ -71,7 +71,7 @@ protected function getChanges(): array return [ 'updated' => $this->prepareChanges($updatedRecords), 'created' => $this->prepareChanges($updatedData->values()->toArray()), - 'deleted' => $this->prepareChanges($deletedRecords) + 'deleted' => $this->prepareChanges($deletedRecords), ]; } diff --git a/src/Traits/EntityControlTrait.php b/src/Traits/EntityControlTrait.php index f268056f..545177e8 100755 --- a/src/Traits/EntityControlTrait.php +++ b/src/Traits/EntityControlTrait.php @@ -81,7 +81,7 @@ protected function getQuery($where = []): Query if (!empty($this->attachedRelationsCount)) { foreach ($this->attachedRelationsCount as $requestedRelations) { - list ($countRelation, $relation) = extract_last_part($requestedRelations); + list($countRelation, $relation) = extract_last_part($requestedRelations); if (empty($relation)) { $query->withCount($countRelation); @@ -89,7 +89,7 @@ protected function getQuery($where = []): Query $query->with([ $relation => function ($query) use ($countRelation) { $query->withCount($countRelation); - } + }, ]); } } @@ -465,4 +465,4 @@ protected function resetSettableProperties(bool $value = true): void { $this->shouldSettablePropertiesBeReset = $value; } -} \ No newline at end of file +} diff --git a/src/Traits/MailsMockTrait.php b/src/Traits/MailsMockTrait.php index 26a7e391..60d82139 100644 --- a/src/Traits/MailsMockTrait.php +++ b/src/Traits/MailsMockTrait.php @@ -13,7 +13,7 @@ trait MailsMockTrait private array $requiredExpectationParameters = [ 'emails', - 'fixture' + 'fixture', ]; /** @@ -228,4 +228,4 @@ protected function assertAttachments(array $currentMail, Mailable $mail, int $in } } } -} \ No newline at end of file +} diff --git a/src/Traits/MigrationTrait.php b/src/Traits/MigrationTrait.php index abae31cd..d9e6a9df 100644 --- a/src/Traits/MigrationTrait.php +++ b/src/Traits/MigrationTrait.php @@ -24,7 +24,8 @@ function (Blueprint $table) use ($toEntity, $needAddField, $onDelete) { ->references('id') ->on($this->getTableName($toEntity)) ->onDelete($onDelete); - }); + } + ); } public function dropForeignKey($fromEntity, $toEntity, $needDropField = false) diff --git a/src/Traits/ModelTrait.php b/src/Traits/ModelTrait.php index e1ff9642..1d8642eb 100644 --- a/src/Traits/ModelTrait.php +++ b/src/Traits/ModelTrait.php @@ -14,7 +14,7 @@ trait ModelTrait public static function getFields(): array { - $model = (new static); + $model = (new static()); $keyName = $model->getKeyName(); $guarded = $model->getGuarded(); @@ -132,7 +132,7 @@ protected function prepareRelations(string $relations): array return explode('.', $relations); } else { return [ - $relations + $relations, ]; } } diff --git a/src/Traits/SearchTrait.php b/src/Traits/SearchTrait.php index b8789127..db632008 100644 --- a/src/Traits/SearchTrait.php +++ b/src/Traits/SearchTrait.php @@ -32,7 +32,7 @@ trait SearchTrait 'all', 'per_page', 'page', - 'desc' + 'desc', ]; protected function setAdditionalReservedFilters(...$filterNames) @@ -87,7 +87,7 @@ public function filterByQuery(array $fields, string $mask = "'%{{ value }}%'"): $this->query->where(function ($query) use ($fields, $mask) { foreach ($fields as $field) { if (Str::contains($field, '.')) { - list ($fieldName, $relations) = extract_last_part($field); + list($fieldName, $relations) = extract_last_part($field); $query->orWhereHas($relations, function ($query) use ($fieldName, $mask) { $query->where( @@ -183,7 +183,7 @@ public function wrapPaginatedData(Collection $data): LengthAwarePaginator $paginator = new LengthAwarePaginator($data, $total, $perPage, 1, [ 'path' => Paginator::resolveCurrentPath(), - 'pageName' => 'page' + 'pageName' => 'page', ]); return $this->getModifiedPaginator($paginator); @@ -348,7 +348,7 @@ protected function constructWhere(Query $query, $where = [], ?string $field = nu $field = (empty($field)) ? $this->primaryKey : $field; $where = [ - $field => $where + $field => $where, ]; } @@ -362,7 +362,7 @@ protected function constructWhere(Query $query, $where = [], ?string $field = nu protected function applyWhereCallback(Query $query, string $field, Closure $callback): void { if (Str::contains($field, '.')) { - list ($conditionField, $relations) = extract_last_part($field); + list($conditionField, $relations) = extract_last_part($field); $query->whereHas($relations, function ($q) use ($callback, $conditionField) { $callback($q, $conditionField); diff --git a/src/Traits/TranslationUpdateTrait.php b/src/Traits/TranslationUpdateTrait.php index 1a83ec22..c77c9616 100644 --- a/src/Traits/TranslationUpdateTrait.php +++ b/src/Traits/TranslationUpdateTrait.php @@ -2,7 +2,7 @@ namespace RonasIT\Support\Traits; -use Illuminate\Support\Arr; +use Illuminate\Support\Arr; trait TranslationUpdateTrait { @@ -14,7 +14,7 @@ public function updateWithTranslations($id, $data) return $this->update(['id' => $id], $data); } - $modelInstance = new $this->model; + $modelInstance = new $this->model(); $foreignKey = $modelInstance->allTranslations()->getForeignKeyName(); @@ -23,7 +23,7 @@ public function updateWithTranslations($id, $data) foreach ($translations as $translation) { $translationModel::where([ $foreignKey => $id, - 'locale' => $translation['locale'] + 'locale' => $translation['locale'], ])->update($translation); } diff --git a/src/helpers.php b/src/helpers.php index 3c6abcfb..72161f70 100644 --- a/src/helpers.php +++ b/src/helpers.php @@ -179,6 +179,7 @@ function getGUID(): string mt_srand((double)microtime() * 10000);//optional for php 4.2.0 and up. $charId = strtoupper(md5(uniqid(rand(), true))); $hyphen = chr(45);// "-" + return chr(123)// "{" . substr($charId, 0, 8) . $hyphen . substr($charId, 8, 4) . $hyphen @@ -243,7 +244,7 @@ function clear_folder(string $path): void /** * Builds an associative array by gotten keys and values - * + * * @param array $array * @param callable $callback - should return associate array with "key" and "value" keys * @@ -256,7 +257,7 @@ function clear_folder(string $path): void * } * * @return array - * + * * @deprecated Use array_walk, forEach or mapWithKeys instead */ function array_associate(array $array, callable $callback): array diff --git a/tests/EntityControlTraitTest.php b/tests/EntityControlTraitTest.php index e8ad8533..fb03911c 100644 --- a/tests/EntityControlTraitTest.php +++ b/tests/EntityControlTraitTest.php @@ -4,7 +4,6 @@ use Illuminate\Support\Carbon; use RonasIT\Support\Exceptions\InvalidModelException; -use RonasIT\Support\Tests\Support\Mock\TestModel; use RonasIT\Support\Tests\Support\Mock\TestRepository; use ReflectionProperty; use RonasIT\Support\Tests\Support\Mock\TestRepositoryNoPrimaryKey; @@ -14,7 +13,9 @@ class EntityControlTraitTest extends HelpersTestCase { use SqlMockTrait; - protected TestRepository $testRepositoryClass; + protected static array $selectResult; + + protected static TestRepository $testRepositoryClass; protected ReflectionProperty $onlyTrashedProperty; protected ReflectionProperty $withTrashedProperty; @@ -22,84 +23,77 @@ class EntityControlTraitTest extends HelpersTestCase protected ReflectionProperty $attachedRelationsProperty; protected ReflectionProperty $attachedRelationsCountProperty; - protected array $selectResult; - public function setUp(): void { parent::setUp(); - $this->testRepositoryClass = new TestRepository(); + self::$testRepositoryClass ??= new TestRepository(); $this->onlyTrashedProperty = new ReflectionProperty(TestRepository::class, 'onlyTrashed'); - $this->onlyTrashedProperty->setAccessible(true); $this->withTrashedProperty = new ReflectionProperty(TestRepository::class, 'withTrashed'); - $this->withTrashedProperty->setAccessible(true); $this->forceModeProperty = new ReflectionProperty(TestRepository::class, 'forceMode'); - $this->forceModeProperty->setAccessible(true); $this->attachedRelationsProperty = new ReflectionProperty(TestRepository::class, 'attachedRelations'); - $this->attachedRelationsProperty->setAccessible(true); $this->attachedRelationsCountProperty = new ReflectionProperty(TestRepository::class, 'attachedRelationsCount'); - $this->attachedRelationsCountProperty->setAccessible(true); - $this->selectResult = $this->getJsonFixture('select_query_result.json'); + self::$selectResult ??= $this->getJsonFixture('select_query_result.json'); Carbon::setTestNow('2020-01-01 00:00:00'); } public function testOnlyTrashed() { - $this->testRepositoryClass->onlyTrashed(); + self::$testRepositoryClass->onlyTrashed(); - $onlyTrashed = $this->onlyTrashedProperty->getValue($this->testRepositoryClass); + $onlyTrashed = $this->onlyTrashedProperty->getValue(self::$testRepositoryClass); $this->assertTrue($onlyTrashed); } public function testWithTrashed() { - $this->testRepositoryClass->withTrashed(); + self::$testRepositoryClass->withTrashed(); - $withTrashed = $this->withTrashedProperty->getValue($this->testRepositoryClass); + $withTrashed = $this->withTrashedProperty->getValue(self::$testRepositoryClass); $this->assertTrue($withTrashed); } public function testForce() { - $this->testRepositoryClass->force(); + self::$testRepositoryClass->force(); - $forceMode = $this->forceModeProperty->getValue($this->testRepositoryClass); + $forceMode = $this->forceModeProperty->getValue(self::$testRepositoryClass); $this->assertTrue($forceMode); } public function testWith() { - $this->testRepositoryClass->with('relation'); + self::$testRepositoryClass->with('relation'); - $attachedRelations = $this->attachedRelationsProperty->getValue($this->testRepositoryClass); + $attachedRelations = $this->attachedRelationsProperty->getValue(self::$testRepositoryClass); $this->assertEquals(['relation'], $attachedRelations); } public function testWithCount() { - $this->testRepositoryClass->withCount('relation'); + self::$testRepositoryClass->withCount('relation'); - $attachedRelationsCount = $this->attachedRelationsCountProperty->getValue($this->testRepositoryClass); + $attachedRelationsCount = $this->attachedRelationsCountProperty->getValue(self::$testRepositoryClass); $this->assertEquals(['relation'], $attachedRelationsCount); } public function testAll() { - $this->mockAll($this->selectResult); + $this->mockAll(self::$selectResult); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->with('relation') @@ -107,18 +101,18 @@ public function testAll() ->force() ->all(); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testAllEmptyResult() { $this->mockSelect( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null' + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null' ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->with('relation') @@ -126,18 +120,18 @@ public function testAllEmptyResult() ->force() ->all(); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testExists() { $this->mockSelectById( - 'select exists(select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ?) as `exists`', + 'select exists(select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ?) as "exists"', ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -145,18 +139,18 @@ public function testExists() ->withCount('relation') ->exists(['id' => 1]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testExistsBy() { $this->mockSelectExists( - 'select exists(select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ?) as `exists`' + 'select exists(select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ?) as "exists"' ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -164,14 +158,14 @@ public function testExistsBy() ->withCount('relation') ->existsBy('id', 1); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testCreate() { - $this->mockCreate($this->selectResult, null); + $this->mockCreate(self::$selectResult, null); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -182,14 +176,14 @@ public function testCreate() 'updated_at' => null, ]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testCreateOnlyFillable() { - $this->mockCreate($this->selectResult, Carbon::now()); + $this->mockCreate(self::$selectResult, Carbon::now()); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->with('relation') @@ -199,19 +193,19 @@ public function testCreateOnlyFillable() 'updated_at' => null, ]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testUpdateMany() { $this->mockUpdateSqlQuery( - 'update `test_models` set `name` = ?, `test_models`.`updated_at` = ? ' - . 'where `test_models`.`deleted_at` is not null and `id` = ?', + 'update "test_models" set "name" = ?, "updated_at" = ? ' + . 'where "test_models"."deleted_at" is not null and "id" = ?', ['test_name', Carbon::now(), 1], 1 ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -219,14 +213,14 @@ public function testUpdateMany() ->withCount('relation') ->updateMany(1, ['name' => 'test_name']); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testUpdate() { - $this->mockUpdate($this->selectResult, null); + $this->mockUpdate(self::$selectResult, null); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -237,14 +231,14 @@ public function testUpdate() 'updated_at' => null, ]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testUpdateOnlyFillable() { - $this->mockUpdate($this->selectResult, Carbon::now()); + $this->mockUpdate(self::$selectResult, Carbon::now()); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->with('relation') @@ -254,18 +248,18 @@ public function testUpdateOnlyFillable() 'updated_at' => null, ]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testUpdateDoesntExist() { $this->mockSelectById( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ? limit 1' + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ? limit 1' ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -273,14 +267,14 @@ public function testUpdateDoesntExist() ->withCount('relation') ->update(1, ['name' => 'test_name']); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testUpdateOrCreateEntityExists() { - $this->mockUpdateOrCreateEntityExists($this->selectResult); + $this->mockUpdateOrCreateEntityExists(self::$selectResult); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -288,14 +282,14 @@ public function testUpdateOrCreateEntityExists() ->withCount('relation') ->updateOrCreate(1, ['name' => 'test_name']); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testUpdateOrCreateEntityDoesntExist() { - $this->mockUpdateOrCreateEntityDoesntExist($this->selectResult); + $this->mockUpdateOrCreateEntityDoesntExist(self::$selectResult); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -303,16 +297,16 @@ public function testUpdateOrCreateEntityDoesntExist() ->withCount('relation') ->updateOrCreate(1, ['name' => 'test_name']); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testCount() { $this->mockSelectById( - 'select count(*) as aggregate from `test_models` where `test_models`.`deleted_at` is not null and `id` = ?' + 'select count(*) as aggregate from "test_models" where "test_models"."deleted_at" is not null and "id" = ?' ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -320,14 +314,14 @@ public function testCount() ->withCount('relation') ->count(['id' => 1]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testGet() { - $this->mockGet($this->selectResult); + $this->mockGet(self::$selectResult); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -335,18 +329,18 @@ public function testGet() ->withCount('relation') ->get(['id' => 1]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testGetEmptyResult() { $this->mockSelectById( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ?' + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ?' ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -354,14 +348,14 @@ public function testGetEmptyResult() ->withCount('relation') ->get(['id' => 1]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testFirst() { - $this->mockFirst($this->selectResult); + $this->mockFirst(self::$selectResult); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -369,14 +363,14 @@ public function testFirst() ->withCount('relation') ->first(1); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testLast() { - $this->mockLast($this->selectResult); + $this->mockLast(self::$selectResult); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -384,18 +378,18 @@ public function testLast() ->withCount('relation') ->last(['id' => 1]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testFirstEmptyResult() { $this->mockSelectById( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ? limit 1' + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ? limit 1' ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -403,14 +397,14 @@ public function testFirstEmptyResult() ->withCount('relation') ->first(1); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testFindBy() { - $this->mockFirstBy($this->selectResult); + $this->mockFirstBy(self::$selectResult); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -418,18 +412,18 @@ public function testFindBy() ->withCount('relation') ->findBy('id', 1); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testFindByEmptyResult() { $this->mockSelectById( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ? limit 1' + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ? limit 1' ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -437,14 +431,14 @@ public function testFindByEmptyResult() ->withCount('relation') ->findBy('id', 1); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testFind() { - $this->mockFind($this->selectResult); + $this->mockFind(self::$selectResult); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -452,18 +446,18 @@ public function testFind() ->withCount('relation') ->find(1); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testFindEmptyResult() { $this->mockSelectById( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ? limit 1' + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ? limit 1' ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -471,14 +465,14 @@ public function testFindEmptyResult() ->withCount('relation') ->find(1); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testFirstOrCreateEntityExists() { - $this->mockFirstOrCreateEntityExists($this->selectResult); + $this->mockFirstOrCreateEntityExists(self::$selectResult); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -486,14 +480,14 @@ public function testFirstOrCreateEntityExists() ->withCount('relation') ->firstOrCreate(['id' => 1], ['name' => 'test_name']); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testFirstOrCreateEntityDoesntExists() { - $this->mockFirstOrCreateEntityDoesntExists($this->selectResult); + $this->mockFirstOrCreateEntityDoesntExists(self::$selectResult); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -501,14 +495,14 @@ public function testFirstOrCreateEntityDoesntExists() ->withCount('relation') ->firstOrCreate(['id' => 1], ['name' => 'test_name']); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testForceDelete() { - $this->mockDelete('delete from `test_models` where `test_models`.`deleted_at` is not null and `id` = ?', [1]); + $this->mockDelete('delete from "test_models" where "test_models"."deleted_at" is not null and "id" = ?', [1]); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -516,35 +510,35 @@ public function testForceDelete() ->withCount('relation') ->delete(1); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testDelete() { $this->mockUpdateSqlQuery( - 'update `test_models` set `deleted_at` = ?, `test_models`.`updated_at` = ? ' - . 'where `id` = ?', + 'update "test_models" set "deleted_at" = ?, "updated_at" = ? ' + . 'where "id" = ?', [Carbon::now(), Carbon::now(), 1] ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->with('relation') ->withCount('relation') ->delete(1); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testRestore() { $this->mockUpdateSqlQuery( - 'update `test_models` set `deleted_at` = ?, `test_models`.`updated_at` = ? ' - . 'where `test_models`.`deleted_at` is not null and `id` = ? and `test_models`.`deleted_at` is not null', + 'update "test_models" set "deleted_at" = ?, "updated_at" = ? ' + . 'where "test_models"."deleted_at" is not null and "id" = ? and "test_models"."deleted_at" is not null', [null, Carbon::now(), 1] ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -552,14 +546,14 @@ public function testRestore() ->withCount('relation') ->restore(1); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testChunk() { - $this->mockChunk($this->selectResult); + $this->mockChunk(self::$selectResult); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -567,18 +561,18 @@ public function testChunk() ->withCount('relation') ->chunk(10, function () {}); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testChunkEmptyResult() { $this->mockSelect( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null order by `id` asc limit 10 offset 0' + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null order by "id" asc limit 10 offset 0' ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -586,18 +580,18 @@ public function testChunkEmptyResult() ->withCount('relation') ->chunk(10, function () {}); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testForceDeleteByList() { $this->mockDelete( - 'delete from `test_models` where `test_models`.`deleted_at` is not null and `id` in (?, ?, ?)', + 'delete from "test_models" where "test_models"."deleted_at" is not null and "id" in (?, ?, ?)', [1, 2, 3], 3 ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -605,36 +599,36 @@ public function testForceDeleteByList() ->withCount('relation') ->deleteByList([1, 2, 3]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testDeleteByList() { $this->mockUpdateSqlQuery( - 'update `test_models` set `deleted_at` = ?, `test_models`.`updated_at` = ? where `id` in (?, ?, ?)', + 'update "test_models" set "deleted_at" = ?, "updated_at" = ? where "id" in (?, ?, ?)', [Carbon::now(), Carbon::now(), 1, 2, 3] ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->with('relation') ->withCount('relation') ->deleteByList([1, 2, 3]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testRestoreByList() { $this->mockUpdateSqlQuery( - 'update `test_models` set `deleted_at` = ?, `test_models`.`updated_at` = ? ' - . 'where `test_models`.`deleted_at` is not null ' - . 'and `test_models`.`deleted_at` is not null and `id` in (?, ?, ?)', + 'update "test_models" set "deleted_at" = ?, "updated_at" = ? ' + . 'where "test_models"."deleted_at" is not null ' + . 'and "test_models"."deleted_at" is not null and "id" in (?, ?, ?)', [null, Carbon::now(), 1, 2, 3], 3 ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -642,14 +636,14 @@ public function testRestoreByList() ->withCount('relation') ->restoreByList([1, 2, 3]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testGetByList() { - $this->mockGetByList($this->selectResult); + $this->mockGetByList(self::$selectResult); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -657,20 +651,20 @@ public function testGetByList() ->withCount('relation') ->getByList([1, 2, 3]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testGetByListEmptyResult() { $this->mockSelect( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` in (?, ?, ?)', + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" in (?, ?, ?)', [], [1, 2, 3] ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -678,18 +672,18 @@ public function testGetByListEmptyResult() ->withCount('relation') ->getByList([1, 2, 3]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testCountByList() { $this->mockSelectWithAggregate( - 'select count(*) as aggregate from `test_models` ' - . 'where `test_models`.`deleted_at` is not null and `id` in (?, ?, ?)', + 'select count(*) as aggregate from "test_models" ' + . 'where "test_models"."deleted_at" is not null and "id" in (?, ?, ?)', [1, 2, 3] ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -697,19 +691,19 @@ public function testCountByList() ->withCount('relation') ->countByList([1, 2, 3]); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testUpdateByList() { $this->mockUpdateSqlQuery( - 'update `test_models` set `name` = ?, `test_models`.`updated_at` = ? ' - . 'where `test_models`.`deleted_at` is not null and `id` in (?, ?, ?)', + 'update "test_models" set "name" = ?, "updated_at" = ? ' + . 'where "test_models"."deleted_at" is not null and "id" in (?, ?, ?)', ['test_name', Carbon::now(), 1, 2, 3], 3 ); - $this->testRepositoryClass + self::$testRepositoryClass ->withTrashed() ->onlyTrashed() ->force() @@ -717,14 +711,14 @@ public function testUpdateByList() ->withCount('relation') ->updateByList([1, 2, 3], ['name' => 'test_name']); - $this->assertSettablePropertiesReset($this->testRepositoryClass); + $this->assertSettablePropertiesReset(self::$testRepositoryClass); } public function testTruncate() { - $this->mockUpdateSqlQuery('truncate table `test_models`'); + $this->mockTruncate('test_models'); - $this->testRepositoryClass->truncate(); + self::$testRepositoryClass->truncate(); } public function testModelWithoutPrimaryKey() @@ -739,8 +733,8 @@ public function testModelWithoutPrimaryKey() public function testGetEntityName() { - $name = $this->testRepositoryClass->getModelName(); + $name = self::$testRepositoryClass->getModelName(); $this->assertEquals('TestModel', $name); } -} \ No newline at end of file +} diff --git a/tests/EntityServiceTest.php b/tests/EntityServiceTest.php index ff712864..a5806917 100644 --- a/tests/EntityServiceTest.php +++ b/tests/EntityServiceTest.php @@ -9,53 +9,52 @@ class EntityServiceTest extends HelpersTestCase { - protected EntityService $entityServiceClass; + protected static EntityService $entityServiceClass; protected ReflectionProperty $repositoryProperty; public function setUp(): void { parent::setUp(); - $this->entityServiceClass = new EntityService(); + self::$entityServiceClass ??= new EntityService(); $this->repositoryProperty = new ReflectionProperty(EntityService::class, 'repository'); - $this->repositoryProperty->setAccessible(true); } public function testSetRepository() { - $this->entityServiceClass->setRepository(TestRepository::class); + self::$entityServiceClass->setRepository(TestRepository::class); - $this->assertTrue($this->repositoryProperty->getValue($this->entityServiceClass) instanceof TestRepository); + $this->assertTrue($this->repositoryProperty->getValue(self::$entityServiceClass) instanceof TestRepository); } public function testCallRepositoryMethod() { - $this->entityServiceClass->setRepository(TestRepository::class); + self::$entityServiceClass->setRepository(TestRepository::class); - $result = $this->entityServiceClass->getUser(); + $result = self::$entityServiceClass->getUser(); $this->assertSame('Correct result', $result); } public function testCallRepositoryMethodReturnsSelf() { - $this->entityServiceClass->setRepository(TestRepository::class); + self::$entityServiceClass->setRepository(TestRepository::class); - $result = $this->entityServiceClass->getFilter(); + $result = self::$entityServiceClass->getFilter(); $this->assertInstanceOf(EntityService::class, $result); } public function testCallNotExistsRepositoryMethod() { - $className = get_class($this->entityServiceClass); + $className = get_class(self::$entityServiceClass); $this->expectException(BadMethodCallException::class); $this->expectExceptionMessage("Method getSomething does not exists in {$className}."); - $this->entityServiceClass->setRepository(TestRepository::class); + self::$entityServiceClass->setRepository(TestRepository::class); - $this->entityServiceClass->getSomething(); + self::$entityServiceClass->getSomething(); } } diff --git a/tests/FixturesTraitTest.php b/tests/FixturesTraitTest.php index 04d2c0c1..6953ffdb 100644 --- a/tests/FixturesTraitTest.php +++ b/tests/FixturesTraitTest.php @@ -13,6 +13,7 @@ use Illuminate\Support\Facades\Storage; use Illuminate\Testing\TestResponse; use PHPUnit\Framework\AssertionFailedError; +use PHPUnit\Framework\Attributes\DataProvider; use RonasIT\Support\Exceptions\ForbiddenExportModeException; use RonasIT\Support\Traits\MockTrait; use Symfony\Component\HttpFoundation\BinaryFileResponse; @@ -28,20 +29,16 @@ public function setUp(): void self::$tables = null; } - public function getFixtureData(): array + public static function getFixtureData(): array { return [ [ - 'input' => 'get_fixture/exists_fixture.json' + 'input' => 'get_fixture/exists_fixture.json', ], ]; } - /** - * @dataProvider getFixtureData - * - * @param string $input - */ + #[DataProvider('getFixtureData')] public function testGetFixture(string $input) { $response = $this->getJsonFixture($input); @@ -63,7 +60,7 @@ public function testExportJson() putenv('FAIL_EXPORT_JSON=false'); $result = [ - 'value' => 1234567890 + 'value' => 1234567890, ]; $this->exportJson('export_json/response.json', new TestResponse( @@ -85,14 +82,14 @@ public function testExportFile() $response = new TestResponse( new BinaryFileResponse( Storage::disk('files')->path('content_source.txt') - ) + ), ); $this->exportFile($response, 'export_file/content_result.txt'); $this->assertEquals( - $this->getJsonFixture('export_file/result.txt'), - $this->getJsonFixture('export_file/content_result.txt') + expected: $this->getJsonFixture('export_file/result.txt'), + actual: $this->getJsonFixture('export_file/content_result.txt'), ); } @@ -191,11 +188,11 @@ public function testGetTables() public function testPrepareSequences() { $sequences = collect($this->getJsonFixture('prepare_sequences/information_schema.json')) - ->map(fn($item) => (object) $item); + ->map(fn ($item) => (object) $item); $connection = $this->mockClass(PostgresConnection::class, [ - $this->functionCall('getQueryGrammar', [], new Grammar), - $this->functionCall('getPostProcessor', [], new Processor), + $this->functionCall('getQueryGrammar', [], new Grammar()), + $this->functionCall('getPostProcessor', [], new Processor()), $this->functionCall('select', [], $sequences), $this->functionCall('unprepared', [$this->getFixture('prepare_sequences/sequences.sql')]), ], true); diff --git a/tests/HelpersTest.php b/tests/HelpersTest.php index 41400846..36891511 100644 --- a/tests/HelpersTest.php +++ b/tests/HelpersTest.php @@ -2,60 +2,55 @@ namespace RonasIT\Support\Tests; +use PHPUnit\Framework\Attributes\DataProvider; use RonasIT\Support\Traits\MockTrait; class HelpersTest extends HelpersTestCase { use MockTrait; - public function getGetListData(): array + public static function getGetListData(): array { return [ [ 'input' => 'city.json', 'key' => 'neighborhoods.*.zips.*.state', - 'expected' => 'states.json' + 'expected' => 'states.json', ], [ 'input' => 'neighborhood.json', 'key' => 'zips.*.code', - 'expected' => 'neighborhood.zips.codes.json' + 'expected' => 'neighborhood.zips.codes.json', ], [ 'input' => 'city.json', 'key' => 'neighborhoods.*.zips.*.code', - 'expected' => 'city.neighborhoods.zips.codes.json' + 'expected' => 'city.neighborhoods.zips.codes.json', ], [ 'input' => 'city.json', 'key' => 'neighborhoods.*.zips', - 'expected' => 'city.neighborhoods.zips.json' + 'expected' => 'city.neighborhoods.zips.json', ], [ 'input' => 'city.json', 'key' => 'neighborhoods', - 'expected' => 'city.neighborhoods.json' + 'expected' => 'city.neighborhoods.json', ], [ 'input' => 'neighborhood.json', 'key' => 'zips', - 'expected' => 'neighborhood.zips.json' + 'expected' => 'neighborhood.zips.json', ], [ 'input' => 'areas.json', 'key' => 'zips.*.area.houses.*.number', - 'expected' => 'areas.houses.json' - ] + 'expected' => 'areas.houses.json', + ], ]; } - /** - * @dataProvider getGetListData - * - * @param string $input - * @param string $key - * @param string $expected - */ + #[DataProvider('getGetListData')] public function testGetList(string $input, string $key, string $expected) { $input = $this->getJsonFixture($input); @@ -65,30 +60,25 @@ public function testGetList(string $input, string $key, string $expected) $this->assertEqualsFixture($expected, $result); } - public function getIsMultidimensionalData(): array + public static function getIsMultidimensionalData(): array { return [ [ 'input' => 'areas.houses.json', - 'expected' => false + 'expected' => false, ], [ 'input' => 'areas.json', - 'expected' => false + 'expected' => false, ], [ 'input' => 'city.neighborhoods.json', - 'expected' => true - ] + 'expected' => true, + ], ]; } - /** - * @dataProvider getIsMultidimensionalData - * - * @param string $input - * @param bool $expected - */ + #[DataProvider('getIsMultidimensionalData')] public function testIsMultidimensional(string $input, bool $expected) { $input = $this->getJsonFixture($input); @@ -98,39 +88,33 @@ public function testIsMultidimensional(string $input, bool $expected) $this->assertEquals($expected, $result); } - public function getEqualsData(): array + public static function getEqualsData(): array { return [ [ - 'first_array' => 'array_equals/settings.json', - 'second_array' => 'array_equals/settings_diff.json', - 'expected' => false + 'firstArray' => 'array_equals/settings.json', + 'secondArray' => 'array_equals/settings_diff.json', + 'expected' => false, ], [ - 'first_array' => 'array_equals/settings_rather_types.json', - 'second_array' => 'array_equals/settings_rather_types_diff_order.json', - 'expected' => true + 'firstArray' => 'array_equals/settings_rather_types.json', + 'secondArray' => 'array_equals/settings_rather_types_diff_order.json', + 'expected' => true, ], [ - 'first_array' => 'array_equals/settings.json', - 'second_array' => 'array_equals/settings_diff_order.json', - 'expected' => true + 'firstArray' => 'array_equals/settings.json', + 'secondArray' => 'array_equals/settings_diff_order.json', + 'expected' => true, ], [ - 'first_array' => 'areas.houses.json', - 'second_array' => 'array_equals/non_associative.json', - 'expected' => true - ] + 'firstArray' => 'areas.houses.json', + 'secondArray' => 'array_equals/non_associative.json', + 'expected' => true, + ], ]; } - /** - * @dataProvider getEqualsData - * - * @param string $firstArray - * @param string $secondArray - * @param bool $expected - */ + #[DataProvider('getEqualsData')] public function testEquals(string $firstArray, string $secondArray, bool $expected) { $firstArray = $this->getJsonFixture($firstArray); @@ -150,7 +134,7 @@ public function testArrayRound() $this->assertEqualsFixture('array_round/rounded_values.json', $result); } - public function getArrayDuplicatesData(): array + public static function getArrayDuplicatesData(): array { return [ [ @@ -164,16 +148,11 @@ public function getArrayDuplicatesData(): array [ 'input' => 'array_get_duplicates/complex_array.json', 'expected' => 'array_get_duplicates/complex_array_duplicates.json', - ] + ], ]; } - /** - * @dataProvider getArrayDuplicatesData - * - * @param string $input - * @param string $expected - */ + #[DataProvider('getArrayDuplicatesData')] public function testArrayGetDuplicate(string $input, string $expected) { $input = $this->getJsonFixture($input); @@ -183,7 +162,7 @@ public function testArrayGetDuplicate(string $input, string $expected) $this->assertEqualsFixture($expected, $result); } - public function getArrayUniqueObjectsData(): array + public static function getArrayUniqueObjectsData(): array { return [ [ @@ -195,20 +174,13 @@ public function getArrayUniqueObjectsData(): array 'expected' => 'array_unique_objects/unique_objects_filtered_by_array_key.json', ], [ - 'filter' => function($objet) { - return $objet['id']; - }, + 'filter' => fn ($objet) => $objet['id'], 'expected' => 'array_unique_objects/unique_objects_filtered_by_callback_key.json', - ] + ], ]; } - /** - * @dataProvider getArrayUniqueObjectsData - * - * @param string|callable|array $filter - * @param string $expected - */ + #[DataProvider('getArrayUniqueObjectsData')] public function testArrayUniqueObjects(string|callable|array $filter, string $expected) { $input = $this->getJsonFixture('array_unique_objects/array_with_duplicates.json'); @@ -227,7 +199,7 @@ public function testArrayTrim() $this->assertEqualsFixture('array_trim/result.json', $result); } - public function getArrayRemoveByFieldData(): array + public static function getArrayRemoveByFieldData(): array { return [ [ @@ -239,17 +211,11 @@ public function getArrayRemoveByFieldData(): array 'field' => 'name', 'value' => 'test2', 'expected' => 'array_remove_by_field/result_remove_by_name.json', - ] + ], ]; } - /** - * @dataProvider getArrayRemoveByFieldData - * - * @param string $field - * @param string|int $value - * @param string $expected - */ + #[DataProvider('getArrayRemoveByFieldData')] public function testArrayRemoveByField(string $field, string|int $value, string $expected) { $input = $this->getJsonFixture('array_remove_by_field/data.json'); @@ -275,7 +241,7 @@ public function testArrayAssociate() $result = array_associate($input, function ($value, $key) { return [ 'key' => "prepared_{$key}", - 'value' => $value + 'value' => $value, ]; }); diff --git a/tests/HelpersTestCase.php b/tests/HelpersTestCase.php index 83ca88d3..21eb052a 100755 --- a/tests/HelpersTestCase.php +++ b/tests/HelpersTestCase.php @@ -21,7 +21,7 @@ public function setUp(): void protected function getPackageProviders($app): array { return [ - HelpersServiceProvider::class + HelpersServiceProvider::class, ]; } @@ -48,16 +48,15 @@ protected function assertSettablePropertiesReset($class): void public function getLoginSession($session, $guard = 'session'): array { return array_filter( - $session->all(), - fn ($key) => strpos($key, "login_{$guard}_") === 0, - ARRAY_FILTER_USE_KEY + array: $session->all(), + callback: fn ($key) => strpos($key, "login_{$guard}_") === 0, + mode: ARRAY_FILTER_USE_KEY, ); } protected function getProtectedProperty(ReflectionClass $reflectionClass, string $methodName, $objectInstance) { $property = $reflectionClass->getProperty($methodName); - $property->setAccessible(true); return $property->getValue($objectInstance); } diff --git a/tests/HttpRequestServiceTest.php b/tests/HttpRequestServiceTest.php index ea7aaeab..3c570323 100644 --- a/tests/HttpRequestServiceTest.php +++ b/tests/HttpRequestServiceTest.php @@ -4,6 +4,7 @@ use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Psr7\Request; +use PHPUnit\Framework\Attributes\DataProvider; use ReflectionProperty; use GuzzleHttp\Psr7\Response as GuzzleResponse; use RonasIT\Support\Exceptions\InvalidJSONFormatException; @@ -28,32 +29,34 @@ public function setUp(): void $this->httpRequestServiceClass = new HttpRequestService(); $this->optionsProperty = new ReflectionProperty(HttpRequestService::class, 'options'); - $this->optionsProperty->setAccessible(true); $this->responseProperty = new ReflectionProperty(HttpRequestService::class, 'response'); - $this->responseProperty->setAccessible(true); } public function testSend() { $this->mockClass(HttpRequestService::class, [ $this->functionCall( - 'sendRequest', - [ + name: 'sendRequest', + arguments: [ 'get', 'https://some.url.com', ['some_key' => 'some_value'], - ['some_header_name' => 'some_header_value'] + ['some_header_name' => 'some_header_value'], ], - new GuzzleResponse(200, [], json_encode([])) + result: new GuzzleResponse(200, [], json_encode([])) ), ]); - app(HttpRequestService::class)->get('https://some.url.com', [ - 'some_key' => 'some_value' - ], [ - 'some_header_name' => 'some_header_value' - ]); + app(HttpRequestService::class)->get( + url: 'https://some.url.com', + data: [ + 'some_key' => 'some_value', + ], + headers: [ + 'some_header_name' => 'some_header_value', + ], + ); } public function testSetOption() @@ -62,192 +65,231 @@ public function testSetOption() $actualOptions = $this->optionsProperty->getValue($this->httpRequestServiceClass); - $this->assertEquals([ - 'allow_redirects' => false - ], $actualOptions); + $this->assertEquals(['allow_redirects' => false], $actualOptions); } public function testAllowRedirects() { $this->httpRequestServiceClass->allowRedirects(false); - $this->mockGuzzleClient('put', [ - 'https://some.url.com', - [ - 'headers' => [ - 'some_header' => 'some_header_value' + $this->mockGuzzleClient( + method: 'put', + arguments: [ + 'https://some.url.com', + [ + 'headers' => [ + 'some_header' => 'some_header_value', + ], + 'cookies' => null, + 'allow_redirects' => false, + 'connect_timeout' => 0, + 'body' => '{"some_key":"some_value"}', ], - 'cookies' => null, - 'allow_redirects' => false, - 'connect_timeout' => 0, - 'body' => '{"some_key":"some_value"}' - ] - ]); + ], + ); - $this->httpRequestServiceClass->put('https://some.url.com', [ - 'some_key' => 'some_value' - ], [ - 'some_header' => 'some_header_value' - ]); + $this->httpRequestServiceClass->put( + url: 'https://some.url.com', + data: [ + 'some_key' => 'some_value', + ], + headers: [ + 'some_header' => 'some_header_value', + ], + ); } public function testConnectTimeout() { $this->httpRequestServiceClass->setConnectTimeout(999); - $this->mockGuzzleClient('post', [ - 'https://some.url.com', - [ - 'headers' => [ - 'some_header' => 'some_header_value' + $this->mockGuzzleClient( + method: 'post', + arguments: [ + 'https://some.url.com', + [ + 'headers' => [ + 'some_header' => 'some_header_value', + ], + 'cookies' => null, + 'allow_redirects' => true, + 'connect_timeout' => 999, + 'body' => '{"some_key":"some_value"}', ], - 'cookies' => null, - 'allow_redirects' => true, - 'connect_timeout' => 999, - 'body' => '{"some_key":"some_value"}' - ] - ]); + ], + ); - $this->httpRequestServiceClass->post('https://some.url.com', [ - 'some_key' => 'some_value' - ], [ - 'some_header' => 'some_header_value' - ]); + $this->httpRequestServiceClass->post( + url: 'https://some.url.com', + data: [ + 'some_key' => 'some_value', + ], + headers: [ + 'some_header' => 'some_header_value', + ], + ); } public function testSendPutWithoutContentType() { - $this->mockGuzzleClient('put', [ - 'https://some.url.com', - [ - 'headers' => [ - 'some_header' => 'some_header_value' + $this->mockGuzzleClient( + method: 'put', + arguments: [ + 'https://some.url.com', + [ + 'headers' => [ + 'some_header' => 'some_header_value', + ], + 'cookies' => null, + 'allow_redirects' => true, + 'connect_timeout' => 0, + 'body' => '{"some_key":"some_value"}', ], - 'cookies' => null, - 'allow_redirects' => true, - 'connect_timeout' => 0, - 'body' => '{"some_key":"some_value"}' - ] - ]); + ], + ); - $this->httpRequestServiceClass->put('https://some.url.com', [ - 'some_key' => 'some_value' - ], [ - 'some_header' => 'some_header_value' - ]); + $this->httpRequestServiceClass->put( + url: 'https://some.url.com', + data: [ + 'some_key' => 'some_value', + ], + headers: [ + 'some_header' => 'some_header_value', + ], + ); } public function testSendPutWithMultipartContentType() { - $this->mockGuzzleClient('put', [ - 'https://some.url.com', - [ - 'headers' => [ - 'some_header' => 'some_header_value', - 'Content-type' => 'application/x-www-form-urlencoded' + $this->mockGuzzleClient( + method: 'put', + arguments: [ + 'https://some.url.com', + [ + 'headers' => [ + 'some_header' => 'some_header_value', + 'Content-type' => 'application/x-www-form-urlencoded', + ], + 'cookies' => null, + 'allow_redirects' => true, + 'connect_timeout' => 0, + 'form_params' => [ + 'some_key' => 'some_value', + ], ], - 'cookies' => null, - 'allow_redirects' => true, - 'connect_timeout' => 0, - 'form_params' => [ - 'some_key' => 'some_value' - ] - ] - ]); + ], + ); - $this->httpRequestServiceClass->put('https://some.url.com', [ - 'some_key' => 'some_value' - ], [ - 'some_header' => 'some_header_value', - 'Content-type' => 'application/x-www-form-urlencoded' - ]); + $this->httpRequestServiceClass->put( + url: 'https://some.url.com', + data: [ + 'some_key' => 'some_value', + ], + headers: [ + 'some_header' => 'some_header_value', + 'Content-type' => 'application/x-www-form-urlencoded', + ], + ); } - public function sendPutAsJSONData(): array + public static function sendPutAsJSONData(): array { return [ [ - 'headers' => ['content-type' => 'application/json'] + 'headers' => ['content-type' => 'application/json'], ], [ - 'headers' => ['Content-Type' => 'application/json'] + 'headers' => ['Content-Type' => 'application/json'], ], [ - 'headers' => ['CONTENT-TYPE' => 'application/json'] + 'headers' => ['CONTENT-TYPE' => 'application/json'], ], [ - 'headers' => ['Content-type' => 'application/json'] + 'headers' => ['Content-type' => 'application/json'], ], [ - 'headers' => ['CoNtEnT-TyPe' => 'application/json'] + 'headers' => ['CoNtEnT-TyPe' => 'application/json'], ], ]; } - /** - * @dataProvider sendPutAsJSONData - * - * @param array $headers - */ + #[DataProvider('sendPutAsJSONData')] public function testSendPutAsJSON(array $headers) { - $this->mockGuzzleClient('put', [ - 'https://some.url.com', - [ - 'headers' => $headers, - 'cookies' => null, - 'allow_redirects' => true, - 'connect_timeout' => 0, - 'json' => [ - 'some_key' => 'some_value' - ] - ] - ]); + $this->mockGuzzleClient( + method: 'put', + arguments: [ + 'https://some.url.com', + [ + 'headers' => $headers, + 'cookies' => null, + 'allow_redirects' => true, + 'connect_timeout' => 0, + 'json' => [ + 'some_key' => 'some_value', + ], + ], + ], + ); - $this->httpRequestServiceClass->put('https://some.url.com', [ - 'some_key' => 'some_value' - ], $headers); + $this->httpRequestServiceClass->put( + url: 'https://some.url.com', + data: [ + 'some_key' => 'some_value', + ], + headers: $headers, + ); } public function testSendDelete() { - $this->mockGuzzleClient('delete', [ - 'https://some.url.com', - [ - 'headers' => [ - 'some_header' => 'some_header_value' + $this->mockGuzzleClient( + method: 'delete', + arguments: [ + 'https://some.url.com', + [ + 'headers' => [ + 'some_header' => 'some_header_value', + ], + 'cookies' => null, + 'allow_redirects' => true, + 'connect_timeout' => 0, ], - 'cookies' => null, - 'allow_redirects' => true, - 'connect_timeout' => 0 - ] - ]); + ], + ); $this->httpRequestServiceClass->delete('https://some.url.com', [ - 'some_header' => 'some_header_value' + 'some_header' => 'some_header_value', ]); } public function testSendPatch() { - $this->mockGuzzleClient('patch', [ - 'https://some.url.com', - [ - 'headers' => [ - 'some_header' => 'some_header_value' + $this->mockGuzzleClient( + method: 'patch', + arguments: [ + 'https://some.url.com', + [ + 'headers' => [ + 'some_header' => 'some_header_value', + ], + 'cookies' => null, + 'allow_redirects' => true, + 'connect_timeout' => 0, + 'body' => '{"some_key":"some_value"}', ], - 'cookies' => null, - 'allow_redirects' => true, - 'connect_timeout' => 0, - 'body' => '{"some_key":"some_value"}' - ] - ]); + ], + ); - $this->httpRequestServiceClass->patch('https://some.url.com', [ - 'some_key' => 'some_value' - ], [ - 'some_header' => 'some_header_value' - ]); + $this->httpRequestServiceClass->patch( + url: 'https://some.url.com', + data: [ + 'some_key' => 'some_value', + ], + headers: [ + 'some_header' => 'some_header_value', + ], + ); } public function testSendWithUnsupportedMethod() @@ -262,24 +304,32 @@ public function testJSONResponse() { $responseJson = $this->getFixture('json_response.json'); - $this->mockGuzzleClient('get', [ - 'https://some.url.com', - [ - 'headers' => [ - 'some_header' => 'some_header_value' + $this->mockGuzzleClient( + method: 'get', + arguments: [ + 'https://some.url.com', + [ + 'headers' => [ + 'some_header' => 'some_header_value', + ], + 'cookies' => null, + 'allow_redirects' => true, + 'connect_timeout' => 0, + 'query' => ['user' => 'admin'], ], - 'cookies' => null, - 'allow_redirects' => true, - 'connect_timeout' => 0, - 'query' => ['user' => 'admin'] - ] - ], new GuzzleResponse(200, [], $responseJson)); - - $this->httpRequestServiceClass->get('https://some.url.com', [ - 'user' => 'admin', - ], [ - 'some_header' => 'some_header_value' - ]); + ], + response: new GuzzleResponse(200, [], $responseJson), + ); + + $this->httpRequestServiceClass->get( + url: 'https://some.url.com', + data: [ + 'user' => 'admin', + ], + headers: [ + 'some_header' => 'some_header_value', + ], + ); $resultRaw = $this->httpRequestServiceClass->getResponse()->getBody(); $resultJson = $this->httpRequestServiceClass->json(); @@ -292,21 +342,28 @@ public function testNotJSONResponse() { $this->expectException(InvalidJSONFormatException::class); - $this->mockGuzzleClient('get', [ - 'https://some.url.com', - [ - 'headers' => [ - 'some_header' => 'some_header_value' + $this->mockGuzzleClient( + method: 'get', + arguments: [ + 'https://some.url.com', + [ + 'headers' => [ + 'some_header' => 'some_header_value', + ], + 'cookies' => null, + 'allow_redirects' => true, + 'connect_timeout' => 0, ], - 'cookies' => null, - 'allow_redirects' => true, - 'connect_timeout' => 0 - ] - ], new GuzzleResponse(200, [], 'Some not json string')); - - $this->httpRequestServiceClass->get('https://some.url.com', [], [ - 'some_header' => 'some_header_value' - ]); + ], + response: new GuzzleResponse(200, [], 'Some not json string') + ); + + $this->httpRequestServiceClass->get( + url: 'https://some.url.com', + headers: [ + 'some_header' => 'some_header_value', + ], + ); $this->httpRequestServiceClass->json(); } @@ -320,10 +377,9 @@ public function testSendWithRequestException() $mock ->expects($this->once()) ->method('sendRequest') - ->will($this->returnCallback(function() use ($mock) { - $response = new GuzzleResponse(200, [], null); - throw new RequestException('Some exception message', new Request('type', 'url')); - })); + ->willReturnCallback( + fn () => throw new RequestException('Some exception message', new Request('type', 'url')) + ); $this->app->instance(HttpRequestService::class, $mock); diff --git a/tests/MailsMockTraitTest.php b/tests/MailsMockTraitTest.php index 71c18fe3..26a90363 100644 --- a/tests/MailsMockTraitTest.php +++ b/tests/MailsMockTraitTest.php @@ -34,7 +34,7 @@ public function testMail() 'fixture' => 'test_mail.html', 'subject' => 'Test Subject', 'from' => 'noreply@mail.net', - ] + ], ]); } @@ -51,7 +51,7 @@ public function testLegacyMail() Mail::to('test@mail.com')->queue(new LegacyTestMail( ['name' => 'John Smith'], 'Test Subject', - 'emails.test' + 'emails.test', )); $this->assertMailEquals(LegacyTestMail::class, [ @@ -60,7 +60,7 @@ public function testLegacyMail() 'fixture' => 'test_mail.html', 'subject' => 'Test Subject', 'from' => 'noreply@mail.net', - ] + ], ]); } @@ -76,18 +76,18 @@ public function testMailFromManyWithName() 'from' => [ [ 'address' => 'noreply@mail.net', - 'name' => 'Some sender' + 'name' => 'Some sender', ], [ 'address' => 'noreply-second@mail.net', - 'name' => 'Some sender second case' + 'name' => 'Some sender second case', ], [ - 'address' => 'noreply-withoutsender@mail.net' + 'address' => 'noreply-withoutsender@mail.net', ], [ 'address' => 'noreply-withoutsender-second@mail.net', - 'name' => null + 'name' => null, ], ], ], @@ -155,10 +155,15 @@ public function testMailWithAttachment() Mail::to('test@mail.com')->queue(new TestMailWithAttachments(['name' => 'John Smith'])); $this->assertMailEquals(TestMailWithAttachments::class, [ - $this->mockedMail('test@mail.com', 'test_mail.html', 'Test Subject', '', [ - 'attachment1', - ['file' => new \stdClass(), 'options' => ['some_options']] - ]), + $this->mockedMail( + emails: 'test@mail.com', + fixture: 'test_mail.html', + subject: 'Test Subject', + attachments: [ + 'attachment1', + ['file' => new \stdClass(), 'options' => ['some_options']], + ], + ), ]); } -} \ No newline at end of file +} diff --git a/tests/MockTraitTest.php b/tests/MockTraitTest.php index fc24dcd1..c434eba3 100644 --- a/tests/MockTraitTest.php +++ b/tests/MockTraitTest.php @@ -11,7 +11,7 @@ class MockTraitTest extends HelpersTestCase public function testMockSingleCall() { $this->mockNativeFunction('RonasIT\Support\Tests', [ - $this->functionCall('random_bytes', [20], '1234567890') + $this->functionCall('random_bytes', [20], '1234567890'), ]); $this->assertEquals('1234567890', random_bytes(20)); @@ -26,7 +26,7 @@ public function testMockSeveralCalls() $this->functionCall('rand', [0, 9], 2), ]); - $generate = function(int $length): string { + $generate = function (int $length): string { $code = ''; for ($i = 0; $i < $length; $i++) { @@ -53,4 +53,4 @@ public function testMockWithDifferentFunction() $this->assertEquals(7, rand(6, 10)); $this->assertEquals('0987654321', uniqid()); } -} \ No newline at end of file +} diff --git a/tests/ModelTestStateTest.php b/tests/ModelTestStateTest.php index 5bd2d4d7..15bba24b 100644 --- a/tests/ModelTestStateTest.php +++ b/tests/ModelTestStateTest.php @@ -52,10 +52,10 @@ public function testAssertChangesEqualsFixture() public function testAssertChangesWithoutJsonFields() { $initialDatasetMock = collect( - $this->getJsonFixture('changes_equals_fixture_without_json_fields/initial_dataset.json') + $this->getJsonFixture('changes_equals_fixture_without_json_fields/initial_dataset.json'), ); $changedDatasetMock = collect( - $this->getJsonFixture('changes_equals_fixture_without_json_fields/changed_dataset.json') + $this->getJsonFixture('changes_equals_fixture_without_json_fields/changed_dataset.json'), ); $this->mockGettingDatasetForChanges($changedDatasetMock, $initialDatasetMock, 'test_model_without_json_fields'); diff --git a/tests/SearchTraitTest.php b/tests/SearchTraitTest.php index d089b5bd..65be9ac9 100644 --- a/tests/SearchTraitTest.php +++ b/tests/SearchTraitTest.php @@ -14,6 +14,8 @@ class SearchTraitTest extends HelpersTestCase { use SqlMockTrait; + protected static array $selectResult; + protected TestRepository $testRepositoryClass; protected ReflectionProperty $onlyTrashedProperty; @@ -25,8 +27,6 @@ class SearchTraitTest extends HelpersTestCase protected ReflectionMethod $setAdditionalReservedFiltersMethod; - protected array $selectResult; - public function setUp(): void { parent::setUp(); @@ -34,34 +34,27 @@ public function setUp(): void $this->testRepositoryClass = new TestRepository(); $this->onlyTrashedProperty = new ReflectionProperty(TestRepository::class, 'onlyTrashed'); - $this->onlyTrashedProperty->setAccessible(true); $this->withTrashedProperty = new ReflectionProperty(TestRepository::class, 'withTrashed'); - $this->withTrashedProperty->setAccessible(true); $this->forceModeProperty = new ReflectionProperty(TestRepository::class, 'forceMode'); - $this->forceModeProperty->setAccessible(true); $this->attachedRelationsProperty = new ReflectionProperty(TestRepository::class, 'attachedRelations'); - $this->attachedRelationsProperty->setAccessible(true); $this->attachedRelationsCountProperty = new ReflectionProperty( TestRepository::class, 'attachedRelationsCount' ); - $this->attachedRelationsCountProperty->setAccessible(true); $this->shouldSettablePropertiesBeResetProperty = new ReflectionProperty( TestRepository::class, 'shouldSettablePropertiesBeReset' ); - $this->shouldSettablePropertiesBeResetProperty->setAccessible(true); $reflectionClass = new ReflectionClass(TestRepository::class); $this->setAdditionalReservedFiltersMethod = $reflectionClass->getMethod('setAdditionalReservedFilters'); - $this->setAdditionalReservedFiltersMethod->setAccessible(true); - $this->selectResult = $this->getJsonFixture('select_query_result.json'); + self::$selectResult ??= $this->getJsonFixture('select_query_result.json'); } public function testSearchQuery() @@ -72,7 +65,7 @@ public function testSearchQuery() 'with_trashed' => true, 'only_trashed' => true, 'with' => ['relation'], - 'with_count' => ['relation'] + 'with_count' => ['relation'], ]); $sql = $this->testRepositoryClass->getSearchQuery()->toSql(); @@ -94,16 +87,19 @@ public function testSearchQuery() public function testGetSearchResultWithAll() { - $this->mockSelect('select * from `test_models` where `test_models`.`deleted_at` is null order by `id` asc', [ - 1, 2, 3 - ]); + $this->mockSelect( + query: 'select * from "test_models" where "test_models"."deleted_at" is null order by "id" asc', + result: [ + 1, 2, 3, + ], + ); $this->testRepositoryClass->searchQuery(['all' => true])->getSearchResults(); } public function testGetSearchResultWithAllAndParams() { - $this->mockSelect('select * from `test_models` where `test_models`.`deleted_at` is null order by `id` asc', []); + $this->mockSelect('select * from "test_models" where "test_models"."deleted_at" is null order by "id" asc'); $this->testRepositoryClass ->searchQuery([ @@ -115,7 +111,7 @@ public function testGetSearchResultWithAllAndParams() public function testGetSearchResult() { - $this->mockGetSearchResult($this->selectResult); + $this->mockGetSearchResult(self::$selectResult); $this->testRepositoryClass ->force() @@ -123,7 +119,7 @@ public function testGetSearchResult() 'with_trashed' => true, 'only_trashed' => true, 'with' => 'relation', - 'with_count' => 'relation' + 'with_count' => 'relation', ]) ->getSearchResults(); @@ -144,9 +140,8 @@ public function testGetSearchResultWithTrashed() public function testGetSearchResultAggregateIsNull() { $this->mockSelectWithAggregate( - 'select count(*) as aggregate from `test_models` where `test_models`.`deleted_at` is null', - [], - null + query: 'select count(*) as aggregate from "test_models" where "test_models"."deleted_at" is null', + result: null, ); $this->testRepositoryClass->searchQuery()->getSearchResults(); @@ -156,7 +151,7 @@ public function testPostQueryHookMethodPropertyFalse() { $this->shouldSettablePropertiesBeResetProperty->setValue($this->testRepositoryClass, false); - $this->mockGetSearchResult($this->selectResult); + $this->mockGetSearchResult(self::$selectResult); $this->testRepositoryClass ->onlyTrashed() @@ -184,11 +179,11 @@ public function testSearchQueryWithQuery() { $this->shouldSettablePropertiesBeResetProperty->setValue($this->testRepositoryClass, false); - $this->mockGetSearchResultWithQuery($this->selectResult); + $this->mockGetSearchResultWithQuery(self::$selectResult); $this->testRepositoryClass ->searchQuery([ - 'query' => 'search_\'string' + 'query' => 'search_\'string', ]) ->filterByQuery(['query_field', 'another_query_field']) ->getSearchResults(); @@ -200,11 +195,11 @@ public function testSearchQueryWithMaskedQuery() $this->shouldSettablePropertiesBeResetProperty->setValue($this->testRepositoryClass, false); - $this->mockGetSearchResultWithCustomQuery($this->selectResult); + $this->mockGetSearchResultWithCustomQuery(self::$selectResult); $this->testRepositoryClass ->searchQuery([ - 'query' => 'search_\'string' + 'query' => 'search_\'string', ]) ->filterByQuery(['query_field', 'another_query_field'], "'%' || unaccent('{{ value }}') || '%'") ->getSearchResults(); @@ -214,17 +209,17 @@ public function testSearchQueryWithRelations() { $this->shouldSettablePropertiesBeResetProperty->setValue($this->testRepositoryClass, false); - $this->mockGetSearchResultWithRelations($this->selectResult); + $this->mockGetSearchResultWithRelations(self::$selectResult); $this->setAdditionalReservedFiltersMethod->invokeArgs($this->testRepositoryClass, [ - 'relation_name' + 'relation_name', ]); $this->testRepositoryClass ->searchQuery([ 'query' => 'search_string', 'order_by' => 'relation.id', - 'relation_name' => 'some_value' + 'relation_name' => 'some_value', ]) ->filterByQuery(['query_field', 'relation.another_query_field']) ->filterBy('relation.name', 'relation_name') @@ -236,7 +231,7 @@ public function testSearchQueryWithFilters() { $this->shouldSettablePropertiesBeResetProperty->setValue($this->testRepositoryClass, false); - $this->mockGetSearchResultWithFilters($this->selectResult); + $this->mockGetSearchResultWithFilters(self::$selectResult); $this->testRepositoryClass ->searchQuery([ @@ -256,11 +251,11 @@ public function testSearchQueryWithFilters() public function testSearchQueryWithNullFilters() { $this->mockSelectWithAggregate( - 'select count(*) as aggregate from `test_models` where `user_id` is null and `test_models`.`deleted_at` is null' + 'select count(*) as aggregate from "test_models" where "user_id" is null and "test_models"."deleted_at" is null' ); $this->mockSelect( - 'select * from `test_models` where `user_id` is null and `test_models`.`deleted_at` is null order by `id` asc limit 15 offset 0' + 'select * from "test_models" where "user_id" is null and "test_models"."deleted_at" is null order by "id" asc limit 15 offset 0' ); $this->testRepositoryClass @@ -271,18 +266,17 @@ public function testSearchQueryWithNullFilters() public function testSearchQueryWithListFilters() { $this->setAdditionalReservedFiltersMethod->invokeArgs($this->testRepositoryClass, [ - 'user_id' + 'user_id', ]); $this->mockSelectWithAggregate( - 'select count(*) as aggregate from `test_models` where `user_id` in (?, ?, ?) and `test_models`.`deleted_at` is null', - [1, 2, 3] + query: 'select count(*) as aggregate from "test_models" where "user_id" in (?, ?, ?) and "test_models"."deleted_at" is null', + bindings: [1, 2, 3] ); $this->mockSelect( - 'select * from `test_models` where `user_id` in (?, ?, ?) and `test_models`.`deleted_at` is null order by `id` asc limit 15 offset 0', - [], - [1, 2, 3] + query: 'select * from "test_models" where "user_id" in (?, ?, ?) and "test_models"."deleted_at" is null order by "id" asc limit 15 offset 0', + bindings: [1, 2, 3] ); $this->testRepositoryClass @@ -295,7 +289,7 @@ public function testSearchQueryWithFiltersFunctions() { $this->shouldSettablePropertiesBeResetProperty->setValue($this->testRepositoryClass, false); - $this->mockGetSearchResultWithFilters($this->selectResult); + $this->mockGetSearchResultWithFilters(self::$selectResult); $this->testRepositoryClass ->searchQuery([ diff --git a/tests/ValidatorTest.php b/tests/ValidatorTest.php index d006b83d..91cbb90f 100644 --- a/tests/ValidatorTest.php +++ b/tests/ValidatorTest.php @@ -23,7 +23,7 @@ public function testUniqueExceptOfAuthorizedUserPass() $validator = Validator::make( ['email' => 'mail@mail.com'], - ['email' => 'unique_except_of_authorized_user'] + ['email' => 'unique_except_of_authorized_user'], ); $this->assertTrue($validator->passes()); @@ -35,7 +35,7 @@ public function testUniqueExceptOfAuthorizedUserPassWithArray() $validator = Validator::make( ['email' => [['mail@mail.com'], ['mail@mail.net']]], - ['email' => 'unique_except_of_authorized_user:clients'] + ['email' => 'unique_except_of_authorized_user:clients'], ); $this->assertTrue($validator->passes()); @@ -47,7 +47,7 @@ public function testUniqueExceptOfAuthorizedUserPassWithDifferentKeyField() $validator = Validator::make( ['email' => [['mail@mail.com'], ['mail@mail.net']]], - ['email' => 'unique_except_of_authorized_user:clients,user_id'] + ['email' => 'unique_except_of_authorized_user:clients,user_id'], ); $this->assertTrue($validator->passes()); @@ -59,7 +59,7 @@ public function testUniqueExceptOfAuthorizedUserFail() $validator = Validator::make( ['email' => ['mail@mail.com', 'mail@mail.net']], - ['email' => 'unique_except_of_authorized_user'] + ['email' => 'unique_except_of_authorized_user'], ); $this->assertTrue($validator->fails()); @@ -96,7 +96,7 @@ public function testListExistsByArray() 'id' => 3, 'name' => 'name3', ], - ] + ], ], [ 'ids' => 'list_exists:clients,user_id,id', diff --git a/tests/VersionRouteTest.php b/tests/VersionRouteTest.php index bf827991..490c0894 100644 --- a/tests/VersionRouteTest.php +++ b/tests/VersionRouteTest.php @@ -2,6 +2,7 @@ namespace RonasIT\Support\Tests; +use PHPUnit\Framework\Attributes\DataProvider; use RonasIT\Support\Contracts\VersionEnumContract; use RonasIT\Support\Tests\Support\Enum\VersionEnum; use RonasIT\Support\Tests\Support\Traits\RouteMockTrait; @@ -26,85 +27,83 @@ public function setUp(): void $this->app->bind(VersionEnumContract::class, VersionEnum::class); } - public function getTestVersionRangeData(): array + public static function getTestVersionRangeData(): array { return [ [ 'version' => '1', - 'is_correct_version' => true, + 'isCorrectVersion' => true, 'route' => static::ROUTE_OBJECT_RANGE, ], [ 'version' => '1.0', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_OBJECT_RANGE, ], [ 'version' => '0.5', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_OBJECT_RANGE, ], [ 'version' => '4', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_OBJECT_RANGE, ], [ 'version' => '2', - 'is_correct_version' => true, + 'isCorrectVersion' => true, 'route' => static::ROUTE_OBJECT_RANGE, ], [ 'version' => '2.0', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_OBJECT_RANGE, ], [ 'version' => '1.5', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_OBJECT_RANGE, ], [ 'version' => '1', - 'is_correct_version' => true, + 'isCorrectVersion' => true, 'route' => static::ROUTE_FACADE_RANGE, ], [ 'version' => '1.0', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_FACADE_RANGE, ], [ 'version' => '0.5', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_FACADE_RANGE, ], [ 'version' => '4', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_FACADE_RANGE, ], [ 'version' => '2', - 'is_correct_version' => true, + 'isCorrectVersion' => true, 'route' => static::ROUTE_FACADE_RANGE, ], [ 'version' => '2.0', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_FACADE_RANGE, ], [ 'version' => '1.5', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_FACADE_RANGE, ], ]; } - /** - * @dataProvider getTestVersionRangeData - */ + #[DataProvider('getTestVersionRangeData')] public function testVersionRange(string $version, bool $isCorrectVersion, string $route): void { $this->mockRoutes(); @@ -116,65 +115,63 @@ public function testVersionRange(string $version, bool $isCorrectVersion, string $response->assertStatus($status); } - public function getTestVersionFromData(): array + public static function getTestVersionFromData(): array { return [ [ 'version' => '1', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_OBJECT_FROM, ], [ 'version' => '2.0', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_OBJECT_FROM, ], [ 'version' => '2', - 'is_correct_version' => true, + 'isCorrectVersion' => true, 'route' => static::ROUTE_OBJECT_FROM, ], [ 'version' => '3', - 'is_correct_version' => true, + 'isCorrectVersion' => true, 'route' => static::ROUTE_OBJECT_FROM, ], [ 'version' => '3.5', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_OBJECT_FROM, ], [ 'version' => '1', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_FACADE_FROM, ], [ 'version' => '2.0', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_FACADE_FROM, ], [ 'version' => '2', - 'is_correct_version' => true, + 'isCorrectVersion' => true, 'route' => static::ROUTE_FACADE_FROM, ], [ 'version' => '3', - 'is_correct_version' => true, + 'isCorrectVersion' => true, 'route' => static::ROUTE_FACADE_FROM, ], [ 'version' => '3.5', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_FACADE_FROM, ], ]; } - /** - * @dataProvider getTestVersionFromData - */ + #[DataProvider('getTestVersionFromData')] public function testVersionFrom(string $version, bool $isCorrectVersion, string $route): void { $this->mockRoutes(); @@ -186,66 +183,64 @@ public function testVersionFrom(string $version, bool $isCorrectVersion, string $response->assertStatus($status); } - public function getTestVersionToData(): array + public static function getTestVersionToData(): array { return [ [ 'version' => '1', - 'is_correct_version' => true, + 'isCorrectVersion' => true, 'route' => static::ROUTE_OBJECT_TO, ], [ 'version' => '2.0', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_OBJECT_TO, ], [ 'version' => '2', - 'is_correct_version' => true, + 'isCorrectVersion' => true, 'route' => static::ROUTE_OBJECT_TO, ], [ 'version' => '3', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_OBJECT_TO, ], [ 'version' => '1.5', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_OBJECT_TO, ], [ 'version' => '1', - 'is_correct_version' => true, + 'isCorrectVersion' => true, 'route' => static::ROUTE_FACADE_TO, ], [ 'version' => '2.0', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_FACADE_TO, ], [ 'version' => '2', - 'is_correct_version' => true, + 'isCorrectVersion' => true, 'route' => static::ROUTE_FACADE_TO, ], [ 'version' => '3', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_FACADE_TO, ], [ 'version' => '1.5', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_FACADE_TO, ], ]; } - /** - * @dataProvider getTestVersionToData - */ + #[DataProvider('getTestVersionToData')] public function testVersionTo(string $version, bool $isCorrectVersion, string $route): void { $this->mockRoutes(); @@ -257,35 +252,33 @@ public function testVersionTo(string $version, bool $isCorrectVersion, string $r $response->assertStatus($status); } - public function getTestVersionData(): array + public static function getTestVersionData(): array { return [ [ 'version' => '2', - 'is_correct_version' => true, + 'isCorrectVersion' => true, 'route' => static::ROUTE_FACADE_VERSION, ], [ 'version' => '2.0', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_FACADE_VERSION, ], [ 'version' => '1', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_FACADE_VERSION, ], [ 'version' => '3', - 'is_correct_version' => false, + 'isCorrectVersion' => false, 'route' => static::ROUTE_FACADE_VERSION, ], ]; } - /** - * @dataProvider getTestVersionData - */ + #[DataProvider('getTestVersionData')] public function testVersion(string $version, bool $isCorrectVersion, string $route): void { $this->mockRoutes(); @@ -296,4 +289,4 @@ public function testVersion(string $version, bool $isCorrectVersion, string $rou $response->assertStatus($status); } -} \ No newline at end of file +} diff --git a/tests/VersionTest.php b/tests/VersionTest.php index f3c2e290..53597912 100644 --- a/tests/VersionTest.php +++ b/tests/VersionTest.php @@ -3,6 +3,7 @@ namespace RonasIT\Support\Tests; use Illuminate\Support\Facades\Route; +use PHPUnit\Framework\Attributes\DataProvider; use RonasIT\Support\Support\Version; use RonasIT\Support\Contracts\VersionEnumContract; use Illuminate\Http\Request; @@ -26,35 +27,33 @@ public function setUp(): void $this->app->instance('request', $this->request); } - public function getTestCurrentData(): array + public static function getTestCurrentData(): array { return [ [ 'version' => '1', - 'assert' => true + 'assert' => true, ], [ 'version' => '1.0', - 'assert' => false + 'assert' => false, ], [ 'version' => '0.99', - 'assert' => false + 'assert' => false, ], [ 'version' => '1.01', - 'assert' => false + 'assert' => false, ], [ 'version' => '10', - 'assert' => false + 'assert' => false, ], ]; } - /** - * @dataProvider getTestCurrentData - */ + #[DataProvider('getTestCurrentData')] public function testCurrent(string $version, bool $assert) { switch ($assert) { @@ -67,23 +66,21 @@ public function testCurrent(string $version, bool $assert) } } - public function getTestIsData(): array + public static function getTestIsData(): array { return [ [ 'version' => '1', - 'assert' => true + 'assert' => true, ], [ 'version' => '10', - 'assert' => false + 'assert' => false, ], ]; } - /** - * @dataProvider getTestIsData - */ + #[DataProvider('getTestIsData')] public function testIs(string $version, bool $assert) { $checkedVersion = $this->createMock(VersionEnumContract::class); @@ -101,7 +98,7 @@ public function testIs(string $version, bool $assert) } } - public function getTestBetweenData(): array + public static function getTestBetweenData(): array { return [ [ @@ -137,9 +134,7 @@ public function getTestBetweenData(): array ]; } - /** - * @dataProvider getTestBetweenData - */ + #[DataProvider('getTestBetweenData')] public function testBetween(string $from, string $to, bool $assert) { $checkedVersionFrom = $this->createMock(VersionEnumContract::class); @@ -160,7 +155,7 @@ public function testBetween(string $from, string $to, bool $assert) } } - public function getTestGteData(): array + public static function getTestGteData(): array { return [ [ @@ -182,9 +177,7 @@ public function getTestGteData(): array ]; } - /** - * @dataProvider getTestGteData - */ + #[DataProvider('getTestGteData')] public function testGte(string $version, bool $assert) { $checkedVersion = $this->createMock(VersionEnumContract::class); @@ -202,7 +195,7 @@ public function testGte(string $version, bool $assert) } } - public function getTestLteData(): array + public static function getTestLteData(): array { return [ [ @@ -224,9 +217,7 @@ public function getTestLteData(): array ]; } - /** - * @dataProvider getTestLteData - */ + #[DataProvider('getTestLteData')] public function testLte(string $version, bool $assert) { $checkedVersion = $this->createMock(VersionEnumContract::class); @@ -243,4 +234,4 @@ public function testLte(string $version, bool $assert) break; } } -} \ No newline at end of file +} diff --git a/tests/fixtures/SearchTraitTest/search_query_sql.json b/tests/fixtures/SearchTraitTest/search_query_sql.json index 814c984e..e3504225 100644 --- a/tests/fixtures/SearchTraitTest/search_query_sql.json +++ b/tests/fixtures/SearchTraitTest/search_query_sql.json @@ -1 +1 @@ -"select `test_models`.*, (select count(*) from `relation_models` where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` from `test_models` where `test_models`.`deleted_at` is not null" \ No newline at end of file +"select \"test_models\".*, (select count(*) from \"relation_models\" where \"test_models\".\"id\" = \"relation_models\".\"test_model_id\") as \"relation_count\" from \"test_models\" where \"test_models\".\"deleted_at\" is not null" diff --git a/tests/support/Enum/VersionEnum.php b/tests/support/Enum/VersionEnum.php index add4d95c..506ecc37 100644 --- a/tests/support/Enum/VersionEnum.php +++ b/tests/support/Enum/VersionEnum.php @@ -7,9 +7,9 @@ // Backward compatibility with PHP < 8 class VersionEnum implements VersionEnumContract { - const v1 = '1'; - const v2 = '2'; - const v3 = '3'; + public const v1 = '1'; + public const v2 = '2'; + public const v3 = '3'; public static function values(): array { @@ -20,4 +20,4 @@ public static function toString(string $separator = ','): string { return implode($separator, self::values()); } -} \ No newline at end of file +} diff --git a/tests/support/Mock/ChildRelationModel.php b/tests/support/Mock/ChildRelationModel.php index f46b0360..c3e6e236 100644 --- a/tests/support/Mock/ChildRelationModel.php +++ b/tests/support/Mock/ChildRelationModel.php @@ -6,4 +6,4 @@ class ChildRelationModel extends Model { -} \ No newline at end of file +} diff --git a/tests/support/Mock/MockAuthUser.php b/tests/support/Mock/MockAuthUser.php index 151bac1f..cbcaff15 100644 --- a/tests/support/Mock/MockAuthUser.php +++ b/tests/support/Mock/MockAuthUser.php @@ -6,22 +6,22 @@ class MockAuthUser implements Authenticatable { - public function getAuthIdentifierName() + public function getAuthIdentifierName(): string { return 'some_auth_identifier_name'; } - public function getAuthIdentifier() + public function getAuthIdentifier(): string { return 'some_auth_identifier'; } - public function getAuthPassword() + public function getAuthPassword(): string { return 'some_auth_password'; } - public function getRememberToken() + public function getRememberToken(): string { return 'some_remember_token'; } @@ -30,8 +30,13 @@ public function setRememberToken($value) { } - public function getRememberTokenName() + public function getRememberTokenName(): string { return 'some_remember_token_name'; } + + public function getAuthPasswordName(): string + { + return 'password'; + } } diff --git a/tests/support/Mock/RelationModel.php b/tests/support/Mock/RelationModel.php index 1b0ee3b0..ab435c75 100644 --- a/tests/support/Mock/RelationModel.php +++ b/tests/support/Mock/RelationModel.php @@ -11,4 +11,4 @@ public function child_relation(): HasMany { return $this->hasMany(ChildRelationModel::class); } -} \ No newline at end of file +} diff --git a/tests/support/Mock/TestMailWithAttachments.php b/tests/support/Mock/TestMailWithAttachments.php index 46f25ede..c6d0ffaf 100644 --- a/tests/support/Mock/TestMailWithAttachments.php +++ b/tests/support/Mock/TestMailWithAttachments.php @@ -23,4 +23,4 @@ public function assertHasAttachment($file, array $options = []): bool { return true; } -} \ No newline at end of file +} diff --git a/tests/support/Mock/TestModel.php b/tests/support/Mock/TestModel.php index c119c7dc..14656e51 100644 --- a/tests/support/Mock/TestModel.php +++ b/tests/support/Mock/TestModel.php @@ -9,21 +9,22 @@ class TestModel extends Model { - use ModelTrait, SoftDeletes; + use ModelTrait; + use SoftDeletes; protected $fillable = [ 'name', 'json_field', - 'castable_field' + 'castable_field', ]; protected $casts = [ 'json_field' => 'array', - 'castable_field' => JSONCustomCast::class + 'castable_field' => JSONCustomCast::class, ]; public function relation(): HasMany { return $this->hasMany(RelationModel::class); } -} \ No newline at end of file +} diff --git a/tests/support/Mock/TestModelNoPrimaryKey.php b/tests/support/Mock/TestModelNoPrimaryKey.php index 78c1623a..bb9946b7 100644 --- a/tests/support/Mock/TestModelNoPrimaryKey.php +++ b/tests/support/Mock/TestModelNoPrimaryKey.php @@ -8,13 +8,14 @@ class TestModelNoPrimaryKey extends Model { - use ModelTrait, SoftDeletes; + use ModelTrait; + use SoftDeletes; protected $primaryKey = null; protected $fillable = [ 'name', 'json_field', - 'castable_field' + 'castable_field', ]; -} \ No newline at end of file +} diff --git a/tests/support/Mock/TestModelWithoutJsonFields.php b/tests/support/Mock/TestModelWithoutJsonFields.php index 1ca67a03..18782372 100644 --- a/tests/support/Mock/TestModelWithoutJsonFields.php +++ b/tests/support/Mock/TestModelWithoutJsonFields.php @@ -8,7 +8,8 @@ class TestModelWithoutJsonFields extends Model { - use ModelTrait, SoftDeletes; + use ModelTrait; + use SoftDeletes; protected $fillable = [ 'name', diff --git a/tests/support/Mock/TestRepository.php b/tests/support/Mock/TestRepository.php index 908160df..c7c9ed43 100644 --- a/tests/support/Mock/TestRepository.php +++ b/tests/support/Mock/TestRepository.php @@ -25,4 +25,4 @@ public function getModelName(): string { return $this->getEntityName(); } -} \ No newline at end of file +} diff --git a/tests/support/Mock/TestRepositoryNoPrimaryKey.php b/tests/support/Mock/TestRepositoryNoPrimaryKey.php index 66f67dec..0148f01b 100644 --- a/tests/support/Mock/TestRepositoryNoPrimaryKey.php +++ b/tests/support/Mock/TestRepositoryNoPrimaryKey.php @@ -10,4 +10,4 @@ public function __construct() { $this->setModel(TestModelNoPrimaryKey::class); } -} \ No newline at end of file +} diff --git a/tests/support/Traits/RouteMockTrait.php b/tests/support/Traits/RouteMockTrait.php index 8be79302..4f6e5d81 100644 --- a/tests/support/Traits/RouteMockTrait.php +++ b/tests/support/Traits/RouteMockTrait.php @@ -114,4 +114,4 @@ protected function mockRouteFacadeVersion(): void }); }); } -} \ No newline at end of file +} diff --git a/tests/support/Traits/SqlMockTrait.php b/tests/support/Traits/SqlMockTrait.php index 2cf2181d..59ec754c 100644 --- a/tests/support/Traits/SqlMockTrait.php +++ b/tests/support/Traits/SqlMockTrait.php @@ -13,310 +13,310 @@ trait SqlMockTrait protected function mockAll(array $selectResult): void { $this->mockSelect( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null', + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null', $selectResult ); $this->mockSelect( - 'select `relation_models`.*, (select count(*) from `child_relation_models` ' - . 'where `relation_models`.`id` = `child_relation_models`.`relation_model_id`) as `child_relation_count` ' - . 'from `relation_models` where `relation_models`.`test_model_id` in (1)', + 'select "relation_models".*, (select count(*) from "child_relation_models" ' + . 'where "relation_models"."id" = "child_relation_models"."relation_model_id") as "child_relation_count" ' + . 'from "relation_models" where "relation_models"."test_model_id" in (1)', ); } protected function mockGet(array $selectResult): void { $this->mockSelectById( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ?', + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ?', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); } protected function mockFirst(array $selectResult): void { $this->mockSelectById( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ? limit 1', + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ? limit 1', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); } protected function mockFirstBy(array $selectResult): void { $this->mockSelectById( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ? limit 1', + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ? limit 1', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); } protected function mockLast(array $selectResult): void { $this->mockSelectById( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ? ' - . 'order by `created_at` desc limit 1', + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ? ' + . 'order by "created_at" desc limit 1', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); } protected function mockFind(array $selectResult): void { $this->mockSelectById( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ? limit 1', + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ? limit 1', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); } protected function mockFirstOrCreateEntityExists(array $selectResult): void { $this->mockSelectById( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ? limit 1', + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ? limit 1', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); } protected function mockGetByList(array $selectResult): void { $this->mockSelect( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` in (?, ?, ?)', + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" in (?, ?, ?)', $selectResult, [1, 2, 3], ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); } protected function mockChunk(array $selectResult): void { $this->mockSelect( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null order by `id` asc limit 10 offset 0', + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null order by "id" asc limit 10 offset 0', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); } protected function mockCreate(array $selectResult, $notFillableValue): void { $this->mockInsert( - 'insert into `test_models` (`name`, `updated_at`, `created_at`) values (?, ?, ?)', + 'insert into "test_models" ("name", "updated_at", "created_at") values (?, ?, ?)', ['test_name', $notFillableValue, Carbon::now()] ); $this->mockSelectById( - 'select * from `test_models` where `id` = ? limit 1', + 'select * from "test_models" where "id" = ? limit 1', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); } protected function mockUpdate(array $selectResult, $notFillableValue): void { $this->mockSelectById( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ? limit 1', + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ? limit 1', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)', + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)', $selectResult ); $this->mockUpdateSqlQuery( - 'update `test_models` set `name` = ?, `test_models`.`updated_at` = ? where `id` = ?', + 'update "test_models" set "name" = ?, "updated_at" = ? where "id" = ?', ['test_name', $notFillableValue, 1] ); $this->mockSelectById( - 'select * from `test_models` where `id` = ? limit 1', + 'select * from "test_models" where "id" = ? limit 1', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); } protected function mockUpdateOrCreateEntityExists(array $selectResult): void { $this->mockSelectExists( - 'select exists(select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ?) as `exists`' + 'select exists(select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ?) as "exists"' ); $this->mockSelectById( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ? limit 1', + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ? limit 1', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)', + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)', $selectResult ); $this->mockUpdateSqlQuery( - 'update `test_models` set `name` = ?, `test_models`.`updated_at` = ? where `id` = ?', + 'update "test_models" set "name" = ?, "updated_at" = ? where "id" = ?', ['test_name', Carbon::now(), 1] ); $this->mockSelectById( - 'select * from `test_models` where `id` = ? limit 1', + 'select * from "test_models" where "id" = ? limit 1', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); } protected function mockUpdateOrCreateEntityDoesntExist(array $selectResult): void { $this->mockSelectExists( - 'select exists(select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ?) as `exists`', + 'select exists(select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ?) as "exists"', false ); $this->mockInsert( - 'insert into `test_models` (`name`, `id`, `updated_at`, `created_at`) values (?, ?, ?, ?)', + 'insert into "test_models" ("name", "id", "updated_at", "created_at") values (?, ?, ?, ?)', ['test_name', 1, Carbon::now(), Carbon::now()] ); $this->mockSelectById( - 'select * from `test_models` where `id` = ? limit 1', + 'select * from "test_models" where "id" = ? limit 1', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); } protected function mockFirstOrCreateEntityDoesntExists(array $selectResult): void { $this->mockSelectById( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null and `id` = ? limit 1' + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null and "id" = ? limit 1' ); $this->mockInsert( - 'insert into `test_models` (`name`, `id`, `updated_at`, `created_at`) values (?, ?, ?, ?)', + 'insert into "test_models" ("name", "id", "updated_at", "created_at") values (?, ?, ?, ?)', ['test_name', 1, Carbon::now(), Carbon::now()] ); $this->mockSelectById( - 'select * from `test_models` where `id` = ? limit 1', + 'select * from "test_models" where "id" = ? limit 1', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); } protected function mockGetSearchResult(array $selectResult): void { $this->mockSelectWithAggregate( - 'select count(*) as aggregate from `test_models` where `test_models`.`deleted_at` is not null' + 'select count(*) as aggregate from "test_models" where "test_models"."deleted_at" is not null' ); $this->mockSelect( - 'select `test_models`.*, (select count(*) from `relation_models` ' - . 'where `test_models`.`id` = `relation_models`.`test_model_id`) as `relation_count` ' - . 'from `test_models` where `test_models`.`deleted_at` is not null order by `id` asc limit 15 offset 0', + 'select "test_models".*, (select count(*) from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id") as "relation_count" ' + . 'from "test_models" where "test_models"."deleted_at" is not null order by "id" asc limit 15 offset 0', $selectResult ); $this->mockSelect( - 'select * from `relation_models` where `relation_models`.`test_model_id` in (1)' + 'select * from "relation_models" where "relation_models"."test_model_id" in (1)' ); } protected function mockGetSearchResultWithTrashed(): void { $this->mockSelectWithAggregate( - 'select count(*) as aggregate from `test_models`' + 'select count(*) as aggregate from "test_models"' ); $this->mockSelect( - 'select * from `test_models` order by `id` asc limit 15 offset 0' + 'select * from "test_models" order by "id" asc limit 15 offset 0' ); } protected function mockGetSearchResultWithQuery(array $selectResult): void { $this->mockSelectWithAggregate( - "select count(*) as aggregate from `test_models` " - . "where ((`query_field` like '%search_\'string%') or (`another_query_field` like '%search_\'string%')) " - . 'and `test_models`.`deleted_at` is null' + 'select count(*) as aggregate from "test_models" ' + . "where ((\"query_field\" like '%search_\'string%') or (\"another_query_field\" like '%search_\'string%')) " + . 'and "test_models"."deleted_at" is null' ); $this->mockSelect( - "select * from `test_models` where ((`query_field` like '%search_\'string%') " - . "or (`another_query_field` like '%search_\'string%')) and `test_models`.`deleted_at` is null " - . "order by `id` asc limit 15 offset 0", + "select * from \"test_models\" where ((\"query_field\" like '%search_\'string%') " + . "or (\"another_query_field\" like '%search_\'string%')) and \"test_models\".\"deleted_at\" is null " + . 'order by "id" asc limit 15 offset 0', $selectResult ); } @@ -342,25 +342,25 @@ protected function mockGetSearchResultWithCustomQuery(array $selectResult): void protected function mockGetSearchResultWithRelations(array $selectResult): void { $this->mockSelectWithAggregate( - "select count(*) as aggregate from `test_models` " - . "where ((`query_field` like '%search_string%') or exists (select * from `relation_models` " - . "where `test_models`.`id` = `relation_models`.`test_model_id` " - . "and (`another_query_field` like '%search_string%'))) and exists (select * from `relation_models` " - . "where `test_models`.`id` = `relation_models`.`test_model_id` and `name` = ?) " - . "and `test_models`.`deleted_at` is null", + 'select count(*) as aggregate from "test_models" ' + . 'where (("query_field" like \'%search_string%\') or exists (select * from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id" ' + . 'and ("another_query_field" like \'%search_string%\'))) and exists (select * from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id" and "name" = ?) ' + . 'and "test_models"."deleted_at" is null', ['some_value'] ); $this->mockSelect( - "select `test_models`.*, (select `id` from `relation_models` " - . "where `test_models`.`id` = `relation_models`.`test_model_id` order by `id` asc limit 1) " - . "as `relation_id` from `test_models` where ((`query_field` like '%search_string%') " - . "or exists (select * from `relation_models` " - . "where `test_models`.`id` = `relation_models`.`test_model_id` " - . "and (`another_query_field` like '%search_string%'))) and " - . "exists (select * from `relation_models` where `test_models`.`id` = `relation_models`.`test_model_id` " - . "and `name` = ?) and `test_models`.`deleted_at` is null " - . "order by `relation_id` asc, `id` asc limit 15 offset 0", + 'select "test_models".*, (select "id" from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id" order by "id" asc limit 1) ' + . 'as "relation_id" from "test_models" where (("query_field" like \'%search_string%\') ' + . 'or exists (select * from "relation_models" ' + . 'where "test_models"."id" = "relation_models"."test_model_id" ' + . 'and ("another_query_field" like \'%search_string%\'))) and ' + . 'exists (select * from "relation_models" where "test_models"."id" = "relation_models"."test_model_id" ' + . 'and "name" = ?) and "test_models"."deleted_at" is null ' + . 'order by "relation_id" asc, "id" asc limit 15 offset 0', $selectResult, ['some_value'], ); @@ -369,10 +369,10 @@ protected function mockGetSearchResultWithRelations(array $selectResult): void protected function mockGetSearchResultWithFilters(array $selectResult): void { $this->mockSelectWithAggregate( - "select count(*) as aggregate from `test_models` where `user_id` in (?, ?) and `user_id` " - . "not in (?, ?) and `name` = ? and `date` >= ? and `date` <= ? " - . "and `created_at` >= ? and `created_at` <= ? and `updated_at` > ? " - . "and `updated_at` < ? and `test_models`.`deleted_at` is null", + 'select count(*) as aggregate from "test_models" where "user_id" in (?, ?) and "user_id" ' + . 'not in (?, ?) and "name" = ? and "date" >= ? and "date" <= ? ' + . 'and "created_at" >= ? and "created_at" <= ? and "updated_at" > ? ' + . 'and "updated_at" < ? and "test_models"."deleted_at" is null', [ 1, 2, @@ -389,10 +389,10 @@ protected function mockGetSearchResultWithFilters(array $selectResult): void ); $this->mockSelect( - "select * from `test_models` where `user_id` in (?, ?) and `user_id` not in (?, ?) " - . "and `name` = ? and `date` >= ? and `date` <= ? and `created_at` >= ? and `created_at` <= ? " - . "and `updated_at` > ? and `updated_at` < ? and `test_models`.`deleted_at` is null " - . "order by `id` asc limit 15 offset 0", + 'select * from "test_models" where "user_id" in (?, ?) and "user_id" not in (?, ?) ' + . 'and "name" = ? and "date" >= ? and "date" <= ? and "created_at" >= ? and "created_at" <= ? ' + . 'and "updated_at" > ? and "updated_at" < ? and "test_models"."deleted_at" is null ' + . 'order by "id" asc limit 15 offset 0', $selectResult, [ 1, @@ -413,7 +413,7 @@ protected function mockGetSearchResultWithFilters(array $selectResult): void protected function mockExistsUsersExceptAuthorized(): void { $this->mockSelectExists( - "select exists(select * from `users` where `id` <> ? and `email` in (?)) as `exists`", + 'select exists(select * from "users" where "id" <> ? and "email" in (?)) as "exists"', false, [1, 'mail@mail.com'] ); @@ -425,7 +425,7 @@ protected function mockExistsUsersExceptAuthorizedByArray( string $keyField = 'id' ): void { $this->mockSelectExists( - "select exists(select * from `{$table}` where `{$keyField}` <> ? and `email` in (?, ?)) as `exists`", + "select exists(select * from \"{$table}\" where \"{$keyField}\" <> ? and \"email\" in (?, ?)) as \"exists\"", $isExist, [1, 'mail@mail.com', 'mail@mail.net'] ); @@ -434,11 +434,10 @@ protected function mockExistsUsersExceptAuthorizedByArray( protected function mockListExists( bool $isExist, string $table = 'clients', - string $keyField = 'user_id' - ): void - { + string $keyField = 'user_id', + ): void { $this->mockSelectExists( - "select exists(select * from `{$table}` where `{$keyField}` in (?, ?, ?)) as `exists`", + "select exists(select * from \"{$table}\" where \"{$keyField}\" in (?, ?, ?)) as \"exists\"", $isExist, [1, 2, 3] ); @@ -494,6 +493,13 @@ protected function mockSelectExists(string $query, bool $isExist = true, array $ $this->mockSelect($query, [['exists' => $isExist]], $bindings); } + protected function mockTruncate(string $table): void + { + $this->mockDelete("delete from sqlite_sequence where name = ?", [$table]); + + $this->mockDelete("delete from \"{$table}\""); + } + protected function getPdo(): SingleConnectionProxy { $this->pdo ??= DBMock::mockPdo();