From 534f0e92a02175164bb2c3aa5e0a092757fbc04c Mon Sep 17 00:00:00 2001 From: Jeremy Felt Date: Wed, 27 Apr 2016 05:35:37 +0000 Subject: [PATCH] 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 --- src/wp-includes/user.php | 2 +- .../tests/user/wpAuthenticateSpamCheck.php | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 tests/phpunit/tests/user/wpAuthenticateSpamCheck.php diff --git a/src/wp-includes/user.php b/src/wp-includes/user.php index 2af846c7b4..48c6e84f4a 100644 --- a/src/wp-includes/user.php +++ b/src/wp-includes/user.php @@ -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', __( 'ERROR: Your account has been marked as a spammer.' ) ); diff --git a/tests/phpunit/tests/user/wpAuthenticateSpamCheck.php b/tests/phpunit/tests/user/wpAuthenticateSpamCheck.php new file mode 100644 index 0000000000..7f3b164058 --- /dev/null +++ b/tests/phpunit/tests/user/wpAuthenticateSpamCheck.php @@ -0,0 +1,46 @@ +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 ); + } +}