Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
02/13/2015 05:24:33 PM (11 years ago)
Author:
boonebgorges
Message:

Cache the results of BP_Messages_Thread::get_recipients().

This can save a large number of queries on certain inbox views.

Props wpdennis.
See #6221. Fixes #6220.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/testcases/messages/class.bp-messages-thread.php

    r9302 r9482  
    9393        $this->assertSame( $expected, $found );
    9494    }
     95
     96    /**
     97     * @group get_recipients
     98     * @group cache
     99     */
     100    public function test_get_recipients_should_cache_its_values() {
     101        global $wpdb;
     102
     103        $u1 = $this->factory->user->create();
     104        $u2 = $this->factory->user->create();
     105
     106        $t1 = $this->factory->message->create( array(
     107            'sender_id' => $u1,
     108            'recipients' => array( $u2 ),
     109            'subject' => 'Foo',
     110        ) );
     111
     112        $thread = new BP_Messages_Thread( $t1 );
     113        $recipients = $thread->get_recipients();
     114
     115        $num_queries = $wpdb->num_queries;
     116        $recipients_cached = $thread->get_recipients();
     117
     118        $this->assertEquals( $recipients, $recipients_cached );
     119        $this->assertEquals( $num_queries, $wpdb->num_queries );
     120    }
     121
     122    /**
     123     * @group get_recipients
     124     * @group cache
     125     */
     126    public function test_get_recipients_cache_should_be_busted_when_thread_message_is_sent() {
     127        global $wpdb;
     128
     129        $u1 = $this->factory->user->create();
     130        $u2 = $this->factory->user->create();
     131
     132        $t1 = $this->factory->message->create( array(
     133            'sender_id' => $u1,
     134            'recipients' => array( $u2 ),
     135            'subject' => 'Foo',
     136        ) );
     137
     138        $thread = new BP_Messages_Thread( $t1 );
     139        $recipients = $thread->get_recipients();
     140
     141        // Verify that the cache is populated.
     142        $num_queries = $wpdb->num_queries;
     143        $recipients_cached = $thread->get_recipients();
     144        $this->assertEquals( $num_queries, $wpdb->num_queries );
     145
     146        messages_new_message( array(
     147            'sender_id' => $u2,
     148            'thread_id' => $t1,
     149            'recipients' => array( $u1 ),
     150            'subject' => 'Bar',
     151            'content' => 'Baz',
     152        ) );
     153
     154        // Cache should be empty.
     155        $num_queries = $wpdb->num_queries;
     156        $recipients_uncached = $thread->get_recipients();
     157        $this->assertEquals( $num_queries + 1, $wpdb->num_queries );
     158    }
     159
     160    /**
     161     * @group get_recipients
     162     * @group cache
     163     */
     164    public function test_get_recipients_cache_should_be_busted_when_single_thread_is_deleted() {
     165        global $wpdb;
     166
     167        $u1 = $this->factory->user->create();
     168        $u2 = $this->factory->user->create();
     169
     170        $t1 = $this->factory->message->create( array(
     171            'sender_id' => $u1,
     172            'recipients' => array( $u2 ),
     173            'subject' => 'Foo',
     174        ) );
     175
     176        $thread = new BP_Messages_Thread( $t1 );
     177        $recipients = $thread->get_recipients();
     178
     179        // Verify that the cache is populated.
     180        $num_queries = $wpdb->num_queries;
     181        $recipients_cached = $thread->get_recipients();
     182        $this->assertEquals( $num_queries, $wpdb->num_queries );
     183
     184        messages_delete_thread( $t1 );
     185
     186        // Cache should be empty.
     187        $this->assertFalse( wp_cache_get( 'thread_recipients_' . $t1, 'bp_messages' ) );
     188    }
     189
     190    /**
     191     * @group get_recipients
     192     * @group cache
     193     */
     194    public function test_get_recipients_cache_should_be_busted_when_array_of_threads_is_deleted() {
     195        global $wpdb;
     196
     197        $u1 = $this->factory->user->create();
     198        $u2 = $this->factory->user->create();
     199
     200        $t1 = $this->factory->message->create( array(
     201            'sender_id' => $u1,
     202            'recipients' => array( $u2 ),
     203            'subject' => 'Foo',
     204        ) );
     205
     206        $thread = new BP_Messages_Thread( $t1 );
     207        $recipients = $thread->get_recipients();
     208
     209        // Verify that the cache is populated.
     210        $num_queries = $wpdb->num_queries;
     211        $recipients_cached = $thread->get_recipients();
     212        $this->assertEquals( $num_queries, $wpdb->num_queries );
     213
     214        messages_delete_thread( array( $t1 ) );
     215
     216        // Cache should be empty.
     217        $this->assertFalse( wp_cache_get( 'thread_recipients_' . $t1, 'bp_messages' ) );
     218    }
    95219}
Note: See TracChangeset for help on using the changeset viewer.