/**
  * Pull notification events from queue until stop time is reached
  *
  * @param int $stopTime The Unix time to stop sending notifications
  * @return int The number of notification events handled
  * @access private
  */
 public function processQueue($stopTime)
 {
     $this->subscriptions->methods = $this->methods;
     $count = 0;
     // @todo grab mutex
     $ia = $this->access->setIgnoreAccess(true);
     while (time() < $stopTime) {
         // dequeue notification event
         $event = $this->queue->dequeue();
         if (!$event) {
             break;
         }
         // test for usage of the deprecated override hook
         if ($this->existsDeprecatedNotificationOverride($event)) {
             continue;
         }
         $subscriptions = $this->subscriptions->getSubscriptions($event);
         // return false to stop the default notification sender
         $params = array('event' => $event, 'subscriptions' => $subscriptions);
         if ($this->hooks->trigger('send:before', 'notifications', $params, true)) {
             $this->sendNotifications($event, $subscriptions);
         }
         $this->hooks->trigger('send:after', 'notifications', $params);
         $count++;
     }
     // release mutex
     $this->access->setIgnoreAccess($ia);
     return $count;
 }
 public function testGetSubscriptionsWithProperInput()
 {
     $methods = array('apples', 'bananas');
     $queryResult = array($this->createObjectFromArray(array('guid' => '22', 'methods' => 'notifyapples')), $this->createObjectFromArray(array('guid' => '567', 'methods' => 'notifybananas,notifyapples')));
     $subscriptions = array(22 => array('apples'), 567 => array('bananas', 'apples'));
     $this->db->expects($this->once())->method('getData')->will($this->returnValue($queryResult));
     $service = new Elgg_Notifications_SubscriptionsService($this->db);
     $service->methods = $methods;
     $this->assertEquals($subscriptions, $service->getSubscriptions($this->event));
 }