From f8ad9a1805676066433667fd40d45d5baa74c327 Mon Sep 17 00:00:00 2001 From: Lance Pioch Date: Thu, 30 Jan 2025 16:39:17 -0500 Subject: [PATCH] Use PestPHP (#962) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Install Pest * Don’t use bootstrap file anymore * Fix comment * Think this is needed * Reset this * Switch dataproviders to attributes * Fix these * Support in memory databases * Fix this migration * Switch this back for now * Add missing import * Truncate and reseed database * These are replaced now * Switch ci to use pest --- .github/workflows/ci.yaml | 12 +- .../Requests/Api/Client/ClientApiRequest.php | 5 +- bootstrap/tests.php | 45 - composer.json | 7 +- composer.lock | 1198 +++++++++++++---- config/database.php | 3 +- ...10426_remove_user_first_and_last_names.php | 4 +- phpunit.xml | 60 +- .../ApplicationApiIntegrationTestCase.php | 2 - .../Application/Users/UserControllerTest.php | 4 +- .../Api/Client/ApiKeyControllerTest.php | 4 +- .../Client/ClientApiIntegrationTestCase.php | 19 - .../Api/Client/ClientControllerTest.php | 4 +- .../AllocationAuthorizationTest.php | 5 +- .../Allocation/CreateNewAllocationTest.php | 4 +- .../Allocation/DeleteAllocationTest.php | 4 +- .../Server/Backup/BackupAuthorizationTest.php | 5 +- .../Database/DatabaseAuthorizationTest.php | 5 +- .../NetworkAllocationControllerTest.php | 8 +- .../Api/Client/Server/PowerControllerTest.php | 7 +- .../Schedule/CreateServerScheduleTest.php | 4 +- .../Schedule/DeleteServerScheduleTest.php | 4 +- .../Server/Schedule/ExecuteScheduleTest.php | 4 +- .../Schedule/GetServerSchedulesTest.php | 4 +- .../Schedule/ScheduleAuthorizationTest.php | 4 +- .../Schedule/UpdateServerScheduleTest.php | 4 +- .../CreateServerScheduleTaskTest.php | 4 +- .../Client/Server/SettingsControllerTest.php | 7 +- .../Startup/GetStartupAndVariablesTest.php | 4 +- .../Startup/UpdateStartupVariableTest.php | 7 +- .../Subuser/CreateServerSubuserTest.php | 4 +- .../Subuser/SubuserAuthorizationTest.php | 4 +- .../Api/Daemon/DaemonAuthenticateTest.php | 4 +- .../SftpAuthenticationControllerTest.php | 11 +- tests/Integration/IntegrationTestCase.php | 4 + .../Jobs/Schedule/RunTaskJobTest.php | 9 +- .../DatabaseManagementServiceTest.php | 4 +- .../DeployServerDatabaseServiceTest.php | 4 +- .../Schedules/ProcessScheduleServiceTest.php | 4 +- tests/Pest.php | 45 + tests/TestCase.php | 2 +- .../Helpers/EnvironmentWriterTraitTest.php | 5 +- tests/Unit/Helpers/IsDigitTest.php | 4 +- tests/Unit/Rules/UsernameTest.php | 7 +- tests/Unit/Services/Acl/Api/AdminAclTest.php | 4 +- 45 files changed, 1130 insertions(+), 436 deletions(-) delete mode 100644 bootstrap/tests.php create mode 100644 tests/Pest.php diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 00f5b28a6..06dd733c2 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -69,13 +69,13 @@ jobs: run: composer install --no-interaction --no-suggest --prefer-dist - name: Unit tests - run: vendor/bin/phpunit tests/Unit + run: vendor/bin/pest tests/Unit env: DB_HOST: UNIT_NO_DB SKIP_MIGRATIONS: true - name: Integration tests - run: vendor/bin/phpunit tests/Integration + run: vendor/bin/pest tests/Integration env: DB_PORT: ${{ job.services.database.ports[3306] }} DB_USERNAME: root @@ -142,13 +142,13 @@ jobs: run: composer install --no-interaction --no-suggest --prefer-dist - name: Unit tests - run: vendor/bin/phpunit tests/Unit + run: vendor/bin/pest tests/Unit env: DB_HOST: UNIT_NO_DB SKIP_MIGRATIONS: true - name: Integration tests - run: vendor/bin/phpunit tests/Integration + run: vendor/bin/pest tests/Integration env: DB_PORT: ${{ job.services.database.ports[3306] }} DB_USERNAME: root @@ -206,10 +206,10 @@ jobs: run: touch database/testing.sqlite - name: Unit tests - run: vendor/bin/phpunit tests/Unit + run: vendor/bin/pest tests/Unit env: DB_HOST: UNIT_NO_DB SKIP_MIGRATIONS: true - name: Integration tests - run: vendor/bin/phpunit tests/Integration + run: vendor/bin/pest tests/Integration diff --git a/app/Http/Requests/Api/Client/ClientApiRequest.php b/app/Http/Requests/Api/Client/ClientApiRequest.php index e5cb13e0a..e2efde108 100644 --- a/app/Http/Requests/Api/Client/ClientApiRequest.php +++ b/app/Http/Requests/Api/Client/ClientApiRequest.php @@ -6,9 +6,6 @@ use App\Models\Server; use App\Contracts\Http\ClientPermissionsRequest; use App\Http\Requests\Api\Application\ApplicationApiRequest; -/** - * @method \App\Models\User user($guard = null) - */ class ClientApiRequest extends ApplicationApiRequest { /** @@ -23,7 +20,7 @@ class ClientApiRequest extends ApplicationApiRequest return $this->user()->can($this->permission(), $server); } - // If there is no server available on the reqest, trigger a failure since + // If there is no server available on the request, trigger a failure since // we expect there to be one at this point. return false; } diff --git a/bootstrap/tests.php b/bootstrap/tests.php deleted file mode 100644 index a80e0b27f..000000000 --- a/bootstrap/tests.php +++ /dev/null @@ -1,45 +0,0 @@ -make(Kernel::class); - -/* - * Bootstrap the kernel and prepare application for testing. - */ -$kernel->bootstrap(); - -// Register the collision service provider so that errors during the test -// setup process are output nicely. -(new Provider())->register(); - -$output = new ConsoleOutput(); - -$prefix = 'database.connections.' . config('database.default'); -if (!Str::contains(config("$prefix.database"), 'test')) { - $output->writeln(PHP_EOL . 'Cannot run test process against non-testing database.'); - $output->writeln(PHP_EOL . 'Environment is currently pointed at: "' . config("$prefix.database") . '".'); - exit(1); -} - -/* - * Perform database migrations and reseeding before continuing with - * running the tests. - */ -if (!env('SKIP_MIGRATIONS')) { - $output->writeln(PHP_EOL . 'Refreshing database for Integration tests...'); - $kernel->call('migrate:fresh'); - - $output->writeln('Seeding database for Integration tests...' . PHP_EOL); - $kernel->call('db:seed'); -} else { - $output->writeln(PHP_EOL . 'Skipping database migrations...' . PHP_EOL); -} diff --git a/composer.json b/composer.json index 1147bed59..804b8d1ec 100644 --- a/composer.json +++ b/composer.json @@ -54,7 +54,7 @@ "laravel/sail": "^1.29.1", "mockery/mockery": "^1.6.11", "nunomaduro/collision": "^8.1.1", - "phpunit/phpunit": "^10.5.20", + "pestphp/pest": "^3.7", "spatie/laravel-ignition": "^2.7" }, "autoload": { @@ -89,7 +89,10 @@ "config": { "optimize-autoloader": true, "preferred-install": "dist", - "sort-packages": true + "sort-packages": true, + "allow-plugins": { + "pestphp/pest-plugin": true + } }, "minimum-stability": "stable", "prefer-stable": true diff --git a/composer.lock b/composer.lock index f75429533..98ffcc2a5 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": "3605a7db1271bc67e1f1ce1bf0d80b18", + "content-hash": "faf9c1aaa681f473eab3088e9cb44aed", "packages": [ { "name": "abdelhamiderrahmouni/filament-monaco-editor", @@ -5229,16 +5229,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -5281,9 +5281,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "nunomaduro/termwind", @@ -11026,6 +11026,99 @@ }, "time": "2024-10-23T11:41:03+00:00" }, + { + "name": "brianium/paratest", + "version": "v7.7.0", + "source": { + "type": "git", + "url": "https://github.com/paratestphp/paratest.git", + "reference": "4fb3f73bc5a4c3146bac2850af7dc72435a32daf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/4fb3f73bc5a4c3146bac2850af7dc72435a32daf", + "reference": "4fb3f73bc5a4c3146bac2850af7dc72435a32daf", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-simplexml": "*", + "fidry/cpu-core-counter": "^1.2.0", + "jean85/pretty-package-versions": "^2.1.0", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "phpunit/php-code-coverage": "^11.0.8", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-timer": "^7.0.1", + "phpunit/phpunit": "^11.5.1", + "sebastian/environment": "^7.2.0", + "symfony/console": "^6.4.14 || ^7.2.1", + "symfony/process": "^6.4.14 || ^7.2.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0.0", + "ext-pcov": "*", + "ext-posix": "*", + "phpstan/phpstan": "^2.0.3", + "phpstan/phpstan-deprecation-rules": "^2.0.1", + "phpstan/phpstan-phpunit": "^2.0.1", + "phpstan/phpstan-strict-rules": "^2", + "squizlabs/php_codesniffer": "^3.11.1", + "symfony/filesystem": "^6.4.13 || ^7.2.0" + }, + "bin": [ + "bin/paratest", + "bin/paratest_for_phpstorm" + ], + "type": "library", + "autoload": { + "psr-4": { + "ParaTest\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Scaturro", + "email": "scaturrob@gmail.com", + "role": "Developer" + }, + { + "name": "Filippo Tessarotto", + "email": "zoeslam@gmail.com", + "role": "Developer" + } + ], + "description": "Parallel testing for PHP", + "homepage": "https://github.com/paratestphp/paratest", + "keywords": [ + "concurrent", + "parallel", + "phpunit", + "testing" + ], + "support": { + "issues": "https://github.com/paratestphp/paratest/issues", + "source": "https://github.com/paratestphp/paratest/tree/v7.7.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/Slamdunk", + "type": "github" + }, + { + "url": "https://paypal.me/filippotessarotto", + "type": "paypal" + } + ], + "time": "2024-12-11T14:50:44+00:00" + }, { "name": "composer/class-map-generator", "version": "1.4.0", @@ -11242,17 +11335,78 @@ "time": "2024-11-07T15:11:20+00:00" }, { - "name": "filp/whoops", - "version": "2.16.0", + "name": "fidry/cpu-core-counter", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2" + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "8520451a140d3f46ac33042715115e290cf5785f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", + "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^1.9.2", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "phpstan/phpstan-phpunit": "^1.2.2", + "phpstan/phpstan-strict-rules": "^1.4.4", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2024-08-06T10:04:20+00:00" + }, + { + "name": "filp/whoops", + "version": "2.17.0", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "075bc0c26631110584175de6523ab3f1652eb28e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/075bc0c26631110584175de6523ab3f1652eb28e", + "reference": "075bc0c26631110584175de6523ab3f1652eb28e", "shasum": "" }, "require": { @@ -11302,7 +11456,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.16.0" + "source": "https://github.com/filp/whoops/tree/2.17.0" }, "funding": [ { @@ -11310,7 +11464,7 @@ "type": "github" } ], - "time": "2024-09-25T12:00:00+00:00" + "time": "2025-01-25T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -11363,6 +11517,65 @@ }, "time": "2020-07-09T08:09:16+00:00" }, + { + "name": "jean85/pretty-package-versions", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", + "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.1.0", + "php": "^7.4|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^7.5|^8.5|^9.6", + "vimeo/psalm": "^4.3 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A library to get pretty versions strings of installed dependencies", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "support": { + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.0" + }, + "time": "2024-11-18T16:19:46+00:00" + }, { "name": "larastan/larastan", "version": "v3.0.2", @@ -11825,6 +12038,330 @@ ], "time": "2024-10-15T16:06:32+00:00" }, + { + "name": "pestphp/pest", + "version": "v3.7.2", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest.git", + "reference": "709ecb1ba2641fc0c4653ebe1fd8a402bbf4d18b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest/zipball/709ecb1ba2641fc0c4653ebe1fd8a402bbf4d18b", + "reference": "709ecb1ba2641fc0c4653ebe1fd8a402bbf4d18b", + "shasum": "" + }, + "require": { + "brianium/paratest": "^7.7.0", + "nunomaduro/collision": "^8.5.0", + "nunomaduro/termwind": "^2.3.0", + "pestphp/pest-plugin": "^3.0.0", + "pestphp/pest-plugin-arch": "^3.0.0", + "pestphp/pest-plugin-mutate": "^3.0.5", + "php": "^8.2.0", + "phpunit/phpunit": "^11.5.3" + }, + "conflict": { + "filp/whoops": "<2.16.0", + "phpunit/phpunit": ">11.5.3", + "sebastian/exporter": "<6.0.0", + "webmozart/assert": "<1.11.0" + }, + "require-dev": { + "pestphp/pest-dev-tools": "^3.3.0", + "pestphp/pest-plugin-type-coverage": "^3.2.3", + "symfony/process": "^7.2.0" + }, + "bin": [ + "bin/pest" + ], + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Mutate\\Plugins\\Mutate", + "Pest\\Plugins\\Configuration", + "Pest\\Plugins\\Bail", + "Pest\\Plugins\\Cache", + "Pest\\Plugins\\Coverage", + "Pest\\Plugins\\Init", + "Pest\\Plugins\\Environment", + "Pest\\Plugins\\Help", + "Pest\\Plugins\\Memory", + "Pest\\Plugins\\Only", + "Pest\\Plugins\\Printer", + "Pest\\Plugins\\ProcessIsolation", + "Pest\\Plugins\\Profile", + "Pest\\Plugins\\Retry", + "Pest\\Plugins\\Snapshot", + "Pest\\Plugins\\Verbose", + "Pest\\Plugins\\Version", + "Pest\\Plugins\\Parallel" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php", + "src/Pest.php" + ], + "psr-4": { + "Pest\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "The elegant PHP Testing Framework.", + "keywords": [ + "framework", + "pest", + "php", + "test", + "testing", + "unit" + ], + "support": { + "issues": "https://github.com/pestphp/pest/issues", + "source": "https://github.com/pestphp/pest/tree/v3.7.2" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2025-01-19T17:35:09+00:00" + }, + { + "name": "pestphp/pest-plugin", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin.git", + "reference": "e79b26c65bc11c41093b10150c1341cc5cdbea83" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/e79b26c65bc11c41093b10150c1341cc5cdbea83", + "reference": "e79b26c65bc11c41093b10150c1341cc5cdbea83", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0.0", + "composer-runtime-api": "^2.2.2", + "php": "^8.2" + }, + "conflict": { + "pestphp/pest": "<3.0.0" + }, + "require-dev": { + "composer/composer": "^2.7.9", + "pestphp/pest": "^3.0.0", + "pestphp/pest-dev-tools": "^3.0.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Pest\\Plugin\\Manager" + }, + "autoload": { + "psr-4": { + "Pest\\Plugin\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Pest plugin manager", + "keywords": [ + "framework", + "manager", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin/tree/v3.0.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2024-09-08T23:21:41+00:00" + }, + { + "name": "pestphp/pest-plugin-arch", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-arch.git", + "reference": "0a27e55a270cfe73d8cb70551b91002ee2cb64b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/0a27e55a270cfe73d8cb70551b91002ee2cb64b0", + "reference": "0a27e55a270cfe73d8cb70551b91002ee2cb64b0", + "shasum": "" + }, + "require": { + "pestphp/pest-plugin": "^3.0.0", + "php": "^8.2", + "ta-tikoma/phpunit-architecture-test": "^0.8.4" + }, + "require-dev": { + "pestphp/pest": "^3.0.0", + "pestphp/pest-dev-tools": "^3.0.0" + }, + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Arch\\Plugin" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Pest\\Arch\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Arch plugin for Pest PHP.", + "keywords": [ + "arch", + "architecture", + "framework", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-arch/tree/v3.0.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2024-09-08T23:23:55+00:00" + }, + { + "name": "pestphp/pest-plugin-mutate", + "version": "v3.0.5", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-mutate.git", + "reference": "e10dbdc98c9e2f3890095b4fe2144f63a5717e08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-mutate/zipball/e10dbdc98c9e2f3890095b4fe2144f63a5717e08", + "reference": "e10dbdc98c9e2f3890095b4fe2144f63a5717e08", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.2.0", + "pestphp/pest-plugin": "^3.0.0", + "php": "^8.2", + "psr/simple-cache": "^3.0.0" + }, + "require-dev": { + "pestphp/pest": "^3.0.8", + "pestphp/pest-dev-tools": "^3.0.0", + "pestphp/pest-plugin-type-coverage": "^3.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Pest\\Mutate\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sandro Gehri", + "email": "sandrogehri@gmail.com" + } + ], + "description": "Mutates your code to find untested cases", + "keywords": [ + "framework", + "mutate", + "mutation", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-mutate/tree/v3.0.5" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/gehrisandro", + "type": "github" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2024-09-22T07:54:40+00:00" + }, { "name": "phar-io/manifest", "version": "2.0.4", @@ -11996,6 +12533,70 @@ }, "time": "2020-06-27T09:03:43+00:00" }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.6.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", + "webmozart/assert": "^1.9.1" + }, + "require-dev": { + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1" + }, + "time": "2024-12-07T09:39:29+00:00" + }, { "name": "phpdocumentor/type-resolver", "version": "1.10.0", @@ -12201,35 +12802,35 @@ }, { "name": "phpunit/php-code-coverage", - "version": "10.1.16", + "version": "11.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + "reference": "418c59fd080954f8c4aa5631d9502ecda2387118" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/418c59fd080954f8c4aa5631d9502ecda2387118", + "reference": "418c59fd080954f8c4aa5631d9502ecda2387118", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-text-template": "^3.0.1", - "sebastian/code-unit-reverse-lookup": "^3.0.0", - "sebastian/complexity": "^3.2.0", - "sebastian/environment": "^6.1.0", - "sebastian/lines-of-code": "^2.0.2", - "sebastian/version": "^4.0.1", + "nikic/php-parser": "^5.3.1", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.0", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^10.1" + "phpunit/phpunit": "^11.5.0" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -12238,7 +12839,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.1.x-dev" + "dev-main": "11.0.x-dev" } }, "autoload": { @@ -12267,7 +12868,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/10.1.16" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.8" }, "funding": [ { @@ -12275,32 +12876,32 @@ "type": "github" } ], - "time": "2024-08-22T04:31:57+00:00" + "time": "2024-12-11T12:34:27+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "4.1.0", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -12328,7 +12929,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" }, "funding": [ { @@ -12336,28 +12937,28 @@ "type": "github" } ], - "time": "2023-08-31T06:24:48+00:00" + "time": "2024-08-27T05:02:59+00:00" }, { "name": "phpunit/php-invoker", - "version": "4.0.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-pcntl": "*" @@ -12365,7 +12966,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -12391,7 +12992,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" }, "funding": [ { @@ -12399,32 +13001,32 @@ "type": "github" } ], - "time": "2023-02-03T06:56:09+00:00" + "time": "2024-07-03T05:07:44+00:00" }, { "name": "phpunit/php-text-template", - "version": "3.0.1", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -12451,7 +13053,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" }, "funding": [ { @@ -12459,32 +13061,32 @@ "type": "github" } ], - "time": "2023-08-31T14:07:24+00:00" + "time": "2024-07-03T05:08:43+00:00" }, { "name": "phpunit/php-timer", - "version": "6.0.0", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -12510,7 +13112,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" }, "funding": [ { @@ -12518,20 +13121,20 @@ "type": "github" } ], - "time": "2023-02-03T06:57:52+00:00" + "time": "2024-07-03T05:09:35+00:00" }, { "name": "phpunit/phpunit", - "version": "10.5.38", + "version": "11.5.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a86773b9e887a67bc53efa9da9ad6e3f2498c132" + "reference": "30e319e578a7b5da3543073e30002bf82042f701" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a86773b9e887a67bc53efa9da9ad6e3f2498c132", - "reference": "a86773b9e887a67bc53efa9da9ad6e3f2498c132", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/30e319e578a7b5da3543073e30002bf82042f701", + "reference": "30e319e578a7b5da3543073e30002bf82042f701", "shasum": "" }, "require": { @@ -12541,26 +13144,26 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", + "myclabs/deep-copy": "^1.12.1", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.16", - "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.3", - "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" + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.8", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.2", + "sebastian/comparator": "^6.3.0", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.0", + "sebastian/exporter": "^6.3.0", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/type": "^5.1.0", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" @@ -12571,7 +13174,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.5-dev" + "dev-main": "11.5-dev" } }, "autoload": { @@ -12603,7 +13206,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.38" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.3" }, "funding": [ { @@ -12619,32 +13222,32 @@ "type": "tidelift" } ], - "time": "2024-10-28T13:06:21+00:00" + "time": "2025-01-13T09:36:00+00:00" }, { "name": "sebastian/cli-parser", - "version": "2.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -12668,7 +13271,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" }, "funding": [ { @@ -12676,32 +13279,32 @@ "type": "github" } ], - "time": "2024-03-02T07:12:49+00:00" + "time": "2024-07-03T04:41:36+00:00" }, { "name": "sebastian/code-unit", - "version": "2.0.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", + "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -12724,7 +13327,8 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.2" }, "funding": [ { @@ -12732,32 +13336,32 @@ "type": "github" } ], - "time": "2023-02-03T06:58:43+00:00" + "time": "2024-12-12T09:59:06+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -12779,7 +13383,8 @@ "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/3.0.0" + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" }, "funding": [ { @@ -12787,36 +13392,39 @@ "type": "github" } ], - "time": "2023-02-03T06:59:15+00:00" + "time": "2024-07-03T04:45:54+00:00" }, { "name": "sebastian/comparator", - "version": "5.0.3", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" + "reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/d4e47a769525c4dd38cea90e5dcd435ddbbc7115", + "reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^11.4" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.2-dev" } }, "autoload": { @@ -12856,7 +13464,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.0" }, "funding": [ { @@ -12864,33 +13472,33 @@ "type": "github" } ], - "time": "2024-10-18T14:56:07+00:00" + "time": "2025-01-06T10:28:19+00:00" }, { "name": "sebastian/complexity", - "version": "3.2.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -12914,7 +13522,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" }, "funding": [ { @@ -12922,33 +13530,33 @@ "type": "github" } ], - "time": "2023-12-21T08:37:17+00:00" + "time": "2024-07-03T04:49:50+00:00" }, { "name": "sebastian/diff", - "version": "5.1.1", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -12981,7 +13589,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" }, "funding": [ { @@ -12989,27 +13597,27 @@ "type": "github" } ], - "time": "2024-03-02T07:15:17+00:00" + "time": "2024-07-03T04:53:05+00:00" }, { "name": "sebastian/environment", - "version": "6.1.0", + "version": "7.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", + "reference": "855f3ae0ab316bbafe1ba4e16e9f3c078d24a0c5", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-posix": "*" @@ -13017,7 +13625,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "7.2-dev" } }, "autoload": { @@ -13045,7 +13653,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.0" }, "funding": [ { @@ -13053,34 +13661,34 @@ "type": "github" } ], - "time": "2024-03-23T08:47:14+00:00" + "time": "2024-07-03T04:54:44+00:00" }, { "name": "sebastian/exporter", - "version": "5.1.2", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -13123,7 +13731,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" }, "funding": [ { @@ -13131,35 +13739,35 @@ "type": "github" } ], - "time": "2024-03-02T07:17:12+00:00" + "time": "2024-12-05T09:17:50+00:00" }, { "name": "sebastian/global-state", - "version": "6.0.2", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -13185,7 +13793,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" }, "funding": [ { @@ -13193,33 +13801,33 @@ "type": "github" } ], - "time": "2024-03-02T07:19:19+00:00" + "time": "2024-07-03T04:57:36+00:00" }, { "name": "sebastian/lines-of-code", - "version": "2.0.2", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -13243,7 +13851,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" }, "funding": [ { @@ -13251,34 +13859,34 @@ "type": "github" } ], - "time": "2023-12-21T08:38:20+00:00" + "time": "2024-07-03T04:58:38+00:00" }, { "name": "sebastian/object-enumerator", - "version": "5.0.0", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -13300,7 +13908,8 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" }, "funding": [ { @@ -13308,32 +13917,32 @@ "type": "github" } ], - "time": "2023-02-03T07:08:32+00:00" + "time": "2024-07-03T05:00:13+00:00" }, { "name": "sebastian/object-reflector", - "version": "3.0.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -13355,7 +13964,8 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" }, "funding": [ { @@ -13363,32 +13973,32 @@ "type": "github" } ], - "time": "2023-02-03T07:06:18+00:00" + "time": "2024-07-03T05:01:32+00:00" }, { "name": "sebastian/recursion-context", - "version": "5.0.0", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + "reference": "694d156164372abbd149a4b85ccda2e4670c0e16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16", + "reference": "694d156164372abbd149a4b85ccda2e4670c0e16", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -13418,7 +14028,8 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2" }, "funding": [ { @@ -13426,32 +14037,32 @@ "type": "github" } ], - "time": "2023-02-03T07:05:40+00:00" + "time": "2024-07-03T05:10:34+00:00" }, { "name": "sebastian/type", - "version": "4.0.0", + "version": "5.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/461b9c5da241511a2a0e8f240814fb23ce5c0aac", + "reference": "461b9c5da241511a2a0e8f240814fb23ce5c0aac", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -13474,7 +14085,8 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.1.0" }, "funding": [ { @@ -13482,29 +14094,29 @@ "type": "github" } ], - "time": "2023-02-03T07:10:45+00:00" + "time": "2024-09-17T13:12:04+00:00" }, { "name": "sebastian/version", - "version": "4.0.1", + "version": "5.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -13527,7 +14139,8 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" }, "funding": [ { @@ -13535,7 +14148,7 @@ "type": "github" } ], - "time": "2023-02-07T11:34:05+00:00" + "time": "2024-10-09T05:16:32+00:00" }, { "name": "spatie/backtrace", @@ -13917,6 +14530,117 @@ ], "time": "2024-06-12T15:01:18+00:00" }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" + }, + { + "name": "ta-tikoma/phpunit-architecture-test", + "version": "0.8.4", + "source": { + "type": "git", + "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git", + "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/89f0dea1cb0f0d5744d3ec1764a286af5e006636", + "reference": "89f0dea1cb0f0d5744d3ec1764a286af5e006636", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18.0 || ^5.0.0", + "php": "^8.1.0", + "phpdocumentor/reflection-docblock": "^5.3.0", + "phpunit/phpunit": "^10.5.5 || ^11.0.0", + "symfony/finder": "^6.4.0 || ^7.0.0" + }, + "require-dev": { + "laravel/pint": "^1.13.7", + "phpstan/phpstan": "^1.10.52" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPUnit\\Architecture\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ni Shi", + "email": "futik0ma011@gmail.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Methods for testing application architecture", + "keywords": [ + "architecture", + "phpunit", + "stucture", + "test", + "testing" + ], + "support": { + "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", + "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.4" + }, + "time": "2024-01-05T14:10:56+00:00" + }, { "name": "theseer/tokenizer", "version": "1.2.3", diff --git a/config/database.php b/config/database.php index bc995edda..ec742d201 100644 --- a/config/database.php +++ b/config/database.php @@ -2,7 +2,8 @@ $database = env('DB_DATABASE', 'database.sqlite'); $datapasePath = database_path($database); -if (str($database)->startsWith('/')) { + +if (str_starts_with($database, '/') || $database === ':memory:') { $databasePath = $database; } diff --git a/database/migrations/2025_01_03_210426_remove_user_first_and_last_names.php b/database/migrations/2025_01_03_210426_remove_user_first_and_last_names.php index faf2863f9..95929d7b2 100644 --- a/database/migrations/2025_01_03_210426_remove_user_first_and_last_names.php +++ b/database/migrations/2025_01_03_210426_remove_user_first_and_last_names.php @@ -23,8 +23,8 @@ return new class extends Migration public function down(): void { Schema::table('users', function (Blueprint $table) { - $table->addColumn('varchar', 'name_first'); - $table->addColumn('varchar', 'name_last'); + $table->string('name_first')->nullable(); + $table->string('name_last')->nullable(); }); } }; diff --git a/phpunit.xml b/phpunit.xml index 191be938c..10ec42c7c 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,32 +1,34 @@ - - - - ./tests/Integration - - - ./tests/Unit - - - - - - - - - - - - - - - ./app - - + + + ./tests/Integration + + + ./tests/Unit + + + + + + + + + + + + + + + + + + + app + + diff --git a/tests/Integration/Api/Application/ApplicationApiIntegrationTestCase.php b/tests/Integration/Api/Application/ApplicationApiIntegrationTestCase.php index 8ec689972..5cc148a5f 100644 --- a/tests/Integration/Api/Application/ApplicationApiIntegrationTestCase.php +++ b/tests/Integration/Api/Application/ApplicationApiIntegrationTestCase.php @@ -16,7 +16,6 @@ use App\Models\Server; use App\Models\Role; use App\Services\Acl\Api\AdminAcl; use App\Tests\Integration\IntegrationTestCase; -use Illuminate\Foundation\Testing\DatabaseTransactions; use App\Tests\Traits\Integration\CreatesTestModels; use App\Transformers\Api\Application\BaseTransformer; use App\Transformers\Api\Client\BaseClientTransformer; @@ -25,7 +24,6 @@ use App\Tests\Traits\Http\IntegrationJsonRequestAssertions; abstract class ApplicationApiIntegrationTestCase extends IntegrationTestCase { use CreatesTestModels; - use DatabaseTransactions; use IntegrationJsonRequestAssertions; private ApiKey $key; diff --git a/tests/Integration/Api/Application/Users/UserControllerTest.php b/tests/Integration/Api/Application/Users/UserControllerTest.php index 3d6b196de..cf93bd2e4 100644 --- a/tests/Integration/Api/Application/Users/UserControllerTest.php +++ b/tests/Integration/Api/Application/Users/UserControllerTest.php @@ -9,6 +9,7 @@ use App\Services\Acl\Api\AdminAcl; use App\Transformers\Api\Application\UserTransformer; use App\Transformers\Api\Application\ServerTransformer; use App\Tests\Integration\Api\Application\ApplicationApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class UserControllerTest extends ApplicationApiIntegrationTestCase { @@ -272,9 +273,8 @@ class UserControllerTest extends ApplicationApiIntegrationTestCase /** * Test that an API key without write permissions cannot create, update, or * delete a user model. - * - * @dataProvider userWriteEndpointsDataProvider */ + #[DataProvider('userWriteEndpointsDataProvider')] public function testApiKeyWithoutWritePermissions(string $method, string $url): void { $this->createNewDefaultApiKey($this->getApiUser(), [User::RESOURCE_NAME => AdminAcl::READ]); diff --git a/tests/Integration/Api/Client/ApiKeyControllerTest.php b/tests/Integration/Api/Client/ApiKeyControllerTest.php index aa87f62c6..155b687d9 100644 --- a/tests/Integration/Api/Client/ApiKeyControllerTest.php +++ b/tests/Integration/Api/Client/ApiKeyControllerTest.php @@ -7,6 +7,7 @@ use Illuminate\Http\Response; use App\Models\ApiKey; use Illuminate\Support\Facades\Event; use App\Events\ActivityLogged; +use PHPUnit\Framework\Attributes\DataProvider; class ApiKeyControllerTest extends ClientApiIntegrationTestCase { @@ -44,9 +45,8 @@ class ApiKeyControllerTest extends ClientApiIntegrationTestCase * Test that an API key can be created for the client account. This also checks that the * API key secret is returned as metadata in the response since it will not be returned * after that point. - * - * @dataProvider validIPAddressDataProvider */ + #[DataProvider('validIPAddressDataProvider')] public function testApiKeyCanBeCreatedForAccount(array $data): void { /** @var \App\Models\User $user */ diff --git a/tests/Integration/Api/Client/ClientApiIntegrationTestCase.php b/tests/Integration/Api/Client/ClientApiIntegrationTestCase.php index d6dee00da..90ff06d35 100644 --- a/tests/Integration/Api/Client/ClientApiIntegrationTestCase.php +++ b/tests/Integration/Api/Client/ClientApiIntegrationTestCase.php @@ -2,17 +2,13 @@ namespace App\Tests\Integration\Api\Client; -use App\Models\Node; use App\Models\Task; -use App\Models\User; use App\Models\Model; use App\Models\Backup; use App\Models\Server; -use App\Models\Database; use App\Models\Schedule; use Illuminate\Support\Collection; use App\Models\Allocation; -use App\Models\DatabaseHost; use App\Tests\Integration\TestResponse; use App\Tests\Integration\IntegrationTestCase; use Illuminate\Database\Eloquent\Model as EloquentModel; @@ -20,21 +16,6 @@ use App\Transformers\Api\Client\BaseClientTransformer; abstract class ClientApiIntegrationTestCase extends IntegrationTestCase { - /** - * Cleanup after running tests. - */ - protected function tearDown(): void - { - Database::query()->forceDelete(); - DatabaseHost::query()->forceDelete(); - Backup::query()->forceDelete(); - Server::query()->forceDelete(); - Node::query()->forceDelete(); - User::query()->forceDelete(); - - parent::tearDown(); - } - /** * Override the default createTestResponse from Illuminate so that we can * just dump 500-level errors to the screen in the tests without having diff --git a/tests/Integration/Api/Client/ClientControllerTest.php b/tests/Integration/Api/Client/ClientControllerTest.php index e4059f694..971731c01 100644 --- a/tests/Integration/Api/Client/ClientControllerTest.php +++ b/tests/Integration/Api/Client/ClientControllerTest.php @@ -8,6 +8,7 @@ use App\Models\Subuser; use App\Models\Allocation; use App\Models\Permission; use App\Models\Role; +use PHPUnit\Framework\Attributes\DataProvider; class ClientControllerTest extends ClientApiIntegrationTestCase { @@ -286,9 +287,8 @@ class ClientControllerTest extends ClientApiIntegrationTestCase /** * Test that no servers get returned if the user requests all admin level servers by using * ?type=admin or ?type=admin-all in the request. - * - * @dataProvider filterTypeDataProvider */ + #[DataProvider('filterTypeDataProvider')] public function testNoServersAreReturnedIfAdminFilterIsPassedByRegularUser(string $type): void { /** @var \App\Models\User[] $users */ diff --git a/tests/Integration/Api/Client/Server/Allocation/AllocationAuthorizationTest.php b/tests/Integration/Api/Client/Server/Allocation/AllocationAuthorizationTest.php index 6cd798e16..cb49d8c32 100644 --- a/tests/Integration/Api/Client/Server/Allocation/AllocationAuthorizationTest.php +++ b/tests/Integration/Api/Client/Server/Allocation/AllocationAuthorizationTest.php @@ -5,12 +5,11 @@ namespace App\Tests\Integration\Api\Client\Server\Allocation; use App\Models\Subuser; use App\Models\Allocation; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class AllocationAuthorizationTest extends ClientApiIntegrationTestCase { - /** - * @dataProvider methodDataProvider - */ + #[DataProvider('methodDataProvider')] public function testAccessToAServersAllocationsIsRestrictedProperly(string $method, string $endpoint): void { // The API $user is the owner of $server1. diff --git a/tests/Integration/Api/Client/Server/Allocation/CreateNewAllocationTest.php b/tests/Integration/Api/Client/Server/Allocation/CreateNewAllocationTest.php index 395e283a2..7a8c49ea3 100644 --- a/tests/Integration/Api/Client/Server/Allocation/CreateNewAllocationTest.php +++ b/tests/Integration/Api/Client/Server/Allocation/CreateNewAllocationTest.php @@ -6,6 +6,7 @@ use Illuminate\Http\Response; use App\Models\Allocation; use App\Models\Permission; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class CreateNewAllocationTest extends ClientApiIntegrationTestCase { @@ -23,9 +24,8 @@ class CreateNewAllocationTest extends ClientApiIntegrationTestCase /** * Tests that a new allocation can be properly assigned to a server. - * - * @dataProvider permissionDataProvider */ + #[DataProvider('permissionDataProvider')] public function testNewAllocationCanBeAssignedToServer(array $permission): void { /** @var \App\Models\Server $server */ diff --git a/tests/Integration/Api/Client/Server/Allocation/DeleteAllocationTest.php b/tests/Integration/Api/Client/Server/Allocation/DeleteAllocationTest.php index 07f101a62..e419358b9 100644 --- a/tests/Integration/Api/Client/Server/Allocation/DeleteAllocationTest.php +++ b/tests/Integration/Api/Client/Server/Allocation/DeleteAllocationTest.php @@ -6,15 +6,15 @@ use Illuminate\Http\Response; use App\Models\Allocation; use App\Models\Permission; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class DeleteAllocationTest extends ClientApiIntegrationTestCase { /** * Test that an allocation is deleted from the server and the notes are properly reset * to an empty value on assignment. - * - * @dataProvider permissionDataProvider */ + #[DataProvider('permissionDataProvider')] public function testAllocationCanBeDeletedFromServer(array $permission): void { /** @var \App\Models\Server $server */ diff --git a/tests/Integration/Api/Client/Server/Backup/BackupAuthorizationTest.php b/tests/Integration/Api/Client/Server/Backup/BackupAuthorizationTest.php index 472364d78..84cec9eb6 100644 --- a/tests/Integration/Api/Client/Server/Backup/BackupAuthorizationTest.php +++ b/tests/Integration/Api/Client/Server/Backup/BackupAuthorizationTest.php @@ -7,12 +7,11 @@ use App\Models\Backup; use App\Models\Subuser; use App\Services\Backups\DeleteBackupService; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class BackupAuthorizationTest extends ClientApiIntegrationTestCase { - /** - * @dataProvider methodDataProvider - */ + #[DataProvider('methodDataProvider')] public function testAccessToAServersBackupIsRestrictedProperly(string $method, string $endpoint): void { // The API $user is the owner of $server1. diff --git a/tests/Integration/Api/Client/Server/Database/DatabaseAuthorizationTest.php b/tests/Integration/Api/Client/Server/Database/DatabaseAuthorizationTest.php index b95778104..d5d552ecb 100644 --- a/tests/Integration/Api/Client/Server/Database/DatabaseAuthorizationTest.php +++ b/tests/Integration/Api/Client/Server/Database/DatabaseAuthorizationTest.php @@ -8,12 +8,11 @@ use App\Models\DatabaseHost; use App\Services\Databases\DatabasePasswordService; use App\Services\Databases\DatabaseManagementService; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class DatabaseAuthorizationTest extends ClientApiIntegrationTestCase { - /** - * @dataProvider methodDataProvider - */ + #[DataProvider('methodDataProvider')] public function testAccessToAServersDatabasesIsRestrictedProperly(string $method, string $endpoint): void { // The API $user is the owner of $server1. diff --git a/tests/Integration/Api/Client/Server/NetworkAllocationControllerTest.php b/tests/Integration/Api/Client/Server/NetworkAllocationControllerTest.php index b1e7279eb..2e201518e 100644 --- a/tests/Integration/Api/Client/Server/NetworkAllocationControllerTest.php +++ b/tests/Integration/Api/Client/Server/NetworkAllocationControllerTest.php @@ -7,6 +7,7 @@ use Illuminate\Http\Response; use App\Models\Allocation; use App\Models\Permission; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class NetworkAllocationControllerTest extends ClientApiIntegrationTestCase { @@ -48,9 +49,8 @@ class NetworkAllocationControllerTest extends ClientApiIntegrationTestCase /** * Tests that notes on an allocation can be set correctly. - * - * @dataProvider updatePermissionsDataProvider */ + #[DataProvider('updatePermissionsDataProvider')] public function testAllocationNotesCanBeUpdated(array $permissions): void { [$user, $server] = $this->generateTestAccount($permissions); @@ -96,9 +96,7 @@ class NetworkAllocationControllerTest extends ClientApiIntegrationTestCase $this->actingAs($user)->postJson($this->link($server->allocation))->assertForbidden(); } - /** - * @dataProvider updatePermissionsDataProvider - */ + #[DataProvider('updatePermissionsDataProvider')] public function testPrimaryAllocationCanBeModified(array $permissions): void { [$user, $server] = $this->generateTestAccount($permissions); diff --git a/tests/Integration/Api/Client/Server/PowerControllerTest.php b/tests/Integration/Api/Client/Server/PowerControllerTest.php index 94d3e7326..d4e834f4e 100644 --- a/tests/Integration/Api/Client/Server/PowerControllerTest.php +++ b/tests/Integration/Api/Client/Server/PowerControllerTest.php @@ -6,6 +6,7 @@ use Illuminate\Http\Response; use App\Models\Permission; use App\Repositories\Daemon\DaemonPowerRepository; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class PowerControllerTest extends ClientApiIntegrationTestCase { @@ -15,9 +16,8 @@ class PowerControllerTest extends ClientApiIntegrationTestCase * the command to the server. * * @param string[] $permissions - * - * @dataProvider invalidPermissionDataProvider */ + #[DataProvider('invalidPermissionDataProvider')] public function testSubuserWithoutPermissionsReceivesError(string $action, array $permissions): void { [$user, $server] = $this->generateTestAccount($permissions); @@ -45,9 +45,8 @@ class PowerControllerTest extends ClientApiIntegrationTestCase /** * Test that sending a valid power actions works. - * - * @dataProvider validPowerActionDataProvider */ + #[DataProvider('validPowerActionDataProvider')] public function testActionCanBeSentToServer(string $action, string $permission): void { $service = \Mockery::mock(DaemonPowerRepository::class); diff --git a/tests/Integration/Api/Client/Server/Schedule/CreateServerScheduleTest.php b/tests/Integration/Api/Client/Server/Schedule/CreateServerScheduleTest.php index a1939ea8f..2b6f26ab2 100644 --- a/tests/Integration/Api/Client/Server/Schedule/CreateServerScheduleTest.php +++ b/tests/Integration/Api/Client/Server/Schedule/CreateServerScheduleTest.php @@ -6,14 +6,14 @@ use Illuminate\Http\Response; use App\Models\Schedule; use App\Models\Permission; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class CreateServerScheduleTest extends ClientApiIntegrationTestCase { /** * Test that a schedule can be created for the server. - * - * @dataProvider permissionsDataProvider */ + #[DataProvider('permissionsDataProvider')] public function testScheduleCanBeCreatedForServer(array $permissions): void { [$user, $server] = $this->generateTestAccount($permissions); diff --git a/tests/Integration/Api/Client/Server/Schedule/DeleteServerScheduleTest.php b/tests/Integration/Api/Client/Server/Schedule/DeleteServerScheduleTest.php index b6a4bfa4b..b62fd113b 100644 --- a/tests/Integration/Api/Client/Server/Schedule/DeleteServerScheduleTest.php +++ b/tests/Integration/Api/Client/Server/Schedule/DeleteServerScheduleTest.php @@ -7,14 +7,14 @@ use Illuminate\Http\Response; use App\Models\Schedule; use App\Models\Permission; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class DeleteServerScheduleTest extends ClientApiIntegrationTestCase { /** * Test that a schedule can be deleted from the system. - * - * @dataProvider permissionsDataProvider */ + #[DataProvider('permissionsDataProvider')] public function testScheduleCanBeDeleted(array $permissions): void { [$user, $server] = $this->generateTestAccount($permissions); diff --git a/tests/Integration/Api/Client/Server/Schedule/ExecuteScheduleTest.php b/tests/Integration/Api/Client/Server/Schedule/ExecuteScheduleTest.php index 162a12cdf..c825e878b 100644 --- a/tests/Integration/Api/Client/Server/Schedule/ExecuteScheduleTest.php +++ b/tests/Integration/Api/Client/Server/Schedule/ExecuteScheduleTest.php @@ -9,14 +9,14 @@ use App\Models\Permission; use Illuminate\Support\Facades\Bus; use App\Jobs\Schedule\RunTaskJob; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class ExecuteScheduleTest extends ClientApiIntegrationTestCase { /** * Test that a schedule can be executed and is updated in the database correctly. - * - * @dataProvider permissionsDataProvider */ + #[DataProvider('permissionsDataProvider')] public function testScheduleIsExecutedRightAway(array $permissions): void { [$user, $server] = $this->generateTestAccount($permissions); diff --git a/tests/Integration/Api/Client/Server/Schedule/GetServerSchedulesTest.php b/tests/Integration/Api/Client/Server/Schedule/GetServerSchedulesTest.php index 7d019178b..a4008caeb 100644 --- a/tests/Integration/Api/Client/Server/Schedule/GetServerSchedulesTest.php +++ b/tests/Integration/Api/Client/Server/Schedule/GetServerSchedulesTest.php @@ -6,6 +6,7 @@ use App\Models\Task; use App\Models\Schedule; use App\Models\Permission; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class GetServerSchedulesTest extends ClientApiIntegrationTestCase { @@ -22,9 +23,8 @@ class GetServerSchedulesTest extends ClientApiIntegrationTestCase /** * Test that schedules for a server are returned. - * - * @dataProvider permissionsDataProvider */ + #[DataProvider('permissionsDataProvider')] public function testServerSchedulesAreReturned(array $permissions, bool $individual): void { [$user, $server] = $this->generateTestAccount($permissions); diff --git a/tests/Integration/Api/Client/Server/Schedule/ScheduleAuthorizationTest.php b/tests/Integration/Api/Client/Server/Schedule/ScheduleAuthorizationTest.php index b6777a748..82707cfbe 100644 --- a/tests/Integration/Api/Client/Server/Schedule/ScheduleAuthorizationTest.php +++ b/tests/Integration/Api/Client/Server/Schedule/ScheduleAuthorizationTest.php @@ -5,6 +5,7 @@ namespace App\Tests\Integration\Api\Client\Server\Schedule; use App\Models\Subuser; use App\Models\Schedule; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class ScheduleAuthorizationTest extends ClientApiIntegrationTestCase { @@ -16,9 +17,8 @@ class ScheduleAuthorizationTest extends ClientApiIntegrationTestCase * * The comments within the test code itself are better at explaining exactly what is * being tested and protected against. - * - * @dataProvider methodDataProvider */ + #[DataProvider('methodDataProvider')] public function testAccessToAServersSchedulesIsRestrictedProperly(string $method, string $endpoint): void { // The API $user is the owner of $server1. diff --git a/tests/Integration/Api/Client/Server/Schedule/UpdateServerScheduleTest.php b/tests/Integration/Api/Client/Server/Schedule/UpdateServerScheduleTest.php index c68d0476a..658d7ffda 100644 --- a/tests/Integration/Api/Client/Server/Schedule/UpdateServerScheduleTest.php +++ b/tests/Integration/Api/Client/Server/Schedule/UpdateServerScheduleTest.php @@ -6,6 +6,7 @@ use App\Models\Schedule; use App\Helpers\Utilities; use App\Models\Permission; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class UpdateServerScheduleTest extends ClientApiIntegrationTestCase { @@ -24,9 +25,8 @@ class UpdateServerScheduleTest extends ClientApiIntegrationTestCase /** * Test that a schedule can be updated. - * - * @dataProvider permissionsDataProvider */ + #[DataProvider('permissionsDataProvider')] public function testScheduleCanBeUpdated(array $permissions): void { [$user, $server] = $this->generateTestAccount($permissions); diff --git a/tests/Integration/Api/Client/Server/ScheduleTask/CreateServerScheduleTaskTest.php b/tests/Integration/Api/Client/Server/ScheduleTask/CreateServerScheduleTaskTest.php index bdcf33f43..431c081b5 100644 --- a/tests/Integration/Api/Client/Server/ScheduleTask/CreateServerScheduleTaskTest.php +++ b/tests/Integration/Api/Client/Server/ScheduleTask/CreateServerScheduleTaskTest.php @@ -7,14 +7,14 @@ use Illuminate\Http\Response; use App\Models\Schedule; use App\Models\Permission; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class CreateServerScheduleTaskTest extends ClientApiIntegrationTestCase { /** * Test that a task can be created. - * - * @dataProvider permissionsDataProvider */ + #[DataProvider('permissionsDataProvider')] public function testTaskCanBeCreated(array $permissions): void { [$user, $server] = $this->generateTestAccount($permissions); diff --git a/tests/Integration/Api/Client/Server/SettingsControllerTest.php b/tests/Integration/Api/Client/Server/SettingsControllerTest.php index dab6264fa..23633888b 100644 --- a/tests/Integration/Api/Client/Server/SettingsControllerTest.php +++ b/tests/Integration/Api/Client/Server/SettingsControllerTest.php @@ -8,14 +8,14 @@ use App\Models\Server; use App\Models\Permission; use App\Repositories\Daemon\DaemonServerRepository; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class SettingsControllerTest extends ClientApiIntegrationTestCase { /** * Test that the server's name can be changed. - * - * @dataProvider renamePermissionsDataProvider */ + #[DataProvider('renamePermissionsDataProvider')] public function testServerNameCanBeChanged(array $permissions): void { /** @var \App\Models\Server $server */ @@ -69,9 +69,8 @@ class SettingsControllerTest extends ClientApiIntegrationTestCase /** * Test that a server can be reinstalled. Honestly this test doesn't do much of anything other * than make sure the endpoint works since. - * - * @dataProvider reinstallPermissionsDataProvider */ + #[DataProvider('reinstallPermissionsDataProvider')] public function testServerCanBeReinstalled(array $permissions): void { /** @var \App\Models\Server $server */ diff --git a/tests/Integration/Api/Client/Server/Startup/GetStartupAndVariablesTest.php b/tests/Integration/Api/Client/Server/Startup/GetStartupAndVariablesTest.php index 88cc6ed6f..200c528ae 100644 --- a/tests/Integration/Api/Client/Server/Startup/GetStartupAndVariablesTest.php +++ b/tests/Integration/Api/Client/Server/Startup/GetStartupAndVariablesTest.php @@ -6,15 +6,15 @@ use App\Models\User; use App\Models\Permission; use App\Models\EggVariable; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class GetStartupAndVariablesTest extends ClientApiIntegrationTestCase { /** * Test that the startup command and variables are returned for a server, but only the variables * that can be viewed by a user (e.g. user_viewable=true). - * - * @dataProvider permissionsDataProvider */ + #[DataProvider('permissionsDataProvider')] public function testStartupVariablesAreReturnedForServer(array $permissions): void { /** @var \App\Models\Server $server */ diff --git a/tests/Integration/Api/Client/Server/Startup/UpdateStartupVariableTest.php b/tests/Integration/Api/Client/Server/Startup/UpdateStartupVariableTest.php index e9c8af97c..d793656b9 100644 --- a/tests/Integration/Api/Client/Server/Startup/UpdateStartupVariableTest.php +++ b/tests/Integration/Api/Client/Server/Startup/UpdateStartupVariableTest.php @@ -7,14 +7,14 @@ use Illuminate\Http\Response; use App\Models\Permission; use App\Models\EggVariable; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class UpdateStartupVariableTest extends ClientApiIntegrationTestCase { /** * Test that a startup variable can be edited successfully for a server. - * - * @dataProvider permissionsDataProvider */ + #[DataProvider('permissionsDataProvider')] public function testStartupVariableCanBeUpdated(array $permissions): void { /** @var \App\Models\Server $server */ @@ -47,9 +47,8 @@ class UpdateStartupVariableTest extends ClientApiIntegrationTestCase /** * Test that variables that are either not user_viewable, or not user_editable, cannot be * updated via this endpoint. - * - * @dataProvider permissionsDataProvider */ + #[DataProvider('permissionsDataProvider')] public function testStartupVariableCannotBeUpdatedIfNotUserViewableOrEditable(array $permissions): void { /** @var \App\Models\Server $server */ diff --git a/tests/Integration/Api/Client/Server/Subuser/CreateServerSubuserTest.php b/tests/Integration/Api/Client/Server/Subuser/CreateServerSubuserTest.php index 7175a7cc7..ffbe07e01 100644 --- a/tests/Integration/Api/Client/Server/Subuser/CreateServerSubuserTest.php +++ b/tests/Integration/Api/Client/Server/Subuser/CreateServerSubuserTest.php @@ -9,6 +9,7 @@ use App\Models\Subuser; use App\Models\Permission; use Illuminate\Foundation\Testing\WithFaker; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class CreateServerSubuserTest extends ClientApiIntegrationTestCase { @@ -16,9 +17,8 @@ class CreateServerSubuserTest extends ClientApiIntegrationTestCase /** * Test that a subuser can be created for a server. - * - * @dataProvider permissionsDataProvider */ + #[DataProvider('permissionsDataProvider')] public function testSubuserCanBeCreated(array $permissions): void { [$user, $server] = $this->generateTestAccount($permissions); diff --git a/tests/Integration/Api/Client/Server/Subuser/SubuserAuthorizationTest.php b/tests/Integration/Api/Client/Server/Subuser/SubuserAuthorizationTest.php index ab844d0b3..77efc5595 100644 --- a/tests/Integration/Api/Client/Server/Subuser/SubuserAuthorizationTest.php +++ b/tests/Integration/Api/Client/Server/Subuser/SubuserAuthorizationTest.php @@ -6,14 +6,14 @@ use App\Models\User; use App\Models\Subuser; use App\Repositories\Daemon\DaemonServerRepository; use App\Tests\Integration\Api\Client\ClientApiIntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class SubuserAuthorizationTest extends ClientApiIntegrationTestCase { /** * Test that mismatched subusers are not accessible to a server. - * - * @dataProvider methodDataProvider */ + #[DataProvider('methodDataProvider')] public function testUserCannotAccessResourceBelongingToOtherServers(string $method): void { // Generic subuser, the specific resource we're trying to access. diff --git a/tests/Integration/Api/Daemon/DaemonAuthenticateTest.php b/tests/Integration/Api/Daemon/DaemonAuthenticateTest.php index b18b3e5e8..7d4042d8b 100644 --- a/tests/Integration/Api/Daemon/DaemonAuthenticateTest.php +++ b/tests/Integration/Api/Daemon/DaemonAuthenticateTest.php @@ -6,6 +6,7 @@ use App\Http\Middleware\Api\Daemon\DaemonAuthenticate; use App\Models\Node; use App\Tests\Unit\Http\Middleware\MiddlewareTestCase; use Illuminate\Database\Eloquent\ModelNotFoundException; +use PHPUnit\Framework\Attributes\DataProvider; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\HttpKernel\Exception\HttpException; @@ -45,9 +46,8 @@ class DaemonAuthenticateTest extends MiddlewareTestCase /** * Test that passing in an invalid node daemon secret will result in a bad request * exception being returned. - * - * @dataProvider badTokenDataProvider */ + #[DataProvider('badTokenDataProvider')] public function testResponseShouldFailIfTokenFormatIsIncorrect(string $token): void { $this->expectException(BadRequestHttpException::class); diff --git a/tests/Integration/Api/Remote/SftpAuthenticationControllerTest.php b/tests/Integration/Api/Remote/SftpAuthenticationControllerTest.php index 3236266dc..b7e166e67 100644 --- a/tests/Integration/Api/Remote/SftpAuthenticationControllerTest.php +++ b/tests/Integration/Api/Remote/SftpAuthenticationControllerTest.php @@ -10,6 +10,7 @@ use App\Models\Permission; use App\Models\Role; use App\Models\UserSSHKey; use App\Tests\Integration\IntegrationTestCase; +use PHPUnit\Framework\Attributes\DataProvider; class SftpAuthenticationControllerTest extends IntegrationTestCase { @@ -95,9 +96,8 @@ class SftpAuthenticationControllerTest extends IntegrationTestCase /** * Test that providing an invalid key and/or invalid username triggers the throttle on * the endpoint. - * - * @dataProvider authorizationTypeDataProvider */ + #[DataProvider('authorizationTypeDataProvider')] public function testUserIsThrottledIfInvalidCredentialsAreProvided(): void { for ($i = 0; $i <= 10; $i++) { @@ -113,9 +113,8 @@ class SftpAuthenticationControllerTest extends IntegrationTestCase /** * Test that a request is rejected if the credentials are valid but the username indicates * a server on a different node. - * - * @dataProvider authorizationTypeDataProvider */ + #[DataProvider('authorizationTypeDataProvider')] public function testRequestIsRejectedIfServerBelongsToDifferentNode(string $type): void { $node2 = $this->createServerModel()->node; @@ -150,9 +149,7 @@ class SftpAuthenticationControllerTest extends IntegrationTestCase ->assertJsonPath('errors.0.detail', 'You do not have permission to access SFTP for this server.'); } - /** - * @dataProvider serverStateDataProvider - */ + #[DataProvider('serverStateDataProvider')] public function testInvalidServerStateReturnsConflictError(string $status): void { $this->server->update(['status' => $status]); diff --git a/tests/Integration/IntegrationTestCase.php b/tests/Integration/IntegrationTestCase.php index b496eeaa0..75cfa960d 100644 --- a/tests/Integration/IntegrationTestCase.php +++ b/tests/Integration/IntegrationTestCase.php @@ -5,6 +5,7 @@ namespace App\Tests\Integration; use Carbon\CarbonImmutable; use Carbon\CarbonInterface; use App\Tests\TestCase; +use Illuminate\Foundation\Testing\DatabaseTruncation; use Illuminate\Support\Facades\Event; use App\Events\ActivityLogged; use App\Tests\Assertions\AssertsActivityLogged; @@ -16,6 +17,9 @@ abstract class IntegrationTestCase extends TestCase { use AssertsActivityLogged; use CreatesTestModels; + use DatabaseTruncation; + + protected $seed = true; protected $defaultHeaders = [ 'Accept' => 'application/json', diff --git a/tests/Integration/Jobs/Schedule/RunTaskJobTest.php b/tests/Integration/Jobs/Schedule/RunTaskJobTest.php index 88910d097..757656703 100644 --- a/tests/Integration/Jobs/Schedule/RunTaskJobTest.php +++ b/tests/Integration/Jobs/Schedule/RunTaskJobTest.php @@ -13,6 +13,7 @@ use App\Jobs\Schedule\RunTaskJob; use App\Tests\Integration\IntegrationTestCase; use App\Repositories\Daemon\DaemonPowerRepository; use Illuminate\Http\Client\ConnectionException; +use PHPUnit\Framework\Attributes\DataProvider; class RunTaskJobTest extends IntegrationTestCase { @@ -62,9 +63,7 @@ class RunTaskJobTest extends IntegrationTestCase Bus::dispatchSync($job); } - /** - * @dataProvider isManualRunDataProvider - */ + #[DataProvider('isManualRunDataProvider')] public function testJobIsExecuted(bool $isManualRun): void { $server = $this->createServerModel(); @@ -103,9 +102,7 @@ class RunTaskJobTest extends IntegrationTestCase $this->assertTrue(CarbonImmutable::now()->isSameAs(\DateTimeInterface::ATOM, $schedule->last_run_at)); } - /** - * @dataProvider isManualRunDataProvider - */ + #[DataProvider('isManualRunDataProvider')] public function testExceptionDuringRunIsHandledCorrectly(bool $continueOnFailure): void { $server = $this->createServerModel(); diff --git a/tests/Integration/Services/Databases/DatabaseManagementServiceTest.php b/tests/Integration/Services/Databases/DatabaseManagementServiceTest.php index 834e6e345..311d22ce5 100644 --- a/tests/Integration/Services/Databases/DatabaseManagementServiceTest.php +++ b/tests/Integration/Services/Databases/DatabaseManagementServiceTest.php @@ -9,6 +9,7 @@ use App\Services\Databases\DatabaseManagementService; use App\Exceptions\Repository\DuplicateDatabaseNameException; use App\Exceptions\Service\Database\TooManyDatabasesException; use App\Exceptions\Service\Database\DatabaseClientFeatureNotEnabledException; +use PHPUnit\Framework\Attributes\DataProvider; class DatabaseManagementServiceTest extends IntegrationTestCase { @@ -63,9 +64,8 @@ class DatabaseManagementServiceTest extends IntegrationTestCase /** * Test that a missing or invalid database name format causes an exception to be thrown. - * - * @dataProvider invalidDataDataProvider */ + #[DataProvider('invalidDataDataProvider')] public function testEmptyDatabaseNameOrInvalidNameTriggersAnException(array $data): void { $server = $this->createServerModel(); diff --git a/tests/Integration/Services/Databases/DeployServerDatabaseServiceTest.php b/tests/Integration/Services/Databases/DeployServerDatabaseServiceTest.php index 60986f576..18c34f8e4 100644 --- a/tests/Integration/Services/Databases/DeployServerDatabaseServiceTest.php +++ b/tests/Integration/Services/Databases/DeployServerDatabaseServiceTest.php @@ -10,6 +10,7 @@ use App\Tests\Integration\IntegrationTestCase; use App\Services\Databases\DatabaseManagementService; use App\Services\Databases\DeployServerDatabaseService; use App\Exceptions\Service\Database\NoSuitableDatabaseHostException; +use PHPUnit\Framework\Attributes\DataProvider; class DeployServerDatabaseServiceTest extends IntegrationTestCase { @@ -41,9 +42,8 @@ class DeployServerDatabaseServiceTest extends IntegrationTestCase /** * Test that an error is thrown if either the database name or the remote host are empty. - * - * @dataProvider invalidDataProvider */ + #[DataProvider('invalidDataProvider')] public function testErrorIsThrownIfDatabaseNameIsEmpty(array $data): void { $server = $this->createServerModel(); diff --git a/tests/Integration/Services/Schedules/ProcessScheduleServiceTest.php b/tests/Integration/Services/Schedules/ProcessScheduleServiceTest.php index 43aef5cca..2a5118750 100644 --- a/tests/Integration/Services/Schedules/ProcessScheduleServiceTest.php +++ b/tests/Integration/Services/Schedules/ProcessScheduleServiceTest.php @@ -12,6 +12,7 @@ use App\Jobs\Schedule\RunTaskJob; use App\Exceptions\DisplayException; use App\Tests\Integration\IntegrationTestCase; use App\Services\Schedules\ProcessScheduleService; +use PHPUnit\Framework\Attributes\DataProvider; class ProcessScheduleServiceTest extends IntegrationTestCase { @@ -55,9 +56,8 @@ class ProcessScheduleServiceTest extends IntegrationTestCase /** * Test that a job is dispatched as expected using the initial delay. - * - * @dataProvider dispatchNowDataProvider */ + #[DataProvider('dispatchNowDataProvider')] public function testJobCanBeDispatchedWithExpectedInitialDelay(bool $now): void { Bus::fake(); diff --git a/tests/Pest.php b/tests/Pest.php new file mode 100644 index 000000000..fd279ada6 --- /dev/null +++ b/tests/Pest.php @@ -0,0 +1,45 @@ +extend(Tests\TestCase::class)->in('Feature'); + +/* +|-------------------------------------------------------------------------- +| Expectations +|-------------------------------------------------------------------------- +| +| When you're writing tests, you often need to check that values meet certain conditions. The +| "expect()" function gives you access to a set of "expectations" methods that you can use +| to assert different things. Of course, you may extend the Expectation API at any time. +| +*/ + +expect()->extend('toBeOne', function () { + return $this->toBe(1); +}); + +/* +|-------------------------------------------------------------------------- +| Functions +|-------------------------------------------------------------------------- +| +| While Pest is very powerful out-of-the-box, you may have some testing code specific to your +| project that you don't want to repeat in every file. Here you can also expose helpers as +| global functions to help you to reduce the number of lines of code in your test files. +| +*/ + +function something() +{ + // .. +} diff --git a/tests/TestCase.php b/tests/TestCase.php index 71242d56e..67d037576 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -48,7 +48,7 @@ abstract class TestCase extends BaseTestCase } /** - * Handles the known UUID handling in certain unit tests. Use the "KnownUuid" trait + * Handles the known UUID handling in certain unit tests. Use the "MocksUuid" trait * in order to enable this ability. */ public function setKnownUuidFactory() diff --git a/tests/Unit/Helpers/EnvironmentWriterTraitTest.php b/tests/Unit/Helpers/EnvironmentWriterTraitTest.php index 18fee0f65..5b05d6396 100644 --- a/tests/Unit/Helpers/EnvironmentWriterTraitTest.php +++ b/tests/Unit/Helpers/EnvironmentWriterTraitTest.php @@ -4,12 +4,11 @@ namespace App\Tests\Unit\Helpers; use App\Tests\TestCase; use App\Traits\EnvironmentWriterTrait; +use PHPUnit\Framework\Attributes\DataProvider; class EnvironmentWriterTraitTest extends TestCase { - /** - * @dataProvider variableDataProvider - */ + #[DataProvider('variableDataProvider')] public function testVariableIsEscapedProperly($input, $expected): void { $output = (new FooClass())->escapeEnvironmentValue($input); diff --git a/tests/Unit/Helpers/IsDigitTest.php b/tests/Unit/Helpers/IsDigitTest.php index fa3c2e090..5bdadd4b9 100644 --- a/tests/Unit/Helpers/IsDigitTest.php +++ b/tests/Unit/Helpers/IsDigitTest.php @@ -3,14 +3,14 @@ namespace App\Tests\Unit\Helpers; use App\Tests\TestCase; +use PHPUnit\Framework\Attributes\DataProvider; class IsDigitTest extends TestCase { /** * Test the is_digit helper. - * - * @dataProvider helperDataProvider */ + #[DataProvider('helperDataProvider')] public function testHelper($value, $response): void { $this->assertSame($response, is_digit($value)); diff --git a/tests/Unit/Rules/UsernameTest.php b/tests/Unit/Rules/UsernameTest.php index fc475e3cf..e46222edf 100644 --- a/tests/Unit/Rules/UsernameTest.php +++ b/tests/Unit/Rules/UsernameTest.php @@ -4,6 +4,7 @@ namespace App\Tests\Unit\Rules; use App\Rules\Username; use App\Tests\TestCase; +use PHPUnit\Framework\Attributes\DataProvider; class UsernameTest extends TestCase { @@ -17,9 +18,8 @@ class UsernameTest extends TestCase /** * Test valid usernames. - * - * @dataProvider validUsernameDataProvider */ + #[DataProvider('validUsernameDataProvider')] public function testValidUsernames(string $username): void { $this->assertTrue((new Username())->passes('test', $username), 'Assert username is valid.'); @@ -27,9 +27,8 @@ class UsernameTest extends TestCase /** * Test invalid usernames return false. - * - * @dataProvider invalidUsernameDataProvider */ + #[DataProvider('invalidUsernameDataProvider')] public function testInvalidUsernames(string $username): void { $this->assertFalse((new Username())->passes('test', $username), 'Assert username is not valid.'); diff --git a/tests/Unit/Services/Acl/Api/AdminAclTest.php b/tests/Unit/Services/Acl/Api/AdminAclTest.php index 2f7da99b4..b4517722f 100644 --- a/tests/Unit/Services/Acl/Api/AdminAclTest.php +++ b/tests/Unit/Services/Acl/Api/AdminAclTest.php @@ -6,14 +6,14 @@ use App\Models\ApiKey; use App\Tests\TestCase; use App\Services\Acl\Api\AdminAcl; use App\Models\Server; +use PHPUnit\Framework\Attributes\DataProvider; class AdminAclTest extends TestCase { /** * Test that permissions return the expects values. - * - * @dataProvider permissionsDataProvider */ + #[DataProvider('permissionsDataProvider')] public function testPermissions(int $permission, int $check, bool $outcome): void { $this->assertSame($outcome, AdminAcl::can($permission, $check));