wordpress-develop/tests/phpunit/tests
Tonya Mork 214b196ce9 Build/Test Tools: Revert r57684.
Changes to the `test_readme_mariadb_version()` test were made in an effort to stabilize the connection tests and CI failures. After the changeset, all multisite tests CI jobs connected and passed, but oddly all single site tests CI jobs repeatedly and consistently failed.

Reverting to unblock the CI jobs while continued investigation happens.

See #59647.

git-svn-id: https://develop.svn.wordpress.org/trunk@57689 602fd350-edb4-49c9-b593-d223f7449a82
2024-02-21 20:04:50 +00:00
..
admin Export: Include featured image for posts or pages. 2024-02-21 18:13:27 +00:00
ajax Tests: Use assertSame() in some newly introduced tests. 2024-01-06 12:59:49 +00:00
attachment Coding Standards: Remove superfluous blank lines at the end of various classes. 2023-09-08 09:30:38 +00:00
block-bindings Editor: Merge uses_context defined by block bindings sources with block types 2024-02-16 12:53:16 +00:00
block-supports Editor: Fix instance element styles for links applying to buttons. 2024-02-20 11:20:22 +00:00
block-templates Block Hooks: Set ignoredHookedBlocks metadata upon saving. 2024-02-13 15:10:21 +00:00
blocks Block Hooks: Make test a bit easier to read. 2024-02-21 10:47:49 +00:00
bookmark Tests: Use the function get_num_queries across all unit tests. 2023-05-11 10:05:51 +00:00
canonical Media: Redirect inactive attachment pages for logged-out users. 2024-01-25 17:34:54 +00:00
category Tests: Improve the @group annotation accuracy and consistency. 2023-10-19 13:51:04 +00:00
comment Themes: Use original template paths when switching blogs. 2024-02-21 19:24:12 +00:00
compat General: Add tests for array_is_list polyfill added in r57337. 2024-02-05 21:57:44 +00:00
cron Cron API: Modify _get_cron_array() to always return an array. 2022-07-29 03:32:58 +00:00
customize Tests: Add a @ticket reference for WP_Customize_Manager::trash_changeset_post() test. 2024-01-05 11:38:34 +00:00
date Tests: Add unit tests for wp_checkdate(). 2023-12-12 12:19:38 +00:00
db Docs: Replace "sanity" with "confidence" for inclusive language. 2024-01-03 21:57:32 +00:00
dependencies Script Modules API: Add import map polyfill for older browsers 2024-01-31 08:29:18 +00:00
diff Code Modernization: Use wp_trigger_error() in WP_Text_Diff_Renderer_Table magic methods. 2023-09-07 20:46:53 +00:00
editor Tests: Improve the @group annotation accuracy and consistency. 2023-10-19 13:51:04 +00:00
error-protection Tests: Rename classes in phpunit/tests/error-protection/ per the naming conventions. 2021-08-21 15:32:53 +00:00
feed Tests: Reduce usage of assertEquals 2023-09-29 15:22:12 +00:00
filesystem Upload: Fallback to PclZip to validate ZIP file uploads. 2024-02-05 22:21:35 +00:00
fonts Editor: Ensure font collection metadata can be properly localized. 2024-02-21 19:24:14 +00:00
formatting Emoji: Replace twitter/twemoji with jdecked/twemoji. 2024-02-13 14:34:17 +00:00
functions Tests: Adjust the meta key time in wp_scheduled_delete() tests. 2024-02-11 17:02:46 +00:00
general Tests: Use a @requires annotation for readonly() function test. 2023-10-26 20:31:45 +00:00
hooks Tests: Add hook priority call order tests. 2024-01-09 16:32:14 +00:00
html-api HTML API: Reset parser state after seeking to bookmark. 2024-02-02 22:55:27 +00:00
http HTTP API: Ensure cookie names are cast to strings. 2024-01-31 12:51:39 +00:00
image Tests: Use assertSame() in wp_read_image_metadata() tests. 2024-02-20 18:14:41 +00:00
import Coding Standards: Remove redundant ignore annotations. 2023-09-28 00:02:47 +00:00
includes Code Modernization: Explicitly declare all properties created in set_up() methods of various test classes. 2022-08-27 12:30:08 +00:00
interactivity-api Interactivity API: Skip instead of bail out if HTML contains SVG or MATH. 2024-02-17 15:26:43 +00:00
kses Editor: Add PHPUnit tests for 5.9.0 new functions. 2022-10-04 14:20:18 +00:00
l10n I18N: Fix plural forms parsing in WP_Translation_File. 2024-02-01 20:57:03 +00:00
link Posts, Post Types: Don't force trailing slash in get_pagenum_link(). 2023-10-16 00:05:28 +00:00
load Tests: Improve the @group annotation accuracy and consistency. 2023-10-19 13:51:04 +00:00
media Media: Consider inline image CSS width to backfill width and height attributes. 2024-01-16 17:01:30 +00:00
menu Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
meta Revisions: framework for storing post meta revisions. 2023-09-26 15:30:34 +00:00
multisite Coding Standards: Use pre-increment/decrement for stand-alone statements. 2023-09-09 09:26:01 +00:00
oembed Embeds: Ensure the deprecated function print_emoji_styles isn't used 2024-01-17 21:34:24 +00:00
option Options, Meta APIs: Fast follow fixes for option cache priming functions. 2023-10-30 22:56:25 +00:00
pluggable Coding Standards: Use pre-increment/decrement for stand-alone statements. 2023-09-09 09:26:01 +00:00
pomo Code Modernization: Use dirname() with the $levels parameter. 2023-09-11 04:51:09 +00:00
post Tests: Use assertSame() in wp_insert_post() tests. 2024-02-21 17:33:54 +00:00
privacy Docs: Fix various incorrect WP-flavored array specifications. 2023-11-09 09:49:41 +00:00
query Tests: Use assertSame() in WP_Query tests involving ::$max_num_pages property. 2024-02-18 18:59:24 +00:00
rest-api Tests: Synchronize Theme.JSON unit test between Core and Gutenberg. 2024-02-20 09:53:11 +00:00
rewrite Coding Standards: Remove superfluous blank lines at the end of various classes. 2023-09-08 09:30:38 +00:00
script-modules Script Modules API: Add deregister module function 2024-02-12 12:58:53 +00:00
sitemaps Sitemaps: add lastmod for individual posts and the homepage. 2023-10-23 15:40:44 +00:00
style-engine Editor: introduce dimensions.aspectRatio block support. 2024-01-31 02:52:25 +00:00
taxonomy Build/Test Tools: Implement use of the void solution. 2021-08-07 10:29:41 +00:00
term Taxonomy: Check for empty term after DB sanitization in wp_insert_term(). 2024-01-08 22:42:49 +00:00
theme Tests: Synchronize Theme.JSON unit test between Core and Gutenberg. 2024-02-20 09:53:11 +00:00
url Tests: Second pass at merging file-level and class-level DocBlocks in various unit test files. 2023-03-03 14:42:42 +00:00
user Docs: Correct the WP_User Query location reference in query cache tests. 2024-01-22 19:40:18 +00:00
widgets Tests: Reduce usage of assertEquals 2023-09-29 15:22:12 +00:00
wp Tests: Move the tests for WP class methods to the wp directory. 2022-10-28 14:08:20 +00:00
xmlrpc XML-RPC: Add alt attribute value to media item API. 2023-09-20 19:29:30 +00:00
actions.php Tests: Add hook priority call order tests. 2024-01-09 16:32:14 +00:00
adminbar.php Tests: Add tests to ensure the contribute Toolbar node is added when appropriate. 2023-07-13 12:39:42 +00:00
auth.php REST API: Correct parsing of password from Authorization header when processing Application Password credentials. 2023-10-09 14:47:57 +00:00
avatar.php Coding Standards: Remove superfluous blank lines at the end of various classes. 2023-09-08 09:30:38 +00:00
basic.php Tests: Separate the tests in basic.php for clarity. 2022-07-07 23:55:13 +00:00
block-template-utils.php Tests: Improve code coverage for _build_block_template_result_from_file 2023-10-23 05:36:50 +00:00
block-template.php Themes: Improve the performance of _get_block_templates_paths. 2023-12-20 20:00:04 +00:00
cache.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
canonical.php Canonical: Limit post types searched by redirect_guess_404_permalink(). 2024-02-16 23:32:48 +00:00
comment.php Tests: Reset the current user before performing assertions in some comment tests. 2023-10-15 08:07:11 +00:00
cron.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
db.php Database: Reinstate wpdb::$use_mysqli property. 2023-11-08 20:31:34 +00:00
dependencies.php Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
file.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
filters.php Tests: Add hook priority call order tests. 2024-01-09 16:32:14 +00:00
functions.php Media: enable AVIF support. 2024-02-02 17:46:50 +00:00
https-detection.php Security: remove the cron event that checked for https support. 2023-09-22 19:06:45 +00:00
https-migration.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
kses.php KSES: Add background-repeat to the list of safe CSS properties. 2023-12-26 14:22:45 +00:00
l10n.php Tests: Ensure prerequisites are met for draft length tests in Tests_L10n. 2022-10-01 15:47:13 +00:00
link.php Posts, Post Types: Don't force trailing slash in get_pagenum_link(). 2023-10-16 00:05:28 +00:00
locale.php I18N: Introduce word_count_type property to WP_Locale. 2023-02-07 17:26:14 +00:00
media.php Media: Ensure wp_mine_type_icon() returns expected file type. 2024-02-21 19:25:18 +00:00
meta.php Tests: Reduce usage of assertEquals 2023-09-29 15:22:12 +00:00
post.php Docs: Replace "sanity" with "confidence" for inclusive language. 2024-01-03 21:57:32 +00:00
query.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
readme.php Build/Test Tools: Revert r57684. 2024-02-21 20:04:50 +00:00
rest-api.php Tests: Avoid an infinite loop in Spy_REST_Server if a non-existing method is called. 2023-11-23 14:39:16 +00:00
rewrite.php Code Modernization: Check the return type of parse_url() in url_to_postid(). 2022-10-01 03:23:41 +00:00
robots.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00
shortcode.php Shortcodes: Always return an array in shortcode_parse_atts(). 2024-02-12 16:06:47 +00:00
taxonomy.php Taxonomy: add taxonomy for user pattern categories. 2023-09-21 04:23:12 +00:00
template.php Themes: Deprecate usage of TEMPLATEPATH and STYLESHEETPATH constants. 2023-09-20 17:25:26 +00:00
term.php Tests: Improve the @group annotation accuracy and consistency. 2023-10-19 13:51:04 +00:00
theme-previews.php Editor: Add function prefix to avoid conflicts. 2023-10-02 22:40:36 +00:00
theme.php Themes: Use original template paths when switching blogs. 2024-02-21 19:24:12 +00:00
upload.php Coding Standards: Remove superfluous blank lines at the end of various classes. 2023-09-08 09:30:38 +00:00
url.php Coding Standards: Use pre-increment/decrement for stand-alone statements. 2023-09-09 09:26:01 +00:00
user.php Tests: Reduce usage of assertEquals 2023-09-29 15:22:12 +00:00
utils.php Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
vars.php Tests: Improve the @group annotation accuracy and consistency. 2023-10-19 13:51:04 +00:00
walker.php Coding Standards: Remove superfluous blank lines at the end of various functions. 2023-09-08 10:01:14 +00:00
widgets.php Coding Standards: Include one space after function keyword for closures. 2023-09-12 15:21:02 +00:00

<?php
/**
 * Validate recommended versions for dependencies referenced in `readme.html`,
 * based on external site support pages.
 *
 * @group external-http
 */
class Tests_Readme extends WP_UnitTestCase {

	/**
	 * @coversNothing
	 */
	public function test_readme_php_version() {
		$this->markTestSkipped(
			'Temporarily disabled. Test should be re-enabled once WordPress is fully compatible with PHP 8.0+.'
		);

		// This test is designed to only run on trunk.
		$this->skipOnAutomatedBranches();

		$readme = file_get_contents( ABSPATH . 'readme.html' );

		preg_match( '#Recommendations.*PHP</a> version <strong>([0-9.]*)#s', $readme, $matches );

		$response_body = $this->get_response_body( 'https://www.php.net/supported-versions.php' );

		preg_match_all( '#<tr class="stable">\s*<td>\s*<a [^>]*>\s*([0-9.]*)#s', $response_body, $php_matches );

		$this->assertContains( $matches[1], $php_matches[1], "readme.html's Recommended PHP version is too old. Remember to update the WordPress.org Requirements page, too." );
	}

	/**
	 * @coversNothing
	 */
	public function test_readme_mysql_version() {
		// This test is designed to only run on trunk.
		$this->skipOnAutomatedBranches();

		$readme = file_get_contents( ABSPATH . 'readme.html' );

		preg_match( '#Recommendations.*MySQL</a> version <strong>([0-9.]*)#s', $readme, $matches );

		$response_body = $this->get_response_body( "https://dev.mysql.com/doc/relnotes/mysql/{$matches[1]}/en/" );

		// Retrieve the date of the first GA release for the recommended branch.
		preg_match( '#.*(\d{4}-\d{2}-\d{2}), General Availability#s', $response_body, $mysql_matches );

		/*
		 * Per https://www.mysql.com/support/, Oracle actively supports MySQL releases for 5 years from GA release.
		 *
		 * The currently recommended MySQL 8.0 branch moved from active support to extended support on 2023-04-19.
		 * As WordPress core may not be fully compatible with MySQL 8.1 at this time, the "supported" period here
		 * is increased to 8 years to include extended support.
		 *
		 * TODO: Reduce this back to 5 years once MySQL 8.1 compatibility is achieved.
		 */
		$mysql_eol    = gmdate( 'Y-m-d', strtotime( $mysql_matches[1] . ' +8 years' ) );
		$current_date = gmdate( 'Y-m-d' );

		$this->assertLessThan( $mysql_eol, $current_date, "readme.html's Recommended MySQL version is too old. Remember to update the WordPress.org Requirements page, too." );
	}

	/**
	 * @coversNothing
	 */
	public function test_readme_mariadb_version() {
		// This test is designed to only run on trunk.
		$this->skipOnAutomatedBranches();

		$readme = file_get_contents( ABSPATH . 'readme.html' );

		preg_match( '#Recommendations.*MariaDB</a> version <strong>([0-9.]*)#s', $readme, $matches );
		$matches[1] = str_replace( '.', '', $matches[1] );

		$response_body = $this->get_response_body( "https://mariadb.com/kb/en/release-notes-mariadb-{$matches[1]}-series/" );

		// Retrieve the date of the first stable release for the recommended branch.
		preg_match( '#.*Stable.*?(\d{2} [A-Za-z]{3} \d{4})#s', $response_body, $mariadb_matches );

		// Per https://mariadb.org/about/#maintenance-policy, MariaDB releases are supported for 5 years.
		$mariadb_eol  = gmdate( 'Y-m-d', strtotime( $mariadb_matches[1] . ' +5 years' ) );
		$current_date = gmdate( 'Y-m-d' );

		$this->assertLessThan( $mariadb_eol, $current_date, "readme.html's Recommended MariaDB version is too old. Remember to update the WordPress.org Requirements page, too." );
	}

	/**
	 * Helper function to retrieve the response body or skip the test on HTTP timeout.
	 *
	 * @param string $url The URL to retrieve the response from.
	 * @return string The response body.
	 */
	public function get_response_body( $url ) {
		$response = wp_remote_get( $url );

		$this->skipTestOnTimeout( $response );

		$response_code = wp_remote_retrieve_response_code( $response );
		$response_body = wp_remote_retrieve_body( $response );

		if ( 200 !== $response_code ) {
			$parsed_url = parse_url( $url );

			$error_message = sprintf(
				'Could not contact %1$s to check versions. Response code: %2$s. Response body: %3$s',
				$parsed_url['host'],
				$response_code,
				$response_body
			);

			if ( 503 === $response_code ) {
				$this->markTestSkipped( $error_message );
			}

			$this->fail( $error_message );
		}

		return $response_body;
	}
}