wordpress-develop/tests/phpunit/tests
Sergey Biryukov 1b42990b0c Tests: Temporarily disable a WP_Http test for multiple Location headers.
The test verifies that `WP_Http::handle_redirects()` uses the last specified URL as the redirect location if multiple `Location` headers are specified in the response.

It appears that the redirection script on api.wordpress.org no longer sends the expected two `Location` headers, causing the test to fail.

While the exact cause is being investigated and confirmed, this commit disables the affected test for now, so that other commits and PRs are not blocked by these failures.

Follow-up to [342/tests], [874/tests], [1329/tests], [24846].

Props costdev, SergeyBiryukov.
See #57306.

git-svn-id: https://develop.svn.wordpress.org/trunk@54955 602fd350-edb4-49c9-b593-d223f7449a82
2022-12-10 13:31:55 +00:00
..
admin Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2022-11-29 12:32:37 +00:00
ajax Tests: Prevent wp_update_themes() from running in wp_ajax_update_theme() tests. 2022-10-30 03:48:53 +00:00
attachment Build/Test Tools: Add and fix @covers tags to the attachments and block-supports test groups. 2022-07-07 21:06:03 +00:00
block-supports Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2022-11-29 12:32:37 +00:00
block-templates Editor: Adds template types, is_wp_suggestion, and fallback template content. 2022-09-20 21:19:10 +00:00
blocks Coding Standards: Fix a non-snake_case function name in WP_Block tests. 2022-11-30 18:30:57 +00:00
bookmark General: Fix 'rel' argument in Tests_Functions_wpListBookmarks test datasets. 2021-12-21 00:10:26 +00:00
canonical Code Modernization: Explicitly declare all properties created in set_up() methods of various test classes. 2022-08-27 12:30:08 +00:00
category Tests: Split the tests from category.php into individual test classes. 2022-10-29 14:38:18 +00:00
comment Comments: Make moderated or disallowed key check case-insensitive for non-Latin words. 2022-11-28 19:42:56 +00:00
compat Tests: Restore @covers tags for PHP polyfill tests in phpunit/tests/compat/. 2022-09-03 14:45:20 +00:00
cron Cron API: Modify _get_cron_array() to always return an array. 2022-07-29 03:32:58 +00:00
customize Coding Standards: Remove extra slashes when concatenating ABSPATH with a path. 2022-11-24 22:09:39 +00:00
date Coding Standards: Fix spacing for incrementors and decrementors in various files. 2022-11-29 21:11:42 +00:00
db Tests: Correct references to set_up() and tear_down() in various DocBlocks. 2022-11-22 21:25:27 +00:00
dependencies Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
editor Editor: Add PHPUnit tests for 5.9.0 new functions. 2022-10-04 14:20:18 +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 Coding Standards: Remove extra slashes when concatenating ABSPATH with a path. 2022-11-24 22:09:39 +00:00
filesystem Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2021-11-04 15:22:47 +00:00
formatting Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
functions Tests: Add a public visibility to wp_filesize() tests. 2022-11-22 15:09:33 +00:00
general Feeds: Add a set of fine-grained filters to disable the different types of feed links separately. 2022-09-14 17:12:20 +00:00
hooks Code Modernization: Explicitly declare all properties in various tests. 2022-08-25 15:34:24 +00:00
http Tests: Temporarily disable a WP_Http test for multiple Location headers. 2022-12-10 13:31:55 +00:00
image Media: ensure the wp_editor_set_quality filter consistently passes the correct output mime type. 2022-10-07 19:15:59 +00:00
import Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +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
kses Editor: Add PHPUnit tests for 5.9.0 new functions. 2022-10-04 14:20:18 +00:00
l10n I18N: Change how WP_Textdomain_Registry stores the default languages path. 2022-10-24 10:01:01 +00:00
link Tests: Use the factory method instead of the property. 2022-09-06 22:09:49 +00:00
load Login and Registration: Rename is_login_screen() function to is_login(). 2022-10-10 17:57:52 +00:00
media Tests: Add unit tests for attachment’s file size being included in metadata. 2022-11-22 19:43:25 +00:00
menu Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
meta Users: Clear the user_meta cache when clean_user_cache function is called. 2022-12-06 13:52:02 +00:00
multisite Tests: Clean up test file in wpmu_delete_blog() tests. 2022-11-22 20:17:08 +00:00
oembed Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
option Tests: Make the message for skipping some tests with an external object cache more consistent. 2022-10-23 12:36:58 +00:00
pluggable Code Modernization: Rename parameters that use reserved keywords in wp-includes/pluggable.php. 2022-12-09 00:22:14 +00:00
pomo Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
post Query: Account for primed post caches without primed post meta/term caches. 2022-11-29 20:27:29 +00:00
privacy Tests: Use the factory method instead of the property. 2022-09-06 22:09:49 +00:00
query Query: Account for primed post caches without primed post meta/term caches. 2022-11-29 20:27:29 +00:00
rest-api Coding Standards: Fix indentation of multi-line chained method call in test_json_error_with_status(). 2022-11-30 16:33:48 +00:00
rewrite Tests: Consistently create a post fixture in old date or slug redirect tests. 2022-09-06 01:25:45 +00:00
sitemaps Sitemaps: Prevent invalid provider names throwing errors. 2022-08-05 05:47:56 +00:00
style-engine Tests: Replace some occurrences of assertEquals() with assertSame(). 2022-10-07 01:02:07 +00:00
taxonomy Build/Test Tools: Implement use of the void solution. 2021-08-07 10:29:41 +00:00
term Query: Validate relation in WP_Date_Query. 2022-10-17 11:47:41 +00:00
theme Coding Standards: Fix spacing for incrementors and decrementors in various files. 2022-11-29 21:11:42 +00:00
url Tests: Remove @uses tags from the test suite. 2022-07-08 00:11:15 +00:00
user Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2022-11-29 12:32:37 +00:00
webfonts Tests: Ignore EOL differences in Webfonts API tests. 2022-04-30 11:33:30 +00:00
widgets Tests: Replace some occurrences of assertEquals() with assertSame(). 2022-10-07 01:02:07 +00:00
wp Tests: Move the tests for WP class methods to the wp directory. 2022-10-28 14:08:20 +00:00
xmlrpc Tests: Replace some occurrences of assertEquals() with assertSame(). 2022-10-07 01:02:07 +00:00
actions.php Code Modernization: Explicitly declare all properties in various tests. 2022-08-25 15:34:24 +00:00
adminbar.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
auth.php Tests: Use the factory method instead of the property. 2022-09-06 22:09:49 +00:00
avatar.php Media: Add decoding="async" to image attributes. 2022-06-09 05:29:57 +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 Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2022-11-29 12:32:37 +00:00
block-template.php Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2022-11-29 12:32:37 +00:00
cache.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
canonical.php Canonical: Protect against error for term not exists queries. 2022-11-10 02:59:56 +00:00
comment.php Tests: Use more descriptive name for a wp_new_comment() test. 2022-12-08 15:07:45 +00:00
cron.php Cron API: Modify _get_cron_array() to always return an array. 2022-07-29 03:32:58 +00:00
db.php Database: Revert [53575]. 2022-10-31 20:38:20 +00:00
dependencies.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
file.php Code Modernization: Remove dynamic properties in Tests_File. 2022-08-07 14:48:42 +00:00
filters.php Tests: Update the terminology used for action or filter names in MockAction class. 2022-07-31 16:25:27 +00:00
functions.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
https-detection.php Coding Standards: Use static closures when not using $this. 2021-08-26 12:57:08 +00:00
https-migration.php Coding Standards: Use static closures when not using $this. 2021-08-26 12:57:08 +00:00
kses.php Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2022-11-29 12:32:37 +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 Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2021-11-04 15:22:47 +00:00
locale.php Build/Test Tools: Add @covers tags to the l10n and i18n tests. 2022-08-08 23:39:06 +00:00
media.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
meta.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
post.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
query.php Coding Standards: Always use parentheses when instantiating an object. 2022-11-29 15:49:49 +00:00
readme.php Tests: Relocate the tests for recommended PHP, MySQL, and MariaDB versions. 2022-10-11 14:25:47 +00:00
rest-api.php REST API: Ensure args is an array of arrays in register_rest_route(). 2022-09-27 20:12:00 +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: Use static closures when not using $this. 2021-08-26 12:57:08 +00:00
shortcode.php Code Modernization: Explicitly declare all properties created in set_up() methods of various test classes. 2022-08-27 12:30:08 +00:00
taxonomy.php Tests: Use the factory method instead of the property. 2022-09-06 22:09:49 +00:00
template.php Administration: Allow to wrap Settings sections with custom HTML content. 2022-09-20 09:57:43 +00:00
term.php Tests: Replace some occurrences of assertEquals() with assertSame(). 2022-10-07 01:02:07 +00:00
theme.php Docs: Align spelling with American English. 2022-10-21 21:10:29 +00:00
upload.php Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2021-11-04 15:22:47 +00:00
url.php Tests: Remove @uses tags from the test suite. 2022-07-08 00:11:15 +00:00
user.php Tests: Replace some occurrences of assertEquals() with assertSame(). 2022-10-07 01:02:07 +00:00
utils.php Tests: Correct the @covers tag in a test for strip_ws() utility function. 2022-09-01 19:06:19 +00:00
walker.php Code Modernization: Explicitly declare all properties created in set_up() methods of various test classes. 2022-08-27 12:30:08 +00:00
widgets.php Coding Standards: Add visibility to methods in tests/phpunit/tests/. 2022-11-29 12:32:37 +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 5.7 branch moved from active support to extended support on 2020-10-21.
		 * As WordPress core is not fully compatible with MySQL 8.0 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.0 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;
	}
}