From a6f183650e817e11627a36ed87a06a9e1d6eaacb Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Mon, 6 May 2024 18:40:40 +0200 Subject: [PATCH] Avoid external HTTP calls in tests --- .../integration/tests/AMP/Optimization.php | 51 +++++++++++++++++++ .../tests/REST_API/Hotlinking_Controller.php | 2 +- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/tests/phpunit/integration/tests/AMP/Optimization.php b/tests/phpunit/integration/tests/AMP/Optimization.php index d1066c673361..0893cf1603d3 100644 --- a/tests/phpunit/integration/tests/AMP/Optimization.php +++ b/tests/phpunit/integration/tests/AMP/Optimization.php @@ -31,11 +31,62 @@ use Google\Web_Stories_Dependencies\AmpProject\Optimizer\Transformer\MinifyHtml; use Google\Web_Stories_Dependencies\AmpProject\Optimizer\Transformer\OptimizeViewport; use Google\Web_Stories_Dependencies\AmpProject\Optimizer\Transformer\ReorderHead; +use WP_Error; /** * @coversDefaultClass \Google\Web_Stories\AMP\Optimization */ class Optimization extends TestCase { + public function set_up(): void { + parent::set_up(); + + add_filter( 'pre_http_request', [ $this, 'mock_http_request' ], 10, 3 ); + } + + public function tear_down(): void { + remove_filter( 'pre_http_request', [ $this, 'mock_http_request' ] ); + + parent::tear_down(); + } + + /** + * Intercept link processing requests and mock responses. + * + * @param mixed $preempt Whether to preempt an HTTP request's return value. Default false. + * @param mixed $r HTTP request arguments. + * @param string $url The request URL. + * @return mixed|WP_Error Response data. + */ + public function mock_http_request( $preempt, $r, string $url ) { + if ( 'https://cdn.ampproject.org/rtv/metadata' === $url ) { + return [ + 'headers' => [ + 'content-type' => 'application/json', + 'content-length' => 100, + ], + 'response' => [ + 'code' => 200, + 'body' => file_get_contents( WEBSTORIES_PLUGIN_DIR_PATH . '/third-party/vendor/ampproject/amp-toolbox/resources/local_fallback/rtv/metadata' ), + ], + ]; + } + + if ( 'https://cdn.ampproject.org/v0.css' === $url ) { + return [ + 'headers' => [ + 'content-type' => 'text/css', + 'content-length' => 100, + ], + 'response' => [ + 'code' => 200, + 'body' => file_get_contents( WEBSTORIES_PLUGIN_DIR_PATH . '/third-party/vendor/ampproject/amp-toolbox/resources/local_fallback/v0.css' ), + ], + ]; + } + + return $preempt; + } + /** * @covers ::optimize_document * @covers ::get_optimizer diff --git a/tests/phpunit/integration/tests/REST_API/Hotlinking_Controller.php b/tests/phpunit/integration/tests/REST_API/Hotlinking_Controller.php index edf5b5e1bacd..f1f33497d2e9 100644 --- a/tests/phpunit/integration/tests/REST_API/Hotlinking_Controller.php +++ b/tests/phpunit/integration/tests/REST_API/Hotlinking_Controller.php @@ -144,7 +144,7 @@ public function mock_http_request( $preempt, $r, string $url ) { } // URL_500 - if ( 'https://93.184.216.34.com/500/test.jpg' === $url ) { + if ( self::URL_500 === $url ) { return [ 'headers' => [ 'content-type' => 'image/jpeg',