From b8df087abe8b7f391254ce297fdeb2a24eefd963 Mon Sep 17 00:00:00 2001 From: Alex Skrypnyk Date: Sat, 13 Sep 2025 15:03:26 +1000 Subject: [PATCH 1/8] Updated File and PHPUnit helpers versions. --- .vortex/installer/composer.json | 4 +- .vortex/installer/composer.lock | 218 +++++++++--------- .../tests/Functional/FunctionalTestCase.php | 8 +- .../Handlers/CodeProviderInstallTest.php | 2 +- .../Functional/Handlers/ThemeInstallTest.php | 4 +- .../Handlers/TimezoneInstallTest.php | 20 +- .vortex/installer/tests/Unit/EnvTest.php | 2 +- .vortex/installer/tests/Unit/SelfTest.php | 2 +- .vortex/tests/composer.json | 4 +- .vortex/tests/composer.lock | 21 +- .../phpunit/Functional/FunctionalTestCase.php | 60 ----- .vortex/tests/phpunit/Functional/SelfTest.php | 173 -------------- .../tests/phpunit/Functional/WorkflowTest.php | 5 + .../tests/phpunit/Traits/AssertFilesTrait.php | 36 ++- .../phpunit/Traits/Steps/StepBuildTrait.php | 4 +- .../Traits/Steps/StepEnvironmentTrait.php | 14 +- .../Traits/Steps/StepFrontendTrait.php | 8 +- .../Traits/Steps/StepPrepareSutTrait.php | 21 +- .../phpunit/Traits/Steps/StepTestBddTrait.php | 2 +- .../phpunit/Traits/Steps/StepTestingTrait.php | 8 +- 20 files changed, 205 insertions(+), 411 deletions(-) delete mode 100644 .vortex/tests/phpunit/Functional/SelfTest.php diff --git a/.vortex/installer/composer.json b/.vortex/installer/composer.json index 83ec76bc9..1ab856294 100644 --- a/.vortex/installer/composer.json +++ b/.vortex/installer/composer.json @@ -18,7 +18,7 @@ }, "require": { "php": ">=8.2", - "alexskrypnyk/file": "^0.9", + "alexskrypnyk/file": "^0.10", "alexskrypnyk/str2name": "^1.4", "composer/composer": "^2.8", "cweagans/composer-patches": "^1.7", @@ -31,7 +31,7 @@ "symfony/yaml": "^7.2" }, "require-dev": { - "alexskrypnyk/phpunit-helpers": "^0.8.2", + "alexskrypnyk/phpunit-helpers": "^0.10", "bamarni/composer-bin-plugin": "^1.8", "dealerdirect/phpcodesniffer-composer-installer": "^1", "drupal/coder": "^8.3", diff --git a/.vortex/installer/composer.lock b/.vortex/installer/composer.lock index bd4910fc4..43de3bd45 100644 --- a/.vortex/installer/composer.lock +++ b/.vortex/installer/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e0084072fc06b8ca899e6958d111e813", + "content-hash": "8fd1201532508729eef60d24db5e6201", "packages": [ { "name": "alexskrypnyk/file", - "version": "0.9.0", + "version": "0.10.0", "source": { "type": "git", "url": "https://github.com/AlexSkrypnyk/file.git", - "reference": "df98e9ba70357433061533e9cc747708ce92500c" + "reference": "fc98183bb62bf115c581754ff52a6708979bc6cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AlexSkrypnyk/file/zipball/df98e9ba70357433061533e9cc747708ce92500c", - "reference": "df98e9ba70357433061533e9cc747708ce92500c", + "url": "https://api.github.com/repos/AlexSkrypnyk/file/zipball/fc98183bb62bf115c581754ff52a6708979bc6cf", + "reference": "fc98183bb62bf115c581754ff52a6708979bc6cf", "shasum": "" }, "require": { @@ -25,7 +25,7 @@ "symfony/filesystem": "^7.2" }, "require-dev": { - "alexskrypnyk/phpunit-helpers": "^0.8.1", + "alexskrypnyk/phpunit-helpers": "^0.9.0", "dealerdirect/phpcodesniffer-composer-installer": "^1", "drupal/coder": "^8.3", "ergebnis/composer-normalize": "^2.42", @@ -70,7 +70,7 @@ "type": "patreon" } ], - "time": "2025-08-24T03:16:48+00:00" + "time": "2025-09-13T01:01:21+00:00" }, { "name": "alexskrypnyk/str2name", @@ -861,16 +861,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "6.4.2", + "version": "6.5.2", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "ce1fd2d47799bb60668643bc6220f6278a4c1d02" + "reference": "ac0d369c09653cf7af561f6d91a705bc617a87b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/ce1fd2d47799bb60668643bc6220f6278a4c1d02", - "reference": "ce1fd2d47799bb60668643bc6220f6278a4c1d02", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/ac0d369c09653cf7af561f6d91a705bc617a87b8", + "reference": "ac0d369c09653cf7af561f6d91a705bc617a87b8", "shasum": "" }, "require": { @@ -880,7 +880,7 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "3.3.0", - "json-schema/json-schema-test-suite": "1.2.0", + "json-schema/json-schema-test-suite": "^23.2", "marc-mabe/php-enum-phpstan": "^2.0", "phpspec/prophecy": "^1.19", "phpstan/phpstan": "^1.12", @@ -930,9 +930,9 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/6.4.2" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.5.2" }, - "time": "2025-06-03T18:27:04+00:00" + "time": "2025-09-09T09:42:27+00:00" }, { "name": "laravel/prompts", @@ -992,7 +992,8 @@ ], "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { - "source": "https://github.com/AlexSkrypnyk/prompts/tree/v0.3.7" + "source": "https://github.com/AlexSkrypnyk/prompts/tree/v0.3.7", + "issues": "https://github.com/AlexSkrypnyk/prompts/issues" }, "time": "2025-09-03T00:55:15+00:00" }, @@ -2421,16 +2422,16 @@ }, { "name": "symfony/process", - "version": "v7.3.0", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af" + "reference": "32241012d521e2e8a9d713adb0812bb773b907f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", - "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af", + "url": "https://api.github.com/repos/symfony/process/zipball/32241012d521e2e8a9d713adb0812bb773b907f1", + "reference": "32241012d521e2e8a9d713adb0812bb773b907f1", "shasum": "" }, "require": { @@ -2462,7 +2463,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.3.0" + "source": "https://github.com/symfony/process/tree/v7.3.3" }, "funding": [ { @@ -2473,12 +2474,16 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-04-17T09:11:12+00:00" + "time": "2025-08-18T09:42:54+00:00" }, { "name": "symfony/service-contracts", @@ -2565,16 +2570,16 @@ }, { "name": "symfony/string", - "version": "v7.3.2", + "version": "v7.3.3", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca" + "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/42f505aff654e62ac7ac2ce21033818297ca89ca", - "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca", + "url": "https://api.github.com/repos/symfony/string/zipball/17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", + "reference": "17a426cce5fd1f0901fefa9b2a490d0038fd3c9c", "shasum": "" }, "require": { @@ -2632,7 +2637,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.3.2" + "source": "https://github.com/symfony/string/tree/v7.3.3" }, "funding": [ { @@ -2652,7 +2657,7 @@ "type": "tidelift" } ], - "time": "2025-07-10T08:47:49+00:00" + "time": "2025-08-25T06:35:40+00:00" }, { "name": "symfony/yaml", @@ -2734,16 +2739,16 @@ "packages-dev": [ { "name": "alexskrypnyk/phpunit-helpers", - "version": "0.8.4", + "version": "0.10.0", "source": { "type": "git", "url": "https://github.com/AlexSkrypnyk/phpunit-helpers.git", - "reference": "0064df99be8f7b7146d8d69bd6ff9ea7a2e8395d" + "reference": "4967a0dae2f31d286ac66e069290cbed7c969bd0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AlexSkrypnyk/phpunit-helpers/zipball/0064df99be8f7b7146d8d69bd6ff9ea7a2e8395d", - "reference": "0064df99be8f7b7146d8d69bd6ff9ea7a2e8395d", + "url": "https://api.github.com/repos/AlexSkrypnyk/phpunit-helpers/zipball/4967a0dae2f31d286ac66e069290cbed7c969bd0", + "reference": "4967a0dae2f31d286ac66e069290cbed7c969bd0", "shasum": "" }, "require": { @@ -2797,7 +2802,7 @@ "type": "patreon" } ], - "time": "2025-09-05T06:52:25+00:00" + "time": "2025-09-12T03:20:47+00:00" }, { "name": "bamarni/composer-bin-plugin", @@ -3089,16 +3094,16 @@ }, { "name": "ergebnis/json", - "version": "1.5.0", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/ergebnis/json.git", - "reference": "fc4f1bdac2d54a3050dca16ef1fe16ae50993f7d" + "reference": "7b56d2b5d9e897e75b43e2e753075a0904c921b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/json/zipball/fc4f1bdac2d54a3050dca16ef1fe16ae50993f7d", - "reference": "fc4f1bdac2d54a3050dca16ef1fe16ae50993f7d", + "url": "https://api.github.com/repos/ergebnis/json/zipball/7b56d2b5d9e897e75b43e2e753075a0904c921b1", + "reference": "7b56d2b5d9e897e75b43e2e753075a0904c921b1", "shasum": "" }, "require": { @@ -3110,21 +3115,22 @@ "ergebnis/data-provider": "^3.3.0", "ergebnis/license": "^2.5.0", "ergebnis/php-cs-fixer-config": "^6.37.0", + "ergebnis/phpstan-rules": "^2.11.0", "ergebnis/phpunit-slow-test-detector": "^2.16.1", "fakerphp/faker": "^1.24.0", "infection/infection": "~0.26.6", "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^1.12.10", - "phpstan/phpstan-deprecation-rules": "^1.2.1", - "phpstan/phpstan-phpunit": "^1.4.0", - "phpstan/phpstan-strict-rules": "^1.6.1", - "phpunit/phpunit": "^9.6.18", - "rector/rector": "^1.2.10" + "phpstan/phpstan": "^2.1.22", + "phpstan/phpstan-deprecation-rules": "^2.0.3", + "phpstan/phpstan-phpunit": "^2.0.7", + "phpstan/phpstan-strict-rules": "^2.0.6", + "phpunit/phpunit": "^9.6.24", + "rector/rector": "^2.1.4" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.4-dev" + "dev-main": "1.7-dev" }, "composer-normalize": { "indent-size": 2, @@ -3157,20 +3163,20 @@ "security": "https://github.com/ergebnis/json/blob/main/.github/SECURITY.md", "source": "https://github.com/ergebnis/json" }, - "time": "2025-08-19T10:33:00+00:00" + "time": "2025-09-06T09:08:45+00:00" }, { "name": "ergebnis/json-normalizer", - "version": "4.10.0", + "version": "4.10.1", "source": { "type": "git", "url": "https://github.com/ergebnis/json-normalizer.git", - "reference": "91b9914b13937926d3b1916fc72475703ce42156" + "reference": "77961faf2c651c3f05977b53c6c68e8434febf62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/91b9914b13937926d3b1916fc72475703ce42156", - "reference": "91b9914b13937926d3b1916fc72475703ce42156", + "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/77961faf2c651c3f05977b53c6c68e8434febf62", + "reference": "77961faf2c651c3f05977b53c6c68e8434febf62", "shasum": "" }, "require": { @@ -3205,7 +3211,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.8-dev" + "dev-main": "4.11-dev" }, "composer-normalize": { "indent-size": 2, @@ -3239,20 +3245,20 @@ "security": "https://github.com/ergebnis/json-normalizer/blob/main/.github/SECURITY.md", "source": "https://github.com/ergebnis/json-normalizer" }, - "time": "2025-08-19T10:29:01+00:00" + "time": "2025-09-06T09:18:13+00:00" }, { "name": "ergebnis/json-pointer", - "version": "3.7.0", + "version": "3.7.1", "source": { "type": "git", "url": "https://github.com/ergebnis/json-pointer.git", - "reference": "cf3301710c99b54b844426c9cc46037d264fdf70" + "reference": "43bef355184e9542635e35dd2705910a3df4c236" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/json-pointer/zipball/cf3301710c99b54b844426c9cc46037d264fdf70", - "reference": "cf3301710c99b54b844426c9cc46037d264fdf70", + "url": "https://api.github.com/repos/ergebnis/json-pointer/zipball/43bef355184e9542635e35dd2705910a3df4c236", + "reference": "43bef355184e9542635e35dd2705910a3df4c236", "shasum": "" }, "require": { @@ -3277,7 +3283,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.8-dev" }, "composer-normalize": { "indent-size": 2, @@ -3312,20 +3318,20 @@ "security": "https://github.com/ergebnis/json-pointer/blob/main/.github/SECURITY.md", "source": "https://github.com/ergebnis/json-pointer" }, - "time": "2025-08-19T10:23:17+00:00" + "time": "2025-09-06T09:28:19+00:00" }, { "name": "ergebnis/json-printer", - "version": "3.8.0", + "version": "3.8.1", "source": { "type": "git", "url": "https://github.com/ergebnis/json-printer.git", - "reference": "fe48d523392ab885bf581eb57f61526dcde44fbc" + "reference": "211d73fc7ec6daf98568ee6ed6e6d133dee8503e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/fe48d523392ab885bf581eb57f61526dcde44fbc", - "reference": "fe48d523392ab885bf581eb57f61526dcde44fbc", + "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/211d73fc7ec6daf98568ee6ed6e6d133dee8503e", + "reference": "211d73fc7ec6daf98568ee6ed6e6d133dee8503e", "shasum": "" }, "require": { @@ -3352,7 +3358,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.7-dev" + "dev-main": "3.9-dev" }, "composer-normalize": { "indent-size": 2, @@ -3387,20 +3393,20 @@ "security": "https://github.com/ergebnis/json-printer/blob/main/.github/SECURITY.md", "source": "https://github.com/ergebnis/json-printer" }, - "time": "2025-08-19T10:18:47+00:00" + "time": "2025-09-06T09:59:26+00:00" }, { "name": "ergebnis/json-schema-validator", - "version": "4.5.0", + "version": "4.5.1", "source": { "type": "git", "url": "https://github.com/ergebnis/json-schema-validator.git", - "reference": "0c8349baba70fd2449b799bc73650985c27ed321" + "reference": "b739527a480a9e3651360ad351ea77e7e9019df2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/0c8349baba70fd2449b799bc73650985c27ed321", - "reference": "0c8349baba70fd2449b799bc73650985c27ed321", + "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/b739527a480a9e3651360ad351ea77e7e9019df2", + "reference": "b739527a480a9e3651360ad351ea77e7e9019df2", "shasum": "" }, "require": { @@ -3429,7 +3435,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.4-dev" + "dev-main": "4.6-dev" }, "composer-normalize": { "indent-size": 2, @@ -3464,7 +3470,7 @@ "security": "https://github.com/ergebnis/json-schema-validator/blob/main/.github/SECURITY.md", "source": "https://github.com/ergebnis/json-schema-validator" }, - "time": "2025-08-19T08:41:00+00:00" + "time": "2025-09-06T11:37:35+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -3954,16 +3960,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.2.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8" + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/b9e61a61e39e02dd90944e9115241c7f7e76bfd8", - "reference": "b9e61a61e39e02dd90944e9115241c7f7e76bfd8", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", "shasum": "" }, "require": { @@ -3995,22 +4001,22 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.2.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0" }, - "time": "2025-07-13T07:04:09+00:00" + "time": "2025-08-30T15:50:23+00:00" }, { "name": "phpstan/phpstan", - "version": "2.1.22", + "version": "2.1.25", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4" + "reference": "4087d28bd252895874e174d65e26b2c202ed893a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/41600c8379eb5aee63e9413fe9e97273e25d57e4", - "reference": "41600c8379eb5aee63e9413fe9e97273e25d57e4", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/4087d28bd252895874e174d65e26b2c202ed893a", + "reference": "4087d28bd252895874e174d65e26b2c202ed893a", "shasum": "" }, "require": { @@ -4055,7 +4061,7 @@ "type": "github" } ], - "time": "2025-08-04T19:17:37+00:00" + "time": "2025-09-12T14:26:42+00:00" }, { "name": "phpunit/php-code-coverage", @@ -4394,16 +4400,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.36", + "version": "11.5.38", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "264a87c7ef68b1ab9af7172357740dc266df5957" + "reference": "5bd0e4f64a2261b7ade7054c51547beaf2d99e43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/264a87c7ef68b1ab9af7172357740dc266df5957", - "reference": "264a87c7ef68b1ab9af7172357740dc266df5957", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5bd0e4f64a2261b7ade7054c51547beaf2d99e43", + "reference": "5bd0e4f64a2261b7ade7054c51547beaf2d99e43", "shasum": "" }, "require": { @@ -4475,7 +4481,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.36" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.38" }, "funding": [ { @@ -4499,20 +4505,20 @@ "type": "tidelift" } ], - "time": "2025-09-03T06:24:17+00:00" + "time": "2025-09-11T10:34:07+00:00" }, { "name": "rector/rector", - "version": "2.1.6", + "version": "2.1.7", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "729aabc0ec66e700ef164e26454a1357f222a2f3" + "reference": "c34cc07c4698f007a20dc5c99ff820089ae413ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/729aabc0ec66e700ef164e26454a1357f222a2f3", - "reference": "729aabc0ec66e700ef164e26454a1357f222a2f3", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/c34cc07c4698f007a20dc5c99ff820089ae413ce", + "reference": "c34cc07c4698f007a20dc5c99ff820089ae413ce", "shasum": "" }, "require": { @@ -4551,7 +4557,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.1.6" + "source": "https://github.com/rectorphp/rector/tree/2.1.7" }, "funding": [ { @@ -4559,7 +4565,7 @@ "type": "github" } ], - "time": "2025-09-05T15:43:08+00:00" + "time": "2025-09-10T11:13:58+00:00" }, { "name": "sebastian/cli-parser", @@ -5527,32 +5533,32 @@ }, { "name": "slevomat/coding-standard", - "version": "8.20.0", + "version": "8.22.0", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "b4f9f02edd4e6a586777f0cabe8d05574323f3eb" + "reference": "a4cef983bad2e70125612d22b2f6e2bd1333d5c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/b4f9f02edd4e6a586777f0cabe8d05574323f3eb", - "reference": "b4f9f02edd4e6a586777f0cabe8d05574323f3eb", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/a4cef983bad2e70125612d22b2f6e2bd1333d5c2", + "reference": "a4cef983bad2e70125612d22b2f6e2bd1333d5c2", "shasum": "" }, "require": { "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.1.2", "php": "^7.4 || ^8.0", - "phpstan/phpdoc-parser": "^2.2.0", - "squizlabs/php_codesniffer": "^3.13.2" + "phpstan/phpdoc-parser": "^2.3.0", + "squizlabs/php_codesniffer": "^3.13.4" }, "require-dev": { "phing/phing": "3.0.1|3.1.0", "php-parallel-lint/php-parallel-lint": "1.4.0", - "phpstan/phpstan": "2.1.19", + "phpstan/phpstan": "2.1.22", "phpstan/phpstan-deprecation-rules": "2.0.3", "phpstan/phpstan-phpunit": "2.0.7", "phpstan/phpstan-strict-rules": "2.0.6", - "phpunit/phpunit": "9.6.8|10.5.48|11.4.4|11.5.27|12.2.7" + "phpunit/phpunit": "9.6.8|10.5.48|11.4.4|11.5.36|12.3.8" }, "type": "phpcodesniffer-standard", "extra": { @@ -5576,7 +5582,7 @@ ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.20.0" + "source": "https://github.com/slevomat/coding-standard/tree/8.22.0" }, "funding": [ { @@ -5588,20 +5594,20 @@ "type": "tidelift" } ], - "time": "2025-07-26T15:35:10+00:00" + "time": "2025-09-06T09:14:48+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.13.2", + "version": "3.13.4", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "5b5e3821314f947dd040c70f7992a64eac89025c" + "reference": "ad545ea9c1b7d270ce0fc9cbfb884161cd706119" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/5b5e3821314f947dd040c70f7992a64eac89025c", - "reference": "5b5e3821314f947dd040c70f7992a64eac89025c", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ad545ea9c1b7d270ce0fc9cbfb884161cd706119", + "reference": "ad545ea9c1b7d270ce0fc9cbfb884161cd706119", "shasum": "" }, "require": { @@ -5672,7 +5678,7 @@ "type": "thanks_dev" } ], - "time": "2025-06-17T22:17:01+00:00" + "time": "2025-09-05T05:47:09+00:00" }, { "name": "staabm/side-effects-detector", diff --git a/.vortex/installer/tests/Functional/FunctionalTestCase.php b/.vortex/installer/tests/Functional/FunctionalTestCase.php index 92b40d15a..e18ca6def 100644 --- a/.vortex/installer/tests/Functional/FunctionalTestCase.php +++ b/.vortex/installer/tests/Functional/FunctionalTestCase.php @@ -124,12 +124,12 @@ protected function assertSutContains(string|array $needles): void { foreach ($needles as $needle) { if (Strings::isRegex($needle)) { - $this->assertDirectoryContainsString($needle, static::$sut, [ + $this->assertDirectoryContainsString(static::$sut, $needle, [ 'scripts/vortex', ]); } else { - $this->assertDirectoryContainsWord($needle, static::$sut, [ + $this->assertDirectoryContainsWord(static::$sut, $needle, [ 'scripts/vortex', ]); } @@ -141,12 +141,12 @@ protected function assertSutNotContains(string|array $needles): void { foreach ($needles as $needle) { if (Strings::isRegex($needle)) { - $this->assertDirectoryNotContainsString($needle, static::$sut, [ + $this->assertDirectoryNotContainsString(static::$sut, $needle, [ 'scripts/vortex', ]); } else { - $this->assertDirectoryNotContainsWord($needle, static::$sut, [ + $this->assertDirectoryNotContainsWord(static::$sut, $needle, [ 'scripts/vortex', ]); } diff --git a/.vortex/installer/tests/Functional/Handlers/CodeProviderInstallTest.php b/.vortex/installer/tests/Functional/Handlers/CodeProviderInstallTest.php index db7ba0910..89fa8088f 100644 --- a/.vortex/installer/tests/Functional/Handlers/CodeProviderInstallTest.php +++ b/.vortex/installer/tests/Functional/Handlers/CodeProviderInstallTest.php @@ -19,7 +19,7 @@ public static function dataProviderInstall(): array { static::cw(fn() => Env::put(PromptManager::makeEnvName(CodeProvider::id()), CodeProvider::GITHUB)), static::cw(function (FunctionalTestCase $test): void { $test->assertFileDoesNotExist(static::$sut . '/.github/PULL_REQUEST_TEMPLATE.dist.md'); - $test->assertFileContainsString('Checklist before requesting a review', static::$sut . '/.github/PULL_REQUEST_TEMPLATE.md'); + $test->assertFileContainsString(static::$sut . '/.github/PULL_REQUEST_TEMPLATE.md', 'Checklist before requesting a review'); }), ], diff --git a/.vortex/installer/tests/Functional/Handlers/ThemeInstallTest.php b/.vortex/installer/tests/Functional/Handlers/ThemeInstallTest.php index 5a9cd4de4..39ff30cb1 100644 --- a/.vortex/installer/tests/Functional/Handlers/ThemeInstallTest.php +++ b/.vortex/installer/tests/Functional/Handlers/ThemeInstallTest.php @@ -21,7 +21,7 @@ public static function dataProviderInstall(): array { Env::put(PromptManager::makeEnvName(Theme::id()), ''); Env::put(PromptManager::makeEnvName(AiCodeInstructions::id()), AiCodeInstructions::CLAUDE); }), - static::cw(fn(FunctionalTestCase $test) => $test->assertDirectoryNotContainsString('themes/custom', static::$sut, [ + static::cw(fn(FunctionalTestCase $test) => $test->assertDirectoryNotContainsString(static::$sut, 'themes/custom', [ '.gitignore', 'scripts/vortex', 'composer.json', @@ -31,7 +31,7 @@ public static function dataProviderInstall(): array { 'theme, custom' => [ static::cw(fn() => Env::put(PromptManager::makeEnvName(Theme::id()), 'light_saber')), - static::cw(fn(FunctionalTestCase $test) => $test->assertDirectoryNotContainsString('your_site_theme', static::$sut)), + static::cw(fn(FunctionalTestCase $test) => $test->assertDirectoryNotContainsString(static::$sut, 'your_site_theme')), ], ]; diff --git a/.vortex/installer/tests/Functional/Handlers/TimezoneInstallTest.php b/.vortex/installer/tests/Functional/Handlers/TimezoneInstallTest.php index c65e1d296..57ad70e8f 100644 --- a/.vortex/installer/tests/Functional/Handlers/TimezoneInstallTest.php +++ b/.vortex/installer/tests/Functional/Handlers/TimezoneInstallTest.php @@ -24,21 +24,21 @@ public static function dataProviderInstall(): array { }), static::cw(function (FunctionalTestCase $test): void { // Timezone should be replaced in .env file. - $test->assertFileContainsString('TZ=America/New_York', static::$sut . '/.env'); - $test->assertFileNotContainsString('UTC', static::$sut . '/.env'); + $test->assertFileContainsString(static::$sut . '/.env', 'TZ=America/New_York'); + $test->assertFileNotContainsString(static::$sut . '/.env', 'UTC'); // Timezone should be replaced in Renovate config. - $test->assertFileContainsString('"timezone": "America/New_York"', static::$sut . '/renovate.json'); - $test->assertFileNotContainsString('UTC', static::$sut . '/renovate.json'); + $test->assertFileContainsString(static::$sut . '/renovate.json', '"timezone": "America/New_York"'); + $test->assertFileNotContainsString(static::$sut . '/renovate.json', 'UTC'); // Timezone should not be replaced in GHA config in code as it should // be overridden via UI. - $test->assertFileNotContainsString('America/New_York', static::$sut . '/.github/workflows/build-test-deploy.yml'); - $test->assertFileContainsString('UTC', static::$sut . '/.github/workflows/build-test-deploy.yml'); + $test->assertFileNotContainsString(static::$sut . '/.github/workflows/build-test-deploy.yml', 'America/New_York'); + $test->assertFileContainsString(static::$sut . '/.github/workflows/build-test-deploy.yml', 'UTC'); // Timezone should not be replaced in Docker Compose config. - $test->assertFileNotContainsString('America/New_York', static::$sut . '/docker-compose.yml'); - $test->assertFileContainsString('UTC', static::$sut . '/docker-compose.yml'); + $test->assertFileNotContainsString(static::$sut . '/docker-compose.yml', 'America/New_York'); + $test->assertFileContainsString(static::$sut . '/docker-compose.yml', 'UTC'); }), ], @@ -50,8 +50,8 @@ public static function dataProviderInstall(): array { static::cw(function (FunctionalTestCase $test): void { // Timezone should not be replaced in CircleCI config in code as it // should be overridden via UI. - $test->assertFileNotContainsString('TZ: America/New_York', static::$sut . '/.circleci/config.yml'); - $test->assertFileContainsString('TZ: UTC', static::$sut . '/.circleci/config.yml'); + $test->assertFileNotContainsString(static::$sut . '/.circleci/config.yml', 'TZ: America/New_York'); + $test->assertFileContainsString(static::$sut . '/.circleci/config.yml', 'TZ: UTC'); }), ], ]; diff --git a/.vortex/installer/tests/Unit/EnvTest.php b/.vortex/installer/tests/Unit/EnvTest.php index 9fadc015e..eef338fc6 100644 --- a/.vortex/installer/tests/Unit/EnvTest.php +++ b/.vortex/installer/tests/Unit/EnvTest.php @@ -151,7 +151,7 @@ public function testWriteValueDotenv(): void { // Add new variable. Env::writeValueDotenv('NEW_VAR', 'new_added_value', $actual_file); - $this->assertDirectoryEqualsDirectory($fixture_dir . '/after', static::$sut); + $this->assertDirectoryEqualsDirectory(static::$sut, $fixture_dir . '/after'); } #[DataProvider('dataProviderFormatValueForDotenv')] diff --git a/.vortex/installer/tests/Unit/SelfTest.php b/.vortex/installer/tests/Unit/SelfTest.php index 13987dcdc..aaef319c9 100644 --- a/.vortex/installer/tests/Unit/SelfTest.php +++ b/.vortex/installer/tests/Unit/SelfTest.php @@ -17,7 +17,7 @@ public function testVersionReplacement(): void { static::replaceVersions(static::$sut); - $this->assertDirectoryEqualsDirectory($expected, static::$sut); + $this->assertDirectoryEqualsDirectory(static::$sut, $expected); } } diff --git a/.vortex/tests/composer.json b/.vortex/tests/composer.json index d074c4786..5133bee2a 100644 --- a/.vortex/tests/composer.json +++ b/.vortex/tests/composer.json @@ -12,8 +12,8 @@ "php": ">=8.2" }, "require-dev": { - "alexskrypnyk/file": "^0.9", - "alexskrypnyk/phpunit-helpers": "main-dev", + "alexskrypnyk/file": "^0.10", + "alexskrypnyk/phpunit-helpers": "^0.10", "alexskrypnyk/shellvar": "^1.2", "czproject/git-php": "^4.4", "dealerdirect/phpcodesniffer-composer-installer": "^1", diff --git a/.vortex/tests/composer.lock b/.vortex/tests/composer.lock index 4e9fc71e4..a86f910db 100644 --- a/.vortex/tests/composer.lock +++ b/.vortex/tests/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": "612fdc9548a46c100c72d38090aa6067", + "content-hash": "e21080373c436f4663c6fd41ddcf60a0", "packages": [], "packages-dev": [ { @@ -65,16 +65,16 @@ }, { "name": "alexskrypnyk/file", - "version": "0.9.0", + "version": "0.10.0", "source": { "type": "git", "url": "https://github.com/AlexSkrypnyk/file.git", - "reference": "df98e9ba70357433061533e9cc747708ce92500c" + "reference": "fc98183bb62bf115c581754ff52a6708979bc6cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AlexSkrypnyk/file/zipball/df98e9ba70357433061533e9cc747708ce92500c", - "reference": "df98e9ba70357433061533e9cc747708ce92500c", + "url": "https://api.github.com/repos/AlexSkrypnyk/file/zipball/fc98183bb62bf115c581754ff52a6708979bc6cf", + "reference": "fc98183bb62bf115c581754ff52a6708979bc6cf", "shasum": "" }, "require": { @@ -82,7 +82,7 @@ "symfony/filesystem": "^7.2" }, "require-dev": { - "alexskrypnyk/phpunit-helpers": "^0.8.1", + "alexskrypnyk/phpunit-helpers": "^0.9.0", "dealerdirect/phpcodesniffer-composer-installer": "^1", "drupal/coder": "^8.3", "ergebnis/composer-normalize": "^2.42", @@ -127,11 +127,11 @@ "type": "patreon" } ], - "time": "2025-08-24T03:16:48+00:00" + "time": "2025-09-13T01:01:21+00:00" }, { "name": "alexskrypnyk/phpunit-helpers", - "version": "dev-main", + "version": "0.10.0", "source": { "type": "git", "url": "https://github.com/AlexSkrypnyk/phpunit-helpers.git", @@ -160,7 +160,6 @@ "squizlabs/php_codesniffer": "^3.7", "symfony/console": "^6.4 || ^7.2" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -4164,9 +4163,7 @@ ], "aliases": [], "minimum-stability": "alpha", - "stability-flags": { - "alexskrypnyk/phpunit-helpers": 20 - }, + "stability-flags": {}, "prefer-stable": true, "prefer-lowest": false, "platform": { diff --git a/.vortex/tests/phpunit/Functional/FunctionalTestCase.php b/.vortex/tests/phpunit/Functional/FunctionalTestCase.php index a436a1202..42f2ae9e1 100644 --- a/.vortex/tests/phpunit/Functional/FunctionalTestCase.php +++ b/.vortex/tests/phpunit/Functional/FunctionalTestCase.php @@ -165,64 +165,4 @@ public function volumesMounted(): bool { return getenv('VORTEX_DEV_VOLUMES_SKIP_MOUNT') != 1; } - protected function assertFilesExist(string $directory, array $files): void { - foreach ($files as $file) { - $this->assertFileExists($directory . DIRECTORY_SEPARATOR . $file); - } - } - - /** - * Assert that files matching wildcard pattern(s) exist. - * - * @param string|array $patterns - * Wildcard pattern(s) to match files against. - */ - protected function assertFilesWildcardExists(string|array $patterns): void { - $patterns = is_array($patterns) ? $patterns : [$patterns]; - - if (empty($patterns)) { - throw new \InvalidArgumentException('Empty patterns - no files to check'); - } - - foreach ($patterns as $pattern) { - $matches = glob($pattern); - - if ($matches === FALSE) { - throw new \RuntimeException(sprintf('Failed to read files matching wildcard pattern: %s', $pattern)); - } - - $this->assertNotEmpty( - $matches, - sprintf('No files found matching wildcard pattern: %s', $pattern) - ); - } - } - - /** - * Assert that files matching wildcard pattern(s) do not exist. - * - * @param string|array $patterns - * Wildcard pattern(s) to match files against. - */ - protected function assertFilesWildcardDoNotExist(string|array $patterns): void { - $patterns = is_array($patterns) ? $patterns : [$patterns]; - - if (empty($patterns)) { - throw new \InvalidArgumentException('Empty patterns - no files to check'); - } - - foreach ($patterns as $pattern) { - $matches = glob($pattern); - - if ($matches === FALSE) { - throw new \RuntimeException(sprintf('Failed to read files matching wildcard pattern: %s', $pattern)); - } - - $this->assertEmpty( - $matches, - sprintf('Found %d file(s) matching wildcard pattern that should not exist: %s', count($matches), $pattern) - ); - } - } - } diff --git a/.vortex/tests/phpunit/Functional/SelfTest.php b/.vortex/tests/phpunit/Functional/SelfTest.php deleted file mode 100644 index 74308bfb4..000000000 --- a/.vortex/tests/phpunit/Functional/SelfTest.php +++ /dev/null @@ -1,173 +0,0 @@ -assertFilesWildcardExists($patterns); - } - else { - if (!is_string($expected_exception) || !class_exists($expected_exception)) { - throw new \RuntimeException('Expected a string, got a ' . gettype($expected_exception)); - } - /** @var class-string<\Throwable> $expected_exception */ - $this->expectException($expected_exception); - if ($expected_message !== NULL) { - $this->expectExceptionMessage($expected_message); - } - $this->assertFilesWildcardExists($patterns); - } - } - - /** - * Data provider for assertFilesWildcardExists tests. - */ - public static function dataProviderAssertFilesWildcardExists(): array { - return [ - 'single pattern exists' => [ - 'wildcard_test/*.html', - TRUE, - ], - 'single pattern not exists' => [ - 'wildcard_test/*.xml', - FALSE, - AssertionFailedError::class, - 'No files found matching wildcard pattern', - ], - 'array patterns all exist' => [ - ['wildcard_test/*.html', 'wildcard_test/*.log'], - TRUE, - ], - 'array patterns mixed' => [ - ['wildcard_test/*.html', 'wildcard_test/*.xml'], - FALSE, - AssertionFailedError::class, - 'No files found matching wildcard pattern', - ], - 'subdirectory pattern' => [ - 'wildcard_test/*/*.html', - TRUE, - ], - 'empty array' => [ - [], - FALSE, - \InvalidArgumentException::class, - 'Empty patterns - no files to check', - ], - ]; - } - - /** - * Test assertFilesWildcardDoNotExist method. - */ - #[DataProvider('dataProviderAssertFilesWildcardDoNotExist')] - public function testAssertFilesWildcardDoNotExist(string|array $patterns, bool $should_pass, ?string $expected_exception = NULL, ?string $expected_message = NULL): void { - // Convert relative patterns to absolute paths. - $workspace = static::$workspace; - if (is_array($patterns)) { - $patterns = array_map(function (string $pattern) use ($workspace): string { - return $workspace . DIRECTORY_SEPARATOR . $pattern; - }, $patterns); - } - elseif (!empty($patterns)) { - $patterns = $workspace . DIRECTORY_SEPARATOR . $patterns; - } - - if ($should_pass) { - $this->assertFilesWildcardDoNotExist($patterns); - } - else { - if (!is_string($expected_exception) || !class_exists($expected_exception)) { - throw new \RuntimeException('Expected a string, got a ' . gettype($expected_exception)); - } - /** @var class-string<\Throwable> $expected_exception */ - $this->expectException($expected_exception); - if ($expected_message !== NULL) { - $this->expectExceptionMessage($expected_message); - } - $this->assertFilesWildcardDoNotExist($patterns); - } - } - - /** - * Data provider for assertFilesWildcardDoNotExist tests. - */ - public static function dataProviderAssertFilesWildcardDoNotExist(): array { - return [ - 'single pattern not exists' => [ - 'wildcard_test/*.xml', - TRUE, - ], - 'single pattern exists' => [ - 'wildcard_test/*.html', - FALSE, - AssertionFailedError::class, - 'Found 2 file(s) matching wildcard pattern that should not exist', - ], - 'array patterns none exist' => [ - ['wildcard_test/*.xml', 'wildcard_test/*.php'], - TRUE, - ], - 'array patterns some exist' => [ - ['wildcard_test/*.xml', 'wildcard_test/*.html'], - FALSE, - AssertionFailedError::class, - 'Found 2 file(s) matching wildcard pattern that should not exist', - ], - 'empty array' => [ - [], - FALSE, - \InvalidArgumentException::class, - 'Empty patterns - no files to check', - ], - ]; - } - -} diff --git a/.vortex/tests/phpunit/Functional/WorkflowTest.php b/.vortex/tests/phpunit/Functional/WorkflowTest.php index 876e70053..40e2ded14 100644 --- a/.vortex/tests/phpunit/Functional/WorkflowTest.php +++ b/.vortex/tests/phpunit/Functional/WorkflowTest.php @@ -23,6 +23,11 @@ protected function setUp(): void { public function testSmoke(): void { $this->assertDirectoryExists(static::$sut, 'SUT directory exists'); $this->assertEquals(static::$sut, File::cwd(), 'SUT is the current working directory'); + + // Assert all special comments were removed. + $this->assertDirectoryNotContainsString('.', '#;', ['.png', '.jpg']); + $this->assertDirectoryNotContainsString('.', '#;<', ['.png', '.jpg']); + $this->assertDirectoryNotContainsString('.', '#;>', ['.png', '.jpg']); } public function testIdempotence(): void { diff --git a/.vortex/tests/phpunit/Traits/AssertFilesTrait.php b/.vortex/tests/phpunit/Traits/AssertFilesTrait.php index ef27fc8fd..e6283643f 100644 --- a/.vortex/tests/phpunit/Traits/AssertFilesTrait.php +++ b/.vortex/tests/phpunit/Traits/AssertFilesTrait.php @@ -22,17 +22,17 @@ protected function assertCommonFilesPresent(string $webroot = 'web', string $pro // Assert that project name is correct. Assert::assertFileExists('.env'); - $this->assertFileContainsString('VORTEX_PROJECT=' . $project_name, '.env'); + $this->assertFileContainsString('.env', 'VORTEX_PROJECT=' . $project_name); // Assert that Vortex version was replaced in README.md. Assert::assertFileExists('README.md'); $vortex_version = getenv('TEST_VORTEX_VERSION') ?: 'develop'; - $this->assertFileContainsString(sprintf('badge/Vortex-%s-65ACBC.svg', $vortex_version), 'README.md'); - $this->assertFileContainsString('https://github.com/drevops/vortex/tree/' . $vortex_version, 'README.md'); - $this->assertFileNotContainsString('The following list includes', 'README.md'); + $this->assertFileContainsString('README.md', sprintf('badge/Vortex-%s-65ACBC.svg', $vortex_version)); + $this->assertFileContainsString('README.md', 'https://github.com/drevops/vortex/tree/' . $vortex_version); + $this->assertFileNotContainsString('README.md', 'The following list includes'); Assert::assertFileDoesNotExist('README.dist.md'); - $this->assertFileContainsString('This repository was created using the [Vortex](https://github.com/drevops/vortex) Drupal project template', 'README.md', 'Assert that Vortex footnote remains.'); + $this->assertFileContainsString('README.md', 'This repository was created using the [Vortex](https://github.com/drevops/vortex) Drupal project template', 'Assert that Vortex footnote remains.'); // Assert Drupal files are present. $this->assertDrupalFilesPresent($webroot); @@ -200,12 +200,12 @@ protected function assertVortexFilesPresent(string $webroot = 'web'): void { Assert::assertFileDoesNotExist('.github/workflows/vortex-test-installer.yml'); if (file_exists('.circleci/config.yml')) { - $this->assertFileNotContainsString('vortex-dev', '.circleci/config.yml', 'CircleCI config should not contain development Vortex references'); + $this->assertFileNotContainsString('.circleci/config.yml', 'vortex-dev', 'CircleCI config should not contain development Vortex references'); } // Assert that documentation was processed correctly. if (file_exists('README.md')) { - $this->assertFileNotContainsString('# Vortex', 'README.md'); + $this->assertFileNotContainsString('README.md', '# Vortex'); } // Check directory doesn't contain .vortex references. @@ -276,6 +276,22 @@ protected function assertDrupalFilesPresent(string $webroot = 'web'): void { // Assert all stub strings were replaced - these should not exist in any // files. + $exclude = [ + '.png', + '.jpg', + '.jpeg', + '.gif', + '.svg', + '.ico', + '.webp', + '.tiff', + '.tif', + '.bmp', + 'themes.README.txt', + 'modules.README.txt', + 'themes/README.txt', + 'modules/README.txt', + ]; $this->assertDirectoryNotContainsString('.', 'your_site'); $this->assertDirectoryNotContainsString('.', 'ys_base'); $this->assertDirectoryNotContainsString('.', 'YOURSITE'); @@ -285,9 +301,9 @@ protected function assertDrupalFilesPresent(string $webroot = 'web'): void { $this->assertDirectoryNotContainsString('.', 'YOURORG'); $this->assertDirectoryNotContainsString('.', 'www.your-site-domain.example'); // Assert all special comments were removed. - $this->assertDirectoryNotContainsString('.', '#;'); - $this->assertDirectoryNotContainsString('.', '#;<'); - $this->assertDirectoryNotContainsString('.', '#;>'); + $this->assertDirectoryNotContainsString('.', '#;', $exclude); + $this->assertDirectoryNotContainsString('.', '#;<', $exclude); + $this->assertDirectoryNotContainsString('.', '#;>', $exclude); } public function assertFilesTrackedInGit(string $webroot = 'web', bool $skip_commit = FALSE): void { diff --git a/.vortex/tests/phpunit/Traits/Steps/StepBuildTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepBuildTrait.php index f2e53efe4..f1628f107 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepBuildTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepBuildTrait.php @@ -43,12 +43,12 @@ protected function stepBuild(string $webroot = 'web', array $env = []): void { $this->logSubstep('Assert only minified compiled CSS exists'); $this->assertFileExists($webroot . '/themes/custom/star_wars/build/css/star_wars.min.css', 'Minified CSS file should exist'); - $this->assertFileNotContainsString('background: #7e57e2', $webroot . '/themes/custom/star_wars/build/css/star_wars.min.css', 'CSS should not contain development colors'); + $this->assertFileNotContainsString($webroot . '/themes/custom/star_wars/build/css/star_wars.min.css', 'background: #7e57e2', 'CSS should not contain development colors'); $this->assertFileDoesNotExist($webroot . '/themes/custom/star_wars/build/css/star_wars.css', 'Non-minified CSS should not exist'); $this->logSubstep('Assert only minified compiled JS exists'); $this->assertFileExists($webroot . '/themes/custom/star_wars/build/js/star_wars.min.js', 'Minified JS file should exist'); - $this->assertFileContainsString('!function(Drupal){"use strict";Drupal.behaviors.star_wars', $webroot . '/themes/custom/star_wars/build/js/star_wars.min.js', 'JS should contain expected minified content'); + $this->assertFileContainsString($webroot . '/themes/custom/star_wars/build/js/star_wars.min.js', '!function(Drupal){"use strict";Drupal.behaviors.star_wars', 'JS should contain expected minified content'); $this->assertFileDoesNotExist($webroot . '/themes/custom/star_wars/build/js/star_wars.js', 'Non-minified JS should not exist'); $this->logStepFinish(); diff --git a/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php index f3793a839..cc9a6557e 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php @@ -30,8 +30,8 @@ protected function stepEnvChanges(): void { $this->logStepStart(); // Assert that .env does not contain test values. - $this->assertFileNotContainsString('MY_CUSTOM_VAR', '.env'); - $this->assertFileNotContainsString('my_custom_var_value', '.env'); + $this->assertFileNotContainsString('.env', 'MY_CUSTOM_VAR'); + $this->assertFileNotContainsString('.env', 'my_custom_var_value'); // Assert that test variable is not available inside of containers. $this->cmdFail('ahoy cli "printenv | grep -q MY_CUSTOM_VAR"'); @@ -45,8 +45,8 @@ protected function stepEnvChanges(): void { $this->syncToContainer(); // Assert that .env contains test values. - $this->assertFileContainsString('MY_CUSTOM_VAR', '.env'); - $this->assertFileContainsString('my_custom_var_value', '.env'); + $this->assertFileContainsString('.env', 'MY_CUSTOM_VAR'); + $this->assertFileContainsString('.env', 'my_custom_var_value'); // Assert that test variable and values are available inside of containers. $this->cmd('ahoy cli "printenv | grep MY_CUSTOM_VAR"', 'my_custom_var_value'); @@ -60,8 +60,8 @@ protected function stepEnvChanges(): void { $this->cmd('ahoy up cli'); $this->syncToContainer(); - $this->assertFileNotContainsString('MY_CUSTOM_VAR', '.env'); - $this->assertFileNotContainsString('my_custom_var_value', '.env'); + $this->assertFileNotContainsString('.env', 'MY_CUSTOM_VAR'); + $this->assertFileNotContainsString('.env', 'my_custom_var_value'); $this->cmdFail('ahoy cli "printenv | grep -q MY_CUSTOM_VAR"'); $this->cmdFail('ahoy cli \'echo $MY_CUSTOM_VAR | grep my_custom_var_value\'', '! my_custom_var_value'); @@ -73,7 +73,7 @@ protected function stepTimezone(): void { // Assert that .env contains a default value. // Note that AEDT changes to AEST during winter. - $this->assertFileContainsString('TZ=UTC', '.env'); + $this->assertFileContainsString('.env', 'TZ=UTC'); $this->cmd('docker compose exec -T cli date', 'UTC'); $this->cmd('docker compose exec -T php date', 'UTC'); $this->cmd('docker compose exec -T nginx date', 'UTC'); diff --git a/.vortex/tests/phpunit/Traits/Steps/StepFrontendTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepFrontendTrait.php index 84c987abc..88b98a634 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepFrontendTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepFrontendTrait.php @@ -40,7 +40,7 @@ protected function stepAhoyFe(string $webroot = 'web'): void { $variables_file = $webroot . '/themes/custom/star_wars/scss/_variables.scss'; $minified_file = $webroot . '/themes/custom/star_wars/build/css/star_wars.min.css'; - $this->assertFileNotContainsString($test_color1, $webroot . '/themes/custom/star_wars/build/css/star_wars.min.css'); + $this->assertFileNotContainsString($minified_file, $test_color1); $original_content = File::read($variables_file); $new_content = $original_content . "\n\$color-tester: {$test_color1};\n\$color-primary: \$color-tester;\n"; @@ -52,11 +52,11 @@ protected function stepAhoyFe(string $webroot = 'web'): void { $this->syncToHost(); // Assets compiled for production are minified (no spaces between // properties and their values). - $this->assertFileContainsString('background:' . $test_color1, $minified_file); + $this->assertFileContainsString($minified_file, 'background:' . $test_color1); $this->logSubstep('Build FE assets for development'); - $this->assertFileNotContainsString($test_color2, $minified_file); + $this->assertFileNotContainsString($minified_file, $test_color2); $dev_content = $new_content . "\n\$color-please: {$test_color2};\n\$color-primary: \$color-please;\n"; File::remove($variables_file); @@ -67,7 +67,7 @@ protected function stepAhoyFe(string $webroot = 'web'): void { $this->syncToHost(); // Note that assets compiled for development are not minified (contains // spaces between properties and their values). - $this->assertFileContainsString('background: ' . $test_color2, $minified_file); + $this->assertFileContainsString($minified_file, 'background: ' . $test_color2); $this->logStepFinish(); } diff --git a/.vortex/tests/phpunit/Traits/Steps/StepPrepareSutTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepPrepareSutTrait.php index 5380823d8..9bf5a1289 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepPrepareSutTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepPrepareSutTrait.php @@ -43,11 +43,16 @@ protected function runInstaller(array $arguments = []): void { chdir(static::locationsRoot()); if (!is_dir('.vortex/installer/vendor')) { - $this->log('Installing dependencies of the Vortex installer'); + $this->logNote('Installing dependencies of the Vortex installer'); $this->cmd('composer --working-dir=.vortex/installer install'); } - $this->cmd('php .vortex/installer/installer.php --no-interaction ' . static::locationsSut(), arg: $arguments, env: [ + $arguments = array_merge([ + '--no-interaction', + static::locationsSut(), + ], $arguments); + + $this->cmd('php .vortex/installer/installer.php', arg: $arguments, env: [ // Force the installer script to be downloaded from the local repo for // testing. 'VORTEX_INSTALLER_TEMPLATE_REPO' => static::locationsRoot(), @@ -56,12 +61,10 @@ protected function runInstaller(array $arguments = []): void { // to set the CURL DB to test DB. // // Override demo database with test demo database. This is required to - // use - // test assertions ("star wars") with demo database. + // use test assertions ("star wars") with demo database. // // Installer will load environment variable and it will take precedence - // over - // the value in .env file. + // over the value in .env file. 'VORTEX_DB_DOWNLOAD_URL' => static::VORTEX_INSTALLER_DEMO_DB_TEST, // Use unique installer temporary directory for each run. This is where // the installer script downloads the Vortex codebase for processing. @@ -90,9 +93,9 @@ protected function adjustCodebaseForUnmountedVolumes(): void { if (File::exists('docker-compose.yml')) { $this->logSubstep('Fixing host dependencies in docker-compose.yml'); File::removeLine('docker-compose.yml', '###'); - $this->assertFileNotContainsString('###', 'docker-compose.yml', 'Lines with ### should be removed from docker-compose.yml'); + $this->assertFileNotContainsString('docker-compose.yml', '###', 'Lines with ### should be removed from docker-compose.yml'); File::replaceContentInFile('docker-compose.yml', '##', ''); - $this->assertFileNotContainsString('##', 'docker-compose.yml', 'Lines with ## should be removed from docker-compose.yml'); + $this->assertFileNotContainsString('docker-compose.yml', '##', 'Lines with ## should be removed from docker-compose.yml'); } if (file_exists('.ahoy.yml')) { @@ -104,8 +107,8 @@ protected function adjustCodebaseForUnmountedVolumes(): void { $this->logSubstep('Pre-processing .ahoy.yml to copy database file to container'); $this->assertFileContainsString( - 'ahoy cli ./scripts/vortex/provision.sh', '.ahoy.yml', + 'ahoy cli ./scripts/vortex/provision.sh', 'Initial Ahoy command to provision the container should exist in .ahoy.yml' ); diff --git a/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php index ca6ab001b..5452f776b 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php @@ -32,7 +32,7 @@ protected function stepTestBdd(): void { $this->syncToHost(); $this->logSubstep('Checking that BDD tests have created screenshots and test results'); - $this->assertDirectoryContainsString('html', '.logs/screenshots', message: 'Screenshots directory should not be empty after BDD tests'); + $this->assertDirectoryContainsString('.logs/screenshots', 'html', message: 'Screenshots directory should not be empty after BDD tests'); $this->assertFileExists('.logs/test_results/behat/default.xml', 'Behat test results XML file should exist'); $this->logSubstep('Cleaning up after the test'); diff --git a/.vortex/tests/phpunit/Traits/Steps/StepTestingTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepTestingTrait.php index 48781a40f..24fce5806 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepTestingTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepTestingTrait.php @@ -226,10 +226,10 @@ protected function stepAhoyTestBdd(string $webroot = 'web'): void { $this->logSubstep('Assert that screenshots and test results are created'); $this->assertFileExists('.logs/screenshots/behat-test-screenshot.html'); - $this->assertFileContainsString('Current URL: http://nginx:8080/', '.logs/screenshots/behat-test-screenshot.html'); - $this->assertFileContainsString('Feature: Behat configuration', '.logs/screenshots/behat-test-screenshot.html'); - $this->assertFileContainsString('Step: save screenshot with name', '.logs/screenshots/behat-test-screenshot.html'); - $this->assertFileContainsString('Datetime:', '.logs/screenshots/behat-test-screenshot.html'); + $this->assertFileContainsString('.logs/screenshots/behat-test-screenshot.html', 'Current URL: http://nginx:8080/'); + $this->assertFileContainsString('.logs/screenshots/behat-test-screenshot.html', 'Feature: Behat configuration'); + $this->assertFileContainsString('.logs/screenshots/behat-test-screenshot.html', 'Step: save screenshot with name'); + $this->assertFileContainsString('.logs/screenshots/behat-test-screenshot.html', 'Datetime:'); File::remove('.logs/screenshots'); $this->cmd('ahoy cli rm -rf /app/.logs/screenshots/*'); From 95a5f62e450401b3076a7ae1d2496ad85dc1d23d Mon Sep 17 00:00:00 2001 From: Alex Skrypnyk Date: Sun, 14 Sep 2025 08:52:19 +1000 Subject: [PATCH 2/8] Renamed trait. --- .vortex/tests/phpunit/Functional/FunctionalTestCase.php | 4 ++-- .../{AssertFilesTrait.php => AssertProjectFilesTrait.php} | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename .vortex/tests/phpunit/Traits/{AssertFilesTrait.php => AssertProjectFilesTrait.php} (99%) diff --git a/.vortex/tests/phpunit/Functional/FunctionalTestCase.php b/.vortex/tests/phpunit/Functional/FunctionalTestCase.php index 42f2ae9e1..d3fae6240 100644 --- a/.vortex/tests/phpunit/Functional/FunctionalTestCase.php +++ b/.vortex/tests/phpunit/Functional/FunctionalTestCase.php @@ -10,7 +10,7 @@ use AlexSkrypnyk\PhpunitHelpers\Traits\LocationsTrait; use AlexSkrypnyk\PhpunitHelpers\Traits\ProcessTrait; use AlexSkrypnyk\PhpunitHelpers\UnitTestCase; -use DrevOps\Vortex\Tests\Traits\AssertFilesTrait; +use DrevOps\Vortex\Tests\Traits\AssertProjectFilesTrait; use DrevOps\Vortex\Tests\Traits\GitTrait; use DrevOps\Vortex\Tests\Traits\LoggerTrait; use DrevOps\Vortex\Tests\Traits\Steps\StepBuildTrait; @@ -26,7 +26,7 @@ class FunctionalTestCase extends UnitTestCase { use AssertArrayTrait; - use AssertFilesTrait; + use AssertProjectFilesTrait; use EnvTrait; use GitTrait; use LocationsTrait; diff --git a/.vortex/tests/phpunit/Traits/AssertFilesTrait.php b/.vortex/tests/phpunit/Traits/AssertProjectFilesTrait.php similarity index 99% rename from .vortex/tests/phpunit/Traits/AssertFilesTrait.php rename to .vortex/tests/phpunit/Traits/AssertProjectFilesTrait.php index e6283643f..b76776062 100644 --- a/.vortex/tests/phpunit/Traits/AssertFilesTrait.php +++ b/.vortex/tests/phpunit/Traits/AssertProjectFilesTrait.php @@ -12,7 +12,7 @@ /** * Provides file and directory assertion methods. */ -trait AssertFilesTrait { +trait AssertProjectFilesTrait { use DirectoryAssertionsTrait; use FileAssertionsTrait; From 9649c8b521fb7f26a94397b7895c47cec02428b2 Mon Sep 17 00:00:00 2001 From: Alex Skrypnyk Date: Sun, 14 Sep 2025 09:35:03 +1000 Subject: [PATCH 3/8] Added path ignoring. --- .vortex/tests/composer.json | 2 +- .vortex/tests/composer.lock | 19 +++--- .../Traits/AssertProjectFilesTrait.php | 58 +++++++++++++------ .../phpunit/Traits/Steps/StepTestBddTrait.php | 2 - 4 files changed, 51 insertions(+), 30 deletions(-) diff --git a/.vortex/tests/composer.json b/.vortex/tests/composer.json index 5133bee2a..6ca303e82 100644 --- a/.vortex/tests/composer.json +++ b/.vortex/tests/composer.json @@ -12,7 +12,7 @@ "php": ">=8.2" }, "require-dev": { - "alexskrypnyk/file": "^0.10", + "alexskrypnyk/file": "dev-main", "alexskrypnyk/phpunit-helpers": "^0.10", "alexskrypnyk/shellvar": "^1.2", "czproject/git-php": "^4.4", diff --git a/.vortex/tests/composer.lock b/.vortex/tests/composer.lock index a86f910db..6be38a743 100644 --- a/.vortex/tests/composer.lock +++ b/.vortex/tests/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": "e21080373c436f4663c6fd41ddcf60a0", + "content-hash": "b736365dd6117fe7ba39b7e9f598e7f1", "packages": [], "packages-dev": [ { @@ -65,16 +65,16 @@ }, { "name": "alexskrypnyk/file", - "version": "0.10.0", + "version": "dev-main", "source": { "type": "git", "url": "https://github.com/AlexSkrypnyk/file.git", - "reference": "fc98183bb62bf115c581754ff52a6708979bc6cf" + "reference": "3719d79a6ea64a76f8856bc2ff9d2029a4a3d895" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AlexSkrypnyk/file/zipball/fc98183bb62bf115c581754ff52a6708979bc6cf", - "reference": "fc98183bb62bf115c581754ff52a6708979bc6cf", + "url": "https://api.github.com/repos/AlexSkrypnyk/file/zipball/3719d79a6ea64a76f8856bc2ff9d2029a4a3d895", + "reference": "3719d79a6ea64a76f8856bc2ff9d2029a4a3d895", "shasum": "" }, "require": { @@ -82,7 +82,7 @@ "symfony/filesystem": "^7.2" }, "require-dev": { - "alexskrypnyk/phpunit-helpers": "^0.9.0", + "alexskrypnyk/phpunit-helpers": "^0.10.0", "dealerdirect/phpcodesniffer-composer-installer": "^1", "drupal/coder": "^8.3", "ergebnis/composer-normalize": "^2.42", @@ -90,6 +90,7 @@ "phpunit/phpunit": "^11", "rector/rector": "^2" }, + "default-branch": true, "type": "library", "autoload": { "files": [ @@ -127,7 +128,7 @@ "type": "patreon" } ], - "time": "2025-09-13T01:01:21+00:00" + "time": "2025-09-14T00:12:13+00:00" }, { "name": "alexskrypnyk/phpunit-helpers", @@ -4163,7 +4164,9 @@ ], "aliases": [], "minimum-stability": "alpha", - "stability-flags": {}, + "stability-flags": { + "alexskrypnyk/file": 20 + }, "prefer-stable": true, "prefer-lowest": false, "platform": { diff --git a/.vortex/tests/phpunit/Traits/AssertProjectFilesTrait.php b/.vortex/tests/phpunit/Traits/AssertProjectFilesTrait.php index b76776062..f556721be 100644 --- a/.vortex/tests/phpunit/Traits/AssertProjectFilesTrait.php +++ b/.vortex/tests/phpunit/Traits/AssertProjectFilesTrait.php @@ -276,22 +276,6 @@ protected function assertDrupalFilesPresent(string $webroot = 'web'): void { // Assert all stub strings were replaced - these should not exist in any // files. - $exclude = [ - '.png', - '.jpg', - '.jpeg', - '.gif', - '.svg', - '.ico', - '.webp', - '.tiff', - '.tif', - '.bmp', - 'themes.README.txt', - 'modules.README.txt', - 'themes/README.txt', - 'modules/README.txt', - ]; $this->assertDirectoryNotContainsString('.', 'your_site'); $this->assertDirectoryNotContainsString('.', 'ys_base'); $this->assertDirectoryNotContainsString('.', 'YOURSITE'); @@ -301,9 +285,9 @@ protected function assertDrupalFilesPresent(string $webroot = 'web'): void { $this->assertDirectoryNotContainsString('.', 'YOURORG'); $this->assertDirectoryNotContainsString('.', 'www.your-site-domain.example'); // Assert all special comments were removed. - $this->assertDirectoryNotContainsString('.', '#;', $exclude); - $this->assertDirectoryNotContainsString('.', '#;<', $exclude); - $this->assertDirectoryNotContainsString('.', '#;>', $exclude); + $this->assertDirectoryNotContainsString('.', '#;'); + $this->assertDirectoryNotContainsString('.', '#;<'); + $this->assertDirectoryNotContainsString('.', '#;>'); } public function assertFilesTrackedInGit(string $webroot = 'web', bool $skip_commit = FALSE): void { @@ -357,4 +341,40 @@ protected function removeLocalDrupalSettings(string $webroot = 'web'): void { ]); } + /** + * {@inheritdoc} + */ + public function ignoredPaths(): array { + return [ + '.7z', + '.avif', + '.bz2', + '.gz', + '.heic', + '.heif', + '.pdf', + '.rar', + '.tar', + '.woff', + '.woff2', + '.xz', + '.zip', + '.bmp', + '.gif', + '.ico', + '.jpeg', + '.jpg', + '.png', + '.svg', + '.svgz', + '.tif', + '.tiff', + '.webp', + 'modules.README.txt', + 'modules/README.txt', + 'themes.README.txt', + 'themes/README.txt', + ]; + } + } diff --git a/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php index 5452f776b..78bedb0fc 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php @@ -5,7 +5,6 @@ namespace DrevOps\Vortex\Tests\Traits\Steps; use AlexSkrypnyk\File\File; -use AlexSkrypnyk\File\Tests\Traits\DirectoryAssertionsTrait; use DrevOps\Vortex\Tests\Traits\LoggerTrait; /** @@ -14,7 +13,6 @@ trait StepTestBddTrait { use LoggerTrait; - use DirectoryAssertionsTrait; protected function stepTestBdd(): void { $this->logStepStart(); From f2cb62d5a7309c62e046d90afcbb1b89da7b0db4 Mon Sep 17 00:00:00 2001 From: Alex Skrypnyk Date: Sun, 14 Sep 2025 10:53:21 +1000 Subject: [PATCH 4/8] Added assertion messages for some traits. --- .../Traits/Steps/StepEnvironmentTrait.php | 47 ++++++++----------- .../Traits/Steps/StepFrontendTrait.php | 8 +--- 2 files changed, 21 insertions(+), 34 deletions(-) diff --git a/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php index cc9a6557e..ee3f99002 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php @@ -29,14 +29,11 @@ protected function stepGitignore(): void { protected function stepEnvChanges(): void { $this->logStepStart(); - // Assert that .env does not contain test values. - $this->assertFileNotContainsString('.env', 'MY_CUSTOM_VAR'); - $this->assertFileNotContainsString('.env', 'my_custom_var_value'); + $this->assertFileNotContainsString('.env', 'MY_CUSTOM_VAR', '.env does not contain test values'); + $this->assertFileNotContainsString('.env', 'my_custom_var_value', '.env does not contain test values'); - // Assert that test variable is not available inside of containers. $this->cmdFail('ahoy cli "printenv | grep -q MY_CUSTOM_VAR"'); - // Assert that test value is not available inside of containers. $this->cmdFail('ahoy cli \'echo $MY_CUSTOM_VAR | grep -q my_custom_var_value\'', '! my_custom_var_value'); // Add variable to the .env file and apply the change to container. @@ -44,15 +41,10 @@ protected function stepEnvChanges(): void { $this->cmd('ahoy up cli'); $this->syncToContainer(); - // Assert that .env contains test values. - $this->assertFileContainsString('.env', 'MY_CUSTOM_VAR'); - $this->assertFileContainsString('.env', 'my_custom_var_value'); - - // Assert that test variable and values are available inside of containers. - $this->cmd('ahoy cli "printenv | grep MY_CUSTOM_VAR"', 'my_custom_var_value'); - - // Assert that test variable and value are available inside of containers. - $this->cmd('ahoy cli \'echo $MY_CUSTOM_VAR | grep my_custom_var_value\'', 'my_custom_var_value'); + $this->assertFileContainsString('.env', 'MY_CUSTOM_VAR', '.env contains test values'); + $this->assertFileContainsString('.env', 'my_custom_var_value', '.env contains test values'); + $this->cmd('ahoy cli "printenv | grep MY_CUSTOM_VAR"', 'my_custom_var_value', 'Assert that test variable and values are available inside of containers.'); + $this->cmd('ahoy cli \'echo $MY_CUSTOM_VAR | grep my_custom_var_value\'', 'my_custom_var_value', 'Assert that test variable and values are available inside of containers.'); // Restore file, apply changes and assert that original behaviour has been // restored. @@ -71,26 +63,25 @@ protected function stepEnvChanges(): void { protected function stepTimezone(): void { $this->logStepStart(); - // Assert that .env contains a default value. - // Note that AEDT changes to AEST during winter. - $this->assertFileContainsString('.env', 'TZ=UTC'); - $this->cmd('docker compose exec -T cli date', 'UTC'); - $this->cmd('docker compose exec -T php date', 'UTC'); - $this->cmd('docker compose exec -T nginx date', 'UTC'); - $this->cmd('docker compose exec -T database date', 'UTC'); + $this->logSubstep('Assert default timezone values.'); + $this->assertFileContainsString('.env', 'TZ=UTC', '.env contains a default value.'); + $this->cmd('docker compose exec -T cli date', 'UTC', 'Date is in default timezone inside CLI container by default'); + $this->cmd('docker compose exec -T php date', 'UTC', 'Date is in default timezone inside PHP container by default'); + $this->cmd('docker compose exec -T nginx date', 'UTC', 'Date is in default timezone inside Nginx container by default'); + $this->cmd('docker compose exec -T database date', 'UTC', 'Date is in default timezone inside Database container by default'); - // Add variable to the .env file and apply the change to container. + $this->logSubstep('Add variable to the .env file and apply the change to container.'); $this->addVarToFile('.env', 'TZ', '"Australia/Perth"'); $this->syncToContainer(); $this->cmd('ahoy up'); - $this->cmd('docker compose exec -T cli date', 'AWST'); - $this->cmd('docker compose exec -T php date', 'AWST'); - $this->cmd('docker compose exec -T nginx date', 'AWST'); - $this->cmd('docker compose exec -T database date', 'AWST'); + $this->logSubstep('Assert custom timezone values.'); + $this->cmd('docker compose exec -T cli date', 'AWST', 'Date is in custom timezone inside CLI container'); + $this->cmd('docker compose exec -T php date', 'AWST', 'Date is in custom timezone inside PHP container'); + $this->cmd('docker compose exec -T nginx date', 'AWST', 'Date is in custom timezone inside Nginx container'); + $this->cmd('docker compose exec -T database date', 'AWST', 'Date is in custom timezone inside Database container'); - // Restore file, apply changes and assert that original behaviour has been - // restored. + $this->logSubstep('Restore file, apply changes and assert that original behaviour has been restored.'); $this->restoreFile('.env'); $this->syncToContainer(); $this->cmd('ahoy up'); diff --git a/.vortex/tests/phpunit/Traits/Steps/StepFrontendTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepFrontendTrait.php index 88b98a634..291b53c72 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepFrontendTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepFrontendTrait.php @@ -50,9 +50,7 @@ protected function stepAhoyFe(string $webroot = 'web'): void { $this->syncToContainer(); $this->cmd('ahoy fe'); $this->syncToHost(); - // Assets compiled for production are minified (no spaces between - // properties and their values). - $this->assertFileContainsString($minified_file, 'background:' . $test_color1); + $this->assertFileContainsString($minified_file, 'background:' . $test_color1, 'Assets compiled for production are minified (no spaces between properties and their values)'); $this->logSubstep('Build FE assets for development'); @@ -65,9 +63,7 @@ protected function stepAhoyFe(string $webroot = 'web'): void { $this->syncToContainer(); $this->cmd('ahoy fed'); $this->syncToHost(); - // Note that assets compiled for development are not minified (contains - // spaces between properties and their values). - $this->assertFileContainsString($minified_file, 'background: ' . $test_color2); + $this->assertFileContainsString($minified_file, 'background: ' . $test_color2, 'Assets compiled for development are not minified (contains spaces between properties and their values)'); $this->logStepFinish(); } From 48b6ff7b3a9ce1377dc1b8bb3726fa1722ddd152 Mon Sep 17 00:00:00 2001 From: Alex Skrypnyk Date: Sun, 14 Sep 2025 11:01:34 +1000 Subject: [PATCH 5/8] Removed `LoggerTrait`. --- .../phpunit/Functional/FunctionalTestCase.php | 2 +- .vortex/tests/phpunit/Traits/LoggerTrait.php | 16 ---------------- .../tests/phpunit/Traits/Steps/StepAhoyTrait.php | 4 ---- .../phpunit/Traits/Steps/StepBuildTrait.php | 4 ---- .../phpunit/Traits/Steps/StepDatabaseTrait.php | 3 --- .../Traits/Steps/StepEnvironmentTrait.php | 3 --- .../phpunit/Traits/Steps/StepFrontendTrait.php | 3 --- .../phpunit/Traits/Steps/StepPrepareSutTrait.php | 3 +-- .../phpunit/Traits/Steps/StepServicesTrait.php | 4 ---- .../phpunit/Traits/Steps/StepTestBddTrait.php | 3 --- .../phpunit/Traits/Steps/StepTestingTrait.php | 3 --- 11 files changed, 2 insertions(+), 46 deletions(-) delete mode 100644 .vortex/tests/phpunit/Traits/LoggerTrait.php diff --git a/.vortex/tests/phpunit/Functional/FunctionalTestCase.php b/.vortex/tests/phpunit/Functional/FunctionalTestCase.php index d3fae6240..3d60d9f82 100644 --- a/.vortex/tests/phpunit/Functional/FunctionalTestCase.php +++ b/.vortex/tests/phpunit/Functional/FunctionalTestCase.php @@ -12,7 +12,7 @@ use AlexSkrypnyk\PhpunitHelpers\UnitTestCase; use DrevOps\Vortex\Tests\Traits\AssertProjectFilesTrait; use DrevOps\Vortex\Tests\Traits\GitTrait; -use DrevOps\Vortex\Tests\Traits\LoggerTrait; +use AlexSkrypnyk\PhpunitHelpers\Traits\LoggerTrait; use DrevOps\Vortex\Tests\Traits\Steps\StepBuildTrait; use DrevOps\Vortex\Tests\Traits\Steps\StepDownloadDbTrait; use DrevOps\Vortex\Tests\Traits\Steps\StepPrepareSutTrait; diff --git a/.vortex/tests/phpunit/Traits/LoggerTrait.php b/.vortex/tests/phpunit/Traits/LoggerTrait.php deleted file mode 100644 index 6cbd2759f..000000000 --- a/.vortex/tests/phpunit/Traits/LoggerTrait.php +++ /dev/null @@ -1,16 +0,0 @@ -logStepStart(); diff --git a/.vortex/tests/phpunit/Traits/Steps/StepBuildTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepBuildTrait.php index f1628f107..10b320084 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepBuildTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepBuildTrait.php @@ -4,15 +4,11 @@ namespace DrevOps\Vortex\Tests\Traits\Steps; -use DrevOps\Vortex\Tests\Traits\LoggerTrait; - /** * Provides build step. */ trait StepBuildTrait { - use LoggerTrait; - protected function stepBuild(string $webroot = 'web', array $env = []): void { $this->logStepStart(); diff --git a/.vortex/tests/phpunit/Traits/Steps/StepDatabaseTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepDatabaseTrait.php index 8ab5e2032..4f15f1faa 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepDatabaseTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepDatabaseTrait.php @@ -5,15 +5,12 @@ namespace DrevOps\Vortex\Tests\Traits\Steps; use AlexSkrypnyk\File\File; -use DrevOps\Vortex\Tests\Traits\LoggerTrait; /** * Provides database operation testing steps. */ trait StepDatabaseTrait { - use LoggerTrait; - protected function stepAhoyExportDb(string $filename = ''): void { $this->logStepStart(); diff --git a/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php index ee3f99002..27b1fec6d 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php @@ -5,15 +5,12 @@ namespace DrevOps\Vortex\Tests\Traits\Steps; use AlexSkrypnyk\File\File; -use DrevOps\Vortex\Tests\Traits\LoggerTrait; /** * Provides environment and configuration testing steps. */ trait StepEnvironmentTrait { - use LoggerTrait; - protected function stepGitignore(): void { $this->logStepStart(); diff --git a/.vortex/tests/phpunit/Traits/Steps/StepFrontendTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepFrontendTrait.php index 291b53c72..326ec7dc2 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepFrontendTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepFrontendTrait.php @@ -5,15 +5,12 @@ namespace DrevOps\Vortex\Tests\Traits\Steps; use AlexSkrypnyk\File\File; -use DrevOps\Vortex\Tests\Traits\LoggerTrait; /** * Provides frontend development testing steps. */ trait StepFrontendTrait { - use LoggerTrait; - protected function stepAhoyFei(string $webroot = 'web'): void { $this->logStepStart(); diff --git a/.vortex/tests/phpunit/Traits/Steps/StepPrepareSutTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepPrepareSutTrait.php index 9bf5a1289..3e31587e5 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepPrepareSutTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepPrepareSutTrait.php @@ -5,14 +5,13 @@ namespace DrevOps\Vortex\Tests\Traits\Steps; use AlexSkrypnyk\File\File; -use DrevOps\Vortex\Tests\Traits\LoggerTrait; /** * Provides system under test preparation step. */ trait StepPrepareSutTrait { - use LoggerTrait; + use StepDownloadDbTrait; protected function stepPrepareSut(): void { diff --git a/.vortex/tests/phpunit/Traits/Steps/StepServicesTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepServicesTrait.php index 7e4b3ba05..3f011e2ad 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepServicesTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepServicesTrait.php @@ -4,15 +4,11 @@ namespace DrevOps\Vortex\Tests\Traits\Steps; -use DrevOps\Vortex\Tests\Traits\LoggerTrait; - /** * Provides service testing steps (Solr, Redis). */ trait StepServicesTrait { - use LoggerTrait; - protected function stepSolr(): void { $this->logStepStart(); diff --git a/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php index 78bedb0fc..36e446c79 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php @@ -5,15 +5,12 @@ namespace DrevOps\Vortex\Tests\Traits\Steps; use AlexSkrypnyk\File\File; -use DrevOps\Vortex\Tests\Traits\LoggerTrait; /** * Provides BDD testing step. */ trait StepTestBddTrait { - use LoggerTrait; - protected function stepTestBdd(): void { $this->logStepStart(); diff --git a/.vortex/tests/phpunit/Traits/Steps/StepTestingTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepTestingTrait.php index 24fce5806..a4b13f2d8 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepTestingTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepTestingTrait.php @@ -5,15 +5,12 @@ namespace DrevOps\Vortex\Tests\Traits\Steps; use AlexSkrypnyk\File\File; -use DrevOps\Vortex\Tests\Traits\LoggerTrait; /** * Provides testing operation steps (lint, test). */ trait StepTestingTrait { - use LoggerTrait; - protected function stepAhoyLint(string $webroot = 'web'): void { $this->logStepStart(); From de7810f0e1db70b1ffef482d227c30a78b8d6e33 Mon Sep 17 00:00:00 2001 From: Alex Skrypnyk Date: Sun, 14 Sep 2025 11:23:00 +1000 Subject: [PATCH 6/8] Removed duplicated BDD tests. --- .vortex/installer/composer.json | 2 +- .vortex/installer/composer.lock | 30 ++--- .vortex/tests/composer.json | 2 +- .vortex/tests/composer.lock | 9 +- .../phpunit/Functional/FunctionalTestCase.php | 86 ++++++++++++-- .../Functional/WorkflowInstallDbTest.php | 6 +- .../tests/phpunit/Functional/WorkflowTest.php | 6 +- .../Traits/Steps/StepDatabaseTrait.php | 16 +++ .../Traits/Steps/StepDownloadDbTrait.php | 38 ------ .../Traits/Steps/StepEnvironmentTrait.php | 51 -------- .../phpunit/Traits/Steps/StepLintTrait.php | 91 ++++++++++++++ .../Traits/Steps/StepPrepareSutTrait.php | 3 - .../Traits/Steps/StepTestBddAllTrait.php | 21 ---- .../phpunit/Traits/Steps/StepTestBddTrait.php | 47 -------- ...StepTestingTrait.php => StepTestTrait.php} | 111 +++--------------- 15 files changed, 227 insertions(+), 292 deletions(-) delete mode 100644 .vortex/tests/phpunit/Traits/Steps/StepDownloadDbTrait.php create mode 100644 .vortex/tests/phpunit/Traits/Steps/StepLintTrait.php delete mode 100644 .vortex/tests/phpunit/Traits/Steps/StepTestBddAllTrait.php delete mode 100644 .vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php rename .vortex/tests/phpunit/Traits/Steps/{StepTestingTrait.php => StepTestTrait.php} (64%) diff --git a/.vortex/installer/composer.json b/.vortex/installer/composer.json index 1ab856294..f2c600cbd 100644 --- a/.vortex/installer/composer.json +++ b/.vortex/installer/composer.json @@ -18,7 +18,7 @@ }, "require": { "php": ">=8.2", - "alexskrypnyk/file": "^0.10", + "alexskrypnyk/file": "^0.11", "alexskrypnyk/str2name": "^1.4", "composer/composer": "^2.8", "cweagans/composer-patches": "^1.7", diff --git a/.vortex/installer/composer.lock b/.vortex/installer/composer.lock index 43de3bd45..79183845e 100644 --- a/.vortex/installer/composer.lock +++ b/.vortex/installer/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8fd1201532508729eef60d24db5e6201", + "content-hash": "3cb225b1e6a0e40a218f12441448b002", "packages": [ { "name": "alexskrypnyk/file", - "version": "0.10.0", + "version": "0.11.0", "source": { "type": "git", "url": "https://github.com/AlexSkrypnyk/file.git", - "reference": "fc98183bb62bf115c581754ff52a6708979bc6cf" + "reference": "3719d79a6ea64a76f8856bc2ff9d2029a4a3d895" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AlexSkrypnyk/file/zipball/fc98183bb62bf115c581754ff52a6708979bc6cf", - "reference": "fc98183bb62bf115c581754ff52a6708979bc6cf", + "url": "https://api.github.com/repos/AlexSkrypnyk/file/zipball/3719d79a6ea64a76f8856bc2ff9d2029a4a3d895", + "reference": "3719d79a6ea64a76f8856bc2ff9d2029a4a3d895", "shasum": "" }, "require": { @@ -25,7 +25,7 @@ "symfony/filesystem": "^7.2" }, "require-dev": { - "alexskrypnyk/phpunit-helpers": "^0.9.0", + "alexskrypnyk/phpunit-helpers": "^0.10.0", "dealerdirect/phpcodesniffer-composer-installer": "^1", "drupal/coder": "^8.3", "ergebnis/composer-normalize": "^2.42", @@ -70,7 +70,7 @@ "type": "patreon" } ], - "time": "2025-09-13T01:01:21+00:00" + "time": "2025-09-14T00:12:13+00:00" }, { "name": "alexskrypnyk/str2name", @@ -5533,16 +5533,16 @@ }, { "name": "slevomat/coding-standard", - "version": "8.22.0", + "version": "8.22.1", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "a4cef983bad2e70125612d22b2f6e2bd1333d5c2" + "reference": "1dd80bf3b93692bedb21a6623c496887fad05fec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/a4cef983bad2e70125612d22b2f6e2bd1333d5c2", - "reference": "a4cef983bad2e70125612d22b2f6e2bd1333d5c2", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/1dd80bf3b93692bedb21a6623c496887fad05fec", + "reference": "1dd80bf3b93692bedb21a6623c496887fad05fec", "shasum": "" }, "require": { @@ -5554,11 +5554,11 @@ "require-dev": { "phing/phing": "3.0.1|3.1.0", "php-parallel-lint/php-parallel-lint": "1.4.0", - "phpstan/phpstan": "2.1.22", + "phpstan/phpstan": "2.1.24", "phpstan/phpstan-deprecation-rules": "2.0.3", "phpstan/phpstan-phpunit": "2.0.7", "phpstan/phpstan-strict-rules": "2.0.6", - "phpunit/phpunit": "9.6.8|10.5.48|11.4.4|11.5.36|12.3.8" + "phpunit/phpunit": "9.6.8|10.5.48|11.4.4|11.5.36|12.3.10" }, "type": "phpcodesniffer-standard", "extra": { @@ -5582,7 +5582,7 @@ ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.22.0" + "source": "https://github.com/slevomat/coding-standard/tree/8.22.1" }, "funding": [ { @@ -5594,7 +5594,7 @@ "type": "tidelift" } ], - "time": "2025-09-06T09:14:48+00:00" + "time": "2025-09-13T08:53:30+00:00" }, { "name": "squizlabs/php_codesniffer", diff --git a/.vortex/tests/composer.json b/.vortex/tests/composer.json index 6ca303e82..93fedc260 100644 --- a/.vortex/tests/composer.json +++ b/.vortex/tests/composer.json @@ -12,7 +12,7 @@ "php": ">=8.2" }, "require-dev": { - "alexskrypnyk/file": "dev-main", + "alexskrypnyk/file": "^0.11.0", "alexskrypnyk/phpunit-helpers": "^0.10", "alexskrypnyk/shellvar": "^1.2", "czproject/git-php": "^4.4", diff --git a/.vortex/tests/composer.lock b/.vortex/tests/composer.lock index 6be38a743..65ea1fd10 100644 --- a/.vortex/tests/composer.lock +++ b/.vortex/tests/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": "b736365dd6117fe7ba39b7e9f598e7f1", + "content-hash": "cc22670886a902fdcd8911f876bbab23", "packages": [], "packages-dev": [ { @@ -65,7 +65,7 @@ }, { "name": "alexskrypnyk/file", - "version": "dev-main", + "version": "0.11.0", "source": { "type": "git", "url": "https://github.com/AlexSkrypnyk/file.git", @@ -90,7 +90,6 @@ "phpunit/phpunit": "^11", "rector/rector": "^2" }, - "default-branch": true, "type": "library", "autoload": { "files": [ @@ -4164,9 +4163,7 @@ ], "aliases": [], "minimum-stability": "alpha", - "stability-flags": { - "alexskrypnyk/file": 20 - }, + "stability-flags": {}, "prefer-stable": true, "prefer-lowest": false, "platform": { diff --git a/.vortex/tests/phpunit/Functional/FunctionalTestCase.php b/.vortex/tests/phpunit/Functional/FunctionalTestCase.php index 3d60d9f82..e1c7c6654 100644 --- a/.vortex/tests/phpunit/Functional/FunctionalTestCase.php +++ b/.vortex/tests/phpunit/Functional/FunctionalTestCase.php @@ -8,16 +8,15 @@ use AlexSkrypnyk\PhpunitHelpers\Traits\AssertArrayTrait; use AlexSkrypnyk\PhpunitHelpers\Traits\EnvTrait; use AlexSkrypnyk\PhpunitHelpers\Traits\LocationsTrait; +use AlexSkrypnyk\PhpunitHelpers\Traits\LoggerTrait; use AlexSkrypnyk\PhpunitHelpers\Traits\ProcessTrait; use AlexSkrypnyk\PhpunitHelpers\UnitTestCase; use DrevOps\Vortex\Tests\Traits\AssertProjectFilesTrait; use DrevOps\Vortex\Tests\Traits\GitTrait; -use AlexSkrypnyk\PhpunitHelpers\Traits\LoggerTrait; use DrevOps\Vortex\Tests\Traits\Steps\StepBuildTrait; -use DrevOps\Vortex\Tests\Traits\Steps\StepDownloadDbTrait; +use DrevOps\Vortex\Tests\Traits\Steps\StepDatabaseTrait; use DrevOps\Vortex\Tests\Traits\Steps\StepPrepareSutTrait; -use DrevOps\Vortex\Tests\Traits\Steps\StepTestBddAllTrait; -use DrevOps\Vortex\Tests\Traits\Steps\StepTestBddTrait; +use DrevOps\Vortex\Tests\Traits\Steps\StepTestTrait; use Symfony\Component\Process\Process; /** @@ -25,6 +24,14 @@ */ class FunctionalTestCase extends UnitTestCase { + /** + * URL to the test demo database. + * + * Tests use demo database and 'ahoy download-db' command, so we need + * to set the CURL DB to test DB. + */ + const VORTEX_INSTALLER_DEMO_DB_TEST = 'https://github.com/drevops/vortex/releases/download/25.4.0/db_d11_2.test.sql'; + use AssertArrayTrait; use AssertProjectFilesTrait; use EnvTrait; @@ -35,10 +42,9 @@ class FunctionalTestCase extends UnitTestCase { ProcessTrait::processRun as traitProcessRun; } use StepBuildTrait; - use StepDownloadDbTrait; use StepPrepareSutTrait; - use StepTestBddAllTrait; - use StepTestBddTrait; + use StepTestTrait; + use StepDatabaseTrait; protected function setUp(): void { self::locationsInit(File::cwd() . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..'); @@ -165,4 +171,70 @@ public function volumesMounted(): bool { return getenv('VORTEX_DEV_VOLUMES_SKIP_MOUNT') != 1; } + protected function trimFile(string $file): void { + $content = File::read($file); + $lines = explode("\n", $content); + // Remove last line. + array_pop($lines); + File::dump($file, implode("\n", $lines)); + } + + protected function stepWarmCaches(): void { + $this->logSubstep('Warming up caches'); + $this->cmd('ahoy drush cr'); + $this->cmd('ahoy cli curl -- -sSL -o /dev/null -w "%{http_code}" http://nginx:8080 | grep -q 200'); + } + + protected function addVarToFile(string $file, string $var, string $value): void { + // Backup original file first. + $this->backupFile($file); + $content = File::read($file); + $content .= sprintf('%s%s=%s%s', PHP_EOL, $var, $value, PHP_EOL); + File::dump($file, $content); + } + + protected function backupFile(string $file): void { + $backup_dir = '/tmp/bkp'; + if (!is_dir($backup_dir)) { + mkdir($backup_dir, 0755, TRUE); + } + File::copy($file, $backup_dir . '/' . basename($file)); + } + + protected function restoreFile(string $file): void { + $backup_file = '/tmp/bkp/' . basename($file); + if (file_exists($backup_file)) { + File::copy($backup_file, $file); + } + } + + protected function createDevelopmentSettings(string $webroot = 'web'): void { + File::copy($webroot . '/sites/default/example.settings.local.php', $webroot . '/sites/default/settings.local.php'); + // Assert manually created local settings file exists. + $this->assertFileExists($webroot . '/sites/default/settings.local.php'); + + File::copy($webroot . '/sites/default/example.services.local.yml', $webroot . '/sites/default/services.local.yml'); + // Assert manually created local services file exists. + $this->assertFileExists($webroot . '/sites/default/services.local.yml'); + } + + protected function removeDevelopmentSettings(string $webroot = 'web'): void { + File::remove([ + $webroot . '/sites/default/settings.local.php', + $webroot . '/sites/default/services.local.yml', + ]); + $this->assertFileDoesNotExist($webroot . '/sites/default/settings.local.php'); + $this->assertFileDoesNotExist($webroot . '/sites/default/services.local.yml'); + } + + protected function assertFilesPresent(string $webroot): void { + // Use existing method from base class with correct signature. + $this->assertCommonFilesPresent($webroot); + } + + protected function assertGitRepo(): void { + // @todp Use gitAssertIsRepository(). + $this->assertDirectoryExists('.git'); + } + } diff --git a/.vortex/tests/phpunit/Functional/WorkflowInstallDbTest.php b/.vortex/tests/phpunit/Functional/WorkflowInstallDbTest.php index 169393417..e46dfddac 100644 --- a/.vortex/tests/phpunit/Functional/WorkflowInstallDbTest.php +++ b/.vortex/tests/phpunit/Functional/WorkflowInstallDbTest.php @@ -9,7 +9,8 @@ use DrevOps\Vortex\Tests\Traits\Steps\StepEnvironmentTrait; use DrevOps\Vortex\Tests\Traits\Steps\StepFrontendTrait; use DrevOps\Vortex\Tests\Traits\Steps\StepServicesTrait; -use DrevOps\Vortex\Tests\Traits\Steps\StepTestingTrait; +use DrevOps\Vortex\Tests\Traits\Steps\StepTestTrait; +use DrevOps\Vortex\Tests\Traits\Steps\StepLintTrait; /** * Tests DB-driven workflow. @@ -20,8 +21,9 @@ class WorkflowInstallDbTest extends FunctionalTestCase { use StepDatabaseTrait; use StepEnvironmentTrait; use StepFrontendTrait; + use StepLintTrait; use StepServicesTrait; - use StepTestingTrait; + use StepTestTrait; protected function setUp(): void { parent::setUp(); diff --git a/.vortex/tests/phpunit/Functional/WorkflowTest.php b/.vortex/tests/phpunit/Functional/WorkflowTest.php index 40e2ded14..2b86d4b05 100644 --- a/.vortex/tests/phpunit/Functional/WorkflowTest.php +++ b/.vortex/tests/phpunit/Functional/WorkflowTest.php @@ -34,14 +34,14 @@ public function testIdempotence(): void { $this->stepBuild(); $this->assertFilesTrackedInGit(); - $this->stepTestBdd(); + $this->stepAhoyTestBddFast(); $this->logSubstep('Re-build project to check that the results are identical.'); $this->stepBuild(); $this->assertFilesTrackedInGit(skip_commit: TRUE); $this->logSubstep('Run BDD tests again on re-built project'); - $this->stepTestBdd(); + $this->stepAhoyTestBddFast(); } /** @@ -101,7 +101,7 @@ public function testDockerComposeNoAhoy(): void { $this->assertFilesTrackedInGit(); - $this->stepTestBdd(); + $this->stepAhoyTestBdd(); } } diff --git a/.vortex/tests/phpunit/Traits/Steps/StepDatabaseTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepDatabaseTrait.php index 4f15f1faa..6fcc05459 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepDatabaseTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepDatabaseTrait.php @@ -11,6 +11,22 @@ */ trait StepDatabaseTrait { + protected function stepDownloadDb(): void { + $this->logStepStart(); + + File::remove('.data/db.sql'); + $this->assertFileDoesNotExist('.data/db.sql', 'File .data/db.sql should not exist before downloading the database.'); + + $this->logSubstep('Downloading demo database from ' . static::VORTEX_INSTALLER_DEMO_DB_TEST); + $this->cmd('ahoy download-db', env: [ + 'VORTEX_DB_DOWNLOAD_URL' => static::VORTEX_INSTALLER_DEMO_DB_TEST, + ]); + + $this->assertFileExists('.data/db.sql', 'File .data/db.sql should exist after downloading the database.'); + + $this->logStepFinish(); + } + protected function stepAhoyExportDb(string $filename = ''): void { $this->logStepStart(); diff --git a/.vortex/tests/phpunit/Traits/Steps/StepDownloadDbTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepDownloadDbTrait.php deleted file mode 100644 index 253491e3e..000000000 --- a/.vortex/tests/phpunit/Traits/Steps/StepDownloadDbTrait.php +++ /dev/null @@ -1,38 +0,0 @@ -logStepStart(); - - File::remove('.data/db.sql'); - $this->assertFileDoesNotExist('.data/db.sql', 'File .data/db.sql should not exist before downloading the database.'); - - $this->logSubstep('Downloading demo database from ' . static::VORTEX_INSTALLER_DEMO_DB_TEST); - $this->cmd('ahoy download-db', env: [ - 'VORTEX_DB_DOWNLOAD_URL' => static::VORTEX_INSTALLER_DEMO_DB_TEST, - ]); - - $this->assertFileExists('.data/db.sql', 'File .data/db.sql should exist after downloading the database.'); - - $this->logStepFinish(); - } - -} diff --git a/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php index 27b1fec6d..317726251 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepEnvironmentTrait.php @@ -202,55 +202,4 @@ protected function stepAhoyResetHard(string $webroot = 'web'): void { $this->logStepFinish(); } - protected function addVarToFile(string $file, string $var, string $value): void { - // Backup original file first. - $this->backupFile($file); - $content = File::read($file); - $content .= sprintf('%s%s=%s%s', PHP_EOL, $var, $value, PHP_EOL); - File::dump($file, $content); - } - - protected function backupFile(string $file): void { - $backup_dir = '/tmp/bkp'; - if (!is_dir($backup_dir)) { - mkdir($backup_dir, 0755, TRUE); - } - File::copy($file, $backup_dir . '/' . basename($file)); - } - - protected function restoreFile(string $file): void { - $backup_file = '/tmp/bkp/' . basename($file); - if (file_exists($backup_file)) { - File::copy($backup_file, $file); - } - } - - protected function createDevelopmentSettings(string $webroot = 'web'): void { - File::copy($webroot . '/sites/default/example.settings.local.php', $webroot . '/sites/default/settings.local.php'); - // Assert manually created local settings file exists. - $this->assertFileExists($webroot . '/sites/default/settings.local.php'); - - File::copy($webroot . '/sites/default/example.services.local.yml', $webroot . '/sites/default/services.local.yml'); - // Assert manually created local services file exists. - $this->assertFileExists($webroot . '/sites/default/services.local.yml'); - } - - protected function removeDevelopmentSettings(string $webroot = 'web'): void { - File::remove([ - $webroot . '/sites/default/settings.local.php', - $webroot . '/sites/default/services.local.yml', - ]); - $this->assertFileDoesNotExist($webroot . '/sites/default/settings.local.php'); - $this->assertFileDoesNotExist($webroot . '/sites/default/services.local.yml'); - } - - protected function assertFilesPresent(string $webroot): void { - // Use existing method from base class with correct signature. - $this->assertCommonFilesPresent($webroot); - } - - protected function assertGitRepo(): void { - $this->assertDirectoryExists('.git'); - } - } diff --git a/.vortex/tests/phpunit/Traits/Steps/StepLintTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepLintTrait.php new file mode 100644 index 000000000..ef3740cbf --- /dev/null +++ b/.vortex/tests/phpunit/Traits/Steps/StepLintTrait.php @@ -0,0 +1,91 @@ +logStepStart(); + + $this->logSubstep('Assert that lint works'); + $this->cmd('ahoy lint', tio: 120, ito: 90); + + $this->stepAhoyLintBe($webroot); + $this->stepAhoyLintFe($webroot); + $this->stepAhoyLintTest(); + + $this->logStepFinish(); + } + + protected function stepAhoyLintBe(string $webroot = 'web'): void { + $this->logStepStart(); + + $this->logSubstep('Assert that BE lint failure works'); + File::dump($webroot . '/modules/custom/sw_base/sw_base.module', File::read($webroot . '/modules/custom/sw_base/sw_base.module') . '$a=1;'); + $this->syncToContainer(); + $this->cmdFail('ahoy lint-be', tio: 120, ito: 90); + + $this->logSubstep('Assert that BE lint tool disabling works'); + // Replace with some valid XML element to avoid XML parsing errors. + File::replaceContentInFile('phpcs.xml', '' . $webroot . '/modules/custom', 'somefile'); + $this->syncToContainer(); + $this->cmd('ahoy lint-be', tio: 120, ito: 90); + + // @todo Add restoring of the file. + $this->logStepFinish(); + } + + protected function stepAhoyLintFe(string $webroot = 'web'): void { + $this->logStepStart(); + + $this->logSubstep('Assert that FE lint failure works for npm lint'); + File::dump($webroot . '/themes/custom/star_wars/scss/components/_test.scss', '.abc{margin: 0px;}'); + $this->syncToContainer(); + $this->cmdFail('ahoy lint-fe', tio: 120, ito: 90); + File::remove($webroot . '/themes/custom/star_wars/scss/components/_test.scss'); + $this->cmd('ahoy cli rm -f ' . $webroot . '/themes/custom/star_wars/scss/components/_test.scss'); + $this->syncToContainer(); + + $this->logSubstep('Assert that FE lint failure works for Twig CS Fixer'); + File::dump($webroot . '/modules/custom/sw_base/templates/block/test1.twig', "{{ set a='a' }}"); + File::dump($webroot . '/themes/custom/star_wars/templates/block/test2.twig', "{{ set b='b' }}"); + $this->syncToContainer(); + + $this->cmdFail('ahoy lint-fe', tio: 120, ito: 90); + + File::remove([ + $webroot . '/modules/custom/sw_base/templates/block/test1.twig', + $webroot . '/themes/custom/star_wars/templates/block/test2.twig', + ]); + $this->cmd('ahoy cli rm -f ' . $webroot . '/modules/custom/sw_base/templates/block/test1.twig'); + $this->cmd('ahoy cli rm -f ' . $webroot . '/themes/custom/star_wars/templates/block/test2.twig'); + $this->syncToContainer(); + + $this->logStepFinish(); + } + + protected function stepAhoyLintTest(): void { + $this->logStepStart(); + + $this->logSubstep('Assert that Test lint works for Gherkin Lint'); + $this->cmd('ahoy lint-tests'); + + $this->logSubstep('Assert that Test lint failure works for Gherkin Lint'); + File::dump('tests/behat/features/test.feature', 'Feature:'); + $this->syncToContainer(); + $this->cmdFail('ahoy lint-tests'); + File::remove('tests/behat/features/test.feature'); + $this->cmd('ahoy cli rm -f tests/behat/features/test.feature'); + $this->syncToContainer(); + + $this->logStepFinish(); + } + +} diff --git a/.vortex/tests/phpunit/Traits/Steps/StepPrepareSutTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepPrepareSutTrait.php index 3e31587e5..464ecea60 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepPrepareSutTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepPrepareSutTrait.php @@ -11,9 +11,6 @@ */ trait StepPrepareSutTrait { - - use StepDownloadDbTrait; - protected function stepPrepareSut(): void { $this->logStepStart(); diff --git a/.vortex/tests/phpunit/Traits/Steps/StepTestBddAllTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepTestBddAllTrait.php deleted file mode 100644 index b7c3528f8..000000000 --- a/.vortex/tests/phpunit/Traits/Steps/StepTestBddAllTrait.php +++ /dev/null @@ -1,21 +0,0 @@ -logStepStart(); - - // BDD all tests implementation can be added here. - $this->log('BDD all tests step completed'); - - $this->logStepFinish(); - } - -} diff --git a/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php deleted file mode 100644 index 36e446c79..000000000 --- a/.vortex/tests/phpunit/Traits/Steps/StepTestBddTrait.php +++ /dev/null @@ -1,47 +0,0 @@ -logStepStart(); - - $this->stepWarmCaches(); - - $this->logSubstep('Running all BDD tests'); - $process = $this->processRun('ahoy test-bdd'); - - if (!$process->isSuccessful()) { - $this->logSubstep('Re-running all BDD tests after random failure'); - $this->cmd('ahoy test-bdd'); - } - - $this->syncToHost(); - - $this->logSubstep('Checking that BDD tests have created screenshots and test results'); - $this->assertDirectoryContainsString('.logs/screenshots', 'html', message: 'Screenshots directory should not be empty after BDD tests'); - $this->assertFileExists('.logs/test_results/behat/default.xml', 'Behat test results XML file should exist'); - - $this->logSubstep('Cleaning up after the test'); - File::remove(['.logs/screenshots', '.logs/test_results/behat']); - $this->cmd('ahoy cli rm -rf /app/.logs/screenshots/*'); - $this->cmd('ahoy cli rm -rf /app/.logs/test_results/*'); - - $this->logStepFinish(); - } - - protected function stepWarmCaches(): void { - $this->logSubstep('Warming up caches'); - $this->cmd('ahoy drush cr'); - $this->cmd('ahoy cli curl -- -sSL -o /dev/null -w "%{http_code}" http://nginx:8080 | grep -q 200'); - } - -} diff --git a/.vortex/tests/phpunit/Traits/Steps/StepTestingTrait.php b/.vortex/tests/phpunit/Traits/Steps/StepTestTrait.php similarity index 64% rename from .vortex/tests/phpunit/Traits/Steps/StepTestingTrait.php rename to .vortex/tests/phpunit/Traits/Steps/StepTestTrait.php index a4b13f2d8..2b2068130 100644 --- a/.vortex/tests/phpunit/Traits/Steps/StepTestingTrait.php +++ b/.vortex/tests/phpunit/Traits/Steps/StepTestTrait.php @@ -9,84 +9,7 @@ /** * Provides testing operation steps (lint, test). */ -trait StepTestingTrait { - - protected function stepAhoyLint(string $webroot = 'web'): void { - $this->logStepStart(); - - $this->logSubstep('Assert that lint works'); - $this->cmd('ahoy lint', tio: 120, ito: 90); - - $this->stepAhoyLintBe($webroot); - $this->stepAhoyLintFe($webroot); - $this->stepAhoyLintTest(); - - $this->logStepFinish(); - } - - protected function stepAhoyLintBe(string $webroot = 'web'): void { - $this->logStepStart(); - - $this->logSubstep('Assert that BE lint failure works'); - File::dump($webroot . '/modules/custom/sw_base/sw_base.module', File::read($webroot . '/modules/custom/sw_base/sw_base.module') . '$a=1;'); - $this->syncToContainer(); - $this->cmdFail('ahoy lint-be', tio: 120, ito: 90); - - $this->logSubstep('Assert that BE lint tool disabling works'); - // Replace with some valid XML element to avoid XML parsing errors. - File::replaceContentInFile('phpcs.xml', '' . $webroot . '/modules/custom', 'somefile'); - $this->syncToContainer(); - $this->cmd('ahoy lint-be', tio: 120, ito: 90); - - // @todo Add restoring of the file. - $this->logStepFinish(); - } - - protected function stepAhoyLintFe(string $webroot = 'web'): void { - $this->logStepStart(); - - $this->logSubstep('Assert that FE lint failure works for npm lint'); - File::dump($webroot . '/themes/custom/star_wars/scss/components/_test.scss', '.abc{margin: 0px;}'); - $this->syncToContainer(); - $this->cmdFail('ahoy lint-fe', tio: 120, ito: 90); - File::remove($webroot . '/themes/custom/star_wars/scss/components/_test.scss'); - $this->cmd('ahoy cli rm -f ' . $webroot . '/themes/custom/star_wars/scss/components/_test.scss'); - $this->syncToContainer(); - - $this->logSubstep('Assert that FE lint failure works for Twig CS Fixer'); - File::dump($webroot . '/modules/custom/sw_base/templates/block/test1.twig', "{{ set a='a' }}"); - File::dump($webroot . '/themes/custom/star_wars/templates/block/test2.twig', "{{ set b='b' }}"); - $this->syncToContainer(); - - $this->cmdFail('ahoy lint-fe', tio: 120, ito: 90); - - File::remove([ - $webroot . '/modules/custom/sw_base/templates/block/test1.twig', - $webroot . '/themes/custom/star_wars/templates/block/test2.twig', - ]); - $this->cmd('ahoy cli rm -f ' . $webroot . '/modules/custom/sw_base/templates/block/test1.twig'); - $this->cmd('ahoy cli rm -f ' . $webroot . '/themes/custom/star_wars/templates/block/test2.twig'); - $this->syncToContainer(); - - $this->logStepFinish(); - } - - protected function stepAhoyLintTest(): void { - $this->logStepStart(); - - $this->logSubstep('Assert that Test lint works for Gherkin Lint'); - $this->cmd('ahoy lint-tests'); - - $this->logSubstep('Assert that Test lint failure works for Gherkin Lint'); - File::dump('tests/behat/features/test.feature', 'Feature:'); - $this->syncToContainer(); - $this->cmdFail('ahoy lint-tests'); - File::remove('tests/behat/features/test.feature'); - $this->cmd('ahoy cli rm -f tests/behat/features/test.feature'); - $this->syncToContainer(); - - $this->logStepFinish(); - } +trait StepTestTrait { protected function stepAhoyTest(string $webroot = 'web', bool $is_fast = FALSE): void { $this->logStepStart(); @@ -186,23 +109,25 @@ protected function stepAhoyTestFunctional(string $webroot = 'web'): void { protected function stepAhoyTestBddFast(string $webroot = 'web'): void { $this->logStepStart(); - // Sometimes, tests fail for random reasons. A workaround is to run BDD - // tests to "cache" the environment and then run the tests again. - $this->cmd('ahoy test-bdd || true'); + $this->stepWarmCaches(); $this->logSubstep('Run all BDD tests'); - $this->cmd('ahoy test-bdd'); + $process = $this->processRun('ahoy test-bdd'); + + if (!$process->isSuccessful()) { + $this->logSubstep('Re-run all BDD tests after random failure'); + $this->cmd('ahoy test-bdd'); + } $this->syncToHost(); - $this->assertDirectoryExists('.logs/screenshots'); - File::remove('.logs/screenshots'); - $this->cmd('ahoy cli rm -rf /app/.logs/screenshots/*'); + $this->logSubstep('Check that BDD tests have created screenshots and test results'); + $this->assertDirectoryContainsString('.logs/screenshots', 'html', message: 'Screenshots directory should not be empty after BDD tests'); + $this->assertFileExists('.logs/test_results/behat/default.xml', 'Behat test results XML file should exist'); - $this->assertDirectoryExists('.logs/test_results'); - $this->assertFileExists('.logs/test_results/behat/default.xml'); - - File::remove('.logs/test_results'); + $this->logSubstep('Clean up after the test'); + File::remove(['.logs/screenshots', '.logs/test_results/behat']); + $this->cmd('ahoy cli rm -rf /app/.logs/screenshots/*'); $this->cmd('ahoy cli rm -rf /app/.logs/test_results/*'); $this->logStepFinish(); @@ -273,12 +198,4 @@ protected function stepAhoyTestBdd(string $webroot = 'web'): void { $this->logStepFinish(); } - protected function trimFile(string $file): void { - $content = File::read($file); - $lines = explode("\n", $content); - // Remove last line. - array_pop($lines); - File::dump($file, implode("\n", $lines)); - } - } From e586aa87054ceaebad0ca1af9fb9784747b13ae6 Mon Sep 17 00:00:00 2001 From: Alex Skrypnyk Date: Sun, 14 Sep 2025 12:43:07 +1000 Subject: [PATCH 7/8] Fixed installer tests. --- .../tests/Functional/Handlers/StarterInstallTest.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.vortex/installer/tests/Functional/Handlers/StarterInstallTest.php b/.vortex/installer/tests/Functional/Handlers/StarterInstallTest.php index 2dcd383b0..152d3c9d3 100644 --- a/.vortex/installer/tests/Functional/Handlers/StarterInstallTest.php +++ b/.vortex/installer/tests/Functional/Handlers/StarterInstallTest.php @@ -17,15 +17,25 @@ public static function dataProviderInstall(): array { return [ 'starter, demo db' => [ static::cw(fn() => Env::put(PromptManager::makeEnvName(Starter::id()), Starter::LOAD_DATABASE_DEMO)), + static::cw(fn(FunctionalTestCase $test) => $test->assertSutNotContains([ + 'drupal/cms', + 'wikimedia/composer-merge-plugin', + 'vendor/drupal/cms/composer.json', + ])), ], 'starter, Drupal profile' => [ static::cw(fn() => Env::put(PromptManager::makeEnvName(Starter::id()), Starter::INSTALL_PROFILE_CORE)), + static::cw(fn(FunctionalTestCase $test) => $test->assertSutNotContains([ + 'drupal/cms', + 'wikimedia/composer-merge-plugin', + 'vendor/drupal/cms/composer.json', + ])), ], 'starter, Drupal CMS profile' => [ static::cw(fn() => Env::put(PromptManager::makeEnvName(Starter::id()), Starter::INSTALL_PROFILE_DRUPALCMS)), - static::cw(fn(FunctionalTestCase $test) => $test->assertSutNotContains([ + static::cw(fn(FunctionalTestCase $test) => $test->assertSutContains([ 'drupal/cms', 'wikimedia/composer-merge-plugin', 'vendor/drupal/cms/composer.json', From b8d4e18f206200e7541b6d9eafc60ea8b0de6552 Mon Sep 17 00:00:00 2001 From: Alex Skrypnyk Date: Sun, 14 Sep 2025 12:58:10 +1000 Subject: [PATCH 8/8] Fixed installer tests. Part 2. --- .vortex/installer/src/Prompts/Handlers/Tools.php | 1 + .../install/tools_groups_no_be_lint/composer.json | 7 ++++++- .../tools_groups_no_be_lint_circleci/composer.json | 7 ++++++- .../tests/Fixtures/install/tools_no_phpcs/composer.json | 8 ++++++++ .../install/tools_no_phpcs_circleci/composer.json | 8 ++++++++ .../tests/Fixtures/install/tools_none/composer.json | 6 ++++-- 6 files changed, 33 insertions(+), 4 deletions(-) diff --git a/.vortex/installer/src/Prompts/Handlers/Tools.php b/.vortex/installer/src/Prompts/Handlers/Tools.php index b2698774e..ea1ec3fe2 100644 --- a/.vortex/installer/src/Prompts/Handlers/Tools.php +++ b/.vortex/installer/src/Prompts/Handlers/Tools.php @@ -186,6 +186,7 @@ public static function getToolDefinitions(string $filter = 'all'): array { }, 'composer.json' => function (JsonManipulator $cj): void { $cj->removeSubNode('require-dev', 'dealerdirect/phpcodesniffer-composer-installer'); + $cj->removeConfigSetting('allow-plugins.dealerdirect/phpcodesniffer-composer-installer'); $cj->removeSubNode('require-dev', 'drupal/coder'); $cj->removeSubNode('require-dev', 'squizlabs/php_codesniffer'); }, diff --git a/.vortex/installer/tests/Fixtures/install/tools_groups_no_be_lint/composer.json b/.vortex/installer/tests/Fixtures/install/tools_groups_no_be_lint/composer.json index 01b2927d0..67c350251 100644 --- a/.vortex/installer/tests/Fixtures/install/tools_groups_no_be_lint/composer.json +++ b/.vortex/installer/tests/Fixtures/install/tools_groups_no_be_lint/composer.json @@ -22,7 +22,12 @@ "vincentlanglet/twig-cs-fixer": "__VERSION__" }, "conflict": { -@@ -79,7 +72,6 @@ +@@ -74,12 +67,10 @@ + "allow-plugins": { + "composer/installers": true, + "cweagans/composer-patches": true, +- "dealerdirect/phpcodesniffer-composer-installer": true, + "drupal/core-composer-scaffold": true, "ergebnis/composer-normalize": true, "oomphinc/composer-installers-extender": true, "php-http/discovery": true, diff --git a/.vortex/installer/tests/Fixtures/install/tools_groups_no_be_lint_circleci/composer.json b/.vortex/installer/tests/Fixtures/install/tools_groups_no_be_lint_circleci/composer.json index 01b2927d0..67c350251 100644 --- a/.vortex/installer/tests/Fixtures/install/tools_groups_no_be_lint_circleci/composer.json +++ b/.vortex/installer/tests/Fixtures/install/tools_groups_no_be_lint_circleci/composer.json @@ -22,7 +22,12 @@ "vincentlanglet/twig-cs-fixer": "__VERSION__" }, "conflict": { -@@ -79,7 +72,6 @@ +@@ -74,12 +67,10 @@ + "allow-plugins": { + "composer/installers": true, + "cweagans/composer-patches": true, +- "dealerdirect/phpcodesniffer-composer-installer": true, + "drupal/core-composer-scaffold": true, "ergebnis/composer-normalize": true, "oomphinc/composer-installers-extender": true, "php-http/discovery": true, diff --git a/.vortex/installer/tests/Fixtures/install/tools_no_phpcs/composer.json b/.vortex/installer/tests/Fixtures/install/tools_no_phpcs/composer.json index 8ad592cec..b7745daf7 100644 --- a/.vortex/installer/tests/Fixtures/install/tools_no_phpcs/composer.json +++ b/.vortex/installer/tests/Fixtures/install/tools_no_phpcs/composer.json @@ -6,3 +6,11 @@ "drevops/behat-format-progress-fail": "__VERSION__", "drevops/behat-screenshot": "__VERSION__", "drevops/behat-steps": "__VERSION__", +@@ -74,7 +73,6 @@ + "allow-plugins": { + "composer/installers": true, + "cweagans/composer-patches": true, +- "dealerdirect/phpcodesniffer-composer-installer": true, + "drupal/core-composer-scaffold": true, + "ergebnis/composer-normalize": true, + "oomphinc/composer-installers-extender": true, diff --git a/.vortex/installer/tests/Fixtures/install/tools_no_phpcs_circleci/composer.json b/.vortex/installer/tests/Fixtures/install/tools_no_phpcs_circleci/composer.json index 8ad592cec..b7745daf7 100644 --- a/.vortex/installer/tests/Fixtures/install/tools_no_phpcs_circleci/composer.json +++ b/.vortex/installer/tests/Fixtures/install/tools_no_phpcs_circleci/composer.json @@ -6,3 +6,11 @@ "drevops/behat-format-progress-fail": "__VERSION__", "drevops/behat-screenshot": "__VERSION__", "drevops/behat-steps": "__VERSION__", +@@ -74,7 +73,6 @@ + "allow-plugins": { + "composer/installers": true, + "cweagans/composer-patches": true, +- "dealerdirect/phpcodesniffer-composer-installer": true, + "drupal/core-composer-scaffold": true, + "ergebnis/composer-normalize": true, + "oomphinc/composer-installers-extender": true, diff --git a/.vortex/installer/tests/Fixtures/install/tools_none/composer.json b/.vortex/installer/tests/Fixtures/install/tools_none/composer.json index 18262899f..9976c7490 100644 --- a/.vortex/installer/tests/Fixtures/install/tools_none/composer.json +++ b/.vortex/installer/tests/Fixtures/install/tools_none/composer.json @@ -23,7 +23,7 @@ "vincentlanglet/twig-cs-fixer": "__VERSION__" }, "conflict": { -@@ -65,11 +51,6 @@ +@@ -65,21 +51,14 @@ "scripts/composer/ScriptHandler.php" ] }, @@ -35,7 +35,9 @@ "config": { "allow-plugins": { "composer/installers": true, -@@ -79,7 +60,6 @@ + "cweagans/composer-patches": true, +- "dealerdirect/phpcodesniffer-composer-installer": true, + "drupal/core-composer-scaffold": true, "ergebnis/composer-normalize": true, "oomphinc/composer-installers-extender": true, "php-http/discovery": true,