Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
11/08/2022 06:27:01 AM (2 years ago)
Author:
imath
Message:

xProfile: allow the loop to fetch fields from multiple fields group

You can now pass an array of fields group ID into the $profile_group_id
parameter.

Props boonebgorges, espellcaste

Closes https://github.com/buddypress/buddypress/pull/30
Fixes #4075

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/testcases/xprofile/class-bp-xprofile-group.php

    r12317 r13358  
    132132
    133133    /**
     134     * @group get_xprofile_groups
     135     * @group BP4075
     136     */
     137    public function test_get_specific_xprofile_groups() {
     138        $g1 = self::factory()->xprofile_group->create();
     139        $g2 = self::factory()->xprofile_group->create();
     140        $g3 = self::factory()->xprofile_group->create();
     141        $e1 = [ $g1, $g2 ];
     142
     143        // Comma-separated list of profile group ids.
     144        $groups1 = BP_XProfile_Group::get( [ 'profile_group_id' => join( ',', $e1 ) ] );
     145
     146        $this->assertSame( $e1, array_map( 'absint', wp_list_pluck( $groups1, 'id' ) ) );
     147
     148        // Array of profile group ids.
     149        $groups2 = BP_XProfile_Group::get( [ 'profile_group_id' => $e1 ] );
     150
     151        $this->assertSame( $e1, array_map( 'absint', wp_list_pluck( $groups2, 'id' ) ) );
     152    }
     153
     154    /**
    134155     * @group member_types
    135156     * @ticket BP5192
     
    444465
    445466    /**
    446      * @group BP7435
    447      * @group cache
    448      */
    449     public function test_group_ids_query_should_be_cached() {
    450         global $wpdb;
    451 
    452         $group_ids   = array( 1 ); // Default group.
     467     * @group BP4075
     468     */
     469    public function test_group_ids_query() {
     470        $g1 = self::factory()->xprofile_group->create();
     471        $g2 = self::factory()->xprofile_group->create();
     472
     473        $group_ids   = [ 1 ]; // Default group.
    453474        $group_ids[] = self::factory()->xprofile_group->create();
    454475        $group_ids[] = self::factory()->xprofile_group->create();
    455476        $group_ids[] = self::factory()->xprofile_group->create();
    456 
    457         $params_1 = array(
    458             'exclude_groups' => false,
    459         );
    460 
    461         $params_2 = array(
    462             'exclude_groups' => array( 0 ),
    463         );
     477        $group_ids[] = $g1;
     478        $group_ids[] = $g2;
     479
     480        $found_1 = BP_XProfile_Group::get_group_ids();
     481        $this->assertEqualSets( $group_ids, $found_1 );
     482
     483        $found_2 = BP_XProfile_Group::get_group_ids( [ 'profile_group_id' => $g1 ] );
     484        $this->assertCount( 1, $found_2 );
     485        $this->assertSame( [ $g1 ], $found_2 );
     486
     487        $found_3 = BP_XProfile_Group::get_group_ids( [ 'profile_group_id' => [ $g1 ] ] );
     488        $this->assertCount( 1, $found_3 );
     489        $this->assertSame( [ $g1 ], $found_3 );
     490
     491        $found_4 = BP_XProfile_Group::get_group_ids( [ 'profile_group_id' => [ $g2 ] ] );
     492        $this->assertCount( 1, $found_4 );
     493        $this->assertSame( [ $g2 ], $found_4 );
     494
     495        $found_5 = BP_XProfile_Group::get_group_ids( [ 'profile_group_id' => [ $g1, $g2 ] ] );
     496        $this->assertCount( 2, $found_5 );
     497        $this->assertSame( [ $g1, $g2 ], $found_5 );
     498
     499        $found_6 = BP_XProfile_Group::get_group_ids( [ 'profile_group_id' => join( ',', [ $g1, $g2 ] ) ] );
     500        $this->assertCount( 2, $found_6 );
     501        $this->assertSame( [ $g1, $g2 ], $found_6 );
     502
     503        $found_7 = BP_XProfile_Group::get_group_ids( [ 'profile_group_id' => true ] );
     504        $this->assertEqualSets( $group_ids, $found_7 );
     505    }
     506
     507    /**
     508     * @group BP7435
     509     * @group cache
     510     */
     511    public function test_group_ids_query_should_be_cached() {
     512        global $wpdb;
     513
     514        $group_ids   = array( 1 ); // Default group.
     515        $g1          = self::factory()->xprofile_group->create();
     516        $g2          = self::factory()->xprofile_group->create();
     517        $group_ids[] = self::factory()->xprofile_group->create();
     518        $group_ids[] = self::factory()->xprofile_group->create();
     519        $group_ids[] = self::factory()->xprofile_group->create();
     520        $group_ids[] = $g1;
     521        $group_ids[] = $g2;
     522
     523        $params_1 = [ 'exclude_groups' => false ];
    464524
    465525        // Prime cache.
     
    469529        $num_queries = $wpdb->num_queries;
    470530
    471         $found_1 = BP_XProfile_Group::get_group_ids( $params_1 );
    472         $this->assertEqualSets( $group_ids, $found_1 );
     531        $found_2 = BP_XProfile_Group::get_group_ids( $params_1 );
     532        $this->assertEqualSets( $group_ids, $found_2 );
    473533        $this->assertSame( $num_queries, $wpdb->num_queries );
    474534
    475535        // Different parameters should trigger a cache miss.
    476         $found_2 = BP_XProfile_Group::get_group_ids( $params_2 );
    477         $this->assertEqualSets( $group_ids, $found_2 );
     536        $found_3 = BP_XProfile_Group::get_group_ids( [ 'exclude_groups' => [ 0 ] ] );
     537        $this->assertEqualSets( $group_ids, $found_3 );
     538        $this->assertNotSame( $num_queries, $wpdb->num_queries );
     539
     540        // Again, different parameters should trigger a cache miss.
     541        $found_4 = BP_XProfile_Group::get_group_ids( [ 'profile_group_id' => [ $g1, $g2 ] ] );
     542        $this->assertEqualSets( [ $g1, $g2 ], $found_4 );
    478543        $this->assertNotSame( $num_queries, $wpdb->num_queries );
    479544    }
Note: See TracChangeset for help on using the changeset viewer.