1
0
Fork 0
mirror of https://github.com/buddypress/buddypress.git synced 2026-07-22 20:56:55 +08:00
buddypress/tests/phpunit/testcases/members/class-bp-signup.php
Mathieu Viet 89a6666dc6 Fully enjoy Yoast’s PHPUnit polyfills
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
2022-08-13 08:58:51 +00:00

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 );
}
}