Make WordPress Core


Ignore:
Timestamp:
04/27/2021 06:34:52 PM (4 years ago)
Author:
SergeyBiryukov
Message:

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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/rest-api/rest-term-meta-fields.php

    r49603 r50793  
    12871287
    12881288    /**
     1289     * @ticket 53099
     1290     */
     1291    public function test_get_term_metadata_returning_false_does_not_cause_php_warnings() {
     1292        add_filter( 'get_term_metadata', '__return_false', 11 );
     1293
     1294        // No PHP warning during GET request.
     1295        add_term_meta( self::$category_id, 'test_single', 'testvalue' );
     1296        $request  = new WP_REST_Request( 'GET', sprintf( '/wp/v2/categories/%d', self::$category_id ) );
     1297        $response = rest_get_server()->dispatch( $request );
     1298
     1299        // No PHP warning during POST request.
     1300        $this->grant_write_permission();
     1301        $data    = array(
     1302            'meta' => array(
     1303                'test_multi' => array( 'val1' ),
     1304            ),
     1305        );
     1306        $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/categories/%d', self::$category_id ) );
     1307        $request->set_body_params( $data );
     1308        $response = rest_get_server()->dispatch( $request );
     1309
     1310        // No PHP warning during validation.
     1311        register_meta(
     1312            'term',
     1313            'my_meta_key',
     1314            array(
     1315                'show_in_rest' => true,
     1316                'single'       => true,
     1317                'type'         => 'integer',
     1318            )
     1319        );
     1320        $this->grant_write_permission();
     1321        $data    = array(
     1322            'meta' => array(
     1323                'my_meta_key' => '1', // Set to a string.
     1324            ),
     1325        );
     1326        $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/categories/%d', self::$category_id ) );
     1327        $request->set_body_params( $data );
     1328        $response = rest_get_server()->dispatch( $request );
     1329
     1330        remove_filter( 'get_term_metadata', '__return_false', 11 );
     1331
     1332        $data = $response->get_data();
     1333        $this->assertSame( 0, $data['meta']['my_meta_key'] );
     1334    }
     1335
     1336    /**
    12891337     * Internal function used to disable an insert query which
    12901338     * will trigger a wpdb error for testing purposes.
Note: See TracChangeset for help on using the changeset viewer.