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.