public function testRecreateTable()
 {
     ReadPermissionsSubscriptionUtil::recreateTable('account_read_subscription');
     $sql = 'INSERT INTO account_read_subscription VALUES (null, \'1\', \'2\', \'2013-05-03 15:16:06\', \'1\')';
     ZurmoRedBean::exec($sql);
     $accountReadSubscription = ZurmoRedBean::getRow("SELECT * FROM account_read_subscription");
     $this->assertTrue($accountReadSubscription['id'] > 0);
     $this->assertEquals(1, $accountReadSubscription['userid']);
     $this->assertEquals(2, $accountReadSubscription['modelid']);
     $this->assertEquals('2013-05-03 15:16:06', $accountReadSubscription['modifieddatetime']);
     $this->assertEquals(1, $accountReadSubscription['subscriptiontype']);
     $sql = 'DELETE FROM account_read_subscription';
     ZurmoRedBean::exec($sql);
 }
 public function testGetUpdatedModels()
 {
     ReadPermissionsSubscriptionUtil::recreateTable('account_read_subscription');
     ModelCreationApiSyncUtil::buildTable();
     $account1 = AccountTestHelper::createAccountByNameForOwner('First Test Update Account', Yii::app()->user->userModel);
     $timestamp = time();
     $models = ModelStateChangesSubscriptionUtil::getUpdatedModels('Account', 2, 0, $timestamp);
     $this->assertTrue(is_array($models));
     $this->assertTrue(empty($models));
     $account1->name = 'First Test Update Account Modified';
     $this->assertTrue($account1->save());
     // This should return true, because there should be 3 second gap between created and modified timestamps
     $models = ModelStateChangesSubscriptionUtil::getUpdatedModels('Account', 2, 0, $timestamp);
     $this->assertTrue(is_array($models));
     $this->assertTrue(empty($models));
     sleep(4);
     $account1->name = 'First Test Update Account Modified 2';
     $this->assertTrue($account1->save());
     $models = ModelStateChangesSubscriptionUtil::getUpdatedModels('Account', 2, 0, $timestamp);
     $this->assertTrue(is_array($models));
     $this->assertEquals(1, count($models));
     $this->assertEquals($account1->id, $models[0]->id);
     $this->assertEquals($account1->name, $models[0]->name);
     // Check pagination
     sleep(2);
     $timestamp = time();
     $account2 = AccountTestHelper::createAccountByNameForOwner('Second Test Update Account', Yii::app()->user->userModel);
     $account3 = AccountTestHelper::createAccountByNameForOwner('Third Test Update Account', Yii::app()->user->userModel);
     $account4 = AccountTestHelper::createAccountByNameForOwner('Forth Test Update Account', Yii::app()->user->userModel);
     sleep(5);
     $account2->name = 'Second Test Update Account Modified';
     $account3->name = 'Third Test Update Account Modified';
     $account4->name = 'Forth Test Update Account Modified';
     $this->assertTrue($account2->save());
     $this->assertTrue($account3->save());
     $this->assertTrue($account4->save());
     $models = ModelStateChangesSubscriptionUtil::getUpdatedModels('Account', 3, 0, $timestamp);
     $this->assertTrue(is_array($models));
     $this->assertEquals(3, count($models));
     $this->assertTrue($account2->id == $models[0]->id || $account2->id == $models[1]->id || $account2->id == $models[2]->id);
     $this->assertTrue($account2->name == $models[0]->name || $account2->name == $models[1]->name || $account2->name == $models[2]->name);
     $this->assertTrue($account3->id == $models[0]->id || $account3->id == $models[1]->id || $account3->id == $models[2]->id);
     $this->assertTrue($account3->name == $models[0]->name || $account3->name == $models[1]->name || $account3->name == $models[2]->name);
     $this->assertTrue($account4->id == $models[0]->id || $account4->id == $models[1]->id || $account4->id == $models[2]->id);
     $this->assertTrue($account4->name == $models[0]->name || $account4->name == $models[1]->name || $account4->name == $models[2]->name);
     // Not test for non super user
     $job = new ReadPermissionSubscriptionQuickUpdateJob();
     $mike = UserTestHelper::createBasicUser('Mike');
     $mikeAccount1 = AccountTestHelper::createAccountByNameForOwner('ABC Account', Yii::app()->user->userModel);
     $timestamp = time();
     $this->assertTrue($job->run());
     $models = ModelStateChangesSubscriptionUtil::getUpdatedModels('Account', 2, 0, $timestamp);
     $this->assertTrue(is_array($models));
     $this->assertTrue(empty($models));
     $mikeAccount1->name = 'ABCD Account';
     $this->assertTrue($mikeAccount1->save());
     // This should return true, because there should be 3 second gap between created and modified timestamps
     $this->assertTrue($job->run());
     $models = ModelStateChangesSubscriptionUtil::getUpdatedModels('Account', 2, 0, $timestamp);
     $this->assertTrue(is_array($models));
     $this->assertTrue(empty($models));
     sleep(4);
     $mikeAccount1->name = 'AB Account';
     $this->assertTrue($mikeAccount1->save());
     $this->assertTrue($job->run());
     $models = ModelStateChangesSubscriptionUtil::getUpdatedModels('Account', 2, 0, $timestamp);
     $this->assertTrue(is_array($models));
     $this->assertEquals(1, count($models));
     $this->assertEquals($mikeAccount1->id, $models[0]->id);
     $this->assertEquals($mikeAccount1->name, $models[0]->name);
 }