Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
09/09/2021 04:10:21 AM (5 years ago)
Author:
espellcaste
Message:

Adding support to the offset pagination to Messages and Recipients in a thread.

Previously, the BP_Messages_Thread query class would grab ALL messages created for a thread and ALL its recipients. This commit introduces support to the offset pagination
allowing one to paginate both messages and recipients using parameters with a specific limit and offset.

Props imath
Fixes #8508

File:
1 edited

Legend:

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

    r12984 r13102  
    1010         * @group cache
    1111         */
    12         public function test_construct_cache() {
     12        public function construct_cache() {
    1313                $u1 = self::factory()->user->create();
    1414                $u2 = self::factory()->user->create();
     
    3131        }
    3232
     33        public function test_get_messages_with_invalid_thread_id() {
     34                $this->assertTrue( empty( BP_Messages_Thread::get_messages( 0 ) ) );
     35        }
     36
     37        public function test_get_messages_using_arguments() {
     38                $u1 = self::factory()->user->create();
     39                $u2 = self::factory()->user->create();
     40                $m1 = self::factory()->message->create_and_get( array(
     41                        'sender_id' => $u1,
     42                        'recipients' => array( $u2 ),
     43                        'subject' => 'Foo',
     44                ) );
     45
     46                self::factory()->message->create_many(
     47                        98,
     48                        array(
     49                                'thread_id' => $m1->thread_id,
     50                                'sender_id' => $u2,
     51                                'recipients' => array( $u1 ),
     52                                'subject' => 'Bar',
     53                        )
     54                );
     55
     56                // Last message
     57                self::factory()->message->create(
     58                        array(
     59                                'thread_id' => $m1->thread_id,
     60                                'sender_id' => $u1,
     61                                'recipients' => array( $u2 ),
     62                                'subject' => 'Last Message',
     63                        )
     64                );
     65
     66                // Default results.
     67                $messages = BP_Messages_Thread::get_messages( $m1->thread_id );
     68                $this->assertTrue( 100 === count( $messages ) );
     69
     70                // Get first 10 messages.
     71                $messages = BP_Messages_Thread::get_messages( $m1->thread_id, array( 'page' => 1, 'per_page' => 10 ) );
     72                $this->assertTrue( 10 === count( $messages ) );
     73
     74                // Get first 10 messages differently.
     75                $thread = new BP_Messages_Thread( $m1->thread_id, 'ASC', array( 'page' => 1, 'per_page' => 10 ) );
     76                $this->assertTrue( 10 === count( $thread->messages ) );
     77
     78                // Get all messages.
     79                $messages = BP_Messages_Thread::get_messages( $m1->thread_id, array( 'page' => null, 'per_page' => null ) );
     80                $this->assertTrue( 100 === count( $messages ) );
     81
     82                // Get all mesages differently.
     83                $thread = new BP_Messages_Thread( $m1->thread_id, 'ASC', array( 'page' => null, 'per_page' => null ) );
     84                $this->assertTrue( 100 === count( $thread->messages ) );
     85
     86                // Get last message.
     87                $messages = BP_Messages_Thread::get_messages( $m1->thread_id, array( 'page' => 100, 'per_page' => 1 ) );
     88                $this->assertTrue( 1 === count( $messages ) );
     89                $this->assertEquals( $u1, $messages[0]->sender_id );
     90                $this->assertEquals( 'Last Message', $messages[0]->subject );
     91        }
     92
    3393        /**
    3494         * @group order
     
    40100                // create thread
    41101                $message_1 = self::factory()->message->create_and_get( array(
    42                         'sender_id' => $u1,
    43                         'recipients' => array( $u2 ),
    44                         'subject' => 'Foo',
    45                 ) );
    46                 $m1 = $message_1->id;
     102                        'sender_id'  => $u1,
     103                        'recipients' => array( $u2 ),
     104                        'subject'    => 'Foo',
     105                ) );
    47106
    48107                // create reply
    49108                $message_2 = self::factory()->message->create_and_get( array(
    50                         'thread_id' => $message_1->thread_id,
    51                         'sender_id' => $u1,
    52                         'recipients' => array( $u2 ),
    53                         'content' => 'Bar'
    54                 ) );
    55                 $m2 = $message_2->id;
    56 
    57                 // now get thread by DESC
     109                        'thread_id'  => $message_1->thread_id,
     110                        'sender_id'  => $u1,
     111                        'recipients' => array( $u2 ),
     112                        'content'    => 'Bar'
     113                ) );
     114
     115                // Default sort from constructor.
     116                $thread = new BP_Messages_Thread( $message_1->thread_id );
     117                $this->assertEquals(
     118                        array( $message_1->id, $message_2->id ),
     119                        wp_list_pluck( $thread->messages, 'id' )
     120                );
     121
     122                // Default via the helper method.
     123                $messages = BP_Messages_Thread::get_messages( $message_1->thread_id );
     124                $this->assertEquals(
     125                        array( $message_1->id, $message_2->id ),
     126                        wp_list_pluck( $messages, 'id' )
     127                );
     128
     129                // Now get thread by DESC via the constructor.
    58130                $thread = new BP_Messages_Thread( $message_1->thread_id, 'DESC' );
    59 
    60                 // assert!
    61131                $this->assertEquals(
    62                         array( $m2, $m1 ),
     132                        array( $message_2->id, $message_1->id ),
    63133                        wp_list_pluck( $thread->messages, 'id' )
    64134                );
     135
     136                // Testing sort with lowercase.
     137                $thread = new BP_Messages_Thread( $message_1->thread_id, 'desc' );
     138                $this->assertEquals(
     139                        array( $message_2->id, $message_1->id ),
     140                        wp_list_pluck( $thread->messages, 'id' )
     141                );
     142
     143                // Now sorting via the helper method.
     144                $messages = BP_Messages_Thread::get_messages( $message_1->thread_id, array( 'order' => 'desc' ) );
     145                $this->assertEquals(
     146                        array( $message_2->id, $message_1->id ),
     147                        wp_list_pluck( $messages, 'id' )
     148                );
    65149        }
    66150
     
    72156                $u2 = self::factory()->user->create();
    73157
    74                 $message_1 = self::factory()->message->create_and_get( array(
     158                self::factory()->message->create_and_get( array(
    75159                        'sender_id' => $u1,
    76160                        'recipients' => array( $u2 ),
     
    102186                $u2 = self::factory()->user->create();
    103187
    104                 $message_1 = self::factory()->message->create_and_get( array(
     188                self::factory()->message->create_and_get( array(
    105189                        'sender_id' => $u1,
    106190                        'recipients' => array( $u2 ),
     
    134218                $u2 = self::factory()->user->create();
    135219
    136                 $message_1 = self::factory()->message->create_and_get( array(
     220                self::factory()->message->create_and_get( array(
    137221                        'sender_id' => $u1,
    138222                        'recipients' => array( $u2 ),
     
    156240        /**
    157241         * @group get_recipients
     242         */
     243        public function test_get_recipients_paginated() {
     244                $u1       = self::factory()->user->create();
     245                $user_ids = self::factory()->user->create_many( 9 );
     246                $m        = self::factory()->message->create_and_get( array(
     247                        'sender_id'  => $u1,
     248                        'recipients' => $user_ids,
     249                        'subject'    => 'Foo',
     250                ) );
     251
     252                $thread_1 = new BP_Messages_Thread( $m->thread_id );
     253                $this->assertTrue( 10 === count( $thread_1->get_recipients() ) );
     254
     255                $thread_2 = new BP_Messages_Thread( $m->thread_id, 'ASC', array( 'recipients_page' => 1, 'recipients_per_page' => 5 ) );
     256                $this->assertTrue( 5 === count( $thread_2->recipients ) );
     257
     258                $thread_3 = new BP_Messages_Thread( $m->thread_id );
     259                $this->assertTrue( 8 === count( $thread_3->get_recipients( $m->thread_id, array( 'recipients_page' => 1, 'recipients_per_page' => 8 ) ) ) );
     260        }
     261
     262        /**
     263         * @group get_recipients
    158264         * @group cache
    159265         */
     
    197303
    198304                $thread = new BP_Messages_Thread( $message->thread_id );
    199                 $recipients = $thread->get_recipients();
     305                $thread->get_recipients();
    200306
    201307                // Verify that the cache is populated.
    202308                $num_queries = $wpdb->num_queries;
    203                 $recipients_cached = $thread->get_recipients();
     309                $thread->get_recipients();
    204310                $this->assertEquals( $num_queries, $wpdb->num_queries );
    205311
     
    214320                // Cache should be empty.
    215321                $num_queries = $wpdb->num_queries;
    216                 $recipients_uncached = $thread->get_recipients();
     322                $thread->get_recipients();
    217323                $this->assertEquals( $num_queries + 1, $wpdb->num_queries );
    218324        }
     
    223329         */
    224330        public function test_get_recipients_cache_should_be_busted_when_single_thread_is_deleted() {
     331                global $wpdb;
     332
     333                $u1 = self::factory()->user->create();
     334                $u2 = self::factory()->user->create();
     335
     336                $message = self::factory()->message->create_and_get( array(
     337                        'sender_id' => $u1,
     338                        'recipients' => array( $u2 ),
     339                        'subject' => 'Foo',
     340                ) );
     341
     342                $t1 = $message->thread_id;
     343
     344                $thread = new BP_Messages_Thread( $t1 );
     345                $thread->get_recipients();
     346
     347                // Verify that the cache is populated.
     348                $num_queries = $wpdb->num_queries;
     349                $thread->get_recipients();
     350                $this->assertEquals( $num_queries, $wpdb->num_queries );
     351
     352                messages_delete_thread( $t1 );
     353
     354                // Cache should be empty.
     355                $this->assertFalse( wp_cache_get( 'thread_recipients_' . $t1, 'bp_messages' ) );
     356        }
     357
     358        /**
     359         * @group get_recipients
     360         * @group cache
     361         */
     362        public function test_get_recipients_cache_should_be_busted_when_array_of_threads_is_deleted() {
     363                global $wpdb;
     364
     365                $u1 = self::factory()->user->create();
     366                $u2 = self::factory()->user->create();
     367
     368                $message = self::factory()->message->create_and_get( array(
     369                        'sender_id' => $u1,
     370                        'recipients' => array( $u2 ),
     371                        'subject' => 'Foo',
     372                ) );
     373
     374                $t1 = $message->thread_id;
     375
     376                $thread = new BP_Messages_Thread( $t1 );
     377                $thread->get_recipients();
     378
     379                // Verify that the cache is populated.
     380                $num_queries = $wpdb->num_queries;
     381                $thread->get_recipients();
     382                $this->assertEquals( $num_queries, $wpdb->num_queries );
     383
     384                messages_delete_thread( array( $t1 ) );
     385
     386                // Cache should be empty.
     387                $this->assertFalse( wp_cache_get( 'thread_recipients_' . $t1, 'bp_messages' ) );
     388        }
     389
     390        /**
     391         * @group get_recipients
     392         * @group cache
     393         */
     394        public function test_get_recipients_cache_should_be_busted_when_thread_is_read() {
    225395                global $wpdb;
    226396
     
    244414                $this->assertEquals( $num_queries, $wpdb->num_queries );
    245415
    246                 messages_delete_thread( $t1 );
    247 
    248                 // Cache should be empty.
    249                 $this->assertFalse( wp_cache_get( 'thread_recipients_' . $t1, 'bp_messages' ) );
    250         }
    251 
    252         /**
    253          * @group get_recipients
    254          * @group cache
    255          */
    256         public function test_get_recipients_cache_should_be_busted_when_array_of_threads_is_deleted() {
    257                 global $wpdb;
    258 
    259                 $u1 = self::factory()->user->create();
    260                 $u2 = self::factory()->user->create();
    261 
    262                 $message = self::factory()->message->create_and_get( array(
    263                         'sender_id' => $u1,
    264                         'recipients' => array( $u2 ),
    265                         'subject' => 'Foo',
    266                 ) );
    267 
    268                 $t1 = $message->thread_id;
    269 
    270                 $thread = new BP_Messages_Thread( $t1 );
    271                 $recipients = $thread->get_recipients();
    272 
    273                 // Verify that the cache is populated.
    274                 $num_queries = $wpdb->num_queries;
    275                 $recipients_cached = $thread->get_recipients();
    276                 $this->assertEquals( $num_queries, $wpdb->num_queries );
    277 
    278                 messages_delete_thread( array( $t1 ) );
    279 
    280                 // Cache should be empty.
    281                 $this->assertFalse( wp_cache_get( 'thread_recipients_' . $t1, 'bp_messages' ) );
    282         }
    283 
    284         /**
    285          * @group get_recipients
    286          * @group cache
    287          */
    288         public function test_get_recipients_cache_should_be_busted_when_thread_is_read() {
    289                 global $wpdb;
    290 
    291                 $u1 = self::factory()->user->create();
    292                 $u2 = self::factory()->user->create();
    293 
    294                 $message = self::factory()->message->create_and_get( array(
    295                         'sender_id' => $u1,
    296                         'recipients' => array( $u2 ),
    297                         'subject' => 'Foo',
    298                 ) );
    299 
    300                 $t1 = $message->thread_id;
    301 
    302                 $thread = new BP_Messages_Thread( $t1 );
    303                 $recipients = $thread->get_recipients();
    304 
    305                 // Verify that the cache is populated.
    306                 $num_queries = $wpdb->num_queries;
    307                 $recipients_cached = $thread->get_recipients();
    308                 $this->assertEquals( $num_queries, $wpdb->num_queries );
    309 
    310416                // Mark thread as read
    311417                $current_user = get_current_user_id();
     
    397503
    398504                $thread = new BP_Messages_Thread( $t1 );
    399                 $recipients = $thread->get_recipients();
     505                $thread->get_recipients();
    400506
    401507                // Verify that the cache is populated.
    402508                $num_queries = $wpdb->num_queries;
    403                 $recipients_cached = $thread->get_recipients();
     509                $thread->get_recipients();
    404510                $this->assertEquals( $num_queries, $wpdb->num_queries );
    405511
Note: See TracChangeset for help on using the changeset viewer.