REST API: Check the results of get_metadata() in WP_REST_Meta_Fields methods.

This avoids PHP warnings in case the function returns boolean `false` instead of an array.

Props david.binda.
Fixes #53099.

git-svn-id: https://develop.svn.wordpress.org/trunk@50793 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Sergey Biryukov
2021-04-27 18:34:52 +00:00
parent 334ef09078
commit 30ff995eb0
2 changed files with 59 additions and 3 deletions
@@ -1285,6 +1285,54 @@ class WP_Test_REST_Term_Meta_Fields extends WP_Test_REST_TestCase {
$this->assertSame( 'Goodbye', $meta[ $meta_key ] );
}
/**
* @ticket 53099
*/
public function test_get_term_metadata_returning_false_does_not_cause_php_warnings() {
add_filter( 'get_term_metadata', '__return_false', 11 );
// No PHP warning during GET request.
add_term_meta( self::$category_id, 'test_single', 'testvalue' );
$request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/categories/%d', self::$category_id ) );
$response = rest_get_server()->dispatch( $request );
// No PHP warning during POST request.
$this->grant_write_permission();
$data = array(
'meta' => array(
'test_multi' => array( 'val1' ),
),
);
$request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/categories/%d', self::$category_id ) );
$request->set_body_params( $data );
$response = rest_get_server()->dispatch( $request );
// No PHP warning during validation.
register_meta(
'term',
'my_meta_key',
array(
'show_in_rest' => true,
'single' => true,
'type' => 'integer',
)
);
$this->grant_write_permission();
$data = array(
'meta' => array(
'my_meta_key' => '1', // Set to a string.
),
);
$request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/categories/%d', self::$category_id ) );
$request->set_body_params( $data );
$response = rest_get_server()->dispatch( $request );
remove_filter( 'get_term_metadata', '__return_false', 11 );
$data = $response->get_data();
$this->assertSame( 0, $data['meta']['my_meta_key'] );
}
/**
* Internal function used to disable an insert query which
* will trigger a wpdb error for testing purposes.