user->create(); $old_current_user = bp_loggedin_user_id(); $this->set_current_user( 0 ); $this->assertEquals( array( 'friends', 'loggedin', 'adminsonly' ), bp_xprofile_get_hidden_field_types_for_user( $duser, bp_loggedin_user_id() ) ); $this->set_current_user( $old_current_user ); } public function test_get_hidden_field_types_for_user_loggedin() { $duser = self::factory()->user->create(); $cuser = self::factory()->user->create(); $old_current_user = bp_loggedin_user_id(); $this->set_current_user( $cuser ); $this->assertEquals( array( 'friends', 'adminsonly' ), bp_xprofile_get_hidden_field_types_for_user( $duser, bp_loggedin_user_id() ) ); $this->set_current_user( $old_current_user ); } public function test_get_hidden_field_types_for_user_friends() { $duser = self::factory()->user->create(); $cuser = self::factory()->user->create(); friends_add_friend( $duser, $cuser, true ); $old_current_user = bp_loggedin_user_id(); $this->set_current_user( $cuser ); $this->assertEquals( array( 'adminsonly' ), bp_xprofile_get_hidden_field_types_for_user( $duser, bp_loggedin_user_id() ) ); $this->set_current_user( $old_current_user ); } public function test_get_hidden_field_types_for_user_admin() { $duser = self::factory()->user->create(); $cuser = self::factory()->user->create(); $this->grant_bp_moderate( $cuser ); $old_current_user = bp_loggedin_user_id(); $this->set_current_user( $cuser ); $this->assertEquals( array(), bp_xprofile_get_hidden_field_types_for_user( $duser, bp_loggedin_user_id() ) ); $this->revoke_bp_moderate( $cuser ); $this->set_current_user( $old_current_user ); } /** * @group bp_xprofile_update_meta * @ticket BP5180 */ public function test_bp_xprofile_update_meta_with_line_breaks() { $g = self::factory()->xprofile_group->create(); $f = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, ) ); $meta_value = 'Foo! Bar!'; bp_xprofile_update_meta( $f, 'field', 'linebreak_field', $meta_value ); $this->assertEquals( $meta_value, bp_xprofile_get_meta( $f, 'field', 'linebreak_field' ) ); } /** * @group bp_xprofile_fullname_field_id * @group cache */ public function test_bp_xprofile_fullname_field_id_invalidation() { // Prime the cache $id = bp_xprofile_fullname_field_id(); bp_update_option( 'bp-xprofile-fullname-field-name', 'foo' ); $this->assertFalse( wp_cache_get( 'fullname_field_id', 'bp_xprofile' ) ); } /** * @group xprofile_get_field_visibility_level */ public function test_bp_xprofile_get_field_visibility_level_missing_params() { $this->assertSame( '', xprofile_get_field_visibility_level( 0, 1 ) ); $this->assertSame( '', xprofile_get_field_visibility_level( 1, 0 ) ); } /** * @group xprofile_get_field_visibility_level */ public function test_bp_xprofile_get_field_visibility_level_user_set() { $u = self::factory()->user->create(); $g = self::factory()->xprofile_group->create(); $f = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, ) ); bp_xprofile_update_meta( $f, 'field', 'default_visibility', 'adminsonly' ); bp_xprofile_update_meta( $f, 'field', 'allow_custom_visibility', 'allowed' ); xprofile_set_field_visibility_level( $f, $u, 'loggedin' ); $this->assertSame( 'loggedin', xprofile_get_field_visibility_level( $f, $u ) ); } /** * @group xprofile_get_field_visibility_level */ public function test_bp_xprofile_get_field_visibility_level_user_unset() { $u = self::factory()->user->create(); $g = self::factory()->xprofile_group->create(); $f = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, ) ); bp_xprofile_update_meta( $f, 'field', 'default_visibility', 'adminsonly' ); bp_xprofile_update_meta( $f, 'field', 'allow_custom_visibility', 'allowed' ); $this->assertSame( 'adminsonly', xprofile_get_field_visibility_level( $f, $u ) ); } /** * @group xprofile_get_field_visibility_level */ public function test_bp_xprofile_get_field_visibility_level_admin_override() { $u = self::factory()->user->create(); $g = self::factory()->xprofile_group->create(); $f = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, ) ); bp_xprofile_update_meta( $f, 'field', 'default_visibility', 'adminsonly' ); bp_xprofile_update_meta( $f, 'field', 'allow_custom_visibility', 'disabled' ); xprofile_set_field_visibility_level( $f, $u, 'loggedin' ); $this->assertSame( 'adminsonly', xprofile_get_field_visibility_level( $f, $u ) ); } /** * @group xprofilemeta * @group bp_xprofile_delete_meta */ public function test_bp_xprofile_delete_meta_empty_object_id() { $this->assertFalse( bp_xprofile_delete_meta( '', 'group' ) ); } /** * @group xprofilemeta * @group bp_xprofile_delete_meta */ public function test_bp_xprofile_delete_meta_empty_object_type() { $this->assertFalse( bp_xprofile_delete_meta( 1, '' ) ); } /** * @group xprofilemeta * @group bp_xprofile_delete_meta */ public function test_bp_xprofile_delete_meta_illegal_object_type() { $this->assertFalse( bp_xprofile_delete_meta( 1, 'foo' ) ); } /** * @group xprofilemeta * @group bp_xprofile_delete_meta * @ticket BP5399 */ public function test_bp_xprofile_delete_meta_illegal_characters() { $g = self::factory()->xprofile_group->create(); bp_xprofile_update_meta( $g, 'group', 'foo', 'bar' ); $this->assertSame( 'bar', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); $krazy_key = ' f!@#$%^o *(){}o?+'; bp_xprofile_delete_meta( $g, 'group', $krazy_key ); $this->assertSame( 'bar', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); } /** * @group xprofilemeta * @group bp_xprofile_delete_meta * @ticket BP5399 */ public function test_bp_xprofile_delete_meta_trim_meta_value() { $g = self::factory()->xprofile_group->create(); bp_xprofile_update_meta( $g, 'group', 'foo', 'bar' ); $this->assertSame( 'bar', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); bp_xprofile_delete_meta( $g, 'group', 'foo', ' bar ' ); $this->assertSame( 'bar', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); } /** * @group xprofilemeta * @group bp_xprofile_delete_meta */ public function test_bp_xprofile_delete_meta_meta_value_match() { $g = self::factory()->xprofile_group->create(); bp_xprofile_update_meta( $g, 'group', 'foo', 'bar' ); $this->assertSame( 'bar', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); $this->assertTrue( bp_xprofile_delete_meta( $g, 'group', 'foo', 'bar' ) ); $this->assertSame( '', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); } /** * @group xprofilemeta * @group bp_xprofile_delete_meta */ public function test_bp_xprofile_delete_meta_delete_all() { $g = self::factory()->xprofile_group->create(); bp_xprofile_update_meta( $g, 'group', 'foo', 'bar' ); bp_xprofile_update_meta( $g, 'group', 'foo2', 'bar' ); $this->assertSame( 'bar', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); $this->assertSame( 'bar', bp_xprofile_get_meta( $g, 'group', 'foo2' ) ); $this->assertTrue( bp_xprofile_delete_meta( $g, 'group' ) ); $this->assertSame( '', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); $this->assertSame( '', bp_xprofile_get_meta( $g, 'group', 'foo2' ) ); } /** * @group xprofilemeta * @group bp_xprofile_delete_meta */ public function test_bp_xprofile_delete_meta_with_delete_all_but_no_meta_key() { // With no meta key, don't delete for all items - just delete // all for a single item $g1 = self::factory()->xprofile_group->create(); $g2 = self::factory()->xprofile_group->create(); bp_xprofile_add_meta( $g1, 'group', 'foo', 'bar' ); bp_xprofile_add_meta( $g1, 'group', 'foo1', 'bar1' ); bp_xprofile_add_meta( $g2, 'group', 'foo', 'bar' ); bp_xprofile_add_meta( $g2, 'group', 'foo1', 'bar1' ); $this->assertTrue( bp_xprofile_delete_meta( $g1, 'group', '', '', true ) ); $this->assertEmpty( bp_xprofile_get_meta( $g1, 'group' ) ); $this->assertSame( 'bar', bp_xprofile_get_meta( $g2, 'group', 'foo' ) ); $this->assertSame( 'bar1', bp_xprofile_get_meta( $g2, 'group', 'foo1' ) ); } /** * @group xprofilemeta * @group bp_xprofile_delete_meta */ public function test_bp_xprofile_delete_meta_with_delete_all() { // With no meta key, don't delete for all items - just delete // all for a single item $g1 = self::factory()->xprofile_group->create(); $g2 = self::factory()->xprofile_group->create(); bp_xprofile_add_meta( $g1, 'group', 'foo', 'bar' ); bp_xprofile_add_meta( $g1, 'group', 'foo1', 'bar1' ); bp_xprofile_add_meta( $g2, 'group', 'foo', 'bar' ); bp_xprofile_add_meta( $g2, 'group', 'foo1', 'bar1' ); $this->assertTrue( bp_xprofile_delete_meta( $g1, 'group', 'foo', '', true ) ); $this->assertSame( '', bp_xprofile_get_meta( $g1, 'group', 'foo' ) ); $this->assertSame( '', bp_xprofile_get_meta( $g2, 'group', 'foo' ) ); $this->assertSame( 'bar1', bp_xprofile_get_meta( $g1, 'group', 'foo1' ) ); $this->assertSame( 'bar1', bp_xprofile_get_meta( $g2, 'group', 'foo1' ) ); } /** * @group xprofilemeta * @group bp_xprofile_get_meta */ public function test_bp_xprofile_get_meta_empty_object_id() { $this->assertFalse( bp_xprofile_get_meta( 0, 'group' ) ); } /** * @group xprofilemeta * @group bp_xprofile_get_meta */ public function test_bp_xprofile_get_meta_empty_object_type() { $this->assertFalse( bp_xprofile_get_meta( 1, '' ) ); } /** * @group xprofilemeta * @group bp_xprofile_get_meta */ public function test_bp_xprofile_get_meta_illegal_object_type() { $this->assertFalse( bp_xprofile_get_meta( 1, 'foo' ) ); } /** * @group xprofilemeta * @group bp_xprofile_get_meta */ public function test_bp_xprofile_get_meta_no_meta_key() { $g = self::factory()->xprofile_group->create(); bp_xprofile_update_meta( $g, 'group', 'foo', 'bar' ); bp_xprofile_update_meta( $g, 'group', 'foo2', 'bar' ); $expected = array( 'foo' => array( 'bar', ), 'foo2' => array( 'bar', ), ); $this->assertSame( $expected, bp_xprofile_get_meta( $g, 'group' ) ); } /** * @group xprofilemeta * @group bp_xprofile_get_meta */ public function test_bp_xprofile_get_meta_single_true() { $g = self::factory()->xprofile_group->create(); bp_xprofile_add_meta( $g, 'group', 'foo', 'bar' ); bp_xprofile_add_meta( $g, 'group', 'foo', 'baz' ); $this->assertSame( 'bar', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); // default is true $this->assertSame( 'bar', bp_xprofile_get_meta( $g, 'group', 'foo', true ) ); } /** * @group xprofilemeta * @group bp_xprofile_get_meta */ public function test_bp_xprofile_get_meta_single_false() { $g = self::factory()->xprofile_group->create(); bp_xprofile_add_meta( $g, 'group', 'foo', 'bar' ); bp_xprofile_add_meta( $g, 'group', 'foo', 'baz' ); $this->assertSame( array( 'bar', 'baz' ), bp_xprofile_get_meta( $g, 'group', 'foo', false ) ); } /** * @group xprofilemeta * @group bp_xprofile_get_meta */ public function test_bp_xprofile_get_meta_no_meta_key_no_results() { $g = self::factory()->xprofile_group->create(); $expected = array(); $this->assertSame( $expected, bp_xprofile_get_meta( $g, 'group' ) ); } /** * @group xprofilemeta * @group bp_xprofile_update_meta */ public function test_bp_xprofile_update_meta_no_object_id() { $this->assertFalse( bp_xprofile_update_meta( 0, 'group', 'foo', 'bar' ) ); } /** * @group xprofilemeta * @group bp_xprofile_update_meta */ public function test_bp_xprofile_update_meta_no_object_type() { $this->assertFalse( bp_xprofile_update_meta( 1, '', 'foo', 'bar' ) ); } /** * @group xprofilemeta * @group bp_xprofile_update_meta */ public function test_bp_xprofile_update_meta_illegal_object_type() { $this->assertFalse( bp_xprofile_update_meta( 1, 'foo', 'foo', 'bar' ) ); } /** * @group xprofilemeta * @group bp_xprofile_update_meta * @ticket BP5399 */ public function test_bp_xprofile_update_meta_illegal_characters() { $g = self::factory()->xprofile_group->create(); $krazy_key = ' f!@#$%^o *(){}o?+'; bp_xprofile_update_meta( $g, 'group', $krazy_key, 'bar' ); $this->assertSame( '', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); } /** * @group xprofilemeta * @group bp_xprofile_update_meta */ public function test_bp_xprofile_update_meta_stripslashes() { $g = self::factory()->xprofile_group->create(); $v = "Totally \'tubular\'"; bp_xprofile_update_meta( $g, 'group', 'foo', $v ); $this->assertSame( stripslashes( $v ), bp_xprofile_get_meta( $g, 'group', 'foo' ) ); } /** * @group xprofilemeta * @group bp_xprofile_update_meta */ public function test_bp_xprofile_update_meta_empty_value_delete() { $g = self::factory()->xprofile_group->create(); bp_xprofile_update_meta( $g, 'group', 'foo', 'bar' ); bp_xprofile_update_meta( $g, 'group', 'foo', '' ); $this->assertSame( '', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); } /** * @group xprofilemeta * @group bp_xprofile_update_meta */ public function test_bp_xprofile_update_meta_new() { $g = self::factory()->xprofile_group->create(); $this->assertSame( '', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); $this->assertNotEmpty( bp_xprofile_update_meta( $g, 'group', 'foo', 'bar' ) ); $this->assertSame( 'bar', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); } /** * @group xprofilemeta * @group bp_xprofile_update_meta */ public function test_bp_xprofile_update_meta_existing() { $g = self::factory()->xprofile_group->create(); bp_xprofile_update_meta( $g, 'group', 'foo', 'bar' ); $this->assertSame( 'bar', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); $this->assertTrue( bp_xprofile_update_meta( $g, 'group', 'foo', 'baz' ) ); $this->assertSame( 'baz', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); } /** * @group xprofilemeta * @group bp_xprofile_update_meta */ public function test_bp_xprofile_update_meta_same_value() { $g = self::factory()->xprofile_group->create(); bp_xprofile_update_meta( $g, 'group', 'foo', 'bar' ); $this->assertSame( 'bar', bp_xprofile_get_meta( $g, 'group', 'foo' ) ); $this->assertFalse( bp_xprofile_update_meta( $g, 'group', 'foo', 'bar' ) ); } /** * @group xprofilemeta * @group bp_xprofile_update_meta */ public function test_bp_xprofile_update_meta_prev_value() { $g = self::factory()->xprofile_group->create(); bp_xprofile_add_meta( $g, 'group', 'foo', 'bar' ); // In earlier versions of WordPress, bp_activity_update_meta() // returns true even on failure. However, we know that in these // cases the update is failing as expected, so we skip this // assertion just to keep our tests passing // See https://core.trac.wordpress.org/ticket/24933 if ( version_compare( $GLOBALS['wp_version'], '3.7', '>=' ) ) { $this->assertFalse( bp_xprofile_update_meta( $g, 'group', 'foo', 'bar2', 'baz' ) ); } $this->assertTrue( bp_xprofile_update_meta( $g, 'group', 'foo', 'bar2', 'bar' ) ); } /** * @group xprofilemeta * @group bp_xprofile_update_meta * @ticket BP5919 */ public function test_bp_xprofile_update_meta_where_sql_filter_keywords_are_in_quoted_value() { $g = self::factory()->xprofile_group->create(); $value = "SELECT object_id FROM wp_bp_xprofile_groups WHERE \"foo\" VALUES (foo = 'bar'"; bp_xprofile_add_meta( $g, 'group', 'foo', 'bar' ); bp_xprofile_update_meta( $g, 'group', 'foo', $value ); $this->assertSame( $value, bp_xprofile_get_meta( $g, 'group', 'foo' ) ); } /** * @group xprofilemeta * @group bp_xprofile_update_meta * @ticket BP5919 */ public function test_bp_xprofile_update_meta_where_meta_id_is_in_quoted_value() { $g = self::factory()->xprofile_group->create(); $value = "foo meta_id bar"; bp_xprofile_add_meta( $g, 'group', 'foo', 'bar' ); bp_xprofile_update_meta( $g, 'group', 'foo', $value ); $this->assertSame( $value, bp_xprofile_get_meta( $g, 'group', 'foo' ) ); } /** * @group xprofilemeta * @group bp_xprofile_add_meta */ public function test_bp_xprofile_add_meta_no_meta_key() { $this->assertFalse( bp_xprofile_add_meta( 1, 'group', '', 'bar' ) ); } /** * @group xprofilemeta * @group bp_xprofile_add_meta */ public function test_bp_xprofile_add_meta_empty_object_id() { $this->assertFalse( bp_xprofile_add_meta( 0, 'group', 'foo', 'bar' ) ); } /** * @group xprofilemeta * @group bp_xprofile_add_meta */ public function test_bp_xprofile_add_meta_existing_unique() { $g = self::factory()->xprofile_group->create(); bp_xprofile_add_meta( $g, 'group', 'foo', 'bar' ); $this->assertFalse( bp_xprofile_add_meta( $g, 'group', 'foo', 'baz', true ) ); } /** * @group xprofilemeta * @group bp_xprofile_add_meta */ public function test_bp_xprofile_add_meta_existing_not_unique() { $g = self::factory()->xprofile_group->create(); bp_xprofile_add_meta( $g, 'group', 'foo', 'bar' ); $this->assertNotEmpty( bp_xprofile_add_meta( $g, 'group', 'foo', 'baz' ) ); } /** * @group bp_get_member_profile_data */ public function test_bp_get_member_profile_data_inside_loop() { $u = self::factory()->user->create(); $g = self::factory()->xprofile_group->create(); $f = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, 'name' => 'Neato', ) ); xprofile_set_field_data( $f, $u, 'foo' ); if ( bp_has_members() ) : while ( bp_members() ) : bp_the_member(); $found = bp_get_member_profile_data( array( 'user_id' => $u, 'field' => 'Neato', ) ); endwhile; endif; // Cleanup unset( $GLOBALS['members_template'] ); $this->assertSame( 'foo', $found ); } /** * @group bp_get_member_profile_data */ public function test_bp_get_member_profile_data_outside_of_loop() { $u = self::factory()->user->create(); $g = self::factory()->xprofile_group->create(); $f = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, 'name' => 'Kewl', ) ); xprofile_set_field_data( $f, $u, 'foo' ); $found = bp_get_member_profile_data( array( 'user_id' => $u, 'field' => 'Kewl', ) ); $this->assertSame( 'foo', $found ); } /** * @group xprofile_set_field_data */ public function test_get_field_data_integer_zero() { $u = self::factory()->user->create(); $g = self::factory()->xprofile_group->create(); $f = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, 'type' => 'number', 'name' => 'Pens', ) ); xprofile_set_field_data( $f, $u, 0 ); $this->assertEquals( 0, xprofile_get_field_data( 'Pens', $u ) ); } /** * @group xprofile_set_field_data * @ticket BP5836 */ public function test_xprofile_sync_bp_profile_new_user() { $post_vars = $_POST; $_POST = array( 'user_login' => 'foobar', 'pass1' => 'password', 'pass2' => 'password', 'role' => 'subscriber', 'email' => 'foo@bar.com', 'first_name' => 'Foo', 'last_name' => 'Bar', ); $id = add_user(); $display_name = 'Bar Foo'; $_POST = array( 'display_name' => $display_name, 'email' => 'foo@bar.com', 'nickname' => 'foobar', ); $id = edit_user( $id ); // clean up post vars $_POST = $post_vars; $this->assertEquals( $display_name, xprofile_get_field_data( bp_xprofile_fullname_field_id(), $id ) ); } /** * @group xprofile_insert_field */ public function test_xprofile_insert_field_type_option() { $g = self::factory()->xprofile_group->create(); $parent = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, 'type' => 'selectbox', 'name' => 'Parent', ) ); $f = xprofile_insert_field( array( 'field_group_id' => $g, 'parent_id' => $parent, 'type' => 'option', 'name' => 'Option 1', 'field_order' => 5, ) ); $this->assertNotEmpty( $f ); } /** * @group xprofile_insert_field * @ticket BP6354 */ public function test_xprofile_insert_field_should_process_falsey_values_for_boolean_params_on_existing_fields() { $g = self::factory()->xprofile_group->create(); $f = xprofile_insert_field( array( 'field_group_id' => $g, 'type' => 'textbox', 'name' => 'Foo', 'is_required' => true, 'can_delete' => true, 'is_default_option' => true, 'parent_id' => 13, 'field_order' => 5, 'option_order' => 8, 'description' => 'foo', 'order_by' => 'custom', ) ); $this->assertNotEmpty( $f ); $field = new BP_XProfile_Field( $f ); $this->assertEquals( 1, $field->is_required ); $this->assertEquals( 1, $field->can_delete ); $this->assertEquals( 1, $field->is_default_option ); $this->assertEquals( 13, $field->parent_id ); $this->assertEquals( 5, $field->field_order ); $this->assertEquals( 8, $field->option_order ); $this->assertEquals( 'foo', $field->description ); $this->assertEquals( 'custom', $field->order_by ); $f = xprofile_insert_field( array( 'field_group_id' => $g, 'type' => 'textbox', 'name' => 'Foo', 'is_required' => false, 'can_delete' => false, 'is_default_option' => false, 'parent_id' => 0, 'field_order' => 0, 'option_order' => 0, 'description' => '', 'order_by' => '', ) ); $this->assertNotEmpty( $f ); $field = new BP_XProfile_Field( $f ); $this->assertEquals( 0, $field->is_required ); $this->assertEquals( 0, $field->can_delete ); $this->assertEquals( 0, $field->is_default_option ); $this->assertEquals( 0, $field->parent_id ); $this->assertEquals( 0, $field->field_order ); $this->assertEquals( 0, $field->option_order ); $this->assertEquals( '', $field->description ); $this->assertEquals( '', $field->order_by ); } /** * @group xprofile_insert_field */ public function test_xprofile_insert_field_type_option_option_order() { $g = self::factory()->xprofile_group->create(); $parent = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, 'type' => 'selectbox', 'name' => 'Parent', ) ); $f = xprofile_insert_field( array( 'field_group_id' => $g, 'parent_id' => $parent, 'type' => 'option', 'name' => 'Option 1', 'option_order' => 5, ) ); $field = new BP_XProfile_Field( $f ); $this->assertEquals( 5, $field->option_order ); } /** * @group xprofile_insert_field * @ticket BP6137 */ public function test_xprofile_insert_field_should_set_is_default_option_to_false_for_new_option() { $g = self::factory()->xprofile_group->create(); $parent = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, 'type' => 'selectbox', 'name' => 'Parent', ) ); $f = xprofile_insert_field( array( 'field_group_id' => $g, 'parent_id' => $parent, 'type' => 'option', 'name' => 'Option 1', 'field_order' => 5, 'is_default_option' => false, ) ); $this->assertNotEmpty( $f ); $field = new BP_XProfile_Field( $f ); $this->assertEquals( 0, $field->is_default_option ); } /** * @group xprofile_insert_field * @ticket BP6137 */ public function test_xprofile_insert_field_should_set_is_default_option_to_true_for_new_option() { $g = self::factory()->xprofile_group->create(); $parent = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, 'type' => 'selectbox', 'name' => 'Parent', ) ); $f = xprofile_insert_field( array( 'field_group_id' => $g, 'parent_id' => $parent, 'type' => 'option', 'name' => 'Option 1', 'field_order' => 5, 'is_default_option' => true, ) ); $this->assertNotEmpty( $f ); $field = new BP_XProfile_Field( $f ); $this->assertEquals( 1, $field->is_default_option ); } /** * @group xprofile_insert_field * @ticket BP6137 */ public function test_xprofile_insert_field_should_set_is_default_option_to_false_for_existing_option() { $g = self::factory()->xprofile_group->create(); $parent = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, 'type' => 'selectbox', 'name' => 'Parent', ) ); $f = xprofile_insert_field( array( 'field_group_id' => $g, 'parent_id' => $parent, 'type' => 'option', 'name' => 'Option 1', 'field_order' => 5, 'is_default_option' => true, ) ); $this->assertNotEmpty( $f ); $field = new BP_XProfile_Field( $f ); $this->assertEquals( 1, $field->is_default_option ); $f = xprofile_insert_field( array( 'field_id' => $f, 'field_group_id' => $g, 'type' => 'textbox', 'is_default_option' => false, ) ); $field2 = new BP_XProfile_Field( $f ); $this->assertEquals( 0, $field2->is_default_option ); } /** * @group xprofile_insert_field * @ticket BP6137 */ public function test_xprofile_insert_field_should_set_is_default_option_to_true_for_existing_option() { $g = self::factory()->xprofile_group->create(); $parent = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, 'type' => 'selectbox', 'name' => 'Parent', ) ); $f = xprofile_insert_field( array( 'field_group_id' => $g, 'parent_id' => $parent, 'type' => 'option', 'name' => 'Option 1', 'field_order' => 5, 'is_default_option' => false, ) ); $this->assertNotEmpty( $f ); $field = new BP_XProfile_Field( $f ); $this->assertEquals( 0, $field->is_default_option ); $f = xprofile_insert_field( array( 'field_id' => $f, 'field_group_id' => $g, 'type' => 'textbox', 'is_default_option' => true, ) ); $field2 = new BP_XProfile_Field( $f ); $this->assertEquals( 1, $field2->is_default_option ); } /** * @group xprofile_update_field_group_position * @group bp_profile_get_field_groups */ public function test_bp_profile_get_field_groups_update_position() { $g1 = self::factory()->xprofile_group->create(); $g2 = self::factory()->xprofile_group->create(); $g3 = self::factory()->xprofile_group->create(); // prime the cache bp_profile_get_field_groups(); // switch the field group positions for the last two groups xprofile_update_field_group_position( $g2, 3 ); xprofile_update_field_group_position( $g3, 2 ); // now refetch field groups $field_groups = bp_profile_get_field_groups(); // assert! $this->assertEquals( array( 1, $g1, $g3, $g2 ), wp_list_pluck( $field_groups, 'id' ) ); } /** * @ticket BP6638 */ public function test_xprofile_get_field_should_return_bp_xprofile_field_object() { global $wpdb; $g = self::factory()->xprofile_group->create(); $f = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, 'type' => 'selectbox', 'name' => 'Foo', ) ); $field = xprofile_get_field( $f ); $this->assertTrue( $field instanceof BP_XProfile_Field ); } /** * @ticket BP6638 * @group cache */ public function test_xprofile_get_field_should_prime_field_cache() { global $wpdb; $g = self::factory()->xprofile_group->create(); $f = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, 'type' => 'selectbox', 'name' => 'Foo', ) ); $num_queries = $wpdb->num_queries; // Prime the cache. $field_1 = xprofile_get_field( $f ); $num_queries++; $this->assertSame( $num_queries, $wpdb->num_queries ); // No more queries. $field_2 = xprofile_get_field( $f ); $this->assertEquals( $field_1, $field_2 ); $this->assertSame( $num_queries, $wpdb->num_queries ); } /** * @ticket BP5625 */ public function test_bp_xprofie_is_richtext_enabled_for_field_should_default_to_true_for_textareas() { $g = self::factory()->xprofile_group->create(); $f = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, 'type' => 'textarea', ) ); $this->assertTrue( bp_xprofile_is_richtext_enabled_for_field( $f ) ); } /** * @ticket BP5625 */ public function test_bp_xprofie_is_richtext_enabled_for_field_should_default_to_false_for_non_textareas() { $g = self::factory()->xprofile_group->create(); $f = self::factory()->xprofile_field->create( array( 'field_group_id' => $g, 'type' => 'radio', ) ); $this->assertFalse( bp_xprofile_is_richtext_enabled_for_field( $f ) ); } /** * @group bp_get_field_css_class */ public function test_bp_get_field_css_class_empty_param() { // Fake the global global $profile_template; $reset_profile_template = $profile_template; $profile_template = new stdClass; // Avoid the 'alt' class being added $profile_template->current_field = 2; $profile_template->field = new stdClass; $profile_template->field->id = 145; $profile_template->field->name = 'Pie'; $profile_template->field->type = 'textbox'; $expected_classes = array( 'optional-field', 'field_' . $profile_template->field->id, 'field_' . sanitize_title( $profile_template->field->name ), 'field_type_' . sanitize_title( $profile_template->field->type ), 'visibility-public' ); $classes = bp_get_field_css_class(); preg_match( '/class=["\']?([^"\']*)["\' ]/is', $classes, $matches ); $ret_classes = explode( ' ', $matches[1] ); $this->assertEqualSets( $expected_classes, $ret_classes ); // Clean up! $profile_template = $reset_profile_template; } /** * @group bp_get_field_css_class */ public function test_bp_get_field_css_class_space_delimited_string() { // Fake the global global $profile_template; $reset_profile_template = $profile_template; $profile_template = new stdClass; // Avoid the 'alt' class being added $profile_template->current_field = 2; $profile_template->field = new stdClass; $profile_template->field->id = 145; $profile_template->field->name = 'Pie'; $profile_template->field->type = 'textbox'; $expected_classes = array( 'optional-field', 'field_' . $profile_template->field->id, 'field_' . sanitize_title( $profile_template->field->name ), 'field_type_' . sanitize_title( $profile_template->field->type ), 'visibility-public', 'rhubarb', 'apple' ); $classes = bp_get_field_css_class( 'rhubarb apple' ); preg_match( '/class=["\']?([^"\']*)["\' ]/is', $classes, $matches ); $ret_classes = explode( ' ', $matches[1] ); $this->assertEqualSets( $expected_classes, $ret_classes ); // Clean up! $profile_template = $reset_profile_template; } /** * @group bp_get_field_css_class */ public function test_bp_get_field_css_class_array() { // Fake the global global $profile_template; $reset_profile_template = $profile_template; $profile_template = new stdClass; // Avoid the 'alt' class being added $profile_template->current_field = 2; $profile_template->field = new stdClass; $profile_template->field->id = 145; $profile_template->field->name = 'Pie'; $profile_template->field->type = 'textbox'; $expected_classes = array( 'optional-field', 'field_' . $profile_template->field->id, 'field_' . sanitize_title( $profile_template->field->name ), 'field_type_' . sanitize_title( $profile_template->field->type ), 'visibility-public', 'blueberry', 'gooseberry' ); $classes = bp_get_field_css_class( array( 'blueberry', 'gooseberry' ) ); preg_match( '/class=["\']?([^"\']*)["\' ]/is', $classes, $matches ); $ret_classes = explode( ' ', $matches[1] ); $this->assertEqualSets( $expected_classes, $ret_classes ); // Clean up! $profile_template = $reset_profile_template; } /** * @group xprofile_filter_link_profile_data */ public function test_field_comma_seperated_values_are_autolinked() { $field_group_id = self::factory()->xprofile_group->create(); $field_id = self::factory()->xprofile_field->create( array( 'field_group_id' => $field_group_id ) ); $GLOBALS['field'] = new BP_XProfile_Field( $field_id ); $GLOBALS['field']->do_autolink = true; $output = xprofile_filter_link_profile_data( 'Hello world this is a test; with, some, words', 'textbox' ); $regex = '#^Hello world this is a test; with, some, words$#i'; $this->assertRegExp( $regex, $output ); unset( $GLOBALS['field'] ); } /** * @group xprofile_filter_link_profile_data */ public function test_field_semicolon_seperated_values_are_autolinked() { $field_group_id = self::factory()->xprofile_group->create(); $field_id = self::factory()->xprofile_field->create( array( 'field_group_id' => $field_group_id ) ); $GLOBALS['field'] = new BP_XProfile_Field( $field_id ); $GLOBALS['field']->do_autolink = true; $output = xprofile_filter_link_profile_data( 'Hello world this is a test with; some; words', 'textbox' ); $regex = '#^Hello world this is a test with; some; words$#i'; $this->assertRegExp( $regex, $output ); unset( $GLOBALS['field'] ); } /** * @ticket BP7817 * @ticket BP7698 */ public function test_bp_xprofile_personal_data_exporter() { $u = self::factory()->user->create(); $field_group_id = self::factory()->xprofile_group->create(); $f1 = self::factory()->xprofile_field->create( array( 'field_group_id' => $field_group_id, ) ); $f2 = self::factory()->xprofile_field->create( array( 'field_group_id' => $field_group_id, 'type' => 'checkbox', ) ); $option1 = xprofile_insert_field( array( 'field_group_id' => $field_group_id, 'parent_id' => $f2, 'type' => 'option', 'name' => 'Option 1', ) ); $option2 = xprofile_insert_field( array( 'field_group_id' => $field_group_id, 'parent_id' => $f2, 'type' => 'option', 'name' => 'Option 2', ) ); $option3 = xprofile_insert_field( array( 'field_group_id' => $field_group_id, 'parent_id' => $f2, 'type' => 'option', 'name' => 'Option 3', ) ); xprofile_set_field_data( $f1, $u, 'foo' ); xprofile_set_field_data( $f2, $u, array( 'Option 1', 'Option 3' ) ); $test_user = new WP_User( $u ); $actual = bp_xprofile_personal_data_exporter( $test_user->user_email ); $this->assertTrue( $actual['done'] ); // Number of exported users. $this->assertSame( 1, count( $actual['data'] ) ); // Number of exported user properties. $this->assertSame( 3, count( $actual['data'][0]['data'] ) ); } /** * @ticket BP8175 */ public function test_xprofile_data_should_be_deleted_on_user_delete_non_multisite() { if ( is_multisite() ) { $this->markTestSkipped( __METHOD__ . ' requires non-multisite.' ); } $u = self::factory()->user->create(); $fg = self::factory()->xprofile_group->create(); $f1 = self::factory()->xprofile_field->create( array( 'field_group_id' => $fg, ) ); xprofile_set_field_data( $f1, $u, 'foo' ); $this->assertSame( 'foo', xprofile_get_field_data( $f1, $u ) ); wp_delete_user( $u ); $this->assertSame( '', xprofile_get_field_data( $f1, $u ) ); } /** * @ticket BP8175 */ public function test_xprofile_data_should_be_deleted_on_user_delete_multisite() { if ( ! is_multisite() ) { $this->markTestSkipped( __METHOD__ . ' requires multisite.' ); } $u = self::factory()->user->create(); $fg = self::factory()->xprofile_group->create(); $f1 = self::factory()->xprofile_field->create( array( 'field_group_id' => $fg, ) ); xprofile_set_field_data( $f1, $u, 'foo' ); $this->assertSame( 'foo', xprofile_get_field_data( $f1, $u ) ); wpmu_delete_user( $u ); $this->assertSame( '', xprofile_get_field_data( $f1, $u ) ); } /** * @ticket BP8175 */ public function test_xprofile_data_should_not_be_deleted_on_wp_delete_user_multisite() { if ( ! is_multisite() ) { $this->markTestSkipped( __METHOD__ . ' requires multisite.' ); } $u = self::factory()->user->create(); $fg = self::factory()->xprofile_group->create(); $f1 = self::factory()->xprofile_field->create( array( 'field_group_id' => $fg, ) ); xprofile_set_field_data( $f1, $u, 'foo' ); $this->assertSame( 'foo', xprofile_get_field_data( $f1, $u ) ); wp_delete_user( $u ); $this->assertSame( 'foo', xprofile_get_field_data( $f1, $u ) ); } /** * @ticket BP8568 */ public function test_xprofile_sync_wp_profile_signup_with_wp_first_and_last_name_fields() { add_filter( 'bp_disable_profile_sync', '__return_true' ); $u = self::factory()->user->create_and_get( array( 'user_login' => 'foobar', 'user_email' => 'foo@bar.email', ) ); $field_fn = self::factory()->xprofile_field->create( array( 'field_group_id' => 1, 'type' => 'wp-textbox', 'name' => 'WP First Name', ) ); // Set the WP User Key. bp_xprofile_update_meta( $field_fn, 'field', 'wp_user_key', 'first_name' ); $field_ln = self::factory()->xprofile_field->create( array( 'field_group_id' => 1, 'type' => 'wp-textbox', 'name' => 'WP Last Name', ) ); // Set the WP User Key. bp_xprofile_update_meta( $field_ln, 'field', 'wp_user_key', 'last_name' ); $field_n = bp_xprofile_fullname_field_id(); $usermeta = array( 'field_' . $field_n => 'foobar', 'field_' . $field_fn => 'Foo', 'field_' . $field_ln => 'Bar', 'profile_field_ids' => $field_n . ',' . $field_fn . ',' . $field_ln, ); remove_filter( 'bp_disable_profile_sync', '__return_true' ); // simulates do_action( 'bp_core_signup_user', $user_id, $user_login, $user_password, $user_email, $usermeta ); xprofile_sync_wp_profile( $u->ID, $u->user_login, $u->user_pass, $u->user_email, $usermeta ); $updated_u = get_user_by( 'id', $u->ID ); $this->assertEquals( 'Foo', $updated_u->first_name ); $this->assertEquals( 'Bar', $updated_u->last_name ); } /** * @ticket BP8568 */ public function test_xprofile_sync_wp_profile_signup_without_wp_first_and_last_name_fields() { add_filter( 'bp_disable_profile_sync', '__return_true' ); $u = self::factory()->user->create_and_get( array( 'user_login' => 'foobar', 'user_email' => 'foo@bar.email', ) ); $field_n = bp_xprofile_fullname_field_id(); $usermeta = array( 'field_' . $field_n => 'foobar', 'profile_field_ids' => $field_n, ); remove_filter( 'bp_disable_profile_sync', '__return_true' ); // simulates do_action( 'bp_core_signup_user', $user_id, $user_login, $user_password, $user_email, $usermeta ); xprofile_sync_wp_profile( $u->ID, $u->user_login, $u->user_pass, $u->user_email, $usermeta ); $updated_u = get_user_by( 'id', $u->ID ); $this->assertEquals( 'foobar', $updated_u->first_name ); $this->assertEquals( '', $updated_u->last_name ); } /** * @ticket BP8568 */ public function test_xprofile_sync_wp_profile_activate_signup_with_wp_first_and_last_name_fields() { add_filter( 'bp_disable_profile_sync', '__return_true' ); $u = self::factory()->user->create_and_get( array( 'user_login' => 'barfoo', 'user_email' => 'bar@foo.email', ) ); $field_fn = self::factory()->xprofile_field->create( array( 'field_group_id' => 1, 'type' => 'wp-textbox', 'name' => 'WP First Name', ) ); // Set the WP User Key. bp_xprofile_update_meta( $field_fn, 'field', 'wp_user_key', 'first_name' ); $field_ln = self::factory()->xprofile_field->create( array( 'field_group_id' => 1, 'type' => 'wp-textbox', 'name' => 'WP Last Name', ) ); // Set the WP User Key. bp_xprofile_update_meta( $field_ln, 'field', 'wp_user_key', 'last_name' ); $field_n = bp_xprofile_fullname_field_id(); $user = array( 'user_id' => $u->ID, 'password' => $u->user_pass, 'meta' => array( 'field_' . $field_n => 'barfoo', 'field_' . $field_fn => 'Bar', 'field_' . $field_ln => 'Foo', 'profile_field_ids' => $field_n . ',' . $field_fn . ',' . $field_ln, ), ); remove_filter( 'bp_disable_profile_sync', '__return_true' ); // simulates do_action( 'bp_core_activated_user', $user_id, $key, $user ); xprofile_sync_wp_profile( $u->ID, 'randomkey', $user ); $updated_u = get_user_by( 'id', $u->ID ); $this->assertEquals( 'Bar', $updated_u->first_name ); $this->assertEquals( 'Foo', $updated_u->last_name ); } /** * @ticket BP8568 */ public function test_xprofile_sync_wp_profile_activate_signup_without_wp_first_and_last_name_fields() { add_filter( 'bp_disable_profile_sync', '__return_true' ); $u = self::factory()->user->create_and_get( array( 'user_login' => 'barfoo', 'user_email' => 'bar@foo.email', ) ); $field_n = bp_xprofile_fullname_field_id(); $user = array( 'user_id' => $u->ID, 'password' => $u->user_pass, 'meta' => array( 'field_' . $field_n => 'barfoo', 'profile_field_ids' => $field_n, ), ); remove_filter( 'bp_disable_profile_sync', '__return_true' ); // simulates do_action( 'bp_core_activated_user', $user_id, $key, $user ); xprofile_sync_wp_profile( $u->ID, 'randomkey', $user ); $updated_u = get_user_by( 'id', $u->ID ); $this->assertEquals( 'barfoo', $updated_u->first_name ); $this->assertEquals( '', $updated_u->last_name ); } }