public function testSubscribe()
 {
     $subscriber = new Subscriber();
     $subscriber->sid = microtime();
     $this->assertEquals(true, $subscriber->save(), 'Can not save subscriber');
     $channel = new Channel();
     $channel->name = microtime();
     $this->assertEquals(true, $channel->save());
     $this->assertEmpty($channel->getSubscribers());
     $this->assertEquals(true, $channel->subscribe($subscriber));
     $subscribers = $channel->getSubscribers();
     $this->assertNotEmpty($subscribers);
     $this->assertCount(1, $subscribers);
     $this->assertEquals(true, $subscriber->id == $subscribers[$subscriber->id]->id);
     $secondSubscriber = new Subscriber();
     $secondSubscriber->sid = 'sdf0s9duf32' . time();
     $this->assertEquals(true, $secondSubscriber->save());
     $this->assertEquals(true, $channel->subscribe($secondSubscriber));
     $subscribers = $channel->getSubscribers();
     $this->assertCount(2, $subscribers);
     $this->assertEquals(true, $secondSubscriber->id == $subscribers[$secondSubscriber->id]->id);
     //  load channel
     $channel = Channel::model()->findByPk($channel->id);
     $this->assertInstanceOf('YiiNodeSocket\\Models\\Channel', $channel);
     /** @var Channel $channel */
     $subscribers = $channel->getSubscribers();
     $this->assertNotEmpty($subscribers);
     $this->assertCount(2, $subscribers);
     return $channel;
 }
 public function testSave()
 {
     //  test save subscriber
     $subscriber = new Subscriber();
     $subscriber->user_id = 1;
     $this->assertEquals(true, $subscriber->save(), 'Can not save subscriber');
     $channel = new Channel();
     $channel->name = 'test';
     $this->assertEquals(true, $channel->save(), 'Can not save channel');
 }
 public function createSubscriber()
 {
     if (!$this->getSubscriber()) {
         $this->_subscriber = new Subscriber();
         $this->_subscriber->user_id = $this->_getUserId();
         $this->_subscriber->role = $this->getRole();
         $event = new ArEvent($this);
         $event->name = 'onSubscriberSave';
         $event->error = !$this->_subscriber->save();
         $this->triggerModelEvent($event);
     }
 }
 public function testDelete()
 {
     $subscriber = new Subscriber();
     $subscriber->sid = 'sd8uo329psd';
     $this->assertEquals(true, $subscriber->save());
     $subscriber = Subscriber::model()->findByPk($subscriber->id);
     $this->assertInstanceOf('YiiNodeSocket\\Models\\Subscriber', $subscriber);
     $this->assertEquals(true, $subscriber->delete());
     $this->assertNull(Subscriber::model()->findByPk($subscriber->id), 'Subscriber need to be null because it has been deleted');
 }
 /**
  * @param Subscriber $subscriber
  * @param bool       $refresh
  *
  * @return AModel[]
  */
 public function getChannels(Subscriber $subscriber, $refresh = false)
 {
     if ($subscriber->getIsNewRecord()) {
         return array();
     }
     if (array_key_exists($subscriber->id, self::$_subscriberChannels) && !$refresh) {
         return self::$_subscriberChannels[$subscriber->id];
     }
     $links = $this->findAllByAttributes(array('subscriber_id' => $subscriber->id));
     $channelId = array();
     foreach ($links as $link) {
         $channelId[] = $link->id;
     }
     $channels = Channel::model()->findAllByPk($channelId);
     foreach ($channels as $channel) {
         self::_addToCache($channel, $subscriber);
     }
     return $channels;
 }