Skip to content

Commit 0d09f16

Browse files
committed
Fix unit tests
1 parent e7edcbc commit 0d09f16

File tree

3 files changed

+51
-6
lines changed

3 files changed

+51
-6
lines changed

src/wp-includes/rest-api.php

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -298,16 +298,39 @@ function create_initial_rest_routes() {
298298
}
299299
}
300300

301-
// Register the old templates endpoints.
301+
// Register the old templates endpoints. The WP_REST_Templates_Controller
302+
// and sub-controllers used linked to the wp_template post type, but are no
303+
// longer. They still require a post type object when contructing the class.
304+
// To maintain backward and changes to these controller classes, we make use
305+
// that the wp_template post type has the right information it needs.
302306
$wp_post_types['wp_template']->rest_base = 'templates';
303-
$controller = new WP_REST_Templates_Controller( 'wp_template' );
304-
$wp_post_types['wp_template']->rest_controller = $controller;
305-
$revisions_controller = new WP_REST_Template_Revisions_Controller( 'wp_template' );
307+
// Store the classes so they can be restored.
308+
$original_rest_controller_class = $wp_post_types['wp_template']->rest_controller_class;
309+
$original_autosave_rest_controller_class = $wp_post_types['wp_template']->autosave_rest_controller_class;
310+
$original_revisions_rest_controller_class = $wp_post_types['wp_template']->revisions_rest_controller_class;
311+
// Temporarily set the old classes.
312+
$wp_post_types['wp_template']->rest_controller_class = 'WP_REST_Templates_Controller';
313+
$wp_post_types['wp_template']->autosave_rest_controller_class = 'WP_REST_Template_Autosaves_Controller';
314+
$wp_post_types['wp_template']->revisions_rest_controller_class = 'WP_REST_Template_Revisions_Controller';
315+
// Initialize the controllers. The order is important: the autosave
316+
// controller needs both the templates and revisions controllers.
317+
$controller = new WP_REST_Templates_Controller( 'wp_template' );
318+
$wp_post_types['wp_template']->rest_controller = $controller;
319+
$revisions_controller = new WP_REST_Template_Revisions_Controller( 'wp_template' );
306320
$wp_post_types['wp_template']->revisions_rest_controller = $revisions_controller;
307-
$autosaves_controller = new WP_REST_Template_Autosaves_Controller( 'wp_template' );
308-
$wp_post_types['wp_template']->rest_controller = null;
321+
$autosaves_controller = new WP_REST_Template_Autosaves_Controller( 'wp_template' );
322+
// Unset the controller cache, it will be re-initialized when
323+
// get_rest_controller is called.
324+
$wp_post_types['wp_template']->rest_controller = null;
309325
$wp_post_types['wp_template']->revisions_rest_controller = null;
326+
// Restore the original classes.
327+
$wp_post_types['wp_template']->rest_controller_class = $original_rest_controller_class;
328+
$wp_post_types['wp_template']->autosave_rest_controller_class = $original_autosave_rest_controller_class;
329+
$wp_post_types['wp_template']->revisions_rest_controller_class = $original_revisions_rest_controller_class;
330+
// Restore the original base.
310331
$wp_post_types['wp_template']->rest_base = 'wp_template';
332+
333+
// Register the old routes.
311334
$autosaves_controller->register_routes();
312335
$revisions_controller->register_routes();
313336
$controller->register_routes();

tests/phpunit/tests/rest-api/wpRestTemplateAutosavesController.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,20 @@ public function test_prepare_item_with_data_provider( $parent_post_property_name
589589
);
590590
$autosave_db_post = get_post( $autosave_post_id );
591591
$request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves/' . $autosave_db_post->ID );
592+
// See create_initial_rest_routes. The controller need the post type
593+
// with adjusted settings to initialize.
594+
global $wp_post_types;
595+
$wp_post_types['wp_template']->rest_base = 'templates';
596+
$original_rest_controller_class = $wp_post_types['wp_template']->rest_controller_class;
597+
$original_revisions_rest_controller_class = $wp_post_types['wp_template']->revisions_rest_controller_class;
598+
$wp_post_types['wp_template']->rest_controller_class = 'WP_REST_Templates_Controller';
599+
$wp_post_types['wp_template']->revisions_rest_controller_class = 'WP_REST_Template_Revisions_Controller';
600+
$wp_post_types['wp_template']->rest_controller = null;
601+
$wp_post_types['wp_template']->revisions_rest_controller = null;
592602
$controller = new WP_REST_Template_Autosaves_Controller( $parent_post->post_type );
603+
$wp_post_types['wp_template']->rest_controller_class = $original_rest_controller_class;
604+
$wp_post_types['wp_template']->revisions_rest_controller_class = $original_revisions_rest_controller_class;
605+
$wp_post_types['wp_template']->rest_base = 'wp_template';
593606
$response = $controller->prepare_item_for_response( $autosave_db_post, $request );
594607
$this->assertInstanceOf(
595608
WP_REST_Response::class,

tests/phpunit/tests/rest-api/wpRestTemplateRevisionsController.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -830,7 +830,16 @@ public function test_prepare_item_with_data_provider( $parent_post_property_name
830830
$revision_id = array_shift( $revisions );
831831
$post = get_post( $revision_id );
832832
$request = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/revisions/' . $revision_id );
833+
// See create_initial_rest_routes. The controller need the post type
834+
// with adjusted settings to initialize.
835+
global $wp_post_types;
836+
$wp_post_types['wp_template']->rest_base = 'templates';
837+
$original_rest_controller_class = $wp_post_types['wp_template']->rest_controller_class;
838+
$wp_post_types['wp_template']->rest_controller_class = 'WP_REST_Templates_Controller';
839+
$wp_post_types['wp_template']->rest_controller = null;
833840
$controller = new WP_REST_Template_Revisions_Controller( $parent_post->post_type );
841+
$wp_post_types['wp_template']->rest_controller_class = $original_rest_controller_class;
842+
$wp_post_types['wp_template']->rest_base = 'wp_template';
834843
$response = $controller->prepare_item_for_response( $post, $request );
835844
$this->assertInstanceOf(
836845
WP_REST_Response::class,

0 commit comments

Comments
 (0)