1
0
Fork 0
mirror of https://github.com/buddypress/buddypress.git synced 2026-07-22 20:56:55 +08:00
buddypress/tests/phpunit/testcases/messages/cache.php
Boone B Gorges 0ed016254c Use static factory method throughout PHPUnit tests.
See #7620.

git-svn-id: https://buddypress.svn.wordpress.org/trunk@11737 cdf35c40-ae34-48e0-9cc9-0c9da1808c22
2017-11-03 19:44:10 +00:00

169 lines
4.1 KiB
PHP

<?php
/**
* @group messages
* @group cache
*/
class BP_Tests_Message_Cache extends BP_UnitTestCase {
/**
* @group bp_messages_update_meta_cache
*/
public function test_bp_messages_update_meta_cache() {
$u1 = self::factory()->user->create();
$u2 = self::factory()->user->create();
// create the thread
$message_1 = self::factory()->message->create_and_get( array(
'sender_id' => $u1,
'recipients' => array( $u2 ),
'subject' => 'This is a knive',
) );
// create a reply
$message_2 = self::factory()->message->create_and_get( array(
'thread_id' => $message_1->thread_id,
'sender_id' => $u2,
'recipients' => array( $u1 ),
'content' => "That's a spoon",
) );
$m1 = $message_1->id;
$m2 = $message_2->id;
// add cache for each message
bp_messages_update_meta( $m1, 'utensil', 'knive' );
bp_messages_update_meta( $m1, 'is_knive', 'yes' );
bp_messages_update_meta( $m2, 'utensil', 'spoon' );
bp_messages_update_meta( $m2, 'is_knive', 'no' );
bp_messages_update_meta( $m2, 'is_spoon', 'yes' );
// prime cache
bp_messages_get_meta( $m1, 'utensil' );
// Ensure an empty cache for second message
wp_cache_delete( $m2, 'message_meta' );
// update message meta cache
bp_messages_update_meta_cache( array( $m1, $m2 ) );
$expected = array(
$m1 => array(
'utensil' => array(
'knive',
),
'is_knive' => array(
'yes',
),
),
$m2 => array(
'utensil' => array(
'spoon',
),
'is_knive' => array(
'no',
),
'is_spoon' => array(
'yes',
),
),
);
$found = array(
$m1 => wp_cache_get( $m1, 'message_meta' ),
$m2 => wp_cache_get( $m2, 'message_meta' ),
);
$this->assertEquals( $expected, $found );
}
/**
* @group bp_messages_update_meta_cache
* @group bp_thread_has_messages
*/
public function test_bp_messages_metadata_cache_in_message_loop() {
$u1 = self::factory()->user->create();
$u2 = self::factory()->user->create();
// create the message and thread
$m = self::factory()->message->create_and_get( array(
'sender_id' => $u1,
'recipients' => array( $u2 ),
'subject' => 'Oy',
) );
// add message cache
bp_messages_update_meta( $m->id, 'yolo', 'gah' );
// prime meta cache in message loop
bp_thread_has_messages( array(
'thread_id' => $m->thread_id,
'update_meta_cache' => true
) );
$this->assertNotEmpty( wp_cache_get( $m->id, 'message_meta' ) );
}
/**
* @group bp_messages_delete_meta
* @group messages_delete_thread
*/
public function test_bp_messages_delete_metadata_cache_on_thread_delete() {
$this->old_current_user = get_current_user_id();
$u1 = self::factory()->user->create();
$u2 = self::factory()->user->create();
// create the thread
$message_1 = self::factory()->message->create_and_get( array(
'sender_id' => $u1,
'recipients' => array( $u2 ),
'subject' => 'Oy',
) );
// create a reply
$message_2 = self::factory()->message->create_and_get( array(
'thread_id' => $message_1->thread_id,
'sender_id' => $u2,
'recipients' => array( $u1 ),
'content' => 'Yo',
) );
$m1 = $message_1->id;
$m2 = $message_2->id;
$t1 = $message_1->thread_id;
// add message meta
bp_messages_update_meta( $m1, 'yolo', 'gah' );
bp_messages_update_meta( $m2, 'yolo', 'bah' );
// prime message meta cache
bp_messages_get_meta( $m1, 'yolo' );
bp_messages_get_meta( $m2, 'yolo' );
// delete thread
// to outright delete a thread, both recipients must delete it
$this->set_current_user( $u1 );
messages_delete_thread( $t1 );
$this->set_current_user( $u2 );
messages_delete_thread( $t1 );
// assert empty meta cache
$this->assertEmpty( wp_cache_get( $m1, 'message_meta' ) );
$this->assertEmpty( wp_cache_get( $m2, 'message_meta' ) );
// cleanup
$this->set_current_user( $this->old_current_user );
}
/**
* Helper method to grab the message IDs from a message thread.
*
* @param int $thread_id The message thread ID
* @return array
*/
protected function get_message_ids( $thread_id = 0 ) {
$thread = new BP_Messages_Thread( $thread_id );
return wp_list_pluck( $thread->messages, 'id' );
}
}