From 36147032df2b6424836f6bfaade1147d703bc243 Mon Sep 17 00:00:00 2001 From: Michael Withagen Date: Fri, 25 Jul 2025 12:08:22 +0200 Subject: [PATCH 01/12] Add ability to specify minimum mysql version requirement --- utils/behat-tags.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/utils/behat-tags.php b/utils/behat-tags.php index 5571fe996..3d0e639c9 100644 --- a/utils/behat-tags.php +++ b/utils/behat-tags.php @@ -40,6 +40,11 @@ function version_tags( return $skip_tags; } +function mysql_version() { + preg_match( '@[0-9]+\.[0-9]+\.[0-9]+@', exec( 'mysql -V' ), $version ); + return $version[0]; +} + $features_folder = getenv( 'BEHAT_FEATURES_FOLDER' ) ?: 'features'; $wp_version = getenv( 'WP_VERSION' ); $wp_version_reqs = array(); @@ -91,8 +96,7 @@ function version_tags( break; case 'mysql': default: - $skip_tags[] = '@require-mariadb'; - $skip_tags[] = '@require-sqlite'; + $skip_tags = array_merge( $skip_tags, [ '@require-mariadb', '@require-sqlite' ], version_tags( 'require-mysql', mysql_version(), '<', $features_folder ) ); break; } From 2260a6db887df488b320537641b229b2fa798c34 Mon Sep 17 00:00:00 2001 From: Michael Withagen Date: Fri, 25 Jul 2025 12:11:59 +0200 Subject: [PATCH 02/12] Rename to prevent linting failure --- utils/behat-tags.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/behat-tags.php b/utils/behat-tags.php index 3d0e639c9..df2c964b4 100644 --- a/utils/behat-tags.php +++ b/utils/behat-tags.php @@ -40,7 +40,7 @@ function version_tags( return $skip_tags; } -function mysql_version() { +function get_db_version() { preg_match( '@[0-9]+\.[0-9]+\.[0-9]+@', exec( 'mysql -V' ), $version ); return $version[0]; } @@ -96,7 +96,7 @@ function mysql_version() { break; case 'mysql': default: - $skip_tags = array_merge( $skip_tags, [ '@require-mariadb', '@require-sqlite' ], version_tags( 'require-mysql', mysql_version(), '<', $features_folder ) ); + $skip_tags = array_merge( $skip_tags, [ '@require-mariadb', '@require-sqlite' ], version_tags( 'require-mysql', get_db_version(), '<', $features_folder ) ); break; } From 2f2f9682e8a1c68fdf0226ba831c6684b80c87ac Mon Sep 17 00:00:00 2001 From: Michael Withagen Date: Fri, 25 Jul 2025 13:27:51 +0200 Subject: [PATCH 03/12] Add maria db support and write tests --- tests/tests/TestBehatTags.php | 39 +++++++++++++++++++++++++++++++++++ utils/behat-tags.php | 3 +-- 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/tests/tests/TestBehatTags.php b/tests/tests/TestBehatTags.php index 638f39ec4..c884f98ac 100644 --- a/tests/tests/TestBehatTags.php +++ b/tests/tests/TestBehatTags.php @@ -6,6 +6,7 @@ use WP_CLI\Utils; use PHPUnit\Framework\Attributes\DataProvider; +// phpcs:ignore Universal.Files.SeparateFunctionsFromOO.Mixed class TestBehatTags extends TestCase { /** @@ -192,4 +193,42 @@ public function test_behat_tags_extension(): void { putenv( false === $env_github_token ? 'GITHUB_TOKEN' : "GITHUB_TOKEN=$env_github_token" ); } + + public function test_behat_tags_db_version(): void { + $db_type = getenv( 'WP_CLI_TEST_DBTYPE' ); + + $behat_tags = dirname( dirname( __DIR__ ) ) . '/utils/behat-tags.php'; + require $behat_tags; + $minimum_db_version = get_db_version() . '.1'; + + $contents = ''; + $expecteds = array(); + + switch ( $db_type ) { + case 'mariadb': + $contents = "@require-mariadb-$minimum_db_version"; + $expecteds[] = "~@require-mariadb-$minimum_db_version"; + $expecteds[] = '~@require-mysql'; + $expecteds[] = '~@require-sqlite'; + break; + case 'sqlite': + $expecteds[] = '~@require-mariadb'; + $expecteds[] = '~@require-mysql'; + $expecteds[] = '~@require-mysql-or-mariadb'; + break; + case 'mysql': + default: + $contents = "@require-mysql-$minimum_db_version"; + $expecteds[] = "@require-mysql-$minimum_db_version"; + $expecteds[] = '~@require-mariadb'; + $expecteds[] = '~@require-sqlite'; + break; + } + + file_put_contents( $this->temp_dir . '/features/extension.feature', $contents ); + + $expected = '--tags=' . implode( '&&', $expecteds ); + $output = exec( "cd {$this->temp_dir}; php $behat_tags" ); + $this->assertSame( $expected, $output ); + } } diff --git a/utils/behat-tags.php b/utils/behat-tags.php index df2c964b4..337b2c0e5 100644 --- a/utils/behat-tags.php +++ b/utils/behat-tags.php @@ -86,8 +86,7 @@ function get_db_version() { switch ( getenv( 'WP_CLI_TEST_DBTYPE' ) ) { case 'mariadb': - $skip_tags[] = '@require-mysql'; - $skip_tags[] = '@require-sqlite'; + $skip_tags = array_merge( $skip_tags, [ '@require-mysql', '@require-sqlite' ], version_tags( 'require-mariadb', get_db_version(), '<', $features_folder ) ); break; case 'sqlite': $skip_tags[] = '@require-mariadb'; From 51f8c384ff78f454400c6f9e8d771efe39e2e583 Mon Sep 17 00:00:00 2001 From: Michael Withagen Date: Fri, 25 Jul 2025 13:30:30 +0200 Subject: [PATCH 04/12] Fix linting issue --- src/Context/GivenStepDefinitions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Context/GivenStepDefinitions.php b/src/Context/GivenStepDefinitions.php index 670ae5ba3..248766a0e 100644 --- a/src/Context/GivenStepDefinitions.php +++ b/src/Context/GivenStepDefinitions.php @@ -184,7 +184,7 @@ public function given_a_request_to_a_url_respond_with_file( $url_or_pattern, PyS mkdir( $dir, 0777, true /*recursive*/ ); } - $config_file_contents = << Date: Fri, 25 Jul 2025 13:35:09 +0200 Subject: [PATCH 05/12] Attempt to fix test --- tests/tests/TestBehatTags.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/tests/TestBehatTags.php b/tests/tests/TestBehatTags.php index c884f98ac..fe3fb4f6e 100644 --- a/tests/tests/TestBehatTags.php +++ b/tests/tests/TestBehatTags.php @@ -199,7 +199,7 @@ public function test_behat_tags_db_version(): void { $behat_tags = dirname( dirname( __DIR__ ) ) . '/utils/behat-tags.php'; require $behat_tags; - $minimum_db_version = get_db_version() . '.1'; + $minimum_db_version = \get_db_version() . '.1'; $contents = ''; $expecteds = array(); From 3b7219ba041798d867beae301535c1305400f884 Mon Sep 17 00:00:00 2001 From: Michael Withagen Date: Fri, 25 Jul 2025 13:40:03 +0200 Subject: [PATCH 06/12] Fix tests --- phpstan.neon.dist | 1 + tests/tests/TestBehatTags.php | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 3c2a0976c..1ec98a4f5 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -13,6 +13,7 @@ parameters: - vendor/behat/behat scanFiles: - tests/phpstan/scan-files.php + - tests/util/behat-tags.php treatPhpDocTypesAsCertain: false dynamicConstantNames: - WP_DEBUG diff --git a/tests/tests/TestBehatTags.php b/tests/tests/TestBehatTags.php index fe3fb4f6e..654d31709 100644 --- a/tests/tests/TestBehatTags.php +++ b/tests/tests/TestBehatTags.php @@ -199,7 +199,7 @@ public function test_behat_tags_db_version(): void { $behat_tags = dirname( dirname( __DIR__ ) ) . '/utils/behat-tags.php'; require $behat_tags; - $minimum_db_version = \get_db_version() . '.1'; + $minimum_db_version = get_db_version() . '.1'; $contents = ''; $expecteds = array(); @@ -207,9 +207,9 @@ public function test_behat_tags_db_version(): void { switch ( $db_type ) { case 'mariadb': $contents = "@require-mariadb-$minimum_db_version"; - $expecteds[] = "~@require-mariadb-$minimum_db_version"; $expecteds[] = '~@require-mysql'; $expecteds[] = '~@require-sqlite'; + $expecteds[] = "~@require-mariadb-$minimum_db_version"; break; case 'sqlite': $expecteds[] = '~@require-mariadb'; @@ -219,15 +219,15 @@ public function test_behat_tags_db_version(): void { case 'mysql': default: $contents = "@require-mysql-$minimum_db_version"; - $expecteds[] = "@require-mysql-$minimum_db_version"; $expecteds[] = '~@require-mariadb'; $expecteds[] = '~@require-sqlite'; + $expecteds[] = "@require-mysql-$minimum_db_version"; break; } file_put_contents( $this->temp_dir . '/features/extension.feature', $contents ); - $expected = '--tags=' . implode( '&&', $expecteds ); + $expected = '--tags=' . implode( '&&', array_merge( array( '~@github-api', '~@broken' ), $expecteds ) ); $output = exec( "cd {$this->temp_dir}; php $behat_tags" ); $this->assertSame( $expected, $output ); } From 2f0bfd77f8a2e5118fc0d53601007f59ad71d621 Mon Sep 17 00:00:00 2001 From: Michael Withagen Date: Fri, 25 Jul 2025 13:42:07 +0200 Subject: [PATCH 07/12] Fix path and expectation --- phpstan.neon.dist | 2 +- tests/tests/TestBehatTags.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 1ec98a4f5..4f2e8934a 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -13,7 +13,7 @@ parameters: - vendor/behat/behat scanFiles: - tests/phpstan/scan-files.php - - tests/util/behat-tags.php + - util/behat-tags.php treatPhpDocTypesAsCertain: false dynamicConstantNames: - WP_DEBUG diff --git a/tests/tests/TestBehatTags.php b/tests/tests/TestBehatTags.php index 654d31709..d6561d15d 100644 --- a/tests/tests/TestBehatTags.php +++ b/tests/tests/TestBehatTags.php @@ -221,7 +221,7 @@ public function test_behat_tags_db_version(): void { $contents = "@require-mysql-$minimum_db_version"; $expecteds[] = '~@require-mariadb'; $expecteds[] = '~@require-sqlite'; - $expecteds[] = "@require-mysql-$minimum_db_version"; + $expecteds[] = "~@require-mysql-$minimum_db_version"; break; } From 458128f056698c950cfd0fa6153d7709ca60beef Mon Sep 17 00:00:00 2001 From: Michael Withagen Date: Fri, 25 Jul 2025 13:44:20 +0200 Subject: [PATCH 08/12] Remove entry --- phpstan.neon.dist | 1 - 1 file changed, 1 deletion(-) diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 4f2e8934a..3c2a0976c 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -13,7 +13,6 @@ parameters: - vendor/behat/behat scanFiles: - tests/phpstan/scan-files.php - - util/behat-tags.php treatPhpDocTypesAsCertain: false dynamicConstantNames: - WP_DEBUG From ef382ce70727f5df1139a8cd1f8edbe768812ed1 Mon Sep 17 00:00:00 2001 From: Michael Withagen Date: Fri, 25 Jul 2025 13:50:00 +0200 Subject: [PATCH 09/12] Ignore function not found error --- tests/tests/TestBehatTags.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/tests/TestBehatTags.php b/tests/tests/TestBehatTags.php index d6561d15d..f2df31f51 100644 --- a/tests/tests/TestBehatTags.php +++ b/tests/tests/TestBehatTags.php @@ -199,6 +199,7 @@ public function test_behat_tags_db_version(): void { $behat_tags = dirname( dirname( __DIR__ ) ) . '/utils/behat-tags.php'; require $behat_tags; + // @phpstan-ignore-next-line $minimum_db_version = get_db_version() . '.1'; $contents = ''; From 865e672e0a5bce0e027f468a66220b8759ac3420 Mon Sep 17 00:00:00 2001 From: Michael Withagen Date: Fri, 25 Jul 2025 13:58:11 +0200 Subject: [PATCH 10/12] Add less than support --- tests/tests/TestBehatTags.php | 9 ++++++--- utils/behat-tags.php | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/tests/tests/TestBehatTags.php b/tests/tests/TestBehatTags.php index f2df31f51..599934dec 100644 --- a/tests/tests/TestBehatTags.php +++ b/tests/tests/TestBehatTags.php @@ -200,17 +200,19 @@ public function test_behat_tags_db_version(): void { $behat_tags = dirname( dirname( __DIR__ ) ) . '/utils/behat-tags.php'; require $behat_tags; // @phpstan-ignore-next-line - $minimum_db_version = get_db_version() . '.1'; + $db_version = get_db_version(); + $minimum_db_version = $db_version . '.1'; $contents = ''; $expecteds = array(); switch ( $db_type ) { case 'mariadb': - $contents = "@require-mariadb-$minimum_db_version"; + $contents = "@require-mariadb-$minimum_db_version @less-than-mariadb-$db_version"; $expecteds[] = '~@require-mysql'; $expecteds[] = '~@require-sqlite'; $expecteds[] = "~@require-mariadb-$minimum_db_version"; + $expecteds[] = "~@require-mariadb-$db_version"; break; case 'sqlite': $expecteds[] = '~@require-mariadb'; @@ -219,10 +221,11 @@ public function test_behat_tags_db_version(): void { break; case 'mysql': default: - $contents = "@require-mysql-$minimum_db_version"; + $contents = "@require-mysql-$minimum_db_version @less-than-mysql-$db_version"; $expecteds[] = '~@require-mariadb'; $expecteds[] = '~@require-sqlite'; $expecteds[] = "~@require-mysql-$minimum_db_version"; + $expecteds[] = "~@require-mysql-$db_version"; break; } diff --git a/utils/behat-tags.php b/utils/behat-tags.php index 337b2c0e5..bf9c42c0e 100644 --- a/utils/behat-tags.php +++ b/utils/behat-tags.php @@ -84,9 +84,16 @@ function get_db_version() { $skip_tags[] = '@broken-trunk'; } +$db_version = get_db_version(); + switch ( getenv( 'WP_CLI_TEST_DBTYPE' ) ) { case 'mariadb': - $skip_tags = array_merge( $skip_tags, [ '@require-mysql', '@require-sqlite' ], version_tags( 'require-mariadb', get_db_version(), '<', $features_folder ) ); + $skip_tags = array_merge( + $skip_tags, + [ '@require-mysql', '@require-sqlite' ], + version_tags( 'require-mariadb', $db_version, '<', $features_folder ), + version_tags( 'less-than-mariadb', $db_version, '>=', $features_folder ) + ); break; case 'sqlite': $skip_tags[] = '@require-mariadb'; @@ -95,7 +102,12 @@ function get_db_version() { break; case 'mysql': default: - $skip_tags = array_merge( $skip_tags, [ '@require-mariadb', '@require-sqlite' ], version_tags( 'require-mysql', get_db_version(), '<', $features_folder ) ); + $skip_tags = array_merge( + $skip_tags, + [ '@require-mariadb', '@require-sqlite' ], + version_tags( 'require-mysql', $db_version, '<', $features_folder ), + version_tags( 'less-than-mysql', $db_version, '>=', $features_folder ) + ); break; } From b7e5ea0266c7b9d2c0cfaf1f659209d99a85cb83 Mon Sep 17 00:00:00 2001 From: Michael Withagen Date: Fri, 25 Jul 2025 14:00:10 +0200 Subject: [PATCH 11/12] Fix expectation --- tests/tests/TestBehatTags.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/tests/TestBehatTags.php b/tests/tests/TestBehatTags.php index 599934dec..77e6b7679 100644 --- a/tests/tests/TestBehatTags.php +++ b/tests/tests/TestBehatTags.php @@ -212,7 +212,7 @@ public function test_behat_tags_db_version(): void { $expecteds[] = '~@require-mysql'; $expecteds[] = '~@require-sqlite'; $expecteds[] = "~@require-mariadb-$minimum_db_version"; - $expecteds[] = "~@require-mariadb-$db_version"; + $expecteds[] = "~@less-than-mariadb-$db_version"; break; case 'sqlite': $expecteds[] = '~@require-mariadb'; @@ -225,7 +225,7 @@ public function test_behat_tags_db_version(): void { $expecteds[] = '~@require-mariadb'; $expecteds[] = '~@require-sqlite'; $expecteds[] = "~@require-mysql-$minimum_db_version"; - $expecteds[] = "~@require-mysql-$db_version"; + $expecteds[] = "~@less-than-mysql-$db_version"; break; } From 4d0d4d16bce9177d9b75f99a60c87056a5bd1794 Mon Sep 17 00:00:00 2001 From: Michael Withagen Date: Fri, 25 Jul 2025 19:49:33 +0200 Subject: [PATCH 12/12] Update getting version from db, add mariadb support --- utils/behat-tags.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/utils/behat-tags.php b/utils/behat-tags.php index bf9c42c0e..c6fa9833e 100644 --- a/utils/behat-tags.php +++ b/utils/behat-tags.php @@ -41,7 +41,8 @@ function version_tags( } function get_db_version() { - preg_match( '@[0-9]+\.[0-9]+\.[0-9]+@', exec( 'mysql -V' ), $version ); + $version_string = exec( getenv( 'WP_CLI_TEST_DBTYPE' ) === 'mariadb' ? 'mariadb --version' : 'mysql -V' ); + preg_match( '@[0-9]+\.[0-9]+\.[0-9]+@', $version_string, $version ); return $version[0]; }