Users: Provide a full user object when checking for a spammy multisite user

`is_user_spammy()` falls back to the current user if one is not provided. There is no current user during authentication, so the result is always `false`. Pass a user to fill the void.

Adds tests for `wp_authenticate_spam_check()`.

Props websupporter.
Fixes #36546.


git-svn-id: https://develop.svn.wordpress.org/trunk@37316 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Jeremy Felt 2016-04-27 05:35:37 +00:00
parent ff8553ea6b
commit 534f0e92a0
2 changed files with 47 additions and 1 deletions

View File

@ -302,7 +302,7 @@ function wp_authenticate_spam_check( $user ) {
* @param bool $spammed Whether the user is considered a spammer.
* @param WP_User $user User to check against.
*/
$spammed = apply_filters( 'check_is_user_spammed', is_user_spammy(), $user );
$spammed = apply_filters( 'check_is_user_spammed', is_user_spammy( $user ), $user );
if ( $spammed )
return new WP_Error( 'spammer_account', __( '<strong>ERROR</strong>: Your account has been marked as a spammer.' ) );

View File

@ -0,0 +1,46 @@
<?php
/**
* @group user
*/
class Tests_User_WpAuthenticateSpamCheck extends WP_UnitTestCase {
function test_wp_authenticate_spam_check_returns_user_when_single_site() {
if ( is_multisite() ) {
$this->markTestSkipped( 'This test applies to single site only.' );
}
$user_id = self::factory()->user->create( array( 'role' => 'contributor' ) );
$user = new WP_User( $user_id );
$actual_user = wp_authenticate_spam_check( $user );
wp_delete_user( $user_id );
$this->assertEquals( $user->user_login, $actual_user->user_login );
}
function test_wp_authenticate_spam_check_returns_user_when_not_flagged() {
if ( ! is_multisite() ) {
$this->markTestSkipped( 'This test applies to multisite only.' );
}
$user_id = self::factory()->user->create( array( 'role' => 'contributor' ) );
$user = new WP_User( $user_id );
$actual_user = wp_authenticate_spam_check( $user );
wpmu_delete_user( $user_id );
$this->assertEquals( $user->user_login, $actual_user->user_login );
}
function test_wp_authenticate_spam_check_returns_wp_error_when_flagged() {
if ( ! is_multisite() ) {
$this->markTestSkipped( 'This test applies to multisite only.' );
}
$user_id = self::factory()->user->create( array( 'role' => 'contributor' ) );
update_user_status( $user_id, 'spam', 1 );
$user = new WP_User( $user_id );
$actual_user = wp_authenticate_spam_check( $user );
wpmu_delete_user( $user_id );
$this->assertInstanceOf( 'WP_Error', $actual_user );
}
}