diff --git a/codeception.yml b/codeception.yml new file mode 100644 index 0000000000..2872671b67 --- /dev/null +++ b/codeception.yml @@ -0,0 +1,10 @@ +paths: + tests: tests/CodeCeption + output: tests/CodeCeption/_output + data: tests/CodeCeption/_data + support: tests/CodeCeption/_support + envs: tests/CodeCeption/_envs +actor_suffix: Tester +extensions: + enabled: + - Codeception\Extension\RunFailed diff --git a/composer.json b/composer.json index 22019d26e4..0007d21046 100644 --- a/composer.json +++ b/composer.json @@ -67,6 +67,9 @@ "wikimedia/composer-merge-plugin": "^2.0" }, "require-dev": { + "codeception/codeception": "^4.1", + "codeception/module-phpbrowser": "^2.0", + "codeception/module-symfony": "^2.1", "doctrine/doctrine-fixtures-bundle": "^3.4", "friendsofphp/php-cs-fixer": "^3.2.1", "jchook/phpunit-assert-throws": "^1.0", @@ -82,7 +85,8 @@ "symfony/stopwatch": "5.4.*", "symfony/web-profiler-bundle": "^5.4.", "ulrichsg/getopt-php": "*", - "wp-cli/php-cli-tools": "^0.11.13" + "wp-cli/php-cli-tools": "^0.11.13", + "codeception/module-asserts": "^1.0.0" }, "config": { "preferred-install": { @@ -108,7 +112,11 @@ "autoload-dev": { "psr-4": { "App\\Tests\\": "tests/" - } + }, + "files": [ + "tests/CodeCeption/_support/_generated/AcceptanceTesterActions.php", + "tests/CodeCeption/_support/AcceptanceTester.php" + ] }, "replace": { "paragonie/random_compat": "2.*", @@ -184,6 +192,42 @@ "reference": "master" } } + }, + { + "type": "package", + "package": { + "name": "codeception/codeception", + "version": "4.1.30", + "autoload": { + "psr-4": { + "Codeception\\": "src/Codeception", + "Codeception\\Extension\\": "ext" + }, + "files": ["functions.php"] + }, + "require": { + "php": ">=5.6.0 <9.0", + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "codeception/lib-asserts": "^1.0 | 2.0.*@dev", + "guzzlehttp/psr7": "^1.4 | ^2.0", + "symfony/finder": ">=2.7 <6.0", + "symfony/console": ">=2.7 <6.0", + "symfony/event-dispatcher": ">=2.7 <6.0", + "symfony/yaml": ">=2.7 <6.0", + "symfony/css-selector": ">=2.7 <6.0", + "behat/gherkin": "^4.4.0", + "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.1.1 | ^9.0", + "codeception/stub": "^2.0 | ^3.0 | ^4.0" + }, + "bin":["codecept"], + "source": { + "url": "https://github.com/someonewithpc/Codeception.git", + "type": "git", + "reference": "4.1" + } + } } ] } diff --git a/composer.lock b/composer.lock index 6062b59aa0..731fc05b9e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b65e020cc6b2de3186778d0b3f1aa277", + "content-hash": "4533a7f4059639e03dbbb34b48f09cf5", "packages": [ { "name": "alchemy/binary-driver", @@ -553,16 +553,16 @@ }, { "name": "doctrine/dbal", - "version": "3.2.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "5d54f63541d7bed1156cb5c9b79274ced61890e4" + "reference": "4caf37acf14b513a91dd4f087f7eda424fa25542" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/5d54f63541d7bed1156cb5c9b79274ced61890e4", - "reference": "5d54f63541d7bed1156cb5c9b79274ced61890e4", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/4caf37acf14b513a91dd4f087f7eda424fa25542", + "reference": "4caf37acf14b513a91dd4f087f7eda424fa25542", "shasum": "" }, "require": { @@ -577,14 +577,14 @@ "require-dev": { "doctrine/coding-standard": "9.0.0", "jetbrains/phpstorm-stubs": "2021.1", - "phpstan/phpstan": "1.2.0", + "phpstan/phpstan": "1.3.0", "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "9.5.10", + "phpunit/phpunit": "9.5.11", "psalm/plugin-phpunit": "0.16.1", - "squizlabs/php_codesniffer": "3.6.1", + "squizlabs/php_codesniffer": "3.6.2", "symfony/cache": "^5.2|^6.0", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0|^6.0", - "vimeo/psalm": "4.13.0" + "vimeo/psalm": "4.16.1" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -644,7 +644,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.2.0" + "source": "https://github.com/doctrine/dbal/tree/3.2.1" }, "funding": [ { @@ -660,7 +660,7 @@ "type": "tidelift" } ], - "time": "2021-11-26T21:00:12+00:00" + "time": "2022-01-05T08:52:06+00:00" }, { "name": "doctrine/deprecations", @@ -707,16 +707,16 @@ }, { "name": "doctrine/doctrine-bundle", - "version": "2.5.4", + "version": "2.5.5", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "f6191c50600bad1c0195638413f53aee6158b909" + "reference": "5c086cbbe5327937dd6f90da075f7d421b0f28bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/f6191c50600bad1c0195638413f53aee6158b909", - "reference": "f6191c50600bad1c0195638413f53aee6158b909", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/5c086cbbe5327937dd6f90da075f7d421b0f28bc", + "reference": "5c086cbbe5327937dd6f90da075f7d421b0f28bc", "shasum": "" }, "require": { @@ -729,7 +729,7 @@ "symfony/cache": "^4.3.3|^5.0|^6.0", "symfony/config": "^4.4.3|^5.0|^6.0", "symfony/console": "^3.4.30|^4.3.3|^5.0|^6.0", - "symfony/dependency-injection": "^4.3.3|^5.0|^6.0", + "symfony/dependency-injection": "^4.4.18|^5.0|^6.0", "symfony/deprecation-contracts": "^2.1|^3", "symfony/doctrine-bridge": "^4.4.22|^5.2.7|^6.0", "symfony/framework-bundle": "^3.4.30|^4.3.3|^5.0|^6.0", @@ -800,7 +800,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.5.4" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.5.5" }, "funding": [ { @@ -816,7 +816,7 @@ "type": "tidelift" } ], - "time": "2021-12-30T18:43:28+00:00" + "time": "2022-01-06T08:56:31+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", @@ -1651,16 +1651,16 @@ }, { "name": "embed/embed", - "version": "v4.3.5", + "version": "v4.4.0", "source": { "type": "git", "url": "https://github.com/oscarotero/Embed.git", - "reference": "4dd2b05119462142ea4adfcf42e75f31dc056975" + "reference": "24fe9376e8de48c536ddaddf0025ae39cae5ddfe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/oscarotero/Embed/zipball/4dd2b05119462142ea4adfcf42e75f31dc056975", - "reference": "4dd2b05119462142ea4adfcf42e75f31dc056975", + "url": "https://api.github.com/repos/oscarotero/Embed/zipball/24fe9376e8de48c536ddaddf0025ae39cae5ddfe", + "reference": "24fe9376e8de48c536ddaddf0025ae39cae5ddfe", "shasum": "" }, "require": { @@ -1720,9 +1720,9 @@ "support": { "email": "oom@oscarotero.com", "issues": "https://github.com/oscarotero/Embed/issues", - "source": "https://github.com/oscarotero/Embed/tree/v4.3.5" + "source": "https://github.com/oscarotero/Embed/tree/v4.4.0" }, - "time": "2021-10-10T17:10:44+00:00" + "time": "2022-01-08T13:26:18+00:00" }, { "name": "erusev/parsedown", @@ -3938,16 +3938,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.5.1", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", "shasum": "" }, "require": { @@ -3982,9 +3982,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" }, - "time": "2021-10-02T14:08:47+00:00" + "time": "2022-01-04T19:58:01+00:00" }, { "name": "phpseclib/phpseclib", @@ -7614,16 +7614,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", + "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", "shasum": "" }, "require": { @@ -7675,7 +7675,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" }, "funding": [ { @@ -7691,20 +7691,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T12:26:48+00:00" + "time": "2021-11-23T21:10:46+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "4a80a521d6176870b6445cfb469c130f9cae1dda" + "reference": "c023a439b8551e320cc3c8433b198e408a623af1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/4a80a521d6176870b6445cfb469c130f9cae1dda", - "reference": "4a80a521d6176870b6445cfb469c130f9cae1dda", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/c023a439b8551e320cc3c8433b198e408a623af1", + "reference": "c023a439b8551e320cc3c8433b198e408a623af1", "shasum": "" }, "require": { @@ -7762,7 +7762,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.24.0" }, "funding": [ { @@ -7778,20 +7778,20 @@ "type": "tidelift" } ], - "time": "2021-05-24T10:04:56+00:00" + "time": "2021-10-26T17:16:04+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + "reference": "749045c69efb97c70d25d7463abba812e91f3a44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44", + "reference": "749045c69efb97c70d25d7463abba812e91f3a44", "shasum": "" }, "require": { @@ -7849,7 +7849,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0" }, "funding": [ { @@ -7865,11 +7865,11 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2021-09-14T14:02:44+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -7933,7 +7933,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" }, "funding": [ { @@ -7953,21 +7953,24 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", + "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, "suggest": { "ext-mbstring": "For best performance" }, @@ -8013,7 +8016,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" }, "funding": [ { @@ -8029,20 +8032,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T12:26:48+00:00" + "time": "2021-11-30T18:21:41+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", + "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", "shasum": "" }, "require": { @@ -8092,7 +8095,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" }, "funding": [ { @@ -8108,20 +8111,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2021-06-05T21:20:04+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" + "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", - "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", + "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", "shasum": "" }, "require": { @@ -8175,7 +8178,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.1" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" }, "funding": [ { @@ -8191,20 +8194,20 @@ "type": "tidelift" } ], - "time": "2021-07-28T13:41:28+00:00" + "time": "2021-09-13T13:58:33+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.23.0", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "e66119f3de95efc359483f810c4c3e6436279436" + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", - "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", + "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f", "shasum": "" }, "require": { @@ -8254,7 +8257,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0" }, "funding": [ { @@ -8270,7 +8273,7 @@ "type": "tidelift" } ], - "time": "2021-05-21T13:25:03+00:00" + "time": "2021-09-13T13:58:11+00:00" }, { "name": "symfony/process", @@ -11131,6 +11134,496 @@ } ], "packages-dev": [ + { + "name": "behat/gherkin", + "version": "v4.9.0", + "source": { + "type": "git", + "url": "https://github.com/Behat/Gherkin.git", + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/0bc8d1e30e96183e4f36db9dc79caead300beff4", + "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4", + "shasum": "" + }, + "require": { + "php": "~7.2|~8.0" + }, + "require-dev": { + "cucumber/cucumber": "dev-gherkin-22.0.0", + "phpunit/phpunit": "~8|~9", + "symfony/yaml": "~3|~4|~5" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "support": { + "issues": "https://github.com/Behat/Gherkin/issues", + "source": "https://github.com/Behat/Gherkin/tree/v4.9.0" + }, + "time": "2021-10-12T13:05:09+00:00" + }, + { + "name": "codeception/codeception", + "version": "4.1.30", + "source": { + "type": "git", + "url": "https://github.com/someonewithpc/Codeception.git", + "reference": "4.1" + }, + "require": { + "behat/gherkin": "^4.4.0", + "codeception/lib-asserts": "^1.0 | 2.0.*@dev", + "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.1.1 | ^9.0", + "codeception/stub": "^2.0 | ^3.0 | ^4.0", + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*", + "guzzlehttp/psr7": "^1.4 | ^2.0", + "php": ">=5.6.0 <9.0", + "symfony/console": ">=2.7 <6.0", + "symfony/css-selector": ">=2.7 <6.0", + "symfony/event-dispatcher": ">=2.7 <6.0", + "symfony/finder": ">=2.7 <6.0", + "symfony/yaml": ">=2.7 <6.0" + }, + "bin": [ + "codecept" + ], + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\": "src/Codeception", + "Codeception\\Extension\\": "ext" + }, + "files": [ + "functions.php" + ] + } + }, + { + "name": "codeception/lib-asserts", + "version": "1.13.2", + "source": { + "type": "git", + "url": "https://github.com/Codeception/lib-asserts.git", + "reference": "184231d5eab66bc69afd6b9429344d80c67a33b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/184231d5eab66bc69afd6b9429344d80c67a33b6", + "reference": "184231d5eab66bc69afd6b9429344d80c67a33b6", + "shasum": "" + }, + "require": { + "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3 | ^9.0", + "ext-dom": "*", + "php": ">=5.6.0 <9.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" + }, + { + "name": "Gintautas Miselis" + }, + { + "name": "Gustavo Nieves", + "homepage": "https://medium.com/@ganieves" + } + ], + "description": "Assertion methods used by Codeception core and Asserts module", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/lib-asserts/issues", + "source": "https://github.com/Codeception/lib-asserts/tree/1.13.2" + }, + "time": "2020-10-21T16:26:20+00:00" + }, + { + "name": "codeception/lib-innerbrowser", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/lib-innerbrowser.git", + "reference": "c7bf42d5a38e2883ae9cf298ec9d15b1185815fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/c7bf42d5a38e2883ae9cf298ec9d15b1185815fb", + "reference": "c7bf42d5a38e2883ae9cf298ec9d15b1185815fb", + "shasum": "" + }, + "require": { + "codeception/codeception": "^4.1 | 4.*@dev", + "ext-dom": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": "^7.4 | ^8.0", + "symfony/browser-kit": "^4.4 | ^5.4 | ^6.0", + "symfony/dom-crawler": "^4.4 | ^5.4 | ^6.0" + }, + "conflict": { + "codeception/codeception": "<4.1" + }, + "require-dev": { + "codeception/util-universalframework": "dev-master" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "https://codegyre.com" + }, + { + "name": "Gintautas Miselis" + } + ], + "description": "Parent library for all Codeception framework modules and PhpBrowser", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/lib-innerbrowser/issues", + "source": "https://github.com/Codeception/lib-innerbrowser/tree/2.0.1" + }, + "time": "2021-12-21T01:40:35+00:00" + }, + { + "name": "codeception/module-asserts", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/module-asserts.git", + "reference": "59374f2fef0cabb9e8ddb53277e85cdca74328de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/59374f2fef0cabb9e8ddb53277e85cdca74328de", + "reference": "59374f2fef0cabb9e8ddb53277e85cdca74328de", + "shasum": "" + }, + "require": { + "codeception/codeception": "*@dev", + "codeception/lib-asserts": "^1.13.1", + "php": ">=5.6.0 <9.0" + }, + "conflict": { + "codeception/codeception": "<4.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk" + }, + { + "name": "Gintautas Miselis" + }, + { + "name": "Gustavo Nieves", + "homepage": "https://medium.com/@ganieves" + } + ], + "description": "Codeception module containing various assertions", + "homepage": "https://codeception.com/", + "keywords": [ + "assertions", + "asserts", + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/module-asserts/issues", + "source": "https://github.com/Codeception/module-asserts/tree/1.3.1" + }, + "time": "2020-10-21T16:48:15+00:00" + }, + { + "name": "codeception/module-phpbrowser", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/Codeception/module-phpbrowser.git", + "reference": "fda6d97253d0595843adb87ec0b9b7d6d89539ac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/module-phpbrowser/zipball/fda6d97253d0595843adb87ec0b9b7d6d89539ac", + "reference": "fda6d97253d0595843adb87ec0b9b7d6d89539ac", + "shasum": "" + }, + "require": { + "codeception/codeception": "^4.1 | *@dev", + "codeception/lib-innerbrowser": "^2.0 | *@dev", + "ext-json": "*", + "guzzlehttp/guzzle": "^7.4", + "php": "^7.4 | ^8.0" + }, + "conflict": { + "codeception/codeception": "<4.1" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.199", + "codeception/module-rest": "^2.0 | *@dev", + "ext-curl": "*" + }, + "suggest": { + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk" + }, + { + "name": "Gintautas Miselis" + } + ], + "description": "Codeception module for testing web application over HTTP", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception", + "functional-testing", + "http" + ], + "support": { + "issues": "https://github.com/Codeception/module-phpbrowser/issues", + "source": "https://github.com/Codeception/module-phpbrowser/tree/2.0.2" + }, + "time": "2021-12-21T15:16:28+00:00" + }, + { + "name": "codeception/module-symfony", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/module-symfony.git", + "reference": "6cbbd24aa51f3d9b56164ba043c38df28c00cabe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/module-symfony/zipball/6cbbd24aa51f3d9b56164ba043c38df28c00cabe", + "reference": "6cbbd24aa51f3d9b56164ba043c38df28c00cabe", + "shasum": "" + }, + "require": { + "codeception/codeception": "^4.1", + "codeception/lib-innerbrowser": "^2.0", + "ext-json": "*", + "php": "^7.4 | ^8.0" + }, + "require-dev": { + "codeception/module-asserts": "^2.0", + "codeception/module-doctrine2": "^2.0", + "doctrine/orm": "^2.10", + "symfony/form": "^4.4 | ^5.0", + "symfony/framework-bundle": "^4.4 | ^5.0", + "symfony/http-kernel": "^4.4 | ^5.0", + "symfony/mailer": "^4.4 | ^5.0", + "symfony/routing": "^4.4 | ^5.0", + "symfony/security-bundle": "^4.4 | ^5.0", + "symfony/twig-bundle": "^4.4 | ^5.0", + "vlucas/phpdotenv": "^4.2 | ^5.4" + }, + "suggest": { + "codeception/module-asserts": "Include traditional PHPUnit assertions in your tests", + "symfony/web-profiler-bundle": "Tool that gives information about the execution of requests" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk" + }, + { + "name": "Gustavo Nieves", + "homepage": "https://medium.com/@ganieves" + } + ], + "description": "Codeception module for Symfony framework", + "homepage": "https://codeception.com/", + "keywords": [ + "codeception", + "symfony" + ], + "support": { + "issues": "https://github.com/Codeception/module-symfony/issues", + "source": "https://github.com/Codeception/module-symfony/tree/2.1.1" + }, + "time": "2021-12-08T02:43:28+00:00" + }, + { + "name": "codeception/phpunit-wrapper", + "version": "9.0.6", + "source": { + "type": "git", + "url": "https://github.com/Codeception/phpunit-wrapper.git", + "reference": "b0c06abb3181eedca690170f7ed0fd26a70bfacc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/b0c06abb3181eedca690170f7ed0fd26a70bfacc", + "reference": "b0c06abb3181eedca690170f7ed0fd26a70bfacc", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "phpunit/phpunit": "^9.0" + }, + "require-dev": { + "codeception/specify": "*", + "consolidation/robo": "^3.0.0-alpha3", + "vlucas/phpdotenv": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\PHPUnit\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + }, + { + "name": "Naktibalda" + } + ], + "description": "PHPUnit classes used by Codeception", + "support": { + "issues": "https://github.com/Codeception/phpunit-wrapper/issues", + "source": "https://github.com/Codeception/phpunit-wrapper/tree/9.0.6" + }, + "time": "2020-12-28T13:59:47+00:00" + }, + { + "name": "codeception/stub", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Stub.git", + "reference": "ce0a9e418c775ca8b737d50c2b4ac1132f3990d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/ce0a9e418c775ca8b737d50c2b4ac1132f3990d8", + "reference": "ce0a9e418c775ca8b737d50c2b4ac1132f3990d8", + "shasum": "" + }, + "require": { + "php": "^7.4 | ^8.0", + "phpunit/phpunit": "^8.4 | ^9.0" + }, + "require-dev": { + "consolidation/robo": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Codeception\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", + "support": { + "issues": "https://github.com/Codeception/Stub/issues", + "source": "https://github.com/Codeception/Stub/tree/4.0.1" + }, + "time": "2022-01-08T09:35:36+00:00" + }, { "name": "composer/pcre", "version": "1.0.0", @@ -11954,12 +12447,12 @@ "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "c3e7a5837829b3cd5907b895da73a4da084a9f8f" + "reference": "8cc108ee97f222890cc38fa56c26407e291d4fda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c3e7a5837829b3cd5907b895da73a4da084a9f8f", - "reference": "c3e7a5837829b3cd5907b895da73a4da084a9f8f", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/8cc108ee97f222890cc38fa56c26407e291d4fda", + "reference": "8cc108ee97f222890cc38fa56c26407e291d4fda", "shasum": "" }, "require": { @@ -11976,7 +12469,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -11991,7 +12484,7 @@ "description": "PHPStan - PHP Static Analysis Tool", "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.3.1" + "source": "https://github.com/phpstan/phpstan/tree/master" }, "funding": [ { @@ -12011,7 +12504,7 @@ "type": "tidelift" } ], - "time": "2022-01-04T17:12:37+00:00" + "time": "2022-01-09T12:34:35+00:00" }, { "name": "phpunit/php-code-coverage", diff --git a/symfony.lock b/symfony.lock index bf512f0f2d..3466c9523d 100644 --- a/symfony.lock +++ b/symfony.lock @@ -2,6 +2,15 @@ "alchemy/binary-driver": { "version": "v5.2.0" }, + "behat/gherkin": { + "version": "v4.9.0" + }, + "codeception/module-asserts": { + "version": "1.3.1" + }, + "codeception/stub": { + "version": "4.0.1" + }, "composer/ca-bundle": { "version": "1.2.10" }, diff --git a/tests/CodeCeption/_data/.gitkeep b/tests/CodeCeption/_data/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/CodeCeption/_output/.gitignore b/tests/CodeCeption/_output/.gitignore new file mode 100644 index 0000000000..c96a04f008 --- /dev/null +++ b/tests/CodeCeption/_output/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/tests/CodeCeption/_support/AcceptanceTester.php b/tests/CodeCeption/_support/AcceptanceTester.php new file mode 100644 index 0000000000..67b0aeeb49 --- /dev/null +++ b/tests/CodeCeption/_support/AcceptanceTester.php @@ -0,0 +1,28 @@ +validatePa11y(\Helper\AccessibilityValidator::STANDARD_WCAG2AAA); + * + * Validate the current site against WCAG 2.0 (AA): + * $I->validatePa11y(); // or: + * $I->validatePa11y(\Helper\AccessibilityValidator::STANDARD_WCAG2A); + * + * Validate the current site against WCAG 2.0 (A): + * $I->validatePa11y(\Helper\AccessibilityValidator::STANDARD_WCAG2A); + * + * Validate the current site against Section 508: + * $I->validatePa11y(\Helper\AccessibilityValidator::STANDARD_SECTION508); + * + * Validate against WCAG 2.0 (AA), but ignore errors containing the string "Ignoreme": + * $I->validatePa11y(\Helper\AccessibilityValidator::STANDARD_WCAG2A, ["Ignoreme"]); + * + * @license http://www.opensource.org/licenses/mit-license.html MIT License + * @author Tobias Hößl + */ + +namespace Helper; + +use Exception; +use PHPUnit\Framework\Assert; + +class AccessibilityValidator extends \Codeception\Module +{ + public static $SUPPORTED_STANDARDS = [ + 'WCAG2AAA', + 'WCAG2AA', + 'WCAG2A', + 'Section508', + ]; + public const STANDARD_WCAG2AAA = 'WCAG2AAA'; + public const STANDARD_WCAG2AA = 'WCAG2AA'; + public const STANDARD_WCAG2A = 'WCAG2A'; + public const STANDARD_SECTION508 = 'Section508'; + + private function getPageUrl(): string + { + if ($this->hasModule('WebDriver')) { + /** @var \Codeception\Module\WebDriver $webdriver */ + $webdriver = $this->getModule('WebDriver'); + return $webdriver->webDriver->getCurrentURL(); + } else { + /** @var \Codeception\Module\PhpBrowser $phpBrowser */ + $phpBrowser = $this->getModule('PhpBrowser'); + return trim($phpBrowser->_getUrl(), '/') . $phpBrowser->_getCurrentUri(); + } + } + + /** + * @throws Exception + */ + private function validateByPa11y(string $url, string $standard): array + { + if (!\in_array($standard, static::$SUPPORTED_STANDARDS)) { + throw new Exception('Unknown standard: ' . $standard); + } + + $pa11yPath = $this->_getConfig('pa11yPath'); + if (!$pa11yPath) { + $pa11yPath = 'pa11y'; + } + if (!file_exists($pa11yPath)) { + throw new Exception('pa11y not found: ' . $pa11yPath); + } + + exec($pa11yPath . ' -s ' . $standard . " -r json '" . addslashes($url) . "'", $return); + $data = json_decode($return[0], true); + if (!$data) { + $msg = 'Invalid data returned from validation service: '; + throw new Exception($msg . $return); + } + return $data; + } + + /** + * @param string[] $ignoreMessages + */ + public function validatePa11y(string $standard = 'WCAG2AA', array $ignoreMessages = []): void + { + try { + $url = $this->getPageUrl(); + $messages = $this->validateByPa11y($url, $standard); + } catch (Exception $e) { + $this->fail($e->getMessage()); + return; + } + $failMessages = []; + foreach ($messages as $message) { + if ($message['type'] == 'error') { + $string = $message['code'] . "\n" . $message['selector'] . ': '; + $string .= $message['context'] . "\n"; + $string .= $message['message']; + $ignoring = false; + foreach ($ignoreMessages as $ignoreMessage) { + if (mb_stripos($string, $ignoreMessage) !== false) { + $ignoring = true; + } + } + if (!$ignoring) { + $failMessages[] = $string; + } + } + } + if (\count($failMessages) > 0) { + $failStr = 'Failed ' . $standard . ' check: ' . "\n"; + $failStr .= implode("\n\n", $failMessages); + Assert::fail($failStr); + } + } +} diff --git a/tests/CodeCeption/_support/_generated/.gitignore b/tests/CodeCeption/_support/_generated/.gitignore new file mode 100644 index 0000000000..c96a04f008 --- /dev/null +++ b/tests/CodeCeption/_support/_generated/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/tests/CodeCeption/acceptance.suite.yml b/tests/CodeCeption/acceptance.suite.yml new file mode 100644 index 0000000000..c3086afb5d --- /dev/null +++ b/tests/CodeCeption/acceptance.suite.yml @@ -0,0 +1,17 @@ +# Codeception Test Suite Configuration +# +# Suite for acceptance tests. +# Perform tests in browser using the WebDriver or PhpBrowser. +# If you need both WebDriver and PHPBrowser tests - create a separate suite. + +actor: AcceptanceTester +modules: + enabled: + - PhpBrowser: + url: https://nginx + - \Helper\Acceptance + - \Helper\AccessibilityValidator + config: + \Helper\AccessibilityValidator: + pa11yPath: /usr/local/bin/pa11y +step_decorators: ~ diff --git a/tests/CodeCeption/acceptance/FirstCest.php b/tests/CodeCeption/acceptance/FirstCest.php new file mode 100644 index 0000000000..8ba79c308f --- /dev/null +++ b/tests/CodeCeption/acceptance/FirstCest.php @@ -0,0 +1,16 @@ +amOnPage('/'); + $I->see('Feed'); + } +}