Make WordPress Core

Ticket #42069: 42069.5.2.diff

File 42069.5.2.diff, 4.2 KB (added by dcavins, 5 years ago)

Use better meta name from Boone's patch.

  • src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php

    diff --git src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php
    index e2fb0e1632..ed4acf7374 100644
    abstract class WP_REST_Meta_Fields { 
    322322                $old_value = get_metadata( $meta_type, $object_id, $meta_key );
    323323
    324324                if ( 1 === count( $old_value ) ) {
    325                         if ( $old_value[0] === $meta_value ) {
     325                        if ( (string) sanitize_meta( $meta_key, wp_unslash( $meta_value ), $meta_type ) === $old_value[0] ) {
    326326                                return true;
    327327                        }
    328328                }
  • tests/phpunit/tests/rest-api/rest-post-meta-fields.php

    diff --git tests/phpunit/tests/rest-api/rest-post-meta-fields.php tests/phpunit/tests/rest-api/rest-post-meta-fields.php
    index db5829f6ef..f0d015267d 100644
    class WP_Test_REST_Post_Meta_Fields extends WP_Test_REST_TestCase { 
    130130                        )
    131131                );
    132132
     133                register_meta(
     134                        'post', 'test_boolean_update', array(
     135                                'single'            => true,
     136                                'type'              => 'boolean',
     137                                'sanitize_callback' => 'absint',
     138                                'show_in_rest'      => true,
     139                        )
     140                );
     141                register_meta(
     142                        'post', 'test_textured_text_update', array(
     143                                'single'            => true,
     144                                'type'              => 'string',
     145                                'sanitize_callback' => 'sanitize_text_field',
     146                                'show_in_rest'      => true,
     147                        )
     148                );
     149
     150                register_meta(
     151                        'post', 'test_json_encoded', array(
     152                                'single'            => true,
     153                                'type'              => 'string',
     154                                'show_in_rest'      => true,
     155                        )
     156                );
     157
    133158                register_post_type( 'cpt', array(
    134159                        'show_in_rest' => true,
    135160                        'supports'     => array( 'custom-fields' ),
    class WP_Test_REST_Post_Meta_Fields extends WP_Test_REST_TestCase { 
    11991224                return $data;
    12001225        }
    12011226
     1227        /**
     1228         * @ticket 42069
     1229         * @dataProvider data_update_value_return_success_with_same_value
     1230         */
     1231        public function test_update_value_return_success_with_same_value( $meta_key, $meta_value ) {
     1232                add_post_meta( self::$post_id, $meta_key, $meta_value );
     1233
     1234                $this->grant_write_permission();
     1235
     1236                $data = array(
     1237                        'meta' => array(
     1238                                $meta_key => $meta_value,
     1239                        ),
     1240                );
     1241
     1242                $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
     1243                $request->set_body_params( $data );
     1244
     1245                $response = rest_get_server()->dispatch( $request );
     1246
     1247                $this->assertEquals( 200, $response->get_status() );
     1248        }
     1249
     1250        public function data_update_value_return_success_with_same_value() {
     1251                return array(
     1252                        array( 'test_boolean_update', 0 ),
     1253                        array( 'test_boolean_update', 1 ),
     1254                        array( 'test_boolean_update', false ),
     1255                        array( 'test_boolean_update', true ),
     1256                        array( 'test_boolean_update', '' ),
     1257                        array( 'test_boolean_update', '0' ),
     1258                        array( 'test_boolean_update', '1' ),
     1259                        array( 'test_textured_text_update', 'She said, "What about the > 10,000 penguins in the kitchen?"' ),
     1260                        array( 'test_textured_text_update', "He's about to do something rash..." ),
     1261                        array( 'test_json_encoded', json_encode( array( 'foo' => 'bar' ) ) ),
     1262                );
     1263        }
     1264
     1265        /**
     1266         * @ticket 42069
     1267         * @dataProvider data_update_value_return_success_with_similar_value
     1268         */
     1269        public function test_update_value_return_success_with_similar_value( $meta_key, $meta_value, $update_meta_value ) {
     1270                add_post_meta( self::$post_id, $meta_key, $meta_value );
     1271
     1272                $this->grant_write_permission();
     1273
     1274                $data = array(
     1275                        'meta' => array(
     1276                                $meta_key => $update_meta_value,
     1277                        ),
     1278                );
     1279
     1280                $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
     1281                $request->set_body_params( $data );
     1282
     1283                $response = rest_get_server()->dispatch( $request );
     1284
     1285                $this->assertEquals( 200, $response->get_status() );
     1286        }
     1287
     1288        public function data_update_value_return_success_with_similar_value() {
     1289                return array(
     1290                        array( 'test_boolean_update', 0, '' ),
     1291                        array( 'test_boolean_update', 1, '1' ),
     1292                        array( 'test_boolean_update', false, 0 ),
     1293                        array( 'test_boolean_update', true, 1 ),
     1294                        array( 'test_boolean_update', '', false ),
     1295                        array( 'test_boolean_update', '1', true ),
     1296                );
     1297        }
     1298
    12021299        /**
    12031300         * Internal function used to disable an insert query which
    12041301         * will trigger a wpdb error for testing purposes.