From 63452efc7ac86b52846fbbcf715bd4bce9593bc7 Mon Sep 17 00:00:00 2001 From: Grzegorz Ziolkowski Date: Thu, 14 Aug 2025 12:40:45 +0200 Subject: [PATCH 1/4] Adjust directory structure to align with WP core See rules for PHP Tests at https://make.wordpress.org/core/handbook/testing/automated-testing/writing-phpunit-tests/. See best practices for plugins at https://developer.wordpress.org/plugins/plugin-basics/best-practices/. --- abilities-api.php | 8 +++--- {src => includes}/abilities-api.php | 0 .../class-wp-abilities-registry.php | 0 .../abilities-api}/class-wp-ability.php | 0 .../class-wp-rest-abilities-init.php | 4 +-- ...lass-wp-rest-abilities-list-controller.php | 0 ...class-wp-rest-abilities-run-controller.php | 0 phpcs.xml.dist | 12 ++++---- phpstan.neon.dist | 4 +-- phpunit.xml.dist | 4 +-- .../wpAbilitiesRegistry.php} | 2 +- .../wpRegisterAbility.php} | 2 +- .../wpRestAbilitiesInit.php} | 26 ++++++++--------- .../wpRestAbilitiesListController.php} | 12 ++++---- .../wpRestAbilitiesRunController.php} | 28 +++++++++---------- 15 files changed, 51 insertions(+), 51 deletions(-) rename {src => includes}/abilities-api.php (100%) rename {src => includes/abilities-api}/class-wp-abilities-registry.php (100%) rename {src => includes/abilities-api}/class-wp-ability.php (100%) rename {src/rest => includes/rest-api}/class-wp-rest-abilities-init.php (80%) rename {src/rest => includes/rest-api/endpoints}/class-wp-rest-abilities-list-controller.php (100%) rename {src/rest => includes/rest-api/endpoints}/class-wp-rest-abilities-run-controller.php (100%) rename tests/unit/{WPAbilitiesRegistryTest.php => abilities-api/wpAbilitiesRegistry.php} (99%) rename tests/unit/{AbilitiesAPITest.php => abilities-api/wpRegisterAbility.php} (99%) rename tests/unit/{REST/WPRESTAbilitiesInitTest.php => rest-api/wpRestAbilitiesInit.php} (97%) rename tests/unit/{REST/WPRESTAbilitiesListControllerTest.php => rest-api/wpRestAbilitiesListController.php} (99%) rename tests/unit/{REST/WPRESTAbilitiesRunControllerTest.php => rest-api/wpRestAbilitiesRunController.php} (99%) diff --git a/abilities-api.php b/abilities-api.php index 39dafd64..4481f9df 100644 --- a/abilities-api.php +++ b/abilities-api.php @@ -34,19 +34,19 @@ /** * First the WP_Ability class that users can extend. */ -require_once WP_ABILITIES_API_DIR . 'src/class-wp-ability.php'; +require_once WP_ABILITIES_API_DIR . 'includes/abilities-api/class-wp-ability.php'; /** * Then the WP_Abilities_Registry class that manages the abilities. */ -require_once WP_ABILITIES_API_DIR . 'src/class-wp-abilities-registry.php'; +require_once WP_ABILITIES_API_DIR . 'includes/abilities-api/class-wp-abilities-registry.php'; /** * Then the public access functions that users can use to interact with the abilities. */ -require_once WP_ABILITIES_API_DIR . 'src/abilities-api.php'; +require_once WP_ABILITIES_API_DIR . 'includes/abilities-api.php'; /** * Initialize REST API controllers. */ -require_once WP_ABILITIES_API_DIR . 'src/rest/class-wp-rest-abilities-init.php'; +require_once WP_ABILITIES_API_DIR . 'includes/rest/class-wp-rest-abilities-init.php'; diff --git a/src/abilities-api.php b/includes/abilities-api.php similarity index 100% rename from src/abilities-api.php rename to includes/abilities-api.php diff --git a/src/class-wp-abilities-registry.php b/includes/abilities-api/class-wp-abilities-registry.php similarity index 100% rename from src/class-wp-abilities-registry.php rename to includes/abilities-api/class-wp-abilities-registry.php diff --git a/src/class-wp-ability.php b/includes/abilities-api/class-wp-ability.php similarity index 100% rename from src/class-wp-ability.php rename to includes/abilities-api/class-wp-ability.php diff --git a/src/rest/class-wp-rest-abilities-init.php b/includes/rest-api/class-wp-rest-abilities-init.php similarity index 80% rename from src/rest/class-wp-rest-abilities-init.php rename to includes/rest-api/class-wp-rest-abilities-init.php index ed71c2a9..714a69fc 100644 --- a/src/rest/class-wp-rest-abilities-init.php +++ b/includes/rest-api/class-wp-rest-abilities-init.php @@ -22,8 +22,8 @@ class WP_REST_Abilities_Init { * @return void */ public static function register_routes(): void { - require_once __DIR__ . '/class-wp-rest-abilities-run-controller.php'; - require_once __DIR__ . '/class-wp-rest-abilities-list-controller.php'; + require_once __DIR__ . '/endpoints/class-wp-rest-abilities-run-controller.php'; + require_once __DIR__ . '/endpoints/class-wp-rest-abilities-list-controller.php'; $run_controller = new WP_REST_Abilities_Run_Controller(); $run_controller->register_routes(); diff --git a/src/rest/class-wp-rest-abilities-list-controller.php b/includes/rest-api/endpoints/class-wp-rest-abilities-list-controller.php similarity index 100% rename from src/rest/class-wp-rest-abilities-list-controller.php rename to includes/rest-api/endpoints/class-wp-rest-abilities-list-controller.php diff --git a/src/rest/class-wp-rest-abilities-run-controller.php b/includes/rest-api/endpoints/class-wp-rest-abilities-run-controller.php similarity index 100% rename from src/rest/class-wp-rest-abilities-run-controller.php rename to includes/rest-api/endpoints/class-wp-rest-abilities-run-controller.php diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 0842e86f..e4dacdf1 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -7,7 +7,7 @@ Sniffs for Abilities API plugin - ./src/ + ./includes/ ./abilities-api.php @@ -196,21 +196,21 @@ PHP 8.2+ --> - - - src/rest/class-wp-rest-abilities-*-controller.php + includes/rest-api/endpoints/class-wp-rest-abilities-*-controller.php - src/rest/class-wp-rest-abilities-*-controller.php + includes/rest-api/endpoints/class-wp-rest-abilities-*-controller.php - src/rest/class-wp-rest-abilities-*-controller.php + includes/rest-api/endpoints/class-wp-rest-abilities-*-controller.php diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 9f8e19b7..e26cb93a 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -21,7 +21,7 @@ parameters: - abilities-api.php paths: - abilities-api.php - - src/ + - includes/ excludePaths: analyse: - tests/ @@ -38,5 +38,5 @@ parameters: - message: '#has parameter \$request with generic class WP_REST_Request but does not specify its types#' paths: - - src/rest/*.php + - includes/rest-api/**/*.php diff --git a/phpunit.xml.dist b/phpunit.xml.dist index f03419b4..a9db3815 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -15,12 +15,12 @@ > - tests/unit + tests/unit - src + includes abilities-api.php diff --git a/tests/unit/WPAbilitiesRegistryTest.php b/tests/unit/abilities-api/wpAbilitiesRegistry.php similarity index 99% rename from tests/unit/WPAbilitiesRegistryTest.php rename to tests/unit/abilities-api/wpAbilitiesRegistry.php index 3b741e0c..523f5398 100644 --- a/tests/unit/WPAbilitiesRegistryTest.php +++ b/tests/unit/abilities-api/wpAbilitiesRegistry.php @@ -5,7 +5,7 @@ * * @group abilities-api */ -class Tests_Abilities_API_wpAbilitiesRegistry extends WP_UnitTestCase { +class Tests_Abilities_API_WpAbilitiesRegistry extends WP_UnitTestCase { public static $test_ability_name = 'test/add-numbers'; public static $test_ability_properties = array(); diff --git a/tests/unit/AbilitiesAPITest.php b/tests/unit/abilities-api/wpRegisterAbility.php similarity index 99% rename from tests/unit/AbilitiesAPITest.php rename to tests/unit/abilities-api/wpRegisterAbility.php index a4c4c82d..e3709a12 100644 --- a/tests/unit/AbilitiesAPITest.php +++ b/tests/unit/abilities-api/wpRegisterAbility.php @@ -8,7 +8,7 @@ * * @group abilities-api */ -class AbilitiesAPITest extends WP_UnitTestCase { +class Test_Abilities_API_WpRegisterAbility extends WP_UnitTestCase { public static $test_ability_name = 'test/add-numbers'; public static $test_ability_properties = array(); diff --git a/tests/unit/REST/WPRESTAbilitiesInitTest.php b/tests/unit/rest-api/wpRestAbilitiesInit.php similarity index 97% rename from tests/unit/REST/WPRESTAbilitiesInitTest.php rename to tests/unit/rest-api/wpRestAbilitiesInit.php index 84c92fa5..ab2d0a0e 100644 --- a/tests/unit/REST/WPRESTAbilitiesInitTest.php +++ b/tests/unit/rest-api/wpRestAbilitiesInit.php @@ -2,12 +2,12 @@ /** * Tests for WP_REST_Abilities_Init - * + * * @covers WP_REST_Abilities_Init * @group abilities-api * @group rest-api */ -class WPRESTAbilitiesInitTest extends WP_UnitTestCase { +class Tests_REST_API_WpRestAbilitiesInit extends WP_UnitTestCase { /** * REST Server instance. @@ -64,14 +64,14 @@ public function test_correct_controllers_instantiated(): void { do_action( 'rest_api_init' ); $routes = $this->server->get_routes(); - + // Check list controller $this->assertArrayHasKey( '/wp/v2/abilities', $routes ); $list_route = $routes['/wp/v2/abilities'][0]; $this->assertIsArray( $list_route['callback'] ); $this->assertInstanceOf( 'WP_REST_Abilities_List_Controller', $list_route['callback'][0] ); - - // Check run controller + + // Check run controller $this->assertArrayHasKey( '/wp/v2/abilities/(?P[a-zA-Z0-9\\-\\/]+?)/run', $routes ); $run_route = $routes['/wp/v2/abilities/(?P[a-zA-Z0-9\\-\\/]+?)/run'][0]; $this->assertIsArray( $run_route['callback'] ); @@ -95,7 +95,7 @@ public function test_routes_support_expected_methods(): void { do_action( 'rest_api_init' ); $routes = $this->server->get_routes(); - + // List endpoint should support GET $list_methods = $routes['/wp/v2/abilities'][0]['methods']; // Methods can be a string like 'GET' or an array of method constants @@ -105,7 +105,7 @@ public function test_routes_support_expected_methods(): void { // Just check it's set, don't check specific values $this->assertNotEmpty( $list_methods ); } - + // Single ability endpoint should support GET $single_methods = $routes['/wp/v2/abilities/(?P[a-zA-Z0-9\\-\\/]+)'][0]['methods']; // Methods can be a string like 'GET' or an array of method constants @@ -115,7 +115,7 @@ public function test_routes_support_expected_methods(): void { // Just check it's set, don't check specific values $this->assertNotEmpty( $single_methods ); } - + // Run endpoint should support all methods (for type-based routing) $run_route = $routes['/wp/v2/abilities/(?P[a-zA-Z0-9\\-\\/]+?)/run'][0]; // ALLMETHODS can be a string or array @@ -151,18 +151,18 @@ public function test_namespace_and_base_configuration(): void { public function test_no_duplicate_routes_on_multiple_init(): void { // First init do_action( 'rest_api_init' ); - + $routes_first = $this->server->get_routes(); $abilities_route_count_first = count( $routes_first['/wp/v2/abilities'] ?? array() ); - + // Second init (simulating multiple calls) // Note: WordPress doesn't prevent duplicate registration, so we expect 2x routes WP_REST_Abilities_Init::register_routes(); - + $routes_second = $this->server->get_routes(); $abilities_route_count_second = count( $routes_second['/wp/v2/abilities'] ?? array() ); - + // WordPress allows duplicate route registration $this->assertEquals( $abilities_route_count_first * 2, $abilities_route_count_second ); } -} \ No newline at end of file +} diff --git a/tests/unit/REST/WPRESTAbilitiesListControllerTest.php b/tests/unit/rest-api/wpRestAbilitiesListController.php similarity index 99% rename from tests/unit/REST/WPRESTAbilitiesListControllerTest.php rename to tests/unit/rest-api/wpRestAbilitiesListController.php index bb3c27a5..3a152436 100644 --- a/tests/unit/REST/WPRESTAbilitiesListControllerTest.php +++ b/tests/unit/rest-api/wpRestAbilitiesListController.php @@ -5,7 +5,7 @@ * @group abilities-api * @group rest-api */ -class WPRESTAbilitiesListControllerTest extends WP_UnitTestCase { +class Tests_REST_API_WpRestAbilitiesListController extends WP_UnitTestCase { /** * REST Server instance. @@ -460,10 +460,10 @@ public function test_ability_name_with_invalid_special_characters( string $name public function test_extremely_long_ability_names(): void { // Create a very long but valid ability name $long_name = 'test/' . str_repeat( 'a', 1000 ); - + $request = new WP_REST_Request( 'GET', '/wp/v2/abilities/' . $long_name ); $response = $this->server->dispatch( $request ); - + // Should return 404 as ability doesn't exist $this->assertEquals( 404, $response->get_status() ); } @@ -494,12 +494,12 @@ public function invalid_pagination_params_provider(): array { public function test_invalid_pagination_parameters( array $params ): void { $request = new WP_REST_Request( 'GET', '/wp/v2/abilities' ); $request->set_query_params( $params ); - + $response = $this->server->dispatch( $request ); - + // Should either use defaults or return error $this->assertContains( $response->get_status(), array( 200, 400 ) ); - + if ( $response->get_status() === 200 ) { // Check that reasonable defaults were used $data = $response->get_data(); diff --git a/tests/unit/REST/WPRESTAbilitiesRunControllerTest.php b/tests/unit/rest-api/wpRestAbilitiesRunController.php similarity index 99% rename from tests/unit/REST/WPRESTAbilitiesRunControllerTest.php rename to tests/unit/rest-api/wpRestAbilitiesRunController.php index 3e154365..cb1befdb 100644 --- a/tests/unit/REST/WPRESTAbilitiesRunControllerTest.php +++ b/tests/unit/rest-api/wpRestAbilitiesRunController.php @@ -5,7 +5,7 @@ * @group abilities-api * @group rest-api */ -class WPRESTAbilitiesRunControllerTest extends WP_UnitTestCase { +class Tests_REST_API_WpRestAbilitiesRunController extends WP_UnitTestCase { /** * REST Server instance. @@ -516,7 +516,7 @@ public function test_invalid_json_in_post_body(): void { $request->set_body( '{"input": {invalid json}' ); $response = $this->server->dispatch( $request ); - + // When JSON is invalid, WordPress returns 400 Bad Request $this->assertEquals( 400, $response->get_status() ); } @@ -539,7 +539,7 @@ public function test_get_request_with_nested_input_array(): void { $response = $this->server->dispatch( $request ); $this->assertEquals( 200, $response->get_status() ); - + $data = $response->get_data(); $this->assertEquals( 'nested', $data['level1']['level2']['value'] ); $this->assertEquals( array( 1, 2, 3 ), $data['array'] ); @@ -609,7 +609,7 @@ public function test_output_validation_failure_returns_error(): void { $request->set_body( wp_json_encode( array( 'input' => array() ) ) ); $response = $this->server->dispatch( $request ); - + // Should return error when output validation fails $this->assertEquals( 500, $response->get_status() ); $data = $response->get_data(); @@ -650,7 +650,7 @@ public function test_input_validation_failure_returns_error(): void { $request->set_body( wp_json_encode( array( 'input' => array( 'other_field' => 'value' ) ) ) ); $response = $this->server->dispatch( $request ); - + // Should return error when input validation fails (403 due to permission check) $this->assertEquals( 403, $response->get_status() ); $data = $response->get_data(); @@ -684,7 +684,7 @@ public function test_ability_without_type_defaults_to_tool(): void { $post_request = new WP_REST_Request( 'POST', '/wp/v2/abilities/test/no-type/run' ); $post_request->set_header( 'Content-Type', 'application/json' ); $post_request->set_body( wp_json_encode( array( 'input' => array() ) ) ); - + $post_response = $this->server->dispatch( $post_request ); $this->assertEquals( 200, $post_response->get_status() ); } @@ -714,10 +714,10 @@ public function test_permission_check_passes_when_callback_not_set(): void { $request->set_body( wp_json_encode( array( 'input' => array() ) ) ); $response = $this->server->dispatch( $request ); - + // Should succeed when no permission callback is set $this->assertEquals( 200, $response->get_status() ); - + // Restore user for other tests wp_set_current_user( self::$user_id ); } @@ -763,7 +763,7 @@ public function test_empty_input_handling(): void { $post_request = new WP_REST_Request( 'POST', '/wp/v2/abilities/test/tool-empty/run' ); $post_request->set_header( 'Content-Type', 'application/json' ); $post_request->set_body( '{}' ); // Empty JSON object - + $post_response = $this->server->dispatch( $post_request ); $this->assertEquals( 200, $post_response->get_status() ); $this->assertTrue( $post_response->get_data()['input_was_empty'] ); @@ -799,7 +799,7 @@ public function test_malformed_json_post_body( string $json ): void { $request->set_body( $json ); $response = $this->server->dispatch( $request ); - + // Malformed JSON should result in 400 Bad Request $this->assertEquals( 400, $response->get_status() ); } @@ -840,7 +840,7 @@ public function test_php_type_strings_in_input(): void { $request->set_body( wp_json_encode( array( 'input' => $inputs ) ) ); $response = $this->server->dispatch( $request ); - + $this->assertEquals( 200, $response->get_status() ); $data = $response->get_data(); $this->assertEquals( $inputs, $data['echo'] ); @@ -879,10 +879,10 @@ public function test_mixed_encoding_in_input(): void { $request->set_body( wp_json_encode( array( 'input' => $input ) ) ); $response = $this->server->dispatch( $request ); - + $this->assertEquals( 200, $response->get_status() ); $data = $response->get_data(); - + // Input should be preserved exactly $this->assertEquals( $input['utf8'], $data['echo']['utf8'] ); $this->assertEquals( $input['emoji'], $data['echo']['emoji'] ); @@ -926,7 +926,7 @@ public function test_invalid_http_methods( string $method ): void { $request = new WP_REST_Request( $method, '/wp/v2/abilities/test/method-test/run' ); $response = $this->server->dispatch( $request ); - + // Tool abilities should only accept POST, so these should return 405 $this->assertEquals( 405, $response->get_status() ); $data = $response->get_data(); From 03f2f500825473f84796f16eb29fa0c2c6037b19 Mon Sep 17 00:00:00 2001 From: Grzegorz Ziolkowski Date: Thu, 14 Aug 2025 12:48:13 +0200 Subject: [PATCH 2/4] Add fixes --- abilities-api.php | 2 +- includes/rest-api/class-wp-rest-abilities-init.php | 1 - .../endpoints/class-wp-rest-abilities-list-controller.php | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/abilities-api.php b/abilities-api.php index 4481f9df..2ae5bed0 100644 --- a/abilities-api.php +++ b/abilities-api.php @@ -49,4 +49,4 @@ /** * Initialize REST API controllers. */ -require_once WP_ABILITIES_API_DIR . 'includes/rest/class-wp-rest-abilities-init.php'; +require_once WP_ABILITIES_API_DIR . 'includes/rest-api/class-wp-rest-abilities-init.php'; diff --git a/includes/rest-api/class-wp-rest-abilities-init.php b/includes/rest-api/class-wp-rest-abilities-init.php index 714a69fc..e2300f39 100644 --- a/includes/rest-api/class-wp-rest-abilities-init.php +++ b/includes/rest-api/class-wp-rest-abilities-init.php @@ -19,7 +19,6 @@ class WP_REST_Abilities_Init { * Registers the REST API routes for abilities. * * @since 0.1.0 - * @return void */ public static function register_routes(): void { require_once __DIR__ . '/endpoints/class-wp-rest-abilities-run-controller.php'; diff --git a/includes/rest-api/endpoints/class-wp-rest-abilities-list-controller.php b/includes/rest-api/endpoints/class-wp-rest-abilities-list-controller.php index aeeb527c..2b4e9d19 100644 --- a/includes/rest-api/endpoints/class-wp-rest-abilities-list-controller.php +++ b/includes/rest-api/endpoints/class-wp-rest-abilities-list-controller.php @@ -167,7 +167,7 @@ public function get_item( $request ) { * @since 0.1.0 * * @param \WP_REST_Request $request Full details about the request. - * @return boolean True if the request has read access. + * @return bool True if the request has read access. */ public function get_permissions_check( $request ) { return current_user_can( 'read' ); From 44938e7896775fd56119405c58b69072193ddd58 Mon Sep 17 00:00:00 2001 From: Grzegorz Ziolkowski Date: Thu, 14 Aug 2025 12:57:19 +0200 Subject: [PATCH 3/4] Fix reported coding standard checks --- includes/abilities-api/class-wp-ability.php | 30 ++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/includes/abilities-api/class-wp-ability.php b/includes/abilities-api/class-wp-ability.php index 94fe522a..a9533a19 100644 --- a/includes/abilities-api/class-wp-ability.php +++ b/includes/abilities-api/class-wp-ability.php @@ -50,7 +50,7 @@ class WP_Ability { * The optional ability input schema. * * @since 0.1.0 - * @var array + * @var array */ protected $input_schema = array(); @@ -58,7 +58,7 @@ class WP_Ability { * The optional ability output schema. * * @since 0.1.0 - * @var array + * @var array */ protected $output_schema = array(); @@ -82,7 +82,7 @@ class WP_Ability { * The optional ability metadata. * * @since 0.1.0 - * @var array + * @var array */ protected $meta = array(); @@ -95,10 +95,10 @@ class WP_Ability { * * @since 0.1.0 * - * @param string $name The name of the ability, with its namespace. - * @param array $properties An associative array of properties for the ability. This should - * include `label`, `description`, `input_schema`, `output_schema`, - * `execute_callback`, `permission_callback`, and `meta`. + * @param string $name The name of the ability, with its namespace. + * @param array $properties An associative array of properties for the ability. This should + * include `label`, `description`, `input_schema`, `output_schema`, + * `execute_callback`, `permission_callback`, and `meta`. */ public function __construct( string $name, array $properties ) { $this->name = $name; @@ -146,7 +146,7 @@ public function get_description(): string { * * @since 0.1.0 * - * @return array The input schema for the ability. + * @return array The input schema for the ability. */ public function get_input_schema(): array { return $this->input_schema; @@ -157,7 +157,7 @@ public function get_input_schema(): array { * * @since 0.1.0 * - * @return array The output schema for the ability. + * @return array The output schema for the ability. */ public function get_output_schema(): array { return $this->output_schema; @@ -168,7 +168,7 @@ public function get_output_schema(): array { * * @since 0.1.0 * - * @return array The metadata for the ability. + * @return array The metadata for the ability. */ public function get_meta(): array { return $this->meta; @@ -179,7 +179,7 @@ public function get_meta(): array { * * @since 0.1.0 * - * @param array $input Optional. The input data to validate. + * @param array $input Optional. The input data to validate. * @return bool Returns true if valid, false if validation fails. */ protected function validate_input( array $input = array() ): bool { @@ -215,7 +215,7 @@ protected function validate_input( array $input = array() ): bool { * * @since 0.1.0 * - * @param array $input Optional. The input data for permission checking. + * @param array $input Optional. The input data for permission checking. * @return bool Whether the ability has the necessary permission. */ public function has_permission( array $input = array() ): bool { @@ -235,7 +235,7 @@ public function has_permission( array $input = array() ): bool { * * @since 0.1.0 * - * @param array $input The input data for the ability. + * @param array $input The input data for the ability. * @return mixed|\WP_Error The result of the ability execution, or WP_Error on failure. */ protected function do_execute( array $input ) { @@ -261,7 +261,7 @@ protected function do_execute( array $input ) { * @param mixed $output The output data to validate. * @return bool Returns true if valid, false if validation fails. */ - protected function validate_output( $output ): bool { + protected function validate_output( mixed $output ): bool { $output_schema = $this->get_output_schema(); if ( empty( $output_schema ) ) { return true; @@ -293,7 +293,7 @@ protected function validate_output( $output ): bool { * * @since 0.1.0 * - * @param array $input Optional. The input data for the ability. + * @param array $input Optional. The input data for the ability. * @return mixed|\WP_Error The result of the ability execution, or WP_Error on failure. */ public function execute( array $input = array() ) { From 63b03d28d804a21f36006b020cf64dc2a153548f Mon Sep 17 00:00:00 2001 From: Grzegorz Ziolkowski Date: Thu, 14 Aug 2025 13:00:02 +0200 Subject: [PATCH 4/4] Fix reported coding standard checks --- includes/abilities-api/class-wp-ability.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/abilities-api/class-wp-ability.php b/includes/abilities-api/class-wp-ability.php index a9533a19..f5ee8fbb 100644 --- a/includes/abilities-api/class-wp-ability.php +++ b/includes/abilities-api/class-wp-ability.php @@ -261,7 +261,7 @@ protected function do_execute( array $input ) { * @param mixed $output The output data to validate. * @return bool Returns true if valid, false if validation fails. */ - protected function validate_output( mixed $output ): bool { + protected function validate_output( $output ): bool { $output_schema = $this->get_output_schema(); if ( empty( $output_schema ) ) { return true;