From 5831fe2c51cfa98d7262d77e93374ea6037d67dc Mon Sep 17 00:00:00 2001 From: Paul Bearne Date: Wed, 20 May 2026 13:06:46 -0400 Subject: [PATCH 1/5] Tests: Add unit tests for wp_ajax_meta_box_order() Co-authored-by: Junie --- .../includes/ajax-actions/metaBoxOrder.php | 166 ++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php diff --git a/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php b/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php new file mode 100644 index 0000000000000..8d361fae457e5 --- /dev/null +++ b/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php @@ -0,0 +1,166 @@ +user->create( array( 'role' => 'administrator' ) ); + } + + /** + * Tests successful update of meta box order and page columns. + * + * @ticket 65252 + */ + public function test_meta_box_order_success(): void { + wp_set_current_user( self::$admin_id ); + + $page = 'testpage'; + $order = array( + 'side' => 'box1,box2', + 'normal' => 'box3', + 'advanced' => '', + ); + + $_POST = array( + 'action' => 'meta-box-order', + '_ajax_nonce' => wp_create_nonce( 'meta-box-order' ), + 'page' => $page, + 'order' => $order, + 'page_columns' => 2, + ); + + try { + $this->_handleAjax( 'meta-box-order' ); + } catch ( WPAjaxDieStopException $e ) { + // Expect success response via wp_send_json_success(). + } + + $response = json_decode( $this->_last_response, true ); + $this->assertTrue( $response['success'] ); + + $saved_order = get_user_meta( self::$admin_id, "meta-box-order_$page", true ); + $this->assertSame( $order, $saved_order ); + + $saved_columns = get_user_meta( self::$admin_id, "screen_layout_$page", true ); + $this->assertSame( 2, (int) $saved_columns ); + } + + /** + * Tests successful update with default page columns ('auto'). + * + * @ticket 65252 + */ + public function test_meta_box_order_auto_columns(): void { + wp_set_current_user( self::$admin_id ); + + $page = 'testpage_auto'; + + $_POST = array( + 'action' => 'meta-box-order', + '_ajax_nonce' => wp_create_nonce( 'meta-box-order' ), + 'page' => $page, + 'page_columns' => 'auto', + ); + + try { + $this->_handleAjax( 'meta-box-order' ); + } catch ( WPAjaxDieStopException $e ) { + } + + $response = json_decode( $this->_last_response, true ); + $this->assertTrue( $response['success'] ); + + $saved_columns = get_user_meta( self::$admin_id, "screen_layout_$page", true ); + // In the code: if ( 'auto' !== $page_columns ) { $page_columns = (int) $page_columns; } + // Then update_user_meta( ..., $page_columns ); + // Since 'auto' === 'auto', it remains 'auto'. + $this->assertSame( 'auto', $saved_columns ); + } + + /** + * Tests failure due to invalid nonce. + * + * @ticket 65252 + */ + public function test_meta_box_order_invalid_nonce(): void { + wp_set_current_user( self::$admin_id ); + + $_POST = array( + 'action' => 'meta-box-order', + '_ajax_nonce' => 'invalid-nonce', + ); + + $this->expectException( WPAjaxDieStopException::class ); + $this->expectExceptionMessage( '-1' ); + + $this->_handleAjax( 'meta-box-order' ); + } + + /** + * Tests failure due to invalid page parameter (fails sanitize_key). + * + * @ticket 65252 + */ + public function test_meta_box_order_invalid_page(): void { + wp_set_current_user( self::$admin_id ); + + $_POST = array( + 'action' => 'meta-box-order', + '_ajax_nonce' => wp_create_nonce( 'meta-box-order' ), + 'page' => 'Invalid Page!', // Contains space and exclamation which sanitize_key removes. + ); + + $this->expectException( WPAjaxDieStopException::class ); + $this->expectExceptionMessage( '0' ); + + $this->_handleAjax( 'meta-box-order' ); + } + + /** + * Tests failure when no user is logged in. + * + * @ticket 65252 + */ + public function test_meta_box_order_no_user(): void { + wp_set_current_user( 0 ); + + $_POST = array( + 'action' => 'meta-box-order', + '_ajax_nonce' => wp_create_nonce( 'meta-box-order' ), + 'page' => 'testpage', + ); + + $this->expectException( WPAjaxDieStopException::class ); + $this->expectExceptionMessage( '-1' ); + + $this->_handleAjax( 'meta-box-order' ); + } +} From 97569a66787493755f516488abb1ae82c142db31 Mon Sep 17 00:00:00 2001 From: Paul Bearne Date: Wed, 20 May 2026 13:40:53 -0400 Subject: [PATCH 2/5] Fix formatting in metaBoxOrder test case --- .../tests/admin/includes/ajax-actions/metaBoxOrder.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php b/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php index 8d361fae457e5..a830d28b70495 100644 --- a/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php +++ b/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php @@ -44,8 +44,8 @@ public function test_meta_box_order_success(): void { $page = 'testpage'; $order = array( - 'side' => 'box1,box2', - 'normal' => 'box3', + 'side' => 'box1,box2', + 'normal' => 'box3', 'advanced' => '', ); From c45a8b85872bcce6af1150528454cdeef0e9b7d3 Mon Sep 17 00:00:00 2001 From: Paul Bearne Date: Wed, 20 May 2026 16:29:23 -0400 Subject: [PATCH 3/5] Tests: Update exception handling in meta box order AJAX tests --- .../tests/admin/includes/ajax-actions/metaBoxOrder.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php b/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php index a830d28b70495..e28cf645464ba 100644 --- a/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php +++ b/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php @@ -59,7 +59,7 @@ public function test_meta_box_order_success(): void { try { $this->_handleAjax( 'meta-box-order' ); - } catch ( WPAjaxDieStopException $e ) { + } catch ( WPAjaxDieContinueException $e ) { // Expect success response via wp_send_json_success(). } @@ -92,7 +92,7 @@ public function test_meta_box_order_auto_columns(): void { try { $this->_handleAjax( 'meta-box-order' ); - } catch ( WPAjaxDieStopException $e ) { + } catch ( WPAjaxDieContinueException $e ) { } $response = json_decode( $this->_last_response, true ); From e9f91ef4b83a4c4bbc8384fa369a4fbfe5b2134b Mon Sep 17 00:00:00 2001 From: Paul Bearne Date: Wed, 20 May 2026 16:40:38 -0400 Subject: [PATCH 4/5] Tests: Fix exception handling in metaBoxOrder tests --- .../tests/admin/includes/ajax-actions/metaBoxOrder.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php b/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php index e28cf645464ba..48aa976ec4127 100644 --- a/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php +++ b/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php @@ -118,7 +118,7 @@ public function test_meta_box_order_invalid_nonce(): void { '_ajax_nonce' => 'invalid-nonce', ); - $this->expectException( WPAjaxDieStopException::class ); + $this->expectException( WPAjaxDieContinueException::class ); $this->expectExceptionMessage( '-1' ); $this->_handleAjax( 'meta-box-order' ); @@ -138,7 +138,7 @@ public function test_meta_box_order_invalid_page(): void { 'page' => 'Invalid Page!', // Contains space and exclamation which sanitize_key removes. ); - $this->expectException( WPAjaxDieStopException::class ); + $this->expectException( WPAjaxDieContinueException::class ); $this->expectExceptionMessage( '0' ); $this->_handleAjax( 'meta-box-order' ); @@ -158,7 +158,7 @@ public function test_meta_box_order_no_user(): void { 'page' => 'testpage', ); - $this->expectException( WPAjaxDieStopException::class ); + $this->expectException( WPAjaxDieContinueException::class ); $this->expectExceptionMessage( '-1' ); $this->_handleAjax( 'meta-box-order' ); From 68ac56f556a3b76c663a6f1a2a5768422eab863b Mon Sep 17 00:00:00 2001 From: Paul Bearne Date: Wed, 20 May 2026 17:09:56 -0400 Subject: [PATCH 5/5] Tests: Update to use `WPAjaxDieStopException` in metaBoxOrder tests --- .../tests/admin/includes/ajax-actions/metaBoxOrder.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php b/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php index 48aa976ec4127..dd1e2a499c6a6 100644 --- a/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php +++ b/tests/phpunit/tests/admin/includes/ajax-actions/metaBoxOrder.php @@ -118,7 +118,7 @@ public function test_meta_box_order_invalid_nonce(): void { '_ajax_nonce' => 'invalid-nonce', ); - $this->expectException( WPAjaxDieContinueException::class ); + $this->expectException( WPAjaxDieStopException::class ); $this->expectExceptionMessage( '-1' ); $this->_handleAjax( 'meta-box-order' ); @@ -138,7 +138,7 @@ public function test_meta_box_order_invalid_page(): void { 'page' => 'Invalid Page!', // Contains space and exclamation which sanitize_key removes. ); - $this->expectException( WPAjaxDieContinueException::class ); + $this->expectException( WPAjaxDieStopException::class ); $this->expectExceptionMessage( '0' ); $this->_handleAjax( 'meta-box-order' );