From eaab29ce41a70142cd77c03110ee07926ec76c1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Perona?= Date: Fri, 15 Sep 2023 04:36:44 -0400 Subject: [PATCH] Closes #6133 Remove lazyload background images script when DONOTCACHEPAGE (#6144) --- .../Media/Lazyload/CanLazyloadTrait.php | 3 + .../Subscriber/insertLazyloadScript.php | 412 +++++++++--------- .../Subscriber/insertLazyloadScript.php | 26 +- .../Media/Lazyload/Subscriber/lazyload.php | 2 +- tests/StubTrait.php | 5 + .../Subscriber/insertLazyloadScript.php | 30 +- 6 files changed, 243 insertions(+), 235 deletions(-) diff --git a/inc/Engine/Media/Lazyload/CanLazyloadTrait.php b/inc/Engine/Media/Lazyload/CanLazyloadTrait.php index e187f81182..6a30f1ec88 100644 --- a/inc/Engine/Media/Lazyload/CanLazyloadTrait.php +++ b/inc/Engine/Media/Lazyload/CanLazyloadTrait.php @@ -1,4 +1,5 @@ [ - 'config' => [ - 'is_admin' => true, - 'options' => [ - 'lazyload' => 1, - 'lazyload_iframes' => 0, - ], - ], - 'expected' => [ - 'unit' => [ - 'inline_script' => '', - 'script' => '', - 'result' => '', - ], - 'integration' => '', - ], - ], - 'testShouldReturnNothingWhenIsFeed' => [ - 'config' => [ - 'is_feed' => true, - 'options' => [ - 'lazyload' => 1, - 'lazyload_iframes' => 0, - ], - ], - 'expected' => [ - 'unit' => [ - 'inline_script' => '', - 'script' => '', - 'result' => '', - ], - 'integration' => '', - ], - ], - 'testShouldReturnNothingWhenIsPreview' => [ - 'config' => [ - 'is_preview' => true, - 'options' => [ - 'lazyload' => 1, - 'lazyload_iframes' => 0, - ], - ], - 'expected' => [ - 'unit' => [ - 'inline_script' => '', - 'script' => '', - 'result' => '', - ], - 'integration' => '', - ], - ], - 'testShouldReturnNothingWhenIsSearch' => [ - 'config' => [ - 'is_search' => true, - 'options' => [ - 'lazyload' => 1, - 'lazyload_iframes' => 0, - ], - ], - 'expected' => [ - 'unit' => [ - 'inline_script' => '', - 'script' => '', - 'result' => '', - ], - 'integration' => '', - ], - ], - 'testShouldReturnNothingWhenIsRest' => [ - 'config' => [ - 'is_rest_request' => true, - 'options' => [ - 'lazyload' => 1, - 'lazyload_iframes' => 0, - ], - ], - 'expected' => [ - 'unit' => [ - 'inline_script' => '', - 'script' => '', - 'result' => '', - ], - 'integration' => '', - ], - ], - 'testShouldReturnNothingWhenIsNotRocketOptimize' => [ - 'config' => [ - 'is_rocket_optimize' => false, - 'options' => [ - 'lazyload' => 1, - 'lazyload_iframes' => 0, - ], - ], - 'expected' => [ - 'unit' => [ - 'inline_script' => '', - 'script' => '', - 'result' => '', - ], - 'integration' => '', - ], - ], - 'testShouldReturnNothingWhenLazyloadDisabled' => [ - 'config' => [ - 'options' => [ - 'lazyload' => 0, - 'lazyload_iframes' => 0, - ], - ], - 'expected' => [ - 'unit' => [ - 'inline_script' => '', - 'script' => '', - 'result' => '', - ], - 'integration' => '', - ], - ], - 'testShouldReturnLazyloadForImagesOnly' => [ - 'config' => [ - 'options' => [ - 'lazyload' => 1, - 'lazyload_iframes' => 0, - 'use_native' => false, - 'use_native_images' => true, - ], - ], - 'expected' => [ - 'unit' => [ - 'inline_script' => $inline_script['script_image'], - 'script' => $lazyload_script['min_script'], - 'result' => "{$lazyload_script['min_script']}", - ], - 'integration' => '{$lazyload_script['min_script']}", + ], + 'integration' => '', - ], - ], - - 'testShouldReturnLazyloadForIframesOnly' => [ - 'config' => [ - 'options' => [ - 'lazyload' => 0, - 'lazyload_iframes' => 1, - 'use_native' => false, - 'use_native_images' => true, ], ], - 'expected' => [ - 'unit' => [ - 'inline_script' => $inline_script['script_iframe'], - 'script' => $lazyload_script['min_script'], - 'result' => "{$lazyload_script['min_script']}", - ], - 'integration' => '{$lazyload_script['min_script']}", + ], + 'integration' => '', - ], - ], - 'testShouldReturnLazyloadForImagesAndIframes' => [ - 'config' => [ - 'options' => [ - 'lazyload' => 1, - 'lazyload_iframes' => 1, - 'use_native' => false, - 'use_native_images' => true, ], ], - 'expected' => [ - 'unit' => [ - 'inline_script' => $inline_script['script_both'], - 'script' => $lazyload_script['min_script'], - 'result' => "{$lazyload_script['min_script']}", - ], - 'integration' => '{$lazyload_script['min_script']}", + ], + 'integration' => '', - ], - ], - 'testShouldReturnLazyloadForImagesAndIframesWithCustomThreshold' => [ - 'config' => [ - 'options' => [ - 'lazyload' => 1, - 'lazyload_iframes' => 1, - 'threshold' => 500, - 'use_native' => false, - 'use_native_images' => true, ], ], - 'expected' => [ - 'unit' => [ - 'inline_script' => $inline_script['script_custom_threshold'], - 'script' => $lazyload_script['min_script'], - 'result' => "{$lazyload_script['min_script']}", - ], - 'integration' => '{$lazyload_script['min_script']}", + ], + 'integration' => '', - ], - ], - 'testShouldReturnLazyloadForImagesAndIframesWithoutNativeLazyloadForImages' => [ - 'config' => [ - 'options' => [ - 'lazyload' => 1, - 'lazyload_iframes' => 1, - 'use_native' => false, - 'use_native_images' => false, ], ], - 'expected' => [ - 'unit' => [ - 'inline_script' => $inline_script['script_no_native_lazyload'], - 'script' => $lazyload_script['min_script'], - 'result' => "{$lazyload_script['min_script']}", - ], - 'integration' => '{$lazyload_script['min_script']}", + ], + 'integration' => '', + ], ], ], ]; diff --git a/tests/Integration/inc/Engine/Media/Lazyload/Subscriber/insertLazyloadScript.php b/tests/Integration/inc/Engine/Media/Lazyload/Subscriber/insertLazyloadScript.php index b1ab36078c..998510d39d 100644 --- a/tests/Integration/inc/Engine/Media/Lazyload/Subscriber/insertLazyloadScript.php +++ b/tests/Integration/inc/Engine/Media/Lazyload/Subscriber/insertLazyloadScript.php @@ -48,20 +48,13 @@ public function tear_down() { parent::tear_down(); } - private function getActualHtml() { - ob_start(); - do_action( 'wp_footer' ); - - return $this->format_the_html( ob_get_clean() ); - } - /** * @dataProvider configTestData */ public function testShouldInsertLazyloadScript( $config, $expected ) { $GLOBALS['wp'] = (object) [ - 'query_vars' => [], - 'request' => 'http://example.org', + 'query_vars' => [], + 'request' => 'http://example.org', ]; $options = $config['options']; @@ -74,7 +67,8 @@ public function testShouldInsertLazyloadScript( $config, $expected ) { $is_search = isset( $config['is_search'] ) ? $config['is_search'] : false; $is_rest_request = isset( $config['is_rest_request'] ) ? $config['is_rest_request'] : false; $is_lazy_load = isset( $config['is_lazy_load'] ) ? $config['is_lazy_load'] : true; - $is_rocket_optimize = isset( $config['is_rocket_optimize'] ) ? $config['is_rocket_optimize'] : true; + $is_not_rocket_optimize = isset( $config['is_not_rocket_optimize'] ) ? $config['is_not_rocket_optimize'] : false; + $donotcachepage = isset( $config['donotcachepage'] ) ? $config['donotcachepage'] : false; set_current_screen( $is_admin ? 'settings_page_wprocket' : 'front' ); @@ -84,9 +78,10 @@ public function testShouldInsertLazyloadScript( $config, $expected ) { $wp_query->is_search = $is_search; //Constants. - $this->constants['REST_REQUEST'] = $is_rest_request; + $this->rest_request = $is_rest_request; $this->constants['DONOTLAZYLOAD'] = ! $is_lazy_load; - $this->donotrocketoptimize = ! $is_rocket_optimize; + $this->donotrocketoptimize = $is_not_rocket_optimize; + $this->constants['DONOTCACHEPAGE'] = $donotcachepage; $this->constants['WP_ROCKET_ASSETS_JS_URL'] = 'http://example.org/wp-content/plugins/wp-rocket/assets/'; // wp-media/rocket-lazyload-common uses the constant for determining whether to set as .min.js. @@ -132,6 +127,13 @@ public function testShouldInsertLazyloadScript( $config, $expected ) { } } + private function getActualHtml() { + ob_start(); + do_action( 'wp_footer' ); + + return $this->format_the_html( ob_get_clean() ); + } + public function setLazyload() { return $this->lazyload; } diff --git a/tests/Integration/inc/Engine/Media/Lazyload/Subscriber/lazyload.php b/tests/Integration/inc/Engine/Media/Lazyload/Subscriber/lazyload.php index 9a54d0b2c6..f4c579709c 100644 --- a/tests/Integration/inc/Engine/Media/Lazyload/Subscriber/lazyload.php +++ b/tests/Integration/inc/Engine/Media/Lazyload/Subscriber/lazyload.php @@ -54,7 +54,7 @@ public function testShouldDoExpected( $config, $html, $expected ) { $wp_query->is_search = $config['is_search']; //Constants. - $this->constants['REST_REQUEST'] = $config['is_rest_request']; + $this->rest_request = $config['is_rest_request']; $this->constants['DONOTLAZYLOAD'] = $config['is_not_lazy_load']; $this->donotrocketoptimize = $config['is_rocket_optimize']; diff --git a/tests/StubTrait.php b/tests/StubTrait.php index ed91da8e29..ad8764d3ee 100644 --- a/tests/StubTrait.php +++ b/tests/StubTrait.php @@ -23,6 +23,7 @@ trait StubTrait { protected $rucss_api = 'http://localhost'; protected $constants = []; protected $dontasynccss = false; + protected $rest_request = false; protected function resetStubProperties() { $defaults = [ @@ -37,6 +38,7 @@ protected function resetStubProperties() { 'wp_rocket_advanced_cache' => true, 'donotrocketoptimize' => null, 'dontasynccss' => false, + 'rest_request' => false, 'white_label' => false, 'white_label_footprint' => null, 'constants' => [], @@ -79,6 +81,9 @@ protected function getConstant( $constant_name, $default = null ) { case 'SCRIPT_DEBUG': return $this->script_debug; + case 'REST_REQUEST': + return $this->rest_request; + case 'WP_CACHE': return $this->wp_cache_constant; diff --git a/tests/Unit/inc/Engine/Media/Lazyload/Subscriber/insertLazyloadScript.php b/tests/Unit/inc/Engine/Media/Lazyload/Subscriber/insertLazyloadScript.php index 2882cef968..be00345319 100644 --- a/tests/Unit/inc/Engine/Media/Lazyload/Subscriber/insertLazyloadScript.php +++ b/tests/Unit/inc/Engine/Media/Lazyload/Subscriber/insertLazyloadScript.php @@ -3,14 +3,11 @@ namespace WP_Rocket\Tests\Unit\inc\Engine\Media\Lazyload\Subscriber; use Mockery; -use Brain\Monkey\Functions; -use Brain\Monkey\Filters; -use WP_Rocket\Dependencies\RocketLazyload\Assets; -use WP_Rocket\Dependencies\RocketLazyload\Image; -use WP_Rocket\Dependencies\RocketLazyload\Iframe; +use Brain\Monkey\{Filters, Functions}; +use WP_Rocket\Dependencies\RocketLazyload\{Assets, Image, Iframe}; use WP_Rocket\Admin\Options_Data; -use WPMedia\PHPUnit\Unit\TestCase; use WP_Rocket\Engine\Media\Lazyload\Subscriber; +use WP_Rocket\Tests\Unit\TestCase; /** * @covers \WP_Rocket\Engine\Media\Lazyload\Subscriber::insert_lazyload_script @@ -23,7 +20,7 @@ class Test_InsertLazyloadScript extends TestCase { private $options; private $subscriber; - public function setUp() : void { + public function setUp(): void { parent::setUp(); $this->assets = Mockery::mock( Assets::class ); @@ -44,25 +41,28 @@ private function getActualHtml() { } /** - * @dataProvider providerTestData + * @dataProvider configTestData */ public function testShouldInsertLazyloadScript( $config, $expected ) { + $this->script_debug = true; + $this->donotrocketoptimize = isset( $config['is_not_rocket_optimize'] ) ? $config['is_not_rocket_optimize'] : false; + $this->rest_request = isset( $config['is_rest_request'] ) ? $config['is_rest_request'] : false; + $options = $config['options']; $is_admin = isset( $config['is_admin'] ) ? $config['is_admin'] : false; $is_feed = isset( $config['is_feed'] ) ? $config['is_feed'] : false; $is_preview = isset( $config['is_preview'] ) ? $config['is_preview'] : false; $is_search = isset( $config['is_search'] ) ? $config['is_search'] : false; - $is_rest_request = isset( $config['is_rest_request'] ) ? $config['is_rest_request'] : false; $is_lazy_load = isset( $config['is_lazy_load'] ) ? $config['is_lazy_load'] : true; - $is_rocket_optimize = isset( $config['is_rocket_optimize'] ) ? $config['is_rocket_optimize'] : true; + $donotcachepage = isset( $config['donotcachepage'] ) ? $config['donotcachepage'] : false; Functions\when( 'is_admin' )->justReturn( $is_admin ); Functions\when( 'is_feed' )->justReturn( $is_feed ); Functions\when( 'is_preview' )->justReturn( $is_preview ); Functions\when( 'is_search' )->justReturn( $is_search ); Functions\expect( 'rocket_get_constant' ) - ->with('REST_REQUEST', 'DONOTLAZYLOAD', 'DONOTROCKETOPTIMIZE', 'WP_ROCKET_ASSETS_JS_URL') - ->andReturn( $is_rest_request, !$is_lazy_load, !$is_rocket_optimize, 'http://example.org/wp-content/plugins/wp-rocket/assets/' ); + ->with( 'DONOTLAZYLOAD', 'DONOTCACHEPAGE', 'WP_ROCKET_ASSETS_JS_URL' ) + ->andReturn(! $is_lazy_load, $donotcachepage, 'http://example.org/wp-content/plugins/wp-rocket/assets/' ); foreach ( $options as $key => $value ) { $this->options->shouldReceive( 'get' ) @@ -76,7 +76,7 @@ public function testShouldInsertLazyloadScript( $config, $expected ) { $this->assets->shouldReceive( 'insertLazyloadScript' ) ->zeroOrMoreTimes() - ->andReturnUsing( function() use ( $expected ) { + ->andReturnUsing( function () use ( $expected ) { echo $expected['unit']['script']; } ); @@ -104,8 +104,4 @@ public function testShouldInsertLazyloadScript( $config, $expected ) { $this->getActualHtml() ); } - - public function providerTestData() { - return $this->getTestData( __DIR__, 'insertLazyloadScript' ); - } }