Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
08/31/2021 09:46:50 PM (3 years ago)
Author:
dcavins
Message:

Improve BP_Signup class.

  • Add caching for BP_Signup SQL queries and BP_Signup objects.
  • Synchronize signup result format provided by get() and construct() methods.
  • Add action points so that the cache items can be cleaned up.
  • Use cached functions rather than making direct database calls.
  • Improve behavior of meta updating method.

Fixes #8540.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/testcases/members/class-bp-signup.php

    r12635 r13098  
    357357        $this->assertEquals( array( $s3, $s2, $s1 ), $ss['signups'] );
    358358    }
     359
     360    /**
     361     * @group cache
     362     */
     363    public function test_get_queries_should_be_cached() {
     364        global $wpdb;
     365
     366        $s = self::factory()->signup->create();
     367
     368        $found1 = BP_Signup::get(
     369            array(
     370                'fields' => 'ids',
     371            )
     372        );
     373
     374        $num_queries = $wpdb->num_queries;
     375
     376        $found2 = BP_Signup::get(
     377            array(
     378                'fields' => 'ids',
     379            )
     380        );
     381
     382        $this->assertEqualSets( $found1, $found2 );
     383        $this->assertSame( $num_queries, $wpdb->num_queries );
     384    }
     385
     386    /**
     387     * @group cache
     388     */
     389    public function test_get_query_caches_should_be_busted_by_add() {
     390        $s1 = self::factory()->signup->create();
     391
     392        $found1 = BP_Signup::get(
     393            array(
     394                'fields' => 'ids',
     395            )
     396        );
     397        $this->assertEqualSets( array( $s1 ), $found1['signups'] );
     398
     399        $s2 = self::factory()->signup->create();
     400        $found2 = BP_Signup::get(
     401            array(
     402                'fields' => 'ids',
     403            )
     404        );
     405        $this->assertEqualSets( array( $s2 ), $found2['signups'] );
     406    }
     407
     408    /**
     409     * @group cache
     410     */
     411    public function test_get_query_caches_should_be_busted_by_meta_update() {
     412        $time = bp_core_current_time();
     413
     414        $args = array(
     415            'domain' => 'foo',
     416            'path' => 'bar',
     417            'title' => 'Foo bar',
     418            'user_login' => 'user1',
     419            'user_email' => 'user1@example.com',
     420            'registered' => $time,
     421            'activation_key' => '12345',
     422            'meta' => array(
     423                'field_1' => 'Fozzie',
     424                'meta1' => 'meta2',
     425            ),
     426        );
     427        $s1 = BP_Signup::add( $args );
     428
     429        $args['meta']['field_1'] = 'Fozz';
     430        $s2 = BP_Signup::add( $args );
     431
     432        // Should find both.
     433        $found1 = BP_Signup::get( array(
     434            'fields' => 'ids',
     435            'number'  => -1,
     436            'usersearch' => 'Fozz',
     437        ) );
     438        $this->assertEqualSets( array( $s1, $s2 ), $found1['signups'] );
     439
     440        BP_Signup::update( array(
     441            'signup_id'  => $s1,
     442            'meta'       => array(
     443                'field_1' => 'Fonzie'
     444            ),
     445        ) );
     446
     447        $found2 = BP_Signup::get( array(
     448            'fields' => 'ids',
     449            'number'  => -1,
     450            'usersearch' => 'Fozz',
     451        ) );
     452
     453        $this->assertEqualSets( array( $s2 ), $found2['signups'] );
     454    }
     455
     456    /**
     457     * @group cache
     458     */
     459    public function test_get_query_caches_should_be_busted_by_delete() {
     460        global $wpdb;
     461        $time = bp_core_current_time();
     462
     463        $args = array(
     464            'domain' => 'foo',
     465            'path' => 'bar',
     466            'title' => 'Foo bar',
     467            'user_login' => 'user1',
     468            'user_email' => 'user1@example.com',
     469            'registered' => $time,
     470            'activation_key' => '12345',
     471            'meta' => array(
     472                'field_1' => 'Fozzie',
     473                'meta1' => 'meta2',
     474            ),
     475        );
     476        $s1 = BP_Signup::add( $args );
     477
     478        $args['meta']['field_1'] = 'Fozz';
     479        $s2 = BP_Signup::add( $args );
     480
     481        // Should find both.
     482        $found1 = BP_Signup::get( array(
     483            'fields' => 'ids',
     484            'number'  => -1,
     485            'usersearch' => 'Fozz',
     486        ) );
     487        $this->assertEqualSets( array( $s1, $s2 ), $found1['signups'] );
     488
     489        BP_Signup::delete( array( $s1 ) );
     490
     491        $found2 = BP_Signup::get( array(
     492            'fields' => 'ids',
     493            'number'  => -1,
     494            'usersearch' => 'Fozz',
     495        ) );
     496
     497        $this->assertEqualSets( array( $s2 ), $found2['signups'] );
     498    }
     499
     500    /**
     501     * @group cache
     502     */
     503    public function test_get_query_caches_should_be_busted_by_activation() {
     504        $s1 = self::factory()->signup->create( array(
     505            'user_login'     => 'accountone',
     506            'user_email'     => 'accountone@example.com',
     507            'activation_key' => 'activationkeyone',
     508        ) );
     509
     510        $s2 = self::factory()->signup->create( array(
     511            'user_login'     => 'accounttwo',
     512            'user_email'     => 'accounttwo@example.com',
     513            'activation_key' => 'activationkeytwo',
     514        ) );
     515        $found1 = BP_Signup::get(
     516            array(
     517                'number' => -1,
     518                'fields' => 'ids',
     519            )
     520        );
     521        $this->assertEqualSets( array( $s1, $s2 ), $found1['signups'] );
     522
     523        $activate = BP_Signup::activate( (array) $s2 );
     524
     525        $found2 = BP_Signup::get(
     526            array(
     527                'number' => -1,
     528                'fields' => 'ids',
     529            )
     530        );
     531        $this->assertEqualSets( array( $s1 ), $found2['signups'] );
     532    }
     533
     534    /**
     535     * @group cache
     536     */
     537    public function signup_objects_should_be_cached() {
     538        global $wpdb;
     539
     540        $s1 = self::factory()->signup->create( array(
     541            'user_login'     => 'accountone',
     542            'user_email'     => 'accountone@example.com',
     543            'activation_key' => 'activationkeyone',
     544        ) );
     545
     546        $found1 = new BP_Signup( $s1 );
     547
     548        $num_queries = $wpdb->num_queries;
     549
     550        // Object should be rebuilt from cache.
     551        $found2 = new BP_Signup( $s1 );
     552
     553        // @TODO: This fails because "get_avatar()" in populate() results in db queries.
     554        $this->assertEquals( $found1, $found2 );
     555        $this->assertEquals( $num_queries, $wpdb->num_queries );
     556    }
     557
     558    /**
     559     * @group cache
     560     */
     561    public function test_signup_object_caches_should_be_busted_by_activation() {
     562        $s1 = self::factory()->signup->create( array(
     563            'user_login'     => 'accountone',
     564            'user_email'     => 'accountone@example.com',
     565            'activation_key' => 'activationkeyone',
     566        ) );
     567
     568        $found1 = new BP_Signup( $s1 );
     569        $this->assertEquals( $s1, $found1->id );
     570        $this->assertFalse( $found1->active );
     571
     572        $activate = BP_Signup::activate( (array) $s1 );
     573
     574        $found2 = new BP_Signup( $s1 );
     575        $this->assertEquals( $s1, $found2->id );
     576        $this->assertTrue( $found2->active );
     577
     578    }
    359579}
Note: See TracChangeset for help on using the changeset viewer.