Skip to:
Content

BuddyPress.org

Changeset 8176


Ignore:
Timestamp:
03/27/2014 07:04:30 PM (13 years ago)
Author:
r-a-y
Message:

Notifications: Invalidate cache when a notification is updated.

Object caching was added to the notifications component in r7813.
However, the cached item was not invalidated whenever a notification
is updated (either by using one of the marked as read functions or via
using the BP_Notifications_Notification::update() method).

This commit invalidates the cache directly in the update() class
method and adds a unit test.

See #5377

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-notifications/bp-notifications-classes.php

    r8171 r8176  
    662662                $where  = self::get_query_clauses( $where_args  );
    663663
     664                // make sure we delete the notification cache for the user on update
     665                if ( ! empty( $where_args['user_id'] ) ) {
     666                        wp_cache_delete( 'all_for_user_' . $where_args['user_id'], 'bp_notifications' );
     667                }
     668
    664669                return self::_update( $update['data'], $where['data'], $update['format'], $where['format'] );
    665670        }
  • trunk/tests/testcases/notifications/functions.php

    r8102 r8176  
    9191                $this->assertNotEmpty( bp_notifications_add_notification( $args ) );
    9292        }
     93
     94        /**
     95         * @group bp_notifications_get_unread_notification_count
     96         * @group cache
     97         */
     98        public function test_bp_notifications_get_unread_notification_count_cache() {
     99                $u1 = $this->create_user();
     100                $u2 = $this->create_user();
     101
     102                $n1 = $this->factory->notification->create( array(
     103                        'component_name'    => 'messages',
     104                        'component_action'  => 'new_message',
     105                        'item_id'           => 99,
     106                        'user_id'           => $u2,
     107                        'secondary_item_id' => $u1,
     108                        'is_new'            => true,
     109                ) );
     110
     111                // prime cache
     112                bp_notifications_get_unread_notification_count( $u2 );
     113
     114                // mark the created notification as read
     115                bp_notifications_mark_notifications_by_item_id( $u2, 99, 'messages', 'new_message', $u1 );
     116
     117                // now grab the updated notification count
     118                $n = bp_notifications_get_unread_notification_count( $u2 );
     119
     120                // assert
     121                $this->assertEquals( 0, $n );
     122        }
    93123}
Note: See TracChangeset for help on using the changeset viewer.