Skip to content

Commit ce7412d

Browse files
authored
Add ability to specify minimum mysql version requirement (#266)
1 parent f6490e6 commit ce7412d

File tree

3 files changed

+64
-5
lines changed

3 files changed

+64
-5
lines changed

src/Context/GivenStepDefinitions.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ public function given_a_request_to_a_url_respond_with_file( $url_or_pattern, PyS
184184
mkdir( $dir, 0777, true /*recursive*/ );
185185
}
186186

187-
$config_file_contents = <<<FILE
187+
$config_file_contents = <<<'FILE'
188188
require:
189189
- mock-requests.php
190190
FILE;

tests/tests/TestBehatTags.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use WP_CLI\Utils;
77
use PHPUnit\Framework\Attributes\DataProvider;
88

9+
// phpcs:ignore Universal.Files.SeparateFunctionsFromOO.Mixed
910
class TestBehatTags extends TestCase {
1011

1112
/**
@@ -192,4 +193,46 @@ public function test_behat_tags_extension(): void {
192193

193194
putenv( false === $env_github_token ? 'GITHUB_TOKEN' : "GITHUB_TOKEN=$env_github_token" );
194195
}
196+
197+
public function test_behat_tags_db_version(): void {
198+
$db_type = getenv( 'WP_CLI_TEST_DBTYPE' );
199+
200+
$behat_tags = dirname( dirname( __DIR__ ) ) . '/utils/behat-tags.php';
201+
require $behat_tags;
202+
// @phpstan-ignore-next-line
203+
$db_version = get_db_version();
204+
$minimum_db_version = $db_version . '.1';
205+
206+
$contents = '';
207+
$expecteds = array();
208+
209+
switch ( $db_type ) {
210+
case 'mariadb':
211+
$contents = "@require-mariadb-$minimum_db_version @less-than-mariadb-$db_version";
212+
$expecteds[] = '~@require-mysql';
213+
$expecteds[] = '~@require-sqlite';
214+
$expecteds[] = "~@require-mariadb-$minimum_db_version";
215+
$expecteds[] = "~@less-than-mariadb-$db_version";
216+
break;
217+
case 'sqlite':
218+
$expecteds[] = '~@require-mariadb';
219+
$expecteds[] = '~@require-mysql';
220+
$expecteds[] = '~@require-mysql-or-mariadb';
221+
break;
222+
case 'mysql':
223+
default:
224+
$contents = "@require-mysql-$minimum_db_version @less-than-mysql-$db_version";
225+
$expecteds[] = '~@require-mariadb';
226+
$expecteds[] = '~@require-sqlite';
227+
$expecteds[] = "~@require-mysql-$minimum_db_version";
228+
$expecteds[] = "~@less-than-mysql-$db_version";
229+
break;
230+
}
231+
232+
file_put_contents( $this->temp_dir . '/features/extension.feature', $contents );
233+
234+
$expected = '--tags=' . implode( '&&', array_merge( array( '~@github-api', '~@broken' ), $expecteds ) );
235+
$output = exec( "cd {$this->temp_dir}; php $behat_tags" );
236+
$this->assertSame( $expected, $output );
237+
}
195238
}

utils/behat-tags.php

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ function version_tags(
4040
return $skip_tags;
4141
}
4242

43+
function get_db_version() {
44+
$version_string = exec( getenv( 'WP_CLI_TEST_DBTYPE' ) === 'mariadb' ? 'mariadb --version' : 'mysql -V' );
45+
preg_match( '@[0-9]+\.[0-9]+\.[0-9]+@', $version_string, $version );
46+
return $version[0];
47+
}
48+
4349
$features_folder = getenv( 'BEHAT_FEATURES_FOLDER' ) ?: 'features';
4450
$wp_version = getenv( 'WP_VERSION' );
4551
$wp_version_reqs = array();
@@ -79,10 +85,16 @@ function version_tags(
7985
$skip_tags[] = '@broken-trunk';
8086
}
8187

88+
$db_version = get_db_version();
89+
8290
switch ( getenv( 'WP_CLI_TEST_DBTYPE' ) ) {
8391
case 'mariadb':
84-
$skip_tags[] = '@require-mysql';
85-
$skip_tags[] = '@require-sqlite';
92+
$skip_tags = array_merge(
93+
$skip_tags,
94+
[ '@require-mysql', '@require-sqlite' ],
95+
version_tags( 'require-mariadb', $db_version, '<', $features_folder ),
96+
version_tags( 'less-than-mariadb', $db_version, '>=', $features_folder )
97+
);
8698
break;
8799
case 'sqlite':
88100
$skip_tags[] = '@require-mariadb';
@@ -91,8 +103,12 @@ function version_tags(
91103
break;
92104
case 'mysql':
93105
default:
94-
$skip_tags[] = '@require-mariadb';
95-
$skip_tags[] = '@require-sqlite';
106+
$skip_tags = array_merge(
107+
$skip_tags,
108+
[ '@require-mariadb', '@require-sqlite' ],
109+
version_tags( 'require-mysql', $db_version, '<', $features_folder ),
110+
version_tags( 'less-than-mysql', $db_version, '>=', $features_folder )
111+
);
96112
break;
97113
}
98114

0 commit comments

Comments
 (0)