WordPress.org

Make WordPress Core

Ticket #42069: 42069.1.2.diff

File 42069.1.2.diff, 3.8 KB (added by MattGeri, 3 years ago)
  • tests/phpunit/tests/rest-api/rest-post-meta-fields.php

     
    278278                                'type'         => 'boolean',
    279279                        )
    280280                );
     281                register_meta(
     282                        'post', 'test_boolean_update', array(
     283                                'single'            => true,
     284                                'type'              => 'boolean',
     285                                'sanitize_callback' => 'absint',
     286                                'show_in_rest'      => true,
     287                        )
     288                );
     289                register_meta(
     290                        'post', 'test_textured_text_update', array(
     291                                'single'            => true,
     292                                'type'              => 'string',
     293                                'sanitize_callback' => 'sanitize_text_field',
     294                                'show_in_rest'      => true,
     295                        )
     296                );
    281297
    282298                /** @var WP_REST_Server $wp_rest_server */
    283299                global $wp_rest_server;
     
    11991215                return $data;
    12001216        }
    12011217
     1218        /**
     1219         * @ticket 42069
     1220         * @dataProvider data_update_value_return_success_with_same_value
     1221         */
     1222        public function test_update_value_return_success_with_same_value( $meta_key, $meta_value ) {
     1223                add_post_meta( self::$post_id, $meta_key, $meta_value );
     1224
     1225                $this->grant_write_permission();
     1226
     1227                $data = array(
     1228                        'meta' => array(
     1229                                $meta_key => $meta_value,
     1230                        ),
     1231                );
     1232
     1233                $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
     1234                $request->set_body_params( $data );
     1235
     1236                $response = rest_get_server()->dispatch( $request );
     1237
     1238                $this->assertEquals( 200, $response->get_status() );
     1239        }
     1240
     1241        public function data_update_value_return_success_with_same_value() {
     1242                return array(
     1243                        array( 'test_boolean_update', 0 ),
     1244                        array( 'test_boolean_update', 1 ),
     1245                        array( 'test_boolean_update', false ),
     1246                        array( 'test_boolean_update', true ),
     1247                        array( 'test_boolean_update', '' ),
     1248                        array( 'test_boolean_update', '1' ),
     1249                        array( 'test_textured_text_update', 'She said, "What about the > 10,000 penguins in the kitchen?"' ),
     1250                        array( 'test_textured_text_update', "He's about to do something rash..." ),
     1251                );
     1252        }
     1253
     1254        /**
     1255         * @ticket 42069
     1256         * @dataProvider data_update_value_return_success_with_similar_value
     1257         */
     1258        public function test_update_value_return_success_with_similar_value( $meta_key, $meta_value, $update_meta_value ) {
     1259                add_post_meta( self::$post_id, $meta_key, $meta_value );
     1260
     1261                $this->grant_write_permission();
     1262
     1263                $data = array(
     1264                        'meta' => array(
     1265                                $meta_key => $update_meta_value,
     1266                        ),
     1267                );
     1268
     1269                $request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
     1270                $request->set_body_params( $data );
     1271
     1272                $response = rest_get_server()->dispatch( $request );
     1273
     1274                $this->assertEquals( 200, $response->get_status() );
     1275        }
     1276
     1277        public function data_update_value_return_success_with_similar_value() {
     1278                return array(
     1279                        array( 'test_boolean_update', 0, '' ),
     1280                        array( 'test_boolean_update', 1, '1' ),
     1281                        array( 'test_boolean_update', false, 0 ),
     1282                        array( 'test_boolean_update', true, 1 ),
     1283                        array( 'test_boolean_update', '', false ),
     1284                        array( 'test_boolean_update', '1', true ),
     1285                );
     1286        }
     1287
    12021288        /**
    12031289         * Internal function used to disable an insert query which
    12041290         * will trigger a wpdb error for testing purposes.
  • src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php

     
    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 ( sanitize_meta( $meta_key, wp_unslash( $meta_value ), $meta_type ) === $old_value[0] ) {
    326326                                return true;
    327327                        }
    328328                }