mirror of
https://github.com/buddypress/buddypress.git
synced 2026-07-22 20:56:55 +08:00
Using these polyfills let us use PHPUnit v9.x for our tests and add PHP 8.1 to our testing matrix. Some additional edits to our PHP unit tests suite were needed: - Stop using PHPunit deprecated functions. - Rename some `BP_UnitTestCase` methods to use Yoast's polyfills. - Edit the PHP Unit test GH action and also run this action on pull requests. - Update some composer dependencies, remove the one about `phpunit/phpunit:^7.5` and add a new composer script to use PHPUnit v9.x. Props renatonascalves, rafiahmedd Closes https://github.com/buddypress/buddypress/pull/13 Fixes #8649 git-svn-id: https://buddypress.svn.wordpress.org/trunk@13314 cdf35c40-ae34-48e0-9cc9-0c9da1808c22
598 lines
14 KiB
PHP
598 lines
14 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @group members
|
|
* @group signups
|
|
* @group BP_Signup
|
|
*/
|
|
class BP_Tests_BP_Signup extends BP_UnitTestCase {
|
|
protected $signup_allowed;
|
|
|
|
public function set_up() {
|
|
|
|
if ( is_multisite() ) {
|
|
$this->signup_allowed = get_site_option( 'registration' );
|
|
update_site_option( 'registration', 'all' );
|
|
} else {
|
|
bp_get_option( 'users_can_register' );
|
|
bp_update_option( 'users_can_register', 1 );
|
|
}
|
|
|
|
parent::set_up();
|
|
}
|
|
|
|
public function tear_down() {
|
|
if ( is_multisite() ) {
|
|
update_site_option( 'registration', $this->signup_allowed );
|
|
} else {
|
|
bp_update_option( 'users_can_register', $this->signup_allowed );
|
|
}
|
|
|
|
parent::tear_down();
|
|
}
|
|
|
|
/**
|
|
* @group add
|
|
*/
|
|
public function test_add() {
|
|
$time = bp_core_current_time();
|
|
$args = array(
|
|
'domain' => 'foo',
|
|
'path' => 'bar',
|
|
'title' => 'Foo bar',
|
|
'user_login' => 'user1',
|
|
'user_email' => 'user1@example.com',
|
|
'registered' => $time,
|
|
'activation_key' => '12345',
|
|
'meta' => array(
|
|
'field_1' => 'Foo Bar',
|
|
'meta1' => 'meta2',
|
|
),
|
|
);
|
|
|
|
$signup = BP_Signup::add( $args );
|
|
$this->assertNotEmpty( $signup );
|
|
|
|
$s = new BP_Signup( $signup );
|
|
|
|
// spot check
|
|
$this->assertSame( $signup, $s->id );
|
|
$this->assertSame( 'user1', $s->user_login );
|
|
$this->assertSame( '12345', $s->activation_key );
|
|
}
|
|
|
|
/**
|
|
* @group add
|
|
*/
|
|
public function test_add_no_visibility_level_set_should_use_default_visiblity_level() {
|
|
// Update field_1's default visibility to 'adminsonly'.
|
|
bp_xprofile_update_field_meta( 1, 'default_visibility', 'adminsonly' );
|
|
|
|
// Add new signup without a custom field visibility set for field_1.
|
|
$signup = BP_Signup::add( array(
|
|
'title' => 'Foo bar',
|
|
'user_login' => 'user1',
|
|
'user_email' => 'user1@example.com',
|
|
'registered' => bp_core_current_time(),
|
|
'activation_key' => '12345',
|
|
'meta' => array(
|
|
'field_1' => 'Foo Bar',
|
|
'meta1' => 'meta2',
|
|
'password' => 'password',
|
|
|
|
/*
|
|
* Ensure we pass the field ID.
|
|
*
|
|
* See bp_core_activate_signup() and BP_Signup::add_backcompat().
|
|
*/
|
|
'profile_field_ids' => '1'
|
|
),
|
|
) );
|
|
|
|
// Activate the signup.
|
|
$activate = BP_Signup::activate( (array) $signup );
|
|
|
|
// Assert that field 1's visibility for the signup is still 'adminsonly'
|
|
$vis = xprofile_get_field_visibility_level( 1, $activate['activated'][0] );
|
|
$this->assertSame( 'adminsonly', $vis );
|
|
}
|
|
|
|
/**
|
|
* @group get
|
|
*/
|
|
public function test_get_with_offset() {
|
|
$s1 = self::factory()->signup->create();
|
|
$s2 = self::factory()->signup->create();
|
|
$s3 = self::factory()->signup->create();
|
|
|
|
$ss = BP_Signup::get( array(
|
|
'offset' => 1,
|
|
'fields' => 'ids',
|
|
) );
|
|
|
|
$this->assertEquals( array( $s2 ), $ss['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group get
|
|
*/
|
|
public function test_get_with_number() {
|
|
$s1 = self::factory()->signup->create();
|
|
$s2 = self::factory()->signup->create();
|
|
$s3 = self::factory()->signup->create();
|
|
|
|
$ss = BP_Signup::get( array(
|
|
'number' => 2,
|
|
'fields' => 'ids',
|
|
) );
|
|
|
|
$this->assertEquals( array( $s3, $s2 ), $ss['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group get
|
|
*/
|
|
public function test_get_with_usersearch() {
|
|
$s1 = self::factory()->signup->create( array(
|
|
'user_email' => 'fghij@example.com',
|
|
) );
|
|
$s2 = self::factory()->signup->create();
|
|
$s3 = self::factory()->signup->create();
|
|
|
|
$ss = BP_Signup::get( array(
|
|
'usersearch' => 'ghi',
|
|
'fields' => 'ids',
|
|
) );
|
|
|
|
$this->assertEquals( array( $s1 ), $ss['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group get
|
|
*/
|
|
public function test_get_with_orderby_email() {
|
|
$s1 = self::factory()->signup->create( array(
|
|
'user_email' => 'fghij@example.com',
|
|
) );
|
|
$s2 = self::factory()->signup->create( array(
|
|
'user_email' => 'abcde@example.com',
|
|
) );
|
|
$s3 = self::factory()->signup->create( array(
|
|
'user_email' => 'zzzzz@example.com',
|
|
) );
|
|
|
|
$ss = BP_Signup::get( array(
|
|
'orderby' => 'email',
|
|
'number' => 3,
|
|
'fields' => 'ids',
|
|
) );
|
|
|
|
// default order is DESC.
|
|
$this->assertEquals( array( $s3, $s1, $s2 ), $ss['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group get
|
|
*/
|
|
public function test_get_with_orderby_email_asc() {
|
|
$s1 = self::factory()->signup->create( array(
|
|
'user_email' => 'fghij@example.com',
|
|
) );
|
|
$s2 = self::factory()->signup->create( array(
|
|
'user_email' => 'abcde@example.com',
|
|
) );
|
|
$s3 = self::factory()->signup->create( array(
|
|
'user_email' => 'zzzzz@example.com',
|
|
) );
|
|
|
|
$ss = BP_Signup::get( array(
|
|
'orderby' => 'email',
|
|
'number' => 3,
|
|
'order' => 'ASC',
|
|
'fields' => 'ids',
|
|
) );
|
|
|
|
$this->assertEquals( array( $s2, $s1, $s3 ), $ss['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group get
|
|
*/
|
|
public function test_get_with_orderby_login_asc() {
|
|
$s1 = self::factory()->signup->create( array(
|
|
'user_login' => 'fghij',
|
|
) );
|
|
$s2 = self::factory()->signup->create( array(
|
|
'user_login' => 'abcde',
|
|
) );
|
|
$s3 = self::factory()->signup->create( array(
|
|
'user_login' => 'zzzzz',
|
|
) );
|
|
|
|
$ss = BP_Signup::get( array(
|
|
'orderby' => 'login',
|
|
'number' => 3,
|
|
'order' => 'ASC',
|
|
'fields' => 'ids',
|
|
) );
|
|
|
|
$this->assertEquals( array( $s2, $s1, $s3 ), $ss['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group get
|
|
*/
|
|
public function test_get_with_orderby_registered_asc() {
|
|
$now = time();
|
|
|
|
$s1 = self::factory()->signup->create( array(
|
|
'registered' => date( 'Y-m-d H:i:s', $now - 50 ),
|
|
) );
|
|
$s2 = self::factory()->signup->create( array(
|
|
'registered' => date( 'Y-m-d H:i:s', $now - 100 ),
|
|
) );
|
|
$s3 = self::factory()->signup->create( array(
|
|
'registered' => date( 'Y-m-d H:i:s', $now - 10 ),
|
|
) );
|
|
|
|
$ss = BP_Signup::get( array(
|
|
'orderby' => 'registered',
|
|
'number' => 3,
|
|
'order' => 'ASC',
|
|
'fields' => 'ids',
|
|
) );
|
|
|
|
$this->assertEquals( array( $s2, $s1, $s3 ), $ss['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group get
|
|
*/
|
|
public function test_get_with_include() {
|
|
$s1 = self::factory()->signup->create();
|
|
$s2 = self::factory()->signup->create();
|
|
$s3 = self::factory()->signup->create();
|
|
|
|
$ss = BP_Signup::get( array(
|
|
'include' => array( $s1, $s3 ),
|
|
'fields' => 'ids',
|
|
) );
|
|
|
|
$this->assertContains( $s1, $ss['signups'] );
|
|
$this->assertContains( $s3, $ss['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group get
|
|
*/
|
|
public function test_get_with_activation_key() {
|
|
$s1 = self::factory()->signup->create( array(
|
|
'activation_key' => 'foo',
|
|
) );
|
|
$s2 = self::factory()->signup->create( array(
|
|
'activation_key' => 'bar',
|
|
) );
|
|
$s3 = self::factory()->signup->create( array(
|
|
'activation_key' => 'baz',
|
|
) );
|
|
|
|
$ss = BP_Signup::get( array(
|
|
'activation_key' => 'bar',
|
|
'fields' => 'ids',
|
|
) );
|
|
|
|
$this->assertEquals( array( $s2 ), $ss['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group get
|
|
*/
|
|
public function test_get_with_user_login() {
|
|
$s1 = self::factory()->signup->create( array(
|
|
'user_login' => 'aaaafoo',
|
|
) );
|
|
$s2 = self::factory()->signup->create( array(
|
|
'user_login' => 'zzzzfoo',
|
|
) );
|
|
$s3 = self::factory()->signup->create( array(
|
|
'user_login' => 'jjjjfoo',
|
|
) );
|
|
|
|
$ss = BP_Signup::get( array(
|
|
'user_login' => 'zzzzfoo',
|
|
'fields' => 'ids',
|
|
) );
|
|
|
|
$this->assertEquals( array( $s2 ), $ss['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group activate
|
|
*/
|
|
public function test_activate_user_accounts() {
|
|
$signups = array();
|
|
|
|
$signups['accountone'] = self::factory()->signup->create( array(
|
|
'user_login' => 'accountone',
|
|
'user_email' => 'accountone@example.com',
|
|
'activation_key' => 'activationkeyone',
|
|
) );
|
|
|
|
$signups['accounttwo'] = self::factory()->signup->create( array(
|
|
'user_login' => 'accounttwo',
|
|
'user_email' => 'accounttwo@example.com',
|
|
'activation_key' => 'activationkeytwo',
|
|
) );
|
|
|
|
$signups['accountthree'] = self::factory()->signup->create( array(
|
|
'user_login' => 'accountthree',
|
|
'user_email' => 'accountthree@example.com',
|
|
'activation_key' => 'activationkeythree',
|
|
) );
|
|
|
|
$results = BP_Signup::activate( $signups );
|
|
$this->assertNotEmpty( $results['activated'] );
|
|
|
|
$users = array();
|
|
|
|
foreach ( $signups as $login => $signup_id ) {
|
|
$users[ $login ] = get_user_by( 'login', $login );
|
|
}
|
|
|
|
$this->assertEqualSets( $results['activated'], wp_list_pluck( $users, 'ID' ) );
|
|
}
|
|
|
|
/**
|
|
* @group get
|
|
*/
|
|
public function test_get_signup_ids_only() {
|
|
$s1 = self::factory()->signup->create();
|
|
$s2 = self::factory()->signup->create();
|
|
$s3 = self::factory()->signup->create();
|
|
|
|
$ss = BP_Signup::get( array(
|
|
'number' => 3,
|
|
'fields' => 'ids',
|
|
) );
|
|
|
|
$this->assertEquals( array( $s3, $s2, $s1 ), $ss['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group cache
|
|
*/
|
|
public function test_get_queries_should_be_cached() {
|
|
global $wpdb;
|
|
|
|
$s = self::factory()->signup->create();
|
|
|
|
$found1 = BP_Signup::get(
|
|
array(
|
|
'fields' => 'ids',
|
|
)
|
|
);
|
|
|
|
$num_queries = $wpdb->num_queries;
|
|
|
|
$found2 = BP_Signup::get(
|
|
array(
|
|
'fields' => 'ids',
|
|
)
|
|
);
|
|
|
|
$this->assertEqualSets( $found1, $found2 );
|
|
$this->assertSame( $num_queries, $wpdb->num_queries );
|
|
}
|
|
|
|
/**
|
|
* @group cache
|
|
*/
|
|
public function test_get_query_caches_should_be_busted_by_add() {
|
|
$s1 = self::factory()->signup->create();
|
|
|
|
$found1 = BP_Signup::get(
|
|
array(
|
|
'fields' => 'ids',
|
|
)
|
|
);
|
|
$this->assertEqualSets( array( $s1 ), $found1['signups'] );
|
|
|
|
$s2 = self::factory()->signup->create();
|
|
$found2 = BP_Signup::get(
|
|
array(
|
|
'fields' => 'ids',
|
|
)
|
|
);
|
|
$this->assertEqualSets( array( $s2 ), $found2['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group cache
|
|
*/
|
|
public function test_get_query_caches_should_be_busted_by_meta_update() {
|
|
$time = bp_core_current_time();
|
|
|
|
$args = array(
|
|
'domain' => 'foo',
|
|
'path' => 'bar',
|
|
'title' => 'Foo bar',
|
|
'user_login' => 'user1',
|
|
'user_email' => 'user1@example.com',
|
|
'registered' => $time,
|
|
'activation_key' => '12345',
|
|
'meta' => array(
|
|
'field_1' => 'Fozzie',
|
|
'meta1' => 'meta2',
|
|
),
|
|
);
|
|
$s1 = BP_Signup::add( $args );
|
|
|
|
$args['meta']['field_1'] = 'Fozz';
|
|
$s2 = BP_Signup::add( $args );
|
|
|
|
// Should find both.
|
|
$found1 = BP_Signup::get( array(
|
|
'fields' => 'ids',
|
|
'number' => -1,
|
|
'usersearch' => 'Fozz',
|
|
) );
|
|
$this->assertEqualSets( array( $s1, $s2 ), $found1['signups'] );
|
|
|
|
BP_Signup::update( array(
|
|
'signup_id' => $s1,
|
|
'meta' => array(
|
|
'field_1' => 'Fonzie'
|
|
),
|
|
) );
|
|
|
|
$found2 = BP_Signup::get( array(
|
|
'fields' => 'ids',
|
|
'number' => -1,
|
|
'usersearch' => 'Fozz',
|
|
) );
|
|
|
|
$this->assertEqualSets( array( $s2 ), $found2['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group cache
|
|
*/
|
|
public function test_get_query_caches_should_be_busted_by_delete() {
|
|
global $wpdb;
|
|
$time = bp_core_current_time();
|
|
|
|
$args = array(
|
|
'domain' => 'foo',
|
|
'path' => 'bar',
|
|
'title' => 'Foo bar',
|
|
'user_login' => 'user1',
|
|
'user_email' => 'user1@example.com',
|
|
'registered' => $time,
|
|
'activation_key' => '12345',
|
|
'meta' => array(
|
|
'field_1' => 'Fozzie',
|
|
'meta1' => 'meta2',
|
|
),
|
|
);
|
|
$s1 = BP_Signup::add( $args );
|
|
|
|
$args['meta']['field_1'] = 'Fozz';
|
|
$s2 = BP_Signup::add( $args );
|
|
|
|
// Should find both.
|
|
$found1 = BP_Signup::get( array(
|
|
'fields' => 'ids',
|
|
'number' => -1,
|
|
'usersearch' => 'Fozz',
|
|
) );
|
|
$this->assertEqualSets( array( $s1, $s2 ), $found1['signups'] );
|
|
|
|
BP_Signup::delete( array( $s1 ) );
|
|
|
|
$found2 = BP_Signup::get( array(
|
|
'fields' => 'ids',
|
|
'number' => -1,
|
|
'usersearch' => 'Fozz',
|
|
) );
|
|
|
|
$this->assertEqualSets( array( $s2 ), $found2['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group cache
|
|
*/
|
|
public function test_get_query_caches_should_be_busted_by_activation() {
|
|
$s1 = self::factory()->signup->create( array(
|
|
'user_login' => 'accountone',
|
|
'user_email' => 'accountone@example.com',
|
|
'activation_key' => 'activationkeyone',
|
|
) );
|
|
|
|
$s2 = self::factory()->signup->create( array(
|
|
'user_login' => 'accounttwo',
|
|
'user_email' => 'accounttwo@example.com',
|
|
'activation_key' => 'activationkeytwo',
|
|
) );
|
|
$found1 = BP_Signup::get(
|
|
array(
|
|
'number' => -1,
|
|
'fields' => 'ids',
|
|
)
|
|
);
|
|
$this->assertEqualSets( array( $s1, $s2 ), $found1['signups'] );
|
|
|
|
$activate = BP_Signup::activate( (array) $s2 );
|
|
|
|
$found2 = BP_Signup::get(
|
|
array(
|
|
'number' => -1,
|
|
'fields' => 'ids',
|
|
)
|
|
);
|
|
$this->assertEqualSets( array( $s1 ), $found2['signups'] );
|
|
}
|
|
|
|
/**
|
|
* @group cache
|
|
*/
|
|
public function signup_objects_should_be_cached() {
|
|
global $wpdb;
|
|
|
|
$s1 = self::factory()->signup->create( array(
|
|
'user_login' => 'accountone',
|
|
'user_email' => 'accountone@example.com',
|
|
'activation_key' => 'activationkeyone',
|
|
) );
|
|
|
|
$found1 = new BP_Signup( $s1 );
|
|
|
|
$num_queries = $wpdb->num_queries;
|
|
|
|
// Object should be rebuilt from cache.
|
|
$found2 = new BP_Signup( $s1 );
|
|
|
|
// @TODO: This fails because "get_avatar()" in populate() results in db queries.
|
|
$this->assertEquals( $found1, $found2 );
|
|
$this->assertEquals( $num_queries, $wpdb->num_queries );
|
|
}
|
|
|
|
/**
|
|
* @group cache
|
|
*/
|
|
public function test_signup_object_caches_should_be_busted_by_activation() {
|
|
$s1 = self::factory()->signup->create( array(
|
|
'user_login' => 'accountone',
|
|
'user_email' => 'accountone@example.com',
|
|
'activation_key' => 'activationkeyone',
|
|
) );
|
|
|
|
$found1 = new BP_Signup( $s1 );
|
|
$this->assertEquals( $s1, $found1->id );
|
|
$this->assertFalse( $found1->active );
|
|
|
|
$activate = BP_Signup::activate( (array) $s1 );
|
|
|
|
$found2 = new BP_Signup( $s1 );
|
|
$this->assertEquals( $s1, $found2->id );
|
|
$this->assertTrue( $found2->active );
|
|
|
|
}
|
|
|
|
public function test_bp_core_signup_send_validation_email_should_increment_sent_count() {
|
|
$activation_key = wp_generate_password( 32, false );
|
|
$user_email = 'accountone@example.com';
|
|
$s1 = self::factory()->signup->create( array(
|
|
'user_login' => 'accountone',
|
|
'user_email' => $user_email,
|
|
'activation_key' => $activation_key
|
|
) );
|
|
|
|
$signup = new BP_Signup( $s1 );
|
|
$this->assertEquals( 0, $signup->count_sent );
|
|
|
|
bp_core_signup_send_validation_email( 0, $user_email, $activation_key );
|
|
|
|
$signup = new BP_Signup( $s1 );
|
|
$this->assertEquals( 1, $signup->count_sent );
|
|
}
|
|
}
|