Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
12/07/2018 06:41:16 PM (5 years ago)
Author:
boonebgorges
Message:

XProfile: Add caching to group and field queries.

See #7435.

File:
1 edited

Legend:

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

    r12210 r12317  
    442442        $this->assertSame( "Test ' Name", $e1->name );
    443443    }
     444
     445    /**
     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.
     453        $group_ids[] = self::factory()->xprofile_group->create();
     454        $group_ids[] = self::factory()->xprofile_group->create();
     455        $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        );
     464
     465        // Prime cache.
     466        $found_1 = BP_XProfile_Group::get_group_ids( $params_1 );
     467        $this->assertEqualSets( $group_ids, $found_1 );
     468
     469        $num_queries = $wpdb->num_queries;
     470
     471        $found_1 = BP_XProfile_Group::get_group_ids( $params_1 );
     472        $this->assertEqualSets( $group_ids, $found_1 );
     473        $this->assertSame( $num_queries, $wpdb->num_queries );
     474
     475        // 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 );
     478        $this->assertNotSame( $num_queries, $wpdb->num_queries );
     479    }
     480
     481    /**
     482     * @group BP7435
     483     * @group cache
     484     */
     485    public function test_group_ids_query_cache_should_be_busted_on_group_delete() {
     486        $group_ids    = array( 1 ); // Default group.
     487        $group_ids[1] = self::factory()->xprofile_group->create();
     488        $group_ids[2] = self::factory()->xprofile_group->create();
     489        $group_ids[3] = self::factory()->xprofile_group->create();
     490
     491        // Prime cache.
     492        $found = BP_XProfile_Group::get_group_ids();
     493        $this->assertContains( $group_ids[1], $found );
     494
     495        $g1 = new BP_XProfile_Group( $group_ids[1] );
     496        $g1->delete();
     497
     498        $found = BP_XProfile_Group::get_group_ids();
     499        $this->assertNotContains( $group_ids[1], $found );
     500    }
     501
     502    /**
     503     * @group BP7435
     504     * @group cache
     505     */
     506    public function test_group_ids_query_cache_should_be_busted_on_group_save() {
     507        global $wpdb;
     508
     509        $group_ids    = array( 1 ); // Default group.
     510        $group_ids[1] = self::factory()->xprofile_group->create();
     511        $group_ids[2] = self::factory()->xprofile_group->create();
     512        $group_ids[3] = self::factory()->xprofile_group->create();
     513
     514        // Prime cache.
     515        $found = BP_XProfile_Group::get_group_ids();
     516        $this->assertContains( $group_ids[1], $found );
     517
     518        $g1 = new BP_XProfile_Group( $group_ids[1] );
     519        $g1->save();
     520
     521        $num_queries = $wpdb->num_queries;
     522
     523        $found = BP_XProfile_Group::get_group_ids();
     524        $this->assertNotSame( $num_queries, $wpdb->num_queries );
     525    }
     526
     527    /**
     528     * @group BP7435
     529     * @group cache
     530     */
     531    public function test_group_ids_query_cache_should_be_busted_on_field_save() {
     532        global $wpdb;
     533
     534        $group_ids    = array( 1 ); // Default group.
     535        $group_ids[1] = self::factory()->xprofile_group->create();
     536        $group_ids[2] = self::factory()->xprofile_group->create();
     537        $group_ids[3] = self::factory()->xprofile_group->create();
     538
     539        $f = self::factory()->xprofile_field->create( array(
     540            'field_group_id' => $group_ids[1],
     541        ) );
     542        $field = new BP_XProfile_Field( $f );
     543
     544        // Prime cache.
     545        $found = BP_XProfile_Group::get_group_ids();
     546        $this->assertContains( $group_ids[1], $found );
     547
     548        $field->save();
     549
     550        $num_queries = $wpdb->num_queries;
     551
     552        $found = BP_XProfile_Group::get_group_ids();
     553        $this->assertNotSame( $num_queries, $wpdb->num_queries );
     554    }
     555
     556    /**
     557     * @group BP7435
     558     * @group cache
     559     */
     560    public function test_group_ids_query_cache_should_be_busted_on_field_delete() {
     561        $group_ids    = array( 1 ); // Default group.
     562        $group_ids[1] = self::factory()->xprofile_group->create();
     563        $group_ids[2] = self::factory()->xprofile_group->create();
     564        $group_ids[3] = self::factory()->xprofile_group->create();
     565
     566        $f = self::factory()->xprofile_field->create( array(
     567            'field_group_id' => $group_ids[1],
     568        ) );
     569        $field = new BP_XProfile_Field( $f );
     570
     571        $args = array(
     572            'hide_empty_groups' => true,
     573        );
     574
     575        // Prime cache.
     576        $found = BP_XProfile_Group::get_group_ids( $args );
     577        $this->assertContains( $group_ids[1], $found );
     578
     579        $field->delete();
     580
     581        $found = BP_XProfile_Group::get_group_ids( $args );
     582        $this->assertNotContains( $group_ids[1], $found );
     583    }
     584
     585    /**
     586     * @group BP7435
     587     * @group cache
     588     */
     589    public function test_group_field_ids_query_cache() {
     590        global $wpdb;
     591
     592        $group_id = self::factory()->xprofile_group->create();
     593
     594        $f = self::factory()->xprofile_field->create( array(
     595            'field_group_id' => $group_id,
     596        ) );
     597        $field = new BP_XProfile_Field( $f );
     598
     599        // Prime cache.
     600        $found = BP_XProfile_Group::get_group_field_ids( array( $group_id ) );
     601        $this->assertContains( $f, $found );
     602
     603        $num_queries = $wpdb->num_queries;
     604
     605        $found = BP_XProfile_Group::get_group_field_ids( array( $group_id ) );
     606        $this->assertContains( $f, $found );
     607        $this->assertSame( $num_queries, $wpdb->num_queries );
     608    }
     609
     610    /**
     611     * @group BP7435
     612     * @group cache
     613     */
     614    public function test_group_field_ids_query_cache_should_be_busted_on_field_save() {
     615        global $wpdb;
     616
     617        $group_id = self::factory()->xprofile_group->create();
     618
     619        $f = self::factory()->xprofile_field->create( array(
     620            'field_group_id' => $group_id,
     621        ) );
     622        $field = new BP_XProfile_Field( $f );
     623
     624        // Prime cache.
     625        $found = BP_XProfile_Group::get_group_field_ids( array( $group_id ) );
     626        $this->assertContains( $f, $found );
     627
     628        $field->save();
     629        $num_queries = $wpdb->num_queries;
     630
     631        $found = BP_XProfile_Group::get_group_field_ids( array( $group_id ) );
     632        $this->assertContains( $f, $found );
     633        $this->assertNotSame( $num_queries, $wpdb->num_queries );
     634    }
     635
     636    /**
     637     * @group BP7435
     638     * @group cache
     639     */
     640    public function test_group_field_ids_query_cache_should_be_busted_on_field_delete() {
     641        $group_id = self::factory()->xprofile_group->create();
     642
     643        $f = self::factory()->xprofile_field->create( array(
     644            'field_group_id' => $group_id,
     645        ) );
     646        $field = new BP_XProfile_Field( $f );
     647
     648        // Prime cache.
     649        $found = BP_XProfile_Group::get_group_field_ids( array( $group_id ) );
     650        $this->assertContains( $f, $found );
     651
     652        $field->delete();
     653
     654        $found = BP_XProfile_Group::get_group_field_ids( array( $group_id ) );
     655        $this->assertNotContains( $f, $found );
     656    }
    444657}
Note: See TracChangeset for help on using the changeset viewer.