Skip to content

Commit 26313e2

Browse files
Copilotswissspidy
andauthored
Add @skip-<dbtype> tags for database-specific test exclusion (#302)
* Initial plan * Add support for @skip-mysql, @skip-mariadb, @skip-sqlite tags - Updated utils/behat-tags.php to add skip tags based on database type - Updated all test cases in tests/tests/TestBehatTags.php to expect new skip tags - Added new test method test_behat_tags_skip_db_type to specifically test the skip tags Co-authored-by: swissspidy <841956+swissspidy@users.noreply.github.com> * Add test scenarios demonstrating @skip-<dbtype> tags in features/testing.feature Co-authored-by: swissspidy <841956+swissspidy@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: swissspidy <841956+swissspidy@users.noreply.github.com>
1 parent aaa3187 commit 26313e2

File tree

3 files changed

+85
-2
lines changed

3 files changed

+85
-2
lines changed

features/testing.feature

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,34 @@ Feature: Test that WP-CLI loads.
8080
"""
8181
6.3.1
8282
"""
83+
84+
@skip-mysql
85+
Scenario: Skip on MySQL databases
86+
Given a WP install
87+
88+
When I run `wp eval 'echo "This should only run on MariaDB or SQLite";'`
89+
Then STDOUT should contain:
90+
"""
91+
This should only run on MariaDB or SQLite
92+
"""
93+
94+
@skip-mariadb
95+
Scenario: Skip on MariaDB databases
96+
Given a WP install
97+
98+
When I run `wp eval 'echo "This should only run on MySQL or SQLite";'`
99+
Then STDOUT should contain:
100+
"""
101+
This should only run on MySQL or SQLite
102+
"""
103+
104+
@skip-sqlite
105+
Scenario: Skip on SQLite databases
106+
Given a WP install
107+
108+
When I run `wp eval 'echo "This should only run on MySQL or MariaDB";'`
109+
Then STDOUT should contain:
110+
"""
111+
This should only run on MySQL or MariaDB
112+
"""
113+

tests/tests/TestBehatTags.php

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,19 @@ public function test_behat_tags_wp_version_github_token( $env, $expected ): void
6666
case 'mariadb':
6767
$expected .= '&&~@require-mysql';
6868
$expected .= '&&~@require-sqlite';
69+
$expected .= '&&~@skip-mariadb';
6970
break;
7071
case 'sqlite':
7172
$expected .= '&&~@require-mariadb';
7273
$expected .= '&&~@require-mysql';
7374
$expected .= '&&~@require-mysql-or-mariadb';
75+
$expected .= '&&~@skip-sqlite';
7476
break;
7577
case 'mysql':
7678
default:
7779
$expected .= '&&~@require-mariadb';
7880
$expected .= '&&~@require-sqlite';
81+
$expected .= '&&~@skip-mysql';
7982
break;
8083
}
8184

@@ -150,16 +153,19 @@ public function test_behat_tags_php_version(): void {
150153
case 'mariadb':
151154
$expected .= '&&~@require-mysql';
152155
$expected .= '&&~@require-sqlite';
156+
$expected .= '&&~@skip-mariadb';
153157
break;
154158
case 'sqlite':
155159
$expected .= '&&~@require-mariadb';
156160
$expected .= '&&~@require-mysql';
157161
$expected .= '&&~@require-mysql-or-mariadb';
162+
$expected .= '&&~@skip-sqlite';
158163
break;
159164
case 'mysql':
160165
default:
161166
$expected .= '&&~@require-mariadb';
162167
$expected .= '&&~@require-sqlite';
168+
$expected .= '&&~@skip-mysql';
163169
break;
164170
}
165171

@@ -187,16 +193,19 @@ public function test_behat_tags_extension(): void {
187193
case 'mariadb':
188194
$expecteds[] = '~@require-mysql';
189195
$expecteds[] = '~@require-sqlite';
196+
$expecteds[] = '~@skip-mariadb';
190197
break;
191198
case 'sqlite':
192199
$expecteds[] = '~@require-mariadb';
193200
$expecteds[] = '~@require-mysql';
194201
$expecteds[] = '~@require-mysql-or-mariadb';
202+
$expecteds[] = '~@skip-sqlite';
195203
break;
196204
case 'mysql':
197205
default:
198206
$expecteds[] = '~@require-mariadb';
199207
$expecteds[] = '~@require-sqlite';
208+
$expecteds[] = '~@skip-mysql';
200209
break;
201210
}
202211

@@ -231,19 +240,22 @@ public function test_behat_tags_db_version(): void {
231240
$contents = "@require-mariadb-$minimum_db_version @less-than-mariadb-$db_version";
232241
$expecteds[] = '~@require-mysql';
233242
$expecteds[] = '~@require-sqlite';
243+
$expecteds[] = '~@skip-mariadb';
234244
$expecteds[] = "~@require-mariadb-$minimum_db_version";
235245
$expecteds[] = "~@less-than-mariadb-$db_version";
236246
break;
237247
case 'sqlite':
238248
$expecteds[] = '~@require-mariadb';
239249
$expecteds[] = '~@require-mysql';
240250
$expecteds[] = '~@require-mysql-or-mariadb';
251+
$expecteds[] = '~@skip-sqlite';
241252
break;
242253
case 'mysql':
243254
default:
244255
$contents = "@require-mysql-$minimum_db_version @less-than-mysql-$db_version";
245256
$expecteds[] = '~@require-mariadb';
246257
$expecteds[] = '~@require-sqlite';
258+
$expecteds[] = '~@skip-mysql';
247259
$expecteds[] = "~@require-mysql-$minimum_db_version";
248260
$expecteds[] = "~@less-than-mysql-$db_version";
249261
break;
@@ -255,4 +267,43 @@ public function test_behat_tags_db_version(): void {
255267
$output = exec( "cd {$this->temp_dir}; php $behat_tags" );
256268
$this->assertSame( $expected, $output );
257269
}
270+
271+
public function test_behat_tags_skip_db_type(): void {
272+
$env_github_token = getenv( 'GITHUB_TOKEN' );
273+
$db_type = getenv( 'WP_CLI_TEST_DBTYPE' );
274+
275+
putenv( 'GITHUB_TOKEN' );
276+
277+
$behat_tags = dirname( dirname( __DIR__ ) ) . '/utils/behat-tags.php';
278+
279+
file_put_contents( $this->temp_dir . '/features/skip_db.feature', '@skip-mysql @skip-mariadb @skip-sqlite' );
280+
281+
$expecteds = array();
282+
283+
switch ( $db_type ) {
284+
case 'mariadb':
285+
$expecteds[] = '~@require-mysql';
286+
$expecteds[] = '~@require-sqlite';
287+
$expecteds[] = '~@skip-mariadb';
288+
break;
289+
case 'sqlite':
290+
$expecteds[] = '~@require-mariadb';
291+
$expecteds[] = '~@require-mysql';
292+
$expecteds[] = '~@require-mysql-or-mariadb';
293+
$expecteds[] = '~@skip-sqlite';
294+
break;
295+
case 'mysql':
296+
default:
297+
$expecteds[] = '~@require-mariadb';
298+
$expecteds[] = '~@require-sqlite';
299+
$expecteds[] = '~@skip-mysql';
300+
break;
301+
}
302+
303+
$expected = '--tags=' . implode( '&&', array_merge( array( '~@github-api', '~@broken' ), $expecteds ) );
304+
$output = exec( "cd {$this->temp_dir}; php $behat_tags" );
305+
$this->assertSame( $expected, $output );
306+
307+
putenv( false === $env_github_token ? 'GITHUB_TOKEN' : "GITHUB_TOKEN=$env_github_token" );
308+
}
258309
}

utils/behat-tags.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ function get_db_version() {
173173
case 'mariadb':
174174
$skip_tags = array_merge(
175175
$skip_tags,
176-
[ '@require-mysql', '@require-sqlite' ],
176+
[ '@require-mysql', '@require-sqlite', '@skip-mariadb' ],
177177
version_tags( 'require-mariadb', $db_version, '<', $features_folder ),
178178
version_tags( 'less-than-mariadb', $db_version, '>=', $features_folder )
179179
);
@@ -182,12 +182,13 @@ function get_db_version() {
182182
$skip_tags[] = '@require-mariadb';
183183
$skip_tags[] = '@require-mysql';
184184
$skip_tags[] = '@require-mysql-or-mariadb';
185+
$skip_tags[] = '@skip-sqlite';
185186
break;
186187
case 'mysql':
187188
default:
188189
$skip_tags = array_merge(
189190
$skip_tags,
190-
[ '@require-mariadb', '@require-sqlite' ],
191+
[ '@require-mariadb', '@require-sqlite', '@skip-mysql' ],
191192
version_tags( 'require-mysql', $db_version, '<', $features_folder ),
192193
version_tags( 'less-than-mysql', $db_version, '>=', $features_folder )
193194
);

0 commit comments

Comments
 (0)