mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-06-28 14:20:15 +00:00
REST API: Add batch support for posts and terms controllers.
This also exposes the value of `allow_batch` in `OPTIONS` requests to a route. A future commit will add batch support to more resources. Props spacedmonkey, chrisvanpatten. See #53063. git-svn-id: https://develop.svn.wordpress.org/trunk@52068 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -160,6 +160,7 @@ class WP_Test_REST_Attachments_Controller extends WP_Test_REST_Post_Type_Control
|
||||
$request = new WP_REST_Request( 'OPTIONS', '/wp/v2/media' );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
$this->assertArrayNotHasKey( 'allow_batch', $data['endpoints'][0] );
|
||||
$this->assertSame( 'view', $data['endpoints'][0]['args']['context']['default'] );
|
||||
$this->assertSame( array( 'view', 'embed', 'edit' ), $data['endpoints'][0]['args']['context']['enum'] );
|
||||
// Single.
|
||||
@@ -174,6 +175,7 @@ class WP_Test_REST_Attachments_Controller extends WP_Test_REST_Post_Type_Control
|
||||
$request = new WP_REST_Request( 'OPTIONS', '/wp/v2/media/' . $attachment_id );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
$this->assertArrayNotHasKey( 'allow_batch', $data['endpoints'][0] );
|
||||
$this->assertSame( 'view', $data['endpoints'][0]['args']['context']['default'] );
|
||||
$this->assertSame( array( 'view', 'embed', 'edit' ), $data['endpoints'][0]['args']['context']['enum'] );
|
||||
}
|
||||
|
||||
@@ -117,6 +117,7 @@ class WP_Test_REST_Categories_Controller extends WP_Test_REST_Controller_Testcas
|
||||
$request = new WP_REST_Request( 'OPTIONS', '/wp/v2/categories' );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
$this->assertSame( array( 'v1' => true ), $data['endpoints'][0]['allow_batch'] );
|
||||
$this->assertSame( 'view', $data['endpoints'][0]['args']['context']['default'] );
|
||||
$this->assertSameSets( array( 'view', 'embed', 'edit' ), $data['endpoints'][0]['args']['context']['enum'] );
|
||||
// Single.
|
||||
@@ -124,6 +125,7 @@ class WP_Test_REST_Categories_Controller extends WP_Test_REST_Controller_Testcas
|
||||
$request = new WP_REST_Request( 'OPTIONS', '/wp/v2/categories/' . $category1 );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
$this->assertSame( array( 'v1' => true ), $data['endpoints'][0]['allow_batch'] );
|
||||
$this->assertSame( 'view', $data['endpoints'][0]['args']['context']['default'] );
|
||||
$this->assertSameSets( array( 'view', 'embed', 'edit' ), $data['endpoints'][0]['args']['context']['enum'] );
|
||||
}
|
||||
|
||||
@@ -64,7 +64,8 @@ class WP_Test_REST_Pages_Controller extends WP_Test_REST_Post_Type_Controller_Te
|
||||
$request = new WP_REST_Request( 'OPTIONS', '/wp/v2/pages' );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
$keys = array_keys( $data['endpoints'][0]['args'] );
|
||||
$this->assertSame( array( 'v1' => true ), $data['endpoints'][0]['allow_batch'] );
|
||||
$keys = array_keys( $data['endpoints'][0]['args'] );
|
||||
sort( $keys );
|
||||
$this->assertSame(
|
||||
array(
|
||||
|
||||
@@ -154,12 +154,14 @@ class WP_Test_REST_Posts_Controller extends WP_Test_REST_Post_Type_Controller_Te
|
||||
$request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts' );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
$this->assertSame( array( 'v1' => true ), $data['endpoints'][0]['allow_batch'] );
|
||||
$this->assertSame( 'view', $data['endpoints'][0]['args']['context']['default'] );
|
||||
$this->assertSame( array( 'view', 'embed', 'edit' ), $data['endpoints'][0]['args']['context']['enum'] );
|
||||
// Single.
|
||||
$request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts/' . self::$post_id );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
$this->assertSame( array( 'v1' => true ), $data['endpoints'][0]['allow_batch'] );
|
||||
$this->assertSame( 'view', $data['endpoints'][0]['args']['context']['default'] );
|
||||
$this->assertSame( array( 'view', 'embed', 'edit' ), $data['endpoints'][0]['args']['context']['enum'] );
|
||||
}
|
||||
|
||||
@@ -370,6 +370,38 @@ class Tests_REST_Server extends WP_Test_REST_TestCase {
|
||||
$this->assertSame( $sent_headers['Allow'], 'POST' );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 53063
|
||||
*/
|
||||
public function test_batched_options() {
|
||||
register_rest_route(
|
||||
'test-ns',
|
||||
'/test',
|
||||
array(
|
||||
array(
|
||||
'methods' => array( 'GET' ),
|
||||
'callback' => '__return_null',
|
||||
'permission_callback' => '__return_true',
|
||||
),
|
||||
array(
|
||||
'methods' => array( 'POST' ),
|
||||
'callback' => '__return_null',
|
||||
'permission_callback' => '__return_null',
|
||||
'allow_batch' => false,
|
||||
),
|
||||
'allow_batch' => array( 'v1' => true ),
|
||||
)
|
||||
);
|
||||
|
||||
$request = new WP_REST_Request( 'OPTIONS', '/test-ns/test' );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
|
||||
$data = $response->get_data();
|
||||
|
||||
$this->assertSame( array( 'v1' => true ), $data['endpoints'][0]['allow_batch'] );
|
||||
$this->assertArrayNotHasKey( 'allow_batch', $data['endpoints'][1] );
|
||||
}
|
||||
|
||||
public function test_allow_header_sent_on_options_request() {
|
||||
register_rest_route(
|
||||
'test-ns',
|
||||
|
||||
@@ -135,6 +135,7 @@ class WP_Test_REST_Tags_Controller extends WP_Test_REST_Controller_Testcase {
|
||||
$request = new WP_REST_Request( 'OPTIONS', '/wp/v2/tags' );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
$this->assertSame( array( 'v1' => true ), $data['endpoints'][0]['allow_batch'] );
|
||||
$this->assertSame( 'view', $data['endpoints'][0]['args']['context']['default'] );
|
||||
$this->assertSameSets( array( 'view', 'embed', 'edit' ), $data['endpoints'][0]['args']['context']['enum'] );
|
||||
// Single.
|
||||
@@ -142,6 +143,7 @@ class WP_Test_REST_Tags_Controller extends WP_Test_REST_Controller_Testcase {
|
||||
$request = new WP_REST_Request( 'OPTIONS', '/wp/v2/tags/' . $tag1 );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
$this->assertSame( array( 'v1' => true ), $data['endpoints'][0]['allow_batch'] );
|
||||
$this->assertSame( 'view', $data['endpoints'][0]['args']['context']['default'] );
|
||||
$this->assertSameSets( array( 'view', 'embed', 'edit' ), $data['endpoints'][0]['args']['context']['enum'] );
|
||||
}
|
||||
|
||||
@@ -1523,6 +1523,8 @@ class WP_Test_REST_Widgets_Controller extends WP_Test_REST_Controller_Testcase {
|
||||
$data = $response->get_data();
|
||||
$properties = $data['schema']['properties'];
|
||||
|
||||
$this->assertSame( array( 'v1' => true ), $data['endpoints'][0]['allow_batch'] );
|
||||
|
||||
$this->assertCount( 7, $properties );
|
||||
$this->assertArrayHasKey( 'id', $properties );
|
||||
$this->assertArrayHasKey( 'id_base', $properties );
|
||||
|
||||
Reference in New Issue
Block a user