Abilities API: add filters for input and output validation#10557
Abilities API: add filters for input and output validation#10557priethor wants to merge 6 commits intoWordPress:trunkfrom
Conversation
|
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the Core Committers: Use this line as a base for the props when committing in SVN: To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
Test using WordPress PlaygroundThe changes in this pull request can previewed and tested using a WordPress Playground instance. WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser. Some things to be aware of
For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation. |
…r output even if no schema is provided
| if ( empty( $input_schema ) ) { | ||
| if ( null === $input ) { | ||
| return true; | ||
| } | ||
|
|
||
| return new WP_Error( |
There was a problem hiding this comment.
Note that we don't fire the input hook when the $input_schema is empty but we do for the output:
- For inputs, non-empty inputs REQUIRE a schema by design
- For outputs, an empty schema always successfully validates even if the output is not empty
Because of this design decision, it might make sense not to allow hooking into the input in these cases?
gziolo
left a comment
There was a problem hiding this comment.
This is looking very solid — the filter design follows the Customizer's customize_validate_{$id} precedent well, and the false safety net plus the normalization logic are well thought through.
One thing to address: the add_filter() calls in the new tests use anonymous closures and are never cleaned up with remove_filter(). Since PHPUnit runs tests in the same process, filters added in one test can leak into subsequent tests and silently affect results. Each test should store the closure reference and remove it after assertions, e.g.:
$filter = static function ( $is_valid ) {
return true;
};
add_filter( 'wp_ability_validate_input', $filter );
// ... test logic ...
remove_filter( 'wp_ability_validate_input', $filter );
// ... assertions ...```
@gziolo Actually, this isn't a concern because the hooks get reset after each test is run, regardless of whether the tests run in a separate processor not. In wordpress-develop/tests/phpunit/includes/abstract-testcase.php Lines 117 to 119 in 4d3b0b9 In |
|
@westonruter, thank you so much for pointing me to that logic. That’s perfect. I’m glad it existed as this is the very well designed default behavior 👍 I intend to land this PR as soon as 7.1 cycle starts. |
Trac ticket: https://core.trac.wordpress.org/ticket/64311
This Pull Request is for code review only. Please keep all other discussion in the Trac ticket. Do not merge this Pull Request. See GitHub Pull Requests for Code Review in the Core Handbook for more details.