WordPress.org

Make WordPress Core

Ticket #42069: 42069.3.diff

File 42069.3.diff, 4.0 KB (added by dcavins, 3 years ago)

Correct problem in test setup; use string typecast to improve equivalency check.

  • 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..a0b1694940 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
    133150                register_post_type( 'cpt', array(
    134151                        'show_in_rest' => true,
    135152                        'supports'     => array( 'custom-fields' ),
    class WP_Test_REST_Post_Meta_Fields extends WP_Test_REST_TestCase { 
    11991216                return $data;
    12001217        }
    12011218
     1219        /**
     1220         * @ticket 42069
     1221         * @dataProvider data_update_value_return_success_with_same_value
     1222         */
     1223        public function test_update_value_return_success_with_same_value( $meta_key, $meta_value ) {
     1224                add_post_meta( self::$post_id, $meta_key, $meta_value );
     1225
     1226                $this->grant_write_permission();
     1227
     1228                $data = array(
     1229                        'meta' => array(
     1230                                $meta_key => $meta_value,
     1231                        ),
     1232                );
     1233
     1234                $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
     1235                $request->set_body_params( $data );
     1236
     1237                $response = rest_get_server()->dispatch( $request );
     1238
     1239                $this->assertEquals( 200, $response->get_status() );
     1240        }
     1241
     1242        public function data_update_value_return_success_with_same_value() {
     1243                return array(
     1244                        array( 'test_boolean_update', 0 ),
     1245                        array( 'test_boolean_update', 1 ),
     1246                        array( 'test_boolean_update', false ),
     1247                        array( 'test_boolean_update', true ),
     1248                        array( 'test_boolean_update', '' ),
     1249                        array( 'test_boolean_update', '0' ),
     1250                        array( 'test_boolean_update', '1' ),
     1251                        array( 'test_textured_text_update', 'She said, "What about the > 10,000 penguins in the kitchen?"' ),
     1252                        array( 'test_textured_text_update', "He's about to do something rash..." ),
     1253                );
     1254        }
     1255
     1256        /**
     1257         * @ticket 42069
     1258         * @dataProvider data_update_value_return_success_with_similar_value
     1259         */
     1260        public function test_update_value_return_success_with_similar_value( $meta_key, $meta_value, $update_meta_value ) {
     1261                add_post_meta( self::$post_id, $meta_key, $meta_value );
     1262
     1263                $this->grant_write_permission();
     1264
     1265                $data = array(
     1266                        'meta' => array(
     1267                                $meta_key => $update_meta_value,
     1268                        ),
     1269                );
     1270
     1271                $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
     1272                $request->set_body_params( $data );
     1273
     1274                $response = rest_get_server()->dispatch( $request );
     1275
     1276                $this->assertEquals( 200, $response->get_status() );
     1277        }
     1278
     1279        public function data_update_value_return_success_with_similar_value() {
     1280                return array(
     1281                        array( 'test_boolean_update', 0, '' ),
     1282                        array( 'test_boolean_update', 1, '1' ),
     1283                        array( 'test_boolean_update', false, 0 ),
     1284                        array( 'test_boolean_update', true, 1 ),
     1285                        array( 'test_boolean_update', '', false ),
     1286                        array( 'test_boolean_update', '1', true ),
     1287                );
     1288        }
     1289
    12021290        /**
    12031291         * Internal function used to disable an insert query which
    12041292         * will trigger a wpdb error for testing purposes.