/**
  * Rebuild read permission subscription table
  */
 public static function buildTables()
 {
     foreach (self::getReadSubscriptionModelClassNames() as $modelClassName) {
         $readPermissionsSubscriptionTableName = self::getSubscriptionTableName($modelClassName);
         self::recreateTable($readPermissionsSubscriptionTableName);
     }
     ModelCreationApiSyncUtil::buildTable();
 }
 /**
  * Rebuild read permission subscription table
  */
 public static function buildTables()
 {
     $readSubscriptionModelClassNames = PathUtil::getAllReadSubscriptionModelClassNames();
     foreach ($readSubscriptionModelClassNames as $modelClassName) {
         $readPermissionsSubscriptionTableName = static::getSubscriptionTableName($modelClassName);
         static::recreateTable($readPermissionsSubscriptionTableName);
     }
     static::recreateAccountBuildTable();
     ModelCreationApiSyncUtil::buildTable();
 }
 public function testRebuilt()
 {
     ModelCreationApiSyncUtil::buildTable();
     $sql = 'INSERT INTO ' . ModelCreationApiSyncUtil::TABLE_NAME . ' VALUES (null, \'ApiServiceName\', \'1\', \'Contact\', \'2013-05-03 15:16:06\')';
     ZurmoRedBean::exec($sql);
     $apiServiceCreationRow = ZurmoRedBean::getRow('SELECT * FROM ' . ModelCreationApiSyncUtil::TABLE_NAME);
     $this->assertTrue($apiServiceCreationRow['id'] > 0);
     $this->assertEquals('ApiServiceName', $apiServiceCreationRow['servicename']);
     $this->assertEquals(1, $apiServiceCreationRow['modelid']);
     $this->assertEquals('Contact', $apiServiceCreationRow['modelclassname']);
     $this->assertEquals('2013-05-03 15:16:06', $apiServiceCreationRow['createddatetime']);
     // Now test when table already exist
     ModelCreationApiSyncUtil::buildTable();
     $apiServiceCreationRow = ZurmoRedBean::getRow('SELECT COUNT(*) as totalRows FROM ' . ModelCreationApiSyncUtil::TABLE_NAME);
     $this->assertEquals(1, $apiServiceCreationRow['totalRows']);
     $sql = 'INSERT INTO ' . ModelCreationApiSyncUtil::TABLE_NAME . ' VALUES (null, \'ApiServiceName\', \'2\', \'Contact\', \'2013-06-03 15:16:06\')';
     ZurmoRedBean::exec($sql);
     $apiServiceCreationRow = ZurmoRedBean::getRow('SELECT COUNT(*) as totalRows FROM ' . ModelCreationApiSyncUtil::TABLE_NAME);
     $this->assertEquals(2, $apiServiceCreationRow['totalRows']);
 }
 public function testGetAddedOrDeletedModelsFromReadSubscriptionTable()
 {
     ReadPermissionsSubscriptionUtil::buildTables();
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $messageLogger = new DebuggingMessageLogger();
     $task = TaskTestHelper::createTaskByNameForOwner('Test Task', $super);
     // Because ReadPermissionsSubscriptionUtil::updateAllReadSubscriptionTables completed in previous test
     // status need to be ReadPermissionsSubscriptionUtil::STATUS_COMPLETED
     $this->assertEquals(ReadPermissionsSubscriptionUtil::STATUS_COMPLETED, ReadPermissionsSubscriptionUtil::getReadPermissionUpdateStatus());
     $this->assertTrue(ReadPermissionsSubscriptionUtil::isReadPermissionSubscriptionUpdateCompleted());
     ReadPermissionsSubscriptionUtil::updateAllReadSubscriptionTables($messageLogger);
     $this->assertEquals(ReadPermissionsSubscriptionUtil::STATUS_COMPLETED, ReadPermissionsSubscriptionUtil::getReadPermissionUpdateStatus());
     $this->assertTrue(ReadPermissionsSubscriptionUtil::isReadPermissionSubscriptionUpdateCompleted());
     $sql = "SELECT * FROM task_read_subscription WHERE userid = " . $super->id;
     $permissionTableRows = ZurmoRedBean::getAll($sql);
     $this->assertEquals(1, count($permissionTableRows));
     $addedModelIds = ReadPermissionsSubscriptionUtil::getAddedOrDeletedModelsFromReadSubscriptionTable('TestService', 'Task', 0, ReadPermissionsSubscriptionUtil::TYPE_ADD, $super);
     $this->asserttrue(is_array($addedModelIds));
     $this->assertEquals(1, count($addedModelIds));
     ModelCreationApiSyncUtil::insertItem('TestService', $task->id, 'Task', '2013-05-03 15:16:06');
     $addedModelIds = ReadPermissionsSubscriptionUtil::getAddedOrDeletedModelsFromReadSubscriptionTable('TestService', 'Task', 0, ReadPermissionsSubscriptionUtil::TYPE_ADD, $super);
     $this->asserttrue(is_array($addedModelIds));
     $this->assertEquals(0, count($addedModelIds));
 }
 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);
 }
 public function testGetAddedOrDeletedModelsFromReadSubscriptionTable()
 {
     ReadPermissionsSubscriptionUtil::buildTables();
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     $task = TaskTestHelper::createTaskByNameForOwner('Test Task', $super);
     ReadPermissionsSubscriptionUtil::updateAllReadSubscriptionTables(false);
     $sql = "SELECT * FROM task_read_subscription WHERE userid = " . $super->id;
     $permissionTableRows = R::getAll($sql);
     $this->assertEquals(1, count($permissionTableRows));
     $addedModelIds = ReadPermissionsSubscriptionUtil::getAddedOrDeletedModelsFromReadSubscriptionTable('TestService', 'Task', 0, ReadPermissionsSubscriptionUtil::TYPE_ADD, $super);
     $this->asserttrue(is_array($addedModelIds));
     $this->assertEquals(1, count($addedModelIds));
     ModelCreationApiSyncUtil::insertItem('TestService', $task->id, 'Task', '2013-05-03 15:16:06');
     $addedModelIds = ReadPermissionsSubscriptionUtil::getAddedOrDeletedModelsFromReadSubscriptionTable('TestService', 'Task', 0, ReadPermissionsSubscriptionUtil::TYPE_ADD, $super);
     $this->asserttrue(is_array($addedModelIds));
     $this->assertEquals(0, count($addedModelIds));
 }