From 0725caf9a0d3aa21b4018bef04483a65347dd02f Mon Sep 17 00:00:00 2001 From: Tonya Mork Date: Tue, 23 Nov 2021 18:55:23 +0000 Subject: [PATCH] Build/Test Tools: Fix warnings from `stdClass::__invoke()` callback mocks in REST API tests. When running core tests on PHPUnit 8.x and 9.x, four non-blocking warnings were displayed for the REST API tests: {{{ There were 4 warnings: 1) Tests_REST_Request::test_route_level_validate_callback createPartialMock called with method(s) __invoke that do not exist in stdClass. This will not be allowed in future versions of PHPUnit. 2) Tests_REST_Request::test_route_level_validate_callback_no_parameter_callbacks createPartialMock called with method(s) __invoke that do not exist in stdClass. This will not be allowed in future versions of PHPUnit. 3) Tests_REST_Request::test_route_level_validate_callback_is_not_executed_if_parameter_validation_fails createPartialMock called with method(s) __invoke that do not exist in stdClass. This will not be allowed in future versions of PHPUnit. 4) Tests_REST_Server::test_callbacks_are_not_executed_if_request_validation_fails createPartialMock called with method(s) __invoke that do not exist in stdClass. This will not be allowed in future versions of PHPUnit. }}} These warnings are due to the PHP native `stdClass` not having a `__invoke()` method declared. This commit adds a `Mock_Invokable` reusable class and replaces the `stdClass` with this new class. Follow-up to [48945], [48947]. Props sourovroy, jrf. Fixes #53844. git-svn-id: https://develop.svn.wordpress.org/trunk@52235 602fd350-edb4-49c9-b593-d223f7449a82 --- phpcs.xml.dist | 1 + tests/phpunit/includes/mock-invokable.php | 17 +++++++++++++++++ tests/phpunit/tests/rest-api/rest-request.php | 16 +++++++++++++--- tests/phpunit/tests/rest-api/rest-server.php | 14 ++++++++++++-- 4 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 tests/phpunit/includes/mock-invokable.php diff --git a/phpcs.xml.dist b/phpcs.xml.dist index cff6b536f1..62287650cf 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -249,6 +249,7 @@ + diff --git a/tests/phpunit/includes/mock-invokable.php b/tests/phpunit/includes/mock-invokable.php new file mode 100644 index 0000000000..03db3e053a --- /dev/null +++ b/tests/phpunit/includes/mock-invokable.php @@ -0,0 +1,17 @@ +request = new WP_REST_Request(); } + /** + * Called before setting up all tests. + */ + public static function set_up_before_class() { + parent::set_up_before_class(); + + // Require files that need to load once. + require_once DIR_TESTROOT . '/includes/mock-invokable.php'; + } + public function test_header() { $value = 'application/x-wp-example'; @@ -1014,7 +1024,7 @@ class Tests_REST_Request extends WP_UnitTestCase { $request->set_query_params( array( 'test' => 'value' ) ); $error = new WP_Error( 'error_code', __( 'Error Message' ), array( 'status' => 400 ) ); - $callback = $this->createPartialMock( 'stdClass', array( '__invoke' ) ); + $callback = $this->createPartialMock( 'Mock_Invokable', array( '__invoke' ) ); $callback->expects( self::once() )->method( '__invoke' )->with( self::identicalTo( $request ) )->willReturn( $error ); $request->set_attributes( array( @@ -1038,7 +1048,7 @@ class Tests_REST_Request extends WP_UnitTestCase { $request->set_query_params( array( 'test' => 'value' ) ); $error = new WP_Error( 'error_code', __( 'Error Message' ), array( 'status' => 400 ) ); - $callback = $this->createPartialMock( 'stdClass', array( '__invoke' ) ); + $callback = $this->createPartialMock( 'Mock_Invokable', array( '__invoke' ) ); $callback->expects( self::once() )->method( '__invoke' )->with( self::identicalTo( $request ) )->willReturn( $error ); $request->set_attributes( array( @@ -1056,7 +1066,7 @@ class Tests_REST_Request extends WP_UnitTestCase { $request = new WP_REST_Request(); $request->set_query_params( array( 'test' => 'value' ) ); - $callback = $this->createPartialMock( 'stdClass', array( '__invoke' ) ); + $callback = $this->createPartialMock( 'Mock_Invokable', array( '__invoke' ) ); $callback->expects( self::never() )->method( '__invoke' ); $request->set_attributes( array( diff --git a/tests/phpunit/tests/rest-api/rest-server.php b/tests/phpunit/tests/rest-api/rest-server.php index 248886a76e..33e1f70506 100644 --- a/tests/phpunit/tests/rest-api/rest-server.php +++ b/tests/phpunit/tests/rest-api/rest-server.php @@ -35,6 +35,16 @@ class Tests_REST_Server extends WP_Test_REST_TestCase { parent::tear_down(); } + /** + * Called before setting up all tests. + */ + public static function set_up_before_class() { + parent::set_up_before_class(); + + // Require files that need to load once. + require_once DIR_TESTROOT . '/includes/mock-invokable.php'; + } + public function test_envelope() { $data = array( 'amount of arbitrary data' => 'alot', @@ -1630,9 +1640,9 @@ class Tests_REST_Server extends WP_Test_REST_TestCase { * @ticket 50244 */ public function test_callbacks_are_not_executed_if_request_validation_fails() { - $callback = $this->createPartialMock( 'stdClass', array( '__invoke' ) ); + $callback = $this->createPartialMock( 'Mock_Invokable', array( '__invoke' ) ); $callback->expects( self::never() )->method( '__invoke' ); - $permission_callback = $this->createPartialMock( 'stdClass', array( '__invoke' ) ); + $permission_callback = $this->createPartialMock( 'Mock_Invokable', array( '__invoke' ) ); $permission_callback->expects( self::never() )->method( '__invoke' ); register_rest_route(