Skip to:
Content

BuddyPress.org


Ignore:
Timestamp:
09/09/2021 04:10:21 AM (3 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.