Fix several esoteric errors related to AJAX unit tests for comments:

* `wp_ajax_get_comments()` relies on the `$post_id` global - even though `$_POST['p']` is passed to every action in the test methods. If `$post_id` is still lingering in between tests and doesn't match `p` in the request, the cap check might pass while the queries for comments will blow up. I added `unset( $GLOBALS['post_id'] )` to `Tests_Ajax_GetComments::setUp()`.
* If the global `$post_id` is empty, but `$_REQUEST['p']` is not, `$post_id` is now set to `absint( $_REQUEST['p'] )` and sanity-checked in `wp_ajax_get_comments()`.
* `map_meta_cap()` always assumes that `get_comment()` succeeds when checking for the `edit_comment` cap. It doesn't. I added sanity checks in a few places where it will break early if `get_post()` or `get_comment()` are empty.
* `wp_update_comment()` always assumes `get_comment()` succeeds. It doesn't. I added a check for empty.

All AJAX unit tests run and pass in debug mode. All general unit tests pass against these changes.

Fixes #25282.



git-svn-id: https://develop.svn.wordpress.org/trunk@25438 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Scott Taylor
2013-09-14 18:35:43 +00:00
parent 1de9497eef
commit 535ae26afd
5 changed files with 21 additions and 2 deletions

View File

@@ -131,7 +131,7 @@ abstract class WP_Ajax_UnitTestCase extends WP_UnitTestCase {
$this->_last_response .= ob_get_clean();
if ( '' === $this->_last_response ) {
if ( is_scalar( $message) ) {
if ( is_scalar( $message ) ) {
throw new WPAjaxDieStopException( (string) $message );
} else {
throw new WPAjaxDieStopException( '0' );

View File

@@ -38,6 +38,8 @@ class Tests_Ajax_GetComments extends WP_Ajax_UnitTestCase {
$post_id = $this->factory->post->create();
$this->_no_comment_post = get_post( $post_id );
unset( $GLOBALS['post_id'] );
}
/**