WordPress.org

Make WordPress Core

Changeset 39105


Ignore:
Timestamp:
11/03/2016 02:17:39 AM (4 years ago)
Author:
rachelbaker
Message:

REST API: Clean-up our validation callbacks and add missing array items properties in our endpoint schemas.

Props joehoyle, jnylen0.
Fixes #38617.

Location:
trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php

    r39104 r39105  
    595595            'type'              => 'string',
    596596            'enum'              => array_keys( $media_types ),
    597             'validate_callback' => 'rest_validate_request_arg',
    598597        );
    599598
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php

    r39101 r39105  
    11151115                    'format'       => 'ipv4',
    11161116                    'context'      => array( 'edit' ),
    1117                     'arg_options'  => array(
    1118                         'default'           => '127.0.0.1',
    1119                     ),
     1117                    'default'      => '127.0.0.1',
    11201118                ),
    11211119                'author_name'     => array(
     
    11891187                    'type'         => 'integer',
    11901188                    'context'      => array( 'view', 'edit', 'embed' ),
    1191                     'arg_options'  => array(
    1192                         'default'           => 0,
    1193                     ),
     1189                    'default'      => 0,
    11941190                ),
    11951191                'post'             => array(
     
    11971193                    'type'         => 'integer',
    11981194                    'context'      => array( 'view', 'edit' ),
    1199                     'arg_options'  => array(
    1200                         'default'           => 0,
    1201                     ),
     1195                    'default'      => 0,
    12021196                ),
    12031197                'status'           => array(
     
    12651259            'type'              => 'string',
    12661260            'format'            => 'date-time',
    1267             'validate_callback' => 'rest_validate_request_arg',
    12681261        );
    12691262
    12701263        $query_params['author'] = array(
    12711264            'description'       => __( 'Limit result set to comments assigned to specific user ids. Requires authorization.' ),
    1272             'sanitize_callback' => 'wp_parse_id_list',
    12731265            'type'              => 'array',
     1266            'items'             => array(
     1267                'type'          => 'integer',
     1268            ),
    12741269        );
    12751270
    12761271        $query_params['author_exclude'] = array(
    12771272            'description'       => __( 'Ensure result set excludes comments assigned to specific user ids. Requires authorization.' ),
    1278             'sanitize_callback' => 'wp_parse_id_list',
    12791273            'type'              => 'array',
     1274            'items'             => array(
     1275                'type'          => 'integer',
     1276            ),
    12801277        );
    12811278
     
    12841281            'description'       => __( 'Limit result set to that from a specific author email. Requires authorization.' ),
    12851282            'format'            => 'email',
    1286             'sanitize_callback' => 'sanitize_email',
    12871283            'type'              => 'string',
    12881284        );
     
    12921288            'type'              => 'string',
    12931289            'format'            => 'date-time',
    1294             'validate_callback' => 'rest_validate_request_arg',
    12951290        );
    12961291
     
    12981293            'description'        => __( 'Ensure result set excludes specific ids.' ),
    12991294            'type'               => 'array',
     1295            'items'              => array(
     1296                'type'           => 'integer',
     1297            ),
    13001298            'default'            => array(),
    1301             'sanitize_callback'  => 'wp_parse_id_list',
    13021299        );
    13031300
     
    13051302            'description'        => __( 'Limit result set to specific ids.' ),
    13061303            'type'               => 'array',
     1304            'items'              => array(
     1305                'type'           => 'integer',
     1306            ),
    13071307            'default'            => array(),
    1308             'sanitize_callback'  => 'wp_parse_id_list',
    13091308        );
    13101309
     
    13121311            'default'           => null,
    13131312            'description'       => __( 'Limit result set to that of a particular comment karma. Requires authorization.' ),
    1314             'sanitize_callback' => 'absint',
    13151313            'type'              => 'integer',
    1316             'validate_callback'  => 'rest_validate_request_arg',
    13171314        );
    13181315
     
    13201317            'description'        => __( 'Offset the result set by a specific number of comments.' ),
    13211318            'type'               => 'integer',
    1322             'sanitize_callback'  => 'absint',
    1323             'validate_callback'  => 'rest_validate_request_arg',
    13241319        );
    13251320
     
    13271322            'description'           => __( 'Order sort attribute ascending or descending.' ),
    13281323            'type'                  => 'string',
    1329             'sanitize_callback'     => 'sanitize_key',
    1330             'validate_callback'     => 'rest_validate_request_arg',
    13311324            'default'               => 'desc',
    13321325            'enum'                  => array(
     
    13391332            'description'           => __( 'Sort collection by object attribute.' ),
    13401333            'type'                  => 'string',
    1341             'sanitize_callback'     => 'sanitize_key',
    1342             'validate_callback'     => 'rest_validate_request_arg',
    13431334            'default'               => 'date_gmt',
    13441335            'enum'                  => array(
     
    13561347            'default'           => array(),
    13571348            'description'       => __( 'Limit result set to resources of specific parent ids.' ),
    1358             'sanitize_callback' => 'wp_parse_id_list',
    13591349            'type'              => 'array',
     1350            'items'             => array(
     1351                'type'          => 'integer',
     1352            ),
    13601353        );
    13611354
     
    13631356            'default'           => array(),
    13641357            'description'       => __( 'Ensure result set excludes specific parent ids.' ),
    1365             'sanitize_callback' => 'wp_parse_id_list',
    13661358            'type'              => 'array',
     1359            'items'             => array(
     1360                'type'          => 'integer',
     1361            ),
    13671362        );
    13681363
     
    13711366            'description'       => __( 'Limit result set to resources assigned to specific post ids.' ),
    13721367            'type'              => 'array',
    1373             'sanitize_callback' => 'wp_parse_id_list',
     1368            'items'             => array(
     1369                'type'          => 'integer',
     1370            ),
    13741371        );
    13751372
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php

    r39104 r39105  
    19761976                    'type'    => 'integer',
    19771977                ),
    1978                 'arg_options' => array(
    1979                     'sanitize_callback' => 'wp_parse_id_list',
    1980                 ),
    1981                 'context'     => array( 'view', 'edit' ),
    1982             );
    1983             $schema['properties'][ $base . '_exclude' ] = array(
    1984                 'description' => sprintf( __( 'The terms in the %s taxonomy that should not be assigned to the object.' ), $taxonomy->name ),
    1985                 'type'        => 'array',
    1986                 'items'       => array(
    1987                     'type'    => 'integer',
    1988                 ),
    1989                 'arg_options' => array(
    1990                     'sanitize_callback' => 'wp_parse_id_list',
    1991                 ),
    19921978                'context'     => array( 'view', 'edit' ),
    19931979            );
     
    20142000            'type'               => 'string',
    20152001            'format'             => 'date-time',
    2016             'validate_callback'  => 'rest_validate_request_arg',
    20172002        );
    20182003
     
    20212006                'description'         => __( 'Limit result set to posts assigned to specific authors.' ),
    20222007                'type'                => 'array',
     2008                'items'               => array(
     2009                    'type'            => 'integer',
     2010                ),
    20232011                'default'             => array(),
    2024                 'sanitize_callback'   => 'wp_parse_id_list',
    20252012            );
    20262013            $params['author_exclude'] = array(
    20272014                'description'         => __( 'Ensure result set excludes posts assigned to specific authors.' ),
    20282015                'type'                => 'array',
     2016                'items'               => array(
     2017                    'type'            => 'integer',
     2018                ),
    20292019                'default'             => array(),
    2030                 'sanitize_callback'   => 'wp_parse_id_list',
    20312020            );
    20322021        }
     
    20362025            'type'               => 'string',
    20372026            'format'             => 'date-time',
    2038             'validate_callback'  => 'rest_validate_request_arg',
    20392027        );
    20402028
     
    20422030            'description'        => __( 'Ensure result set excludes specific ids.' ),
    20432031            'type'               => 'array',
     2032            'items'              => array(
     2033                'type'           => 'integer',
     2034            ),
    20442035            'default'            => array(),
    2045             'sanitize_callback'  => 'wp_parse_id_list',
    20462036        );
    20472037
     
    20492039            'description'        => __( 'Limit result set to specific ids.' ),
    20502040            'type'               => 'array',
     2041            'items'              => array(
     2042                'type'           => 'integer',
     2043            ),
    20512044            'default'            => array(),
    2052             'sanitize_callback'  => 'wp_parse_id_list',
    20532045        );
    20542046
     
    20572049                'description'        => __( 'Limit result set to resources with a specific menu_order value.' ),
    20582050                'type'               => 'integer',
    2059                 'sanitize_callback'  => 'absint',
    2060                 'validate_callback'  => 'rest_validate_request_arg',
    20612051            );
    20622052        }
     
    20652055            'description'        => __( 'Offset the result set by a specific number of items.' ),
    20662056            'type'               => 'integer',
    2067             'sanitize_callback'  => 'absint',
    2068             'validate_callback'  => 'rest_validate_request_arg',
    20692057        );
    20702058
     
    20742062            'default'            => 'desc',
    20752063            'enum'               => array( 'asc', 'desc' ),
    2076             'validate_callback'  => 'rest_validate_request_arg',
    20772064        );
    20782065
     
    20892076                'slug',
    20902077            ),
    2091             'validate_callback'  => 'rest_validate_request_arg',
    20922078        );
    20932079
     
    21022088                'description'       => __( 'Limit result set to those of particular parent ids.' ),
    21032089                'type'              => 'array',
    2104                 'sanitize_callback' => 'wp_parse_id_list',
     2090                'items'             => array(
     2091                    'type'          => 'integer',
     2092                ),
    21052093                'default'           => array(),
    21062094            );
     
    21082096                'description'       => __( 'Limit result set to all items except those of a particular parent id.' ),
    21092097                'type'              => 'array',
    2110                 'sanitize_callback' => 'wp_parse_id_list',
     2098                'items'             => array(
     2099                    'type'          => 'integer',
     2100                ),
    21112101                'default'           => array(),
    21122102            );
     
    21382128                'description'       => sprintf( __( 'Limit result set to all items that have the specified term assigned in the %s taxonomy.' ), $base ),
    21392129                'type'              => 'array',
    2140                 'sanitize_callback' => 'wp_parse_id_list',
     2130                'items'             => array(
     2131                    'type'          => 'integer',
     2132                ),
     2133                'default'           => array(),
     2134            );
     2135
     2136            $params[ $base . '_exclude' ] = array(
     2137                'description' => sprintf( __( 'Limit result set to all items except those that have the specified term assigned in the %s taxonomy.' ), $base ),
     2138                'type'        => 'array',
     2139                'items'       => array(
     2140                    'type'    => 'integer',
     2141                ),
    21412142                'default'           => array(),
    21422143            );
     
    21472148                'description'       => __( 'Limit result set to items that are sticky.' ),
    21482149                'type'              => 'boolean',
    2149                 'sanitize_callback' => 'rest_parse_request_arg',
    21502150            );
    21512151        }
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-taxonomies-controller.php

    r39103 r39105  
    305305            'description'  => __( 'Limit results to resources associated with a specific post type.' ),
    306306            'type'         => 'string',
    307             'validate_callback' => 'rest_validate_request_arg',
    308307        );
    309308        return $new_params;
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-terms-controller.php

    r39033 r39105  
    888888            'description'       => __( 'Ensure result set excludes specific ids.' ),
    889889            'type'              => 'array',
     890            'items'             => array(
     891                'type'          => 'integer',
     892            ),
    890893            'default'           => array(),
    891             'sanitize_callback' => 'wp_parse_id_list',
    892894        );
    893895
     
    895897            'description'       => __( 'Limit result set to specific ids.' ),
    896898            'type'              => 'array',
     899            'items'             => array(
     900                'type'          => 'integer',
     901            ),
    897902            'default'           => array(),
    898             'sanitize_callback' => 'wp_parse_id_list',
    899903        );
    900904
     
    903907                'description'       => __( 'Offset the result set by a specific number of items.' ),
    904908                'type'              => 'integer',
    905                 'sanitize_callback' => 'absint',
    906                 'validate_callback' => 'rest_validate_request_arg',
    907909            );
    908910        }
     
    911913            'description'       => __( 'Order sort attribute ascending or descending.' ),
    912914            'type'              => 'string',
    913             'sanitize_callback' => 'sanitize_key',
    914915            'default'           => 'asc',
    915916            'enum'              => array(
     
    917918                'desc',
    918919            ),
    919             'validate_callback' => 'rest_validate_request_arg',
    920920        );
    921921
     
    923923            'description'       => __( 'Sort collection by resource attribute.' ),
    924924            'type'              => 'string',
    925             'sanitize_callback' => 'sanitize_key',
    926925            'default'           => 'name',
    927926            'enum'              => array(
     
    934933                'count',
    935934            ),
    936             'validate_callback' => 'rest_validate_request_arg',
    937935        );
    938936
     
    941939            'type'              => 'boolean',
    942940            'default'           => false,
    943             'sanitize_callback' => 'rest_sanitize_request_arg',
    944             'validate_callback' => 'rest_validate_request_arg',
    945941        );
    946942
     
    949945                'description'       => __( 'Limit result set to resources assigned to a specific parent.' ),
    950946                'type'              => 'integer',
    951                 'sanitize_callback' => 'absint',
    952                 'validate_callback' => 'rest_validate_request_arg',
    953947            );
    954948        }
     
    958952            'type'              => 'integer',
    959953            'default'           => null,
    960             'validate_callback' => 'rest_validate_request_arg',
    961954        );
    962955
     
    964957            'description'       => __( 'Limit result set to resources with a specific slug.' ),
    965958            'type'              => 'string',
    966             'validate_callback' => 'rest_validate_request_arg',
    967959        );
    968960
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php

    r39096 r39105  
    11031103                    ),
    11041104                    'context'     => array( 'edit' ),
    1105                     'arg_options' => array(
    1106                         'sanitize_callback' => 'wp_parse_slug_list',
    1107                     ),
    11081105                ),
    11091106                'password'        => array(
     
    11721169            'description'        => __( 'Ensure result set excludes specific ids.' ),
    11731170            'type'               => 'array',
     1171            'items'              => array(
     1172                'type'           => 'integer',
     1173            ),
    11741174            'default'            => array(),
    1175             'sanitize_callback'  => 'wp_parse_id_list',
    11761175        );
    11771176
     
    11791178            'description'        => __( 'Limit result set to specific ids.' ),
    11801179            'type'               => 'array',
     1180            'items'              => array(
     1181                'type'           => 'integer',
     1182            ),
    11811183            'default'            => array(),
    1182             'sanitize_callback'  => 'wp_parse_id_list',
    11831184        );
    11841185
     
    11861187            'description'        => __( 'Offset the result set by a specific number of items.' ),
    11871188            'type'               => 'integer',
    1188             'sanitize_callback'  => 'absint',
    1189             'validate_callback'  => 'rest_validate_request_arg',
    11901189        );
    11911190
     
    11941193            'description'        => __( 'Order sort attribute ascending or descending.' ),
    11951194            'enum'               => array( 'asc', 'desc' ),
    1196             'sanitize_callback'  => 'sanitize_key',
    11971195            'type'               => 'string',
    1198             'validate_callback'  => 'rest_validate_request_arg',
    11991196        );
    12001197
     
    12111208                'url',
    12121209            ),
    1213             'sanitize_callback'  => 'sanitize_key',
    12141210            'type'               => 'string',
    1215             'validate_callback'  => 'rest_validate_request_arg',
    12161211        );
    12171212
     
    12191214            'description'        => __( 'Limit result set to resources with a specific slug.' ),
    12201215            'type'               => 'string',
    1221             'validate_callback'  => 'rest_validate_request_arg',
    12221216        );
    12231217
     
    12251219            'description'        => __( 'Limit result set to resources matching at least one specific role provided. Accepts csv list or single role.' ),
    12261220            'type'               => 'array',
    1227             'sanitize_callback'  => 'wp_parse_slug_list',
     1221            'items'              => array(
     1222                'type'           => 'string',
     1223            ),
    12281224        );
    12291225
  • trunk/tests/phpunit/tests/rest-api/rest-categories-controller.php

    r38975 r39105  
    429429    }
    430430
     431    public function test_get_terms_invalid_parent_arg() {
     432        $category1 = $this->factory->category->create( array( 'name' => 'Parent' ) );
     433        $this->factory->category->create( array( 'name' => 'Child', 'parent' => $category1 ) );
     434        $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
     435        $request->set_param( 'parent', 'invalid-parent' );
     436        $response = $this->server->dispatch( $request );
     437        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
     438    }
     439
    431440    public function test_get_terms_private_taxonomy() {
    432441        register_taxonomy( 'robin', 'post', array( 'public' => false ) );
  • trunk/tests/phpunit/tests/rest-api/rest-comments-controller.php

    r39101 r39105  
    301301        $this->assertEquals( 2, count( $data ) );
    302302        $this->assertEquals( $id3, $data[0]['id'] );
     303        // Orderby=>invalid should fail.
     304        $request->set_param( 'orderby', 'invalid' );
     305        $response = $this->server->dispatch( $request );
     306        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
     307        // fails on invalid id.
     308        $request->set_param( 'orderby', array( 'include' ) );
     309        $request->set_param( 'include', array( 'invalid' ) );
     310        $response = $this->server->dispatch( $request );
     311        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    303312    }
    304313
     
    321330        $this->assertTrue( in_array( $id1, wp_list_pluck( $data, 'id' ), true ) );
    322331        $this->assertFalse( in_array( $id2, wp_list_pluck( $data, 'id' ), true ) );
     332
     333        // fails on invalid id.
     334        $request->set_param( 'exclude', array( 'invalid' ) );
     335        $response = $this->server->dispatch( $request );
     336        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    323337    }
    324338
     
    344358        $response = $this->server->dispatch( $request );
    345359        $this->assertCount( 2, $response->get_data() );
     360        // 'offset' with invalid value errors.
     361        $request->set_param( 'offset', 'moreplease' );
     362        $response = $this->server->dispatch( $request );
     363        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    346364    }
    347365
     
    365383        $data = $response->get_data();
    366384        $this->assertEquals( self::$approved_id, $data[0]['id'] );
     385        // order=>asc,id should fail
     386        $request->set_param( 'order', 'asc,id' );
     387        $response = $this->server->dispatch( $request );
     388        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    367389    }
    368390
     
    403425        $comments = $response->get_data();
    404426        $this->assertCount( 2, $comments );
     427        // Invalid author param errors
     428        $request->set_param( 'author', 'skippy' );
     429        $response = $this->server->dispatch( $request );
     430        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    405431        // Unavailable to unauthenticated; defaults to error
    406432        wp_set_current_user( 0 );
     433        $request->set_param( 'author', array( self::$author_id, self::$subscriber_id ) );
    407434        $response = $this->server->dispatch( $request );
    408435        $this->assertErrorResponse( 'rest_forbidden_param', $response, 401 );
     
    442469        $comments = $response->get_data();
    443470        $this->assertCount( 2, $comments );
     471        // 'author_exclude' for both invalid author
     472        $request = new WP_REST_Request( 'GET', '/wp/v2/comments' );
     473        $request->set_param( 'author_exclude', 'skippy' );
     474        $response = $this->server->dispatch( $request );
     475        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    444476        // Unavailable to unauthenticated; defaults to error
    445477        wp_set_current_user( 0 );
     478        $request->set_param( 'author_exclude', array( self::$author_id, self::$subscriber_id ) );
    446479        $response = $this->server->dispatch( $request );
    447480        $this->assertErrorResponse( 'rest_forbidden_param', $response, 401 );
     
    471504        $response = $this->server->dispatch( $request );
    472505        $this->assertCount( 2, $response->get_data() );
     506        // Invalid parent should error
     507        $request->set_param( 'parent', 'invalid' );
     508        $response = $this->server->dispatch( $request );
     509        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    473510    }
    474511
     
    496533        $response = $this->server->dispatch( $request );
    497534        $this->assertCount( 3, $response->get_data() );
     535        // Invalid parent id should error
     536        $request->set_param( 'parent_exclude', 'invalid' );
     537        $response = $this->server->dispatch( $request );
     538        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    498539    }
    499540
     
    958999    }
    9591000
     1001    public function test_create_comment_invalid_email() {
     1002        $post_id = $this->factory->post->create();
     1003        wp_set_current_user( self::$admin_id );
     1004
     1005        $params = array(
     1006            'post'  => $post_id,
     1007            'author'       => self::$admin_id,
     1008            'author_name'  => 'Comic Book Guy',
     1009            'author_email' => 'hello:)',
     1010            'author_url'   => 'http://androidsdungeon.com',
     1011            'content' => 'Worst Comment Ever!',
     1012            'date'  => '2014-11-07T10:14:25',
     1013        );
     1014
     1015        $request = new WP_REST_Request( 'POST', '/wp/v2/comments' );
     1016        $request->add_header( 'content-type', 'application/json' );
     1017        $request->set_body( wp_json_encode( $params ) );
     1018
     1019        $response = $this->server->dispatch( $request );
     1020        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
     1021    }
     1022
    9601023    public function test_create_item_current_user() {
    9611024        $user_id = $this->factory->user->create( array(
     
    10561119
    10571120        $this->assertErrorResponse( 'rest_comment_invalid_karma', $response, 403 );
     1121    }
     1122
     1123    public function test_create_comment_invalid_post() {
     1124        wp_set_current_user( self::$subscriber_id );
     1125
     1126        $params = array(
     1127            'post'         => 'some-slug',
     1128            'author_name'  => 'Homer Jay Simpson',
     1129            'author_email' => 'chunkylover53@aol.com',
     1130            'author_url'   => 'http://compuglobalhypermeganet.com',
     1131            'content'      => 'Here\’s to alcohol: the cause of, and solution to, all of life\’s problems.',
     1132            'author'       => self::$subscriber_id,
     1133        );
     1134
     1135        $request = new WP_REST_Request( 'POST', '/wp/v2/comments' );
     1136        $request->add_header( 'content-type', 'application/json' );
     1137        $request->set_body( wp_json_encode( $params ) );
     1138        $response = $this->server->dispatch( $request );
     1139
     1140        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
     1141    }
     1142
     1143    public function test_create_comment_karma_invalid_value() {
     1144        wp_set_current_user( self::$subscriber_id );
     1145
     1146        $params = array(
     1147            'post'       => self::$post_id,
     1148            'author_name'  => 'Homer Jay Simpson',
     1149            'author_email' => 'chunkylover53@aol.com',
     1150            'author_url'   => 'http://compuglobalhypermeganet.com',
     1151            'content'     => 'Here\’s to alcohol: the cause of, and solution to, all of life\’s problems.',
     1152            'author'       => self::$subscriber_id,
     1153            'karma'     => 'themostkarmaever',
     1154        );
     1155
     1156        $request = new WP_REST_Request( 'POST', '/wp/v2/comments' );
     1157        $request->add_header( 'content-type', 'application/json' );
     1158        $request->set_body( wp_json_encode( $params ) );
     1159        $response = $this->server->dispatch( $request );
     1160
     1161        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    10581162    }
    10591163
     
    18941998        $this->assertArrayHasKey( 'status', $properties );
    18951999        $this->assertArrayHasKey( 'type', $properties );
     2000
     2001        $this->assertEquals( '127.0.0.1', $properties['author_ip']['default'] );
     2002        $this->assertEquals( 0, $properties['parent']['default'] );
     2003        $this->assertEquals( 0, $properties['post']['default'] );
    18962004    }
    18972005
  • trunk/tests/phpunit/tests/rest-api/rest-pages-controller.php

    r39047 r39105  
    9696        $this->assertEquals( 1, count( $data ) );
    9797        $this->assertEquals( $id2, $data[0]['id'] );
     98        // Invalid parent should fail
     99        $request->set_param( 'parent', 'some-slug' );
     100        $response = $this->server->dispatch( $request );
     101        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    98102    }
    99103
     
    130134        $this->assertEquals( 1, count( $data ) );
    131135        $this->assertEquals( $id1, $data[0]['id'] );
     136        // Invalid parent_exclude should error
     137        $request->set_param( 'parent_exclude', 'some-slug' );
     138        $response = $this->server->dispatch( $request );
     139        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    132140    }
    133141
     
    157165        $this->assertEquals( $id2, $data[2]['id'] );
    158166        $this->assertEquals( $id3, $data[3]['id'] );
     167        // Invalid menu_order should fail
     168        $request = new WP_REST_Request( 'GET', '/wp/v2/pages' );
     169        $request->set_param( 'menu_order', 'top-first' );
     170        $response = $this->server->dispatch( $request );
     171        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    159172    }
    160173
  • trunk/tests/phpunit/tests/rest-api/rest-posts-controller.php

    r39104 r39105  
    9393            'before',
    9494            'categories',
     95            'categories_exclude',
    9596            'context',
    9697            'exclude',
     
    106107            'sticky',
    107108            'tags',
     109            'tags_exclude',
    108110            ), $keys );
    109111    }
     
    184186        $this->assertNotEquals( self::$editor_id, $data[0]['author'] );
    185187        $this->assertNotEquals( self::$editor_id, $data[1]['author'] );
     188        // invalid author_exclude errors
     189        $request = new WP_REST_Request( 'GET', '/wp/v2/posts' );
     190        $request->set_param( 'author_exclude', 'invalid' );
     191        $response = $this->server->dispatch( $request );
     192        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    186193    }
    187194
     
    203210        $this->assertEquals( 2, count( $data ) );
    204211        $this->assertEquals( $id1, $data[0]['id'] );
     212        // Invalid include should error
     213        $request = new WP_REST_Request( 'GET', '/wp/v2/posts' );
     214        $request->set_param( 'include', 'invalid' );
     215        $response = $this->server->dispatch( $request );
     216        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    205217    }
    206218
     
    225237        $this->assertTrue( in_array( $id1, wp_list_pluck( $data, 'id' ), true ) );
    226238        $this->assertFalse( in_array( $id2, wp_list_pluck( $data, 'id' ), true ) );
     239
     240        $request->set_param( 'exclude', 'invalid' );
     241        $response = $this->server->dispatch( $request );
     242        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    227243    }
    228244
     
    407423        $data = $response->get_data();
    408424        $this->assertEquals( 'Apple Cobbler', $data[0]['title']['rendered'] );
     425        // order=>asc,id should fail
     426        $request->set_param( 'order', 'asc,id' );
     427        $response = $this->server->dispatch( $request );
     428        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
     429        // orderby=>content should fail (invalid param test)
     430        $request->set_param( 'order', 'asc' );
     431        $request->set_param( 'orderby', 'content' );
     432        $response = $this->server->dispatch( $request );
     433        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    409434    }
    410435
     
    457482        $response = $this->server->dispatch( $request );
    458483        $this->assertCount( 2, $response->get_data() );
     484        // Invalid 'offset' should error
     485        $request->set_param( 'offset', 'moreplease' );
     486        $response = $this->server->dispatch( $request );
     487        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    459488    }
    460489
     
    513542        $response = $this->server->dispatch( $request );
    514543        $this->assertCount( 1, $response->get_data() );
     544
     545        $request->set_param( 'tags', array( 'my-tag' ) );
     546        $response = $this->server->dispatch( $request );
     547        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    515548    }
    516549
     
    535568        $this->assertCount( 1, $data );
    536569        $this->assertEquals( $id2, $data[0]['id'] );
     570
     571        $request->set_param( 'tags_exclude', array( 'my-tag' ) );
     572        $response = $this->server->dispatch( $request );
     573        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    537574    }
    538575
     
    552589        $post = $posts[0];
    553590        $this->assertEquals( $id2, $post['id'] );
     591
     592        $request->set_param( 'sticky', 'nothanks' );
     593        $response = $this->server->dispatch( $request );
     594        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    554595    }
    555596
     
    19902031        $data = $response->get_data();
    19912032        $properties = $data['schema']['properties'];
    1992         $this->assertEquals( 25, count( $properties ) );
     2033        $this->assertEquals( 23, count( $properties ) );
    19932034        $this->assertArrayHasKey( 'author', $properties );
    19942035        $this->assertArrayHasKey( 'comment_status', $properties );
     
    20132054        $this->assertArrayHasKey( 'type', $properties );
    20142055        $this->assertArrayHasKey( 'tags', $properties );
    2015         $this->assertArrayHasKey( 'tags_exclude', $properties );
    20162056        $this->assertArrayHasKey( 'categories', $properties );
    2017         $this->assertArrayHasKey( 'categories_exclude', $properties );
    20182057    }
    20192058
  • trunk/tests/phpunit/tests/rest-api/rest-tags-controller.php

    r38974 r39105  
    9999        $this->assertEquals( 'Season 5', $data[0]['name'] );
    100100        $this->assertEquals( 'The Be Sharps', $data[1]['name'] );
     101        // invalid value should fail
     102        $request->set_param( 'hide_empty', 'nothanks' );
     103        $response = $this->server->dispatch( $request );
     104        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    101105    }
    102106
     
    118122        $this->assertEquals( 2, count( $data ) );
    119123        $this->assertEquals( $id3, $data[0]['id'] );
     124        // Include invalid value shoud fail
     125        $request->set_param( 'include', array( 'myterm' ) );
     126        $response = $this->server->dispatch( $request );
     127        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    120128    }
    121129
     
    133141        $this->assertTrue( in_array( $id1, wp_list_pluck( $data, 'id' ), true ) );
    134142        $this->assertFalse( in_array( $id2, wp_list_pluck( $data, 'id' ), true ) );
     143        // Invalid exclude value should fail
     144        $request->set_param( 'exclude', array( 'invalid' ) );
     145        $response = $this->server->dispatch( $request );
     146        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    135147    }
    136148
     
    152164        $response = $this->server->dispatch( $request );
    153165        $this->assertCount( 2, $response->get_data() );
     166        // 'offset' invalid value shoudl fail
     167        $request->set_param( 'offset', 'moreplease' );
     168        $response = $this->server->dispatch( $request );
     169        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    154170    }
    155171
     
    182198        $this->assertEquals( 2, count( $data ) );
    183199        $this->assertEquals( 'Apple', $data[0]['name'] );
     200        // Invalid orderby should fail.
     201        $request->set_param( 'orderby', 'invalid' );
     202        $response = $this->server->dispatch( $request );
     203        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    184204    }
    185205
     
    232252        $this->assertEquals( 2, count( $data ) );
    233253        $this->assertEquals( 'DC', $data[0]['name'] );
     254
     255        // Invalid post should error.
     256        $request = new WP_REST_Request( 'GET', '/wp/v2/tags' );
     257        $request->set_param( 'post', 'invalid-post' );
     258        $response = $this->server->dispatch( $request );
     259        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    234260    }
    235261
  • trunk/tests/phpunit/tests/rest-api/rest-users-controller.php

    r39096 r39105  
    364364    }
    365365
     366    public function test_get_items_invalid_order() {
     367        $request = new WP_REST_Request( 'GET', '/wp/v2/users' );
     368        $request->set_param( 'order', 'asc,id' );
     369        $response = $this->server->dispatch( $request );
     370        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
     371    }
     372
     373    public function test_get_items_invalid_orderby() {
     374        $request = new WP_REST_Request( 'GET', '/wp/v2/users' );
     375        $request->set_param( 'orderby', 'invalid' );
     376        $response = $this->server->dispatch( $request );
     377        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
     378    }
     379
    366380    public function test_get_items_offset() {
    367381        wp_set_current_user( self::$user );
     
    380394        $response = $this->server->dispatch( $request );
    381395        $this->assertCount( 2, $response->get_data() );
     396        // 'offset' invalid value should error
     397        $request->set_param( 'offset', 'moreplease' );
     398        $response = $this->server->dispatch( $request );
     399        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    382400    }
    383401
     
    400418        $this->assertEquals( 2, count( $data ) );
    401419        $this->assertEquals( $id3, $data[0]['id'] );
     420        // Invalid include should fail
     421        $request->set_param( 'include', 'invalid' );
     422        $response = $this->server->dispatch( $request );
     423        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    402424        // No privileges
     425        $request->set_param( 'include', array( $id3, $id1 ) );
    403426        wp_set_current_user( 0 );
    404427        $response = $this->server->dispatch( $request );
     
    422445        $this->assertTrue( in_array( $id1, wp_list_pluck( $data, 'id' ), true ) );
    423446        $this->assertFalse( in_array( $id2, wp_list_pluck( $data, 'id' ), true ) );
     447        // Invalid exlude value should error.
     448        $request->set_param( 'exclude', 'none-of-those-please' );
     449        $response = $this->server->dispatch( $request );
     450        $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
    424451    }
    425452
Note: See TracChangeset for help on using the changeset viewer.