WordPress.org

Make WordPress Core

Changeset 47911


Ignore:
Timestamp:
06/04/2020 04:41:47 PM (5 months ago)
Author:
whyisjake
Message:

REST API: Ensure that all properties of get_endpoint_args_for_item_schema are listed.

  • Add new var $valid_schema_properties to match rest_validate_value_from_schema()
  • Unit test to ensure all valid properties exists, and non-valid properties are ignored

Fixes: #50301.
Props: pentatonicfunk, TimothyBlynJacobs.

Location:
trunk
Files:
3 edited

Legend:

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

    r47758 r47911  
    627627    public function get_endpoint_args_for_item_schema( $method = WP_REST_Server::CREATABLE ) {
    628628
    629         $schema            = $this->get_item_schema();
    630         $schema_properties = ! empty( $schema['properties'] ) ? $schema['properties'] : array();
    631         $endpoint_args     = array();
     629        $schema                  = $this->get_item_schema();
     630        $schema_properties       = ! empty( $schema['properties'] ) ? $schema['properties'] : array();
     631        $endpoint_args           = array();
     632        $valid_schema_properties = array(
     633            'type',
     634            'format',
     635            'enum',
     636            'items',
     637            'properties',
     638            'additionalProperties',
     639            'minimum',
     640            'maximum',
     641            'exclusiveMinimum',
     642            'exclusiveMaximum',
     643            'minLength',
     644            'maxLength',
     645            'pattern',
     646        );
    632647
    633648        foreach ( $schema_properties as $field_id => $params ) {
     
    655670            }
    656671
    657             foreach ( array( 'type', 'format', 'enum', 'items', 'properties', 'additionalProperties' ) as $schema_prop ) {
     672            foreach ( $valid_schema_properties as $schema_prop ) {
    658673                if ( isset( $params[ $schema_prop ] ) ) {
    659674                    $endpoint_args[ $field_id ][ $schema_prop ] = $params[ $schema_prop ];
  • trunk/tests/phpunit/tests/rest-api/rest-controller.php

    r47753 r47911  
    246246
    247247        $this->assertEquals( 'a', $args['somedefault']['default'] );
     248    }
     249
     250    /**
     251     * @ticket 50301
     252     */
     253    public function test_get_endpoint_args_for_item_schema_arg_properties() {
     254
     255        $controller = new WP_REST_Test_Controller();
     256        $args       = $controller->get_endpoint_args_for_item_schema();
     257
     258        foreach ( array( 'minLength', 'maxLength', 'pattern' ) as $property ) {
     259            $this->assertArrayHasKey( $property, $args['somestring'] );
     260        }
     261
     262        foreach ( array( 'minimum', 'maximum', 'exclusiveMinimum', 'exclusiveMaximum' ) as $property ) {
     263            $this->assertArrayHasKey( $property, $args['someinteger'] );
     264        }
     265
     266        $this->assertArrayHasKey( 'items', $args['somearray'] );
     267
     268        foreach ( array( 'properties', 'additionalProperties' ) as $property ) {
     269            $this->assertArrayHasKey( $property, $args['someobject'] );
     270        }
     271
     272        // ignored properties
     273        $this->assertArrayNotHasKey( 'ignored_prop', $args['someobject'] );
     274
    248275    }
    249276
     
    268295                'someargoptions',
    269296                'somedefault',
     297                'somearray',
     298                'someobject',
    270299            ),
    271300            $fields
     
    299328                    'someargoptions',
    300329                    'somedefault',
     330                    'somearray',
     331                    'someobject',
    301332                ),
    302333            ),
  • trunk/tests/phpunit/tests/rest-api/rest-test-controller.php

    r47753 r47911  
    4040                    'type'        => 'string',
    4141                    'description' => 'A pretty string.',
     42                    'minLength'   => 3,
     43                    'maxLength'   => 3,
     44                    'pattern'     => '[a-zA-Z]+',
    4245                    'context'     => array( 'view' ),
    4346                ),
    4447                'someinteger'    => array(
    45                     'type'    => 'integer',
    46                     'context' => array( 'view' ),
     48                    'type'             => 'integer',
     49                    'minimum'          => 100,
     50                    'maximum'          => 200,
     51                    'exclusiveMinimum' => true,
     52                    'exclusiveMaximum' => true,
     53                    'context'          => array( 'view' ),
    4754                ),
    4855                'someboolean'    => array(
     
    94101                    'default' => 'a',
    95102                ),
     103                'somearray'      => array(
     104                    'type'    => 'array',
     105                    'items'   => array(
     106                        'type' => 'string',
     107                    ),
     108                    'context' => array( 'view' ),
     109                ),
     110                'someobject'     => array(
     111                    'type'                 => 'object',
     112                    'additionalProperties' => array(
     113                        'type' => 'string',
     114                    ),
     115                    'properties'           => array(
     116                        'object_id' => array(
     117                            'type' => 'integer',
     118                        ),
     119                    ),
     120                    'ignored_prop'         => 'ignored_prop',
     121                    'context'              => array( 'view' ),
     122                ),
    96123            ),
    97124        );
Note: See TracChangeset for help on using the changeset viewer.