1
0
Fork 0
mirror of https://github.com/buddypress/buddypress.git synced 2026-07-21 20:54:17 +08:00
buddypress/tests/phpunit/testcases/xprofile/class-bp-xprofile-profiledata.php
Boone B Gorges 0ed016254c Use static factory method throughout PHPUnit tests.
See #7620.

git-svn-id: https://buddypress.svn.wordpress.org/trunk@11737 cdf35c40-ae34-48e0-9cc9-0c9da1808c22
2017-11-03 19:44:10 +00:00

425 lines
11 KiB
PHP

<?php
/**
* @group xprofile
* @group BP_XProfile_ProfileData
*/
class BP_Tests_BP_XProfile_ProfileData_TestCases extends BP_UnitTestCase {
/**
* @group exists
*/
public function test_exists_when_doesnt_exist() {
$u = self::factory()->user->create();
$g = self::factory()->xprofile_group->create();
$f = self::factory()->xprofile_field->create( array(
'field_group_id' => $g,
) );
$d = new BP_XProfile_ProfileData( $f, $u );
$this->assertFalse( $d->exists() );
}
/**
* @group exists
*/
public function test_exists_when_exists_uncached() {
$u = self::factory()->user->create();
$g = self::factory()->xprofile_group->create();
$f = self::factory()->xprofile_field->create( array(
'field_group_id' => $g,
) );
xprofile_set_field_data( $f, $u, 'foo' );
$d = new BP_XProfile_ProfileData( $f, $u );
wp_cache_delete( "{$u}:{$f}", 'bp_xprofile_data' );
$this->assertTrue( $d->exists() );
}
/**
* @group exists
*/
public function test_exists_when_exists_in_cache() {
$u = self::factory()->user->create();
$g = self::factory()->xprofile_group->create();
$f = self::factory()->xprofile_field->create( array(
'field_group_id' => $g,
) );
$d = new BP_XProfile_ProfileData( $f, $u );
// Fake the cache
$c = new stdClass;
$c->id = 3;
wp_cache_set( "{$u}:{$f}", $c, 'bp_xprofile_data' );
$this->assertTrue( $d->exists() );
}
/**
* @group get_fielddataid_byid
*/
public function test_get_fielddataid_byid_when_doesnt_exist() {
$u = self::factory()->user->create();
$g = self::factory()->xprofile_group->create();
$f = self::factory()->xprofile_field->create( array(
'field_group_id' => $g,
) );
// Just to be sure
wp_cache_delete( "{$u}:{$f}", 'bp_xprofile_data' );
$this->assertEquals( 0, BP_XProfile_ProfileData::get_fielddataid_byid( $f, $u ) );
}
/**
* @group get_fielddataid_byid
*/
public function test_get_fielddataid_byid_when_exists_uncached() {
$u = self::factory()->user->create();
$g = self::factory()->xprofile_group->create();
$f = self::factory()->xprofile_field->create( array(
'field_group_id' => $g,
) );
$d = new BP_XProfile_ProfileData();
$d->user_id = $u;
$d->field_id = $f;
$d->value = 'foo';
$d->save();
// Ensure it's deleted from cache
wp_cache_delete( "{$u}:{$f}", 'bp_xprofile_data' );
$this->assertEquals( $d->id, BP_XProfile_ProfileData::get_fielddataid_byid( $f, $u ) );
}
/**
* @group get_fielddataid_byid
*/
public function test_get_fielddataid_byid_when_exists_in_cache() {
$u = self::factory()->user->create();
$g = self::factory()->xprofile_group->create();
$f = self::factory()->xprofile_field->create( array(
'field_group_id' => $g,
) );
// Fake the cache
$d = new stdClass;
$d->id = 5;
wp_cache_set( "{$u}:{$f}", $d, 'bp_xprofile_data' );
$this->assertSame( 5, BP_XProfile_ProfileData::get_fielddataid_byid( $f, $u ) );
}
/**
* @group get_value_byid
*/
public function test_get_value_byid_singleuser_uncached() {
$u = self::factory()->user->create();
$g = self::factory()->xprofile_group->create();
$f = self::factory()->xprofile_field->create( array(
'field_group_id' => $g,
) );
$d = new BP_XProfile_ProfileData();
$d->user_id = $u;
$d->field_id = $f;
$d->value = 'foo';
$d->save();
// Ensure it's deleted from cache
wp_cache_delete( "{$u}:{$f}", 'bp_xprofile_data' );
$this->assertSame( 'foo', BP_XProfile_ProfileData::get_value_byid( $f, $u ) );
}
/**
* @group get_value_byid
*/
public function test_get_value_byid_multipleusers_uncached() {
$time = date( 'Y-m-d H:i:s', time() - 60*60*24 );
$u1 = self::factory()->user->create();
$u2 = self::factory()->user->create();
$g = self::factory()->xprofile_group->create();
$f = self::factory()->xprofile_field->create( array(
'field_group_id' => $g,
) );
// To make the tests reliable, we have to force the last_updated
// BP doesn't easily allow this except via filter
$this->last_updated = $time;
add_filter( 'xprofile_data_last_updated_before_save', array( $this, 'filter_time' ) );
$d1 = new BP_XProfile_ProfileData();
$d1->user_id = $u1;
$d1->field_id = $f;
$d1->value = 'foo';
$d1->last_updated = $time;
$d1->save();
$d2 = new BP_XProfile_ProfileData();
$d2->user_id = $u2;
$d2->field_id = $f;
$d2->value = 'bar';
$d2->last_updated = $time;
$d2->save();
remove_filter( 'xprofile_data_last_updated_before_save', array( $this, 'filter_time' ) );
// Ensure it's deleted from cache
wp_cache_delete( "{$u1}:{$f}", 'bp_xprofile_data' );
wp_cache_delete( "{$u2}:{$f}", 'bp_xprofile_data' );
$eu1 = new stdClass;
$eu1->user_id = $u1;
$eu1->value = 'foo';
$eu1->id = $d1->id;
$eu1->field_id = $f;
$eu1->last_updated = $time;
$eu2 = new stdClass;
$eu2->user_id = $u2;
$eu2->value = 'bar';
$eu2->id = $d2->id;
$eu2->field_id = $f;
$eu2->last_updated = $time;
$expected = array( $eu1, $eu2 );
$this->assertEquals( $expected, BP_XProfile_ProfileData::get_value_byid( $f, array( $u1, $u2 ) ) );
}
/**
* @group get_value_byid
*/
public function test_get_value_byid_singleuser_cached() {
$u = self::factory()->user->create();
$g = self::factory()->xprofile_group->create();
$f = self::factory()->xprofile_field->create( array(
'field_group_id' => $g,
) );
$time = bp_core_current_time();
// Fake the cache
$d = new stdClass;
$d->value = 'foo';
$d->field_id = $f;
wp_cache_set( "{$u}:{$f}", $d, 'bp_xprofile_data' );
$this->assertSame( 'foo', BP_XProfile_ProfileData::get_value_byid( $f, $u ) );
}
/**
* @group get_value_byid
*/
public function test_get_value_byid_multipleusers_cached() {
$time = date( 'Y-m-d H:i:s', time() - 60*60*24 );
$u1 = self::factory()->user->create();
$u2 = self::factory()->user->create();
$g = self::factory()->xprofile_group->create();
$f = self::factory()->xprofile_field->create( array(
'field_group_id' => $g,
) );
// Fake the cache
$d1 = new stdClass;
$d1->id = 10;
$d1->user_id = $u1;
$d1->field_id = $f;
$d1->value = 'foo';
$d1->last_updated = $time;
$d2 = new stdClass;
$d1->id = 21;
$d2->user_id = $u2;
$d2->field_id = $f;
$d2->value = 'bar';
$d2->last_updated = $time;
wp_cache_set( "{$u1}:{$f}", $d1, 'bp_xprofile_data' );
wp_cache_set( "{$u2}:{$f}", $d2, 'bp_xprofile_data' );
$eu1 = new stdClass;
$eu1->id = 10;
$eu1->user_id = $u1;
$eu1->field_id = $f;
$eu1->value = 'foo';
$eu1->last_updated = $time;
$eu2 = new stdClass;
$eu1->id = 21;
$eu2->user_id = $u2;
$eu2->field_id = $f;
$eu2->value = 'bar';
$eu2->last_updated = $time;
$expected = array( $eu1, $eu2 );
$this->assertEquals( $expected, BP_XProfile_ProfileData::get_value_byid( $f, array( $u1, $u2 ) ) );
}
/**
* @group get_all_for_user
*/
public function test_get_all_for_user_uncached() {
$u = self::factory()->user->create();
$g1 = self::factory()->xprofile_group->create();
$g2 = self::factory()->xprofile_group->create();
$f1 = self::factory()->xprofile_field->create( array(
'type' => 'textbox',
'field_group_id' => $g1,
) );
$f2 = self::factory()->xprofile_field->create( array(
'type' => 'radio',
'field_group_id' => $g2,
) );
$time = bp_core_current_time();
// Get the fullname field - hackish
$f0_id = xprofile_get_field_id_from_name( bp_xprofile_fullname_field_name() );
$f0 = new BP_XProfile_Field( $f0_id );
$g0 = new BP_XProfile_Group( $f0->group_id );
$d0 = new BP_XProfile_ProfileData( $f0->id, $u );
$d1 = new BP_XProfile_ProfileData();
$d1->user_id = $u;
$d1->field_id = $f1;
$d1->value = 'foo';
$d1->last_updated = $time;
$d1->save();
$d2 = new BP_XProfile_ProfileData();
$d2->user_id = $u;
$d2->field_id = $f2;
$d2->value = 'bar';
$d2->last_updated = $time;
$d2->save();
// Ensure it's deleted from cache
wp_cache_delete( "{$u}:{$f1}", 'bp_xprofile_data' );
wp_cache_delete( "{$u}:{$f2}", 'bp_xprofile_data' );
$u_obj = new WP_User( $u );
$g1_obj = new BP_XProfile_Group( $g1 );
$g2_obj = new BP_XProfile_Group( $g2 );
$f1_obj = new BP_XProfile_Field( $f1 );
$f2_obj = new BP_XProfile_Field( $f2 );
$expected = array(
'user_login' => $u_obj->user_login,
'user_nicename' => $u_obj->user_nicename,
'user_email' => $u_obj->user_email,
$f0->name => array(
'field_group_id' => $g0->id,
'field_group_name' => $g0->name,
'field_id' => $f0->id,
'field_type' => $f0->type,
'field_data' => $d0->value,
),
$f1_obj->name => array(
'field_group_id' => $g1,
'field_group_name' => $g1_obj->name,
'field_id' => $f1,
'field_type' => $f1_obj->type,
'field_data' => $d1->value,
),
$f2_obj->name => array(
'field_group_id' => $g2,
'field_group_name' => $g2_obj->name,
'field_id' => $f2,
'field_type' => $f2_obj->type,
'field_data' => $d2->value,
),
);
$this->assertEquals( $expected, BP_XProfile_ProfileData::get_all_for_user( $u ) );
}
/**
* @group get_all_for_user
*/
public function test_get_all_for_user_cached() {
$u = self::factory()->user->create();
$g1 = self::factory()->xprofile_group->create();
$g2 = self::factory()->xprofile_group->create();
$f1 = self::factory()->xprofile_field->create( array(
'type' => 'textbox',
'field_group_id' => $g1,
) );
$f2 = self::factory()->xprofile_field->create( array(
'type' => 'radio',
'field_group_id' => $g2,
) );
$time = bp_core_current_time();
$g0 = new BP_XProfile_Group( 1 );
$f0 = new BP_XProfile_Field( 1 );
$d0 = new BP_XProfile_ProfileData( 1, $u );
$d1 = new stdClass;
$d1->user_id = $u;
$d1->field_id = $f1;
$d1->value = 'foo';
$d1->last_updated = $time;
$d1->id = 1;
$d2 = new stdClass;
$d2->user_id = $u;
$d2->field_id = $f2;
$d2->value = 'bar';
$d2->last_updated = $time;
$d2->id = 2;
wp_cache_set( "{$u}:{$f1}", $d1, 'bp_xprofile_data' );
wp_cache_set( "{$u}:{$f2}", $d2, 'bp_xprofile_data' );
$u_obj = new WP_User( $u );
$g1_obj = new BP_XProfile_Group( $g1 );
$g2_obj = new BP_XProfile_Group( $g2 );
$f1_obj = new BP_XProfile_Field( $f1 );
$f2_obj = new BP_XProfile_Field( $f2 );
$expected = array(
'user_login' => $u_obj->user_login,
'user_nicename' => $u_obj->user_nicename,
'user_email' => $u_obj->user_email,
$f0->name => array(
'field_group_id' => $g0->id,
'field_group_name' => $g0->name,
'field_id' => $f0->id,
'field_type' => $f0->type,
'field_data' => $d0->value,
),
$f1_obj->name => array(
'field_group_id' => $g1,
'field_group_name' => $g1_obj->name,
'field_id' => $f1,
'field_type' => $f1_obj->type,
'field_data' => $d1->value,
),
$f2_obj->name => array(
'field_group_id' => $g2,
'field_group_name' => $g2_obj->name,
'field_id' => $f2,
'field_type' => $f2_obj->type,
'field_data' => $d2->value,
),
);
$this->assertEquals( $expected, BP_XProfile_ProfileData::get_all_for_user( $u ) );
}
public function filter_time() {
return $this->last_updated;
}
}