From b665f1094266109dd2270afc1f25000c486e969f Mon Sep 17 00:00:00 2001 From: "T.Kalimumllin-CloudLinux" Date: Tue, 11 Mar 2025 13:59:22 +0100 Subject: [PATCH] Improve plugin compatibility with HealthCheck - PageCache --- inc/Engine/HealthCheck/PageCache.php | 37 ++++++++++++++++ inc/Engine/HealthCheck/ServiceProvider.php | 2 + inc/Plugin.php | 1 + .../HealthCheck/PageCache/userAgent.php | 19 ++++++++ .../HealthCheck/PageCache/userAgent.php | 44 +++++++++++++++++++ 5 files changed, 103 insertions(+) create mode 100644 inc/Engine/HealthCheck/PageCache.php create mode 100644 tests/Fixtures/inc/Engine/HealthCheck/PageCache/userAgent.php create mode 100644 tests/Unit/inc/Engine/HealthCheck/PageCache/userAgent.php diff --git a/inc/Engine/HealthCheck/PageCache.php b/inc/Engine/HealthCheck/PageCache.php new file mode 100644 index 0000000000..93d68a8b26 --- /dev/null +++ b/inc/Engine/HealthCheck/PageCache.php @@ -0,0 +1,37 @@ + [ 'page_cache_useragent', 10, 2 ], + ]; + } + + /** + * Pass plugin header to skip test "mandatory cookie". + * + * @param string $user_agent WordPress user agent string. + * @param string $url The request URL. + * @return string + */ + public function page_cache_useragent( $user_agent, $url = null ) { + $uri = sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ?? '' ) ); + if ( + strpos( $uri, 'wp-site-health' ) !== false && + strpos( $uri, 'page-cache' ) !== false + ) { + $user_agent = 'WP Rocket'; + } + + return $user_agent; + } +} diff --git a/inc/Engine/HealthCheck/ServiceProvider.php b/inc/Engine/HealthCheck/ServiceProvider.php index a9dcf73b58..7fae4a0b38 100644 --- a/inc/Engine/HealthCheck/ServiceProvider.php +++ b/inc/Engine/HealthCheck/ServiceProvider.php @@ -16,6 +16,7 @@ class ServiceProvider extends AbstractServiceProvider { */ protected $provides = [ 'health_check', + 'health_check_page_cache', 'action_scheduler_check', ]; @@ -38,6 +39,7 @@ public function provides( string $id ): bool { public function register(): void { $this->getContainer()->addShared( 'health_check', HealthCheck::class ) ->addArgument( 'options' ); + $this->getContainer()->addShared( 'health_check_page_cache', PageCache::class ); $this->getContainer()->addShared( 'action_scheduler_check', ActionSchedulerCheck::class ); } } diff --git a/inc/Plugin.php b/inc/Plugin.php index 7c7ec851a2..b243ce67b0 100644 --- a/inc/Plugin.php +++ b/inc/Plugin.php @@ -389,6 +389,7 @@ private function init_common_subscribers() { 'media_fonts_frontend_subscriber', 'media_fonts_admin_subscriber', 'media_fonts_clean_subscriber', + 'health_check_page_cache', ]; $host_type = HostResolver::get_host_service(); diff --git a/tests/Fixtures/inc/Engine/HealthCheck/PageCache/userAgent.php b/tests/Fixtures/inc/Engine/HealthCheck/PageCache/userAgent.php new file mode 100644 index 0000000000..272c2185fd --- /dev/null +++ b/tests/Fixtures/inc/Engine/HealthCheck/PageCache/userAgent.php @@ -0,0 +1,19 @@ + [ + 'request_uri' => null, + 'user_agent_default' => 'WordPress', + 'user_agent_expected' => 'WordPress', + ], + 'default' => [ + 'request_uri' => '/wp-json/wp-site-health/v1/tests/https-status?_locale=user', + 'user_agent_default' => 'WordPress', + 'user_agent_expected' => 'WordPress', + ], + 'plugin' => [ + 'request_uri' => '/wp-json/wp-site-health/v1/tests/page-cache?_locale=user', + 'user_agent_default' => 'WP Rocket', + 'user_agent_expected' => 'WP Rocket', + ], +]; diff --git a/tests/Unit/inc/Engine/HealthCheck/PageCache/userAgent.php b/tests/Unit/inc/Engine/HealthCheck/PageCache/userAgent.php new file mode 100644 index 0000000000..4fb375ee58 --- /dev/null +++ b/tests/Unit/inc/Engine/HealthCheck/PageCache/userAgent.php @@ -0,0 +1,44 @@ +health = new PageCache(); + + Functions\when( 'sanitize_text_field' )->alias( + function ( $value ) { + return $value; + } + ); + + Functions\when( 'wp_unslash' )->alias( + function ( $value ) { + return stripslashes( $value ); + } + ); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $request_uri, $user_agent_default, $user_agent_expected ) { + $_SERVER['REQUEST_URI'] = $request_uri; + + $user_agent = $this->health->page_cache_useragent( $user_agent_default ); + $this->assertSame( $user_agent_expected, $user_agent ); + } +}